TL;DR

  • ProcInsh는 리눅스 프로세스 공간을 3D로 돌아다니며 살펴보는 웹 기반 프로세스 검사기임.
  • 지원 환경은 Linux x86-64이며, 설치와 자체 빌드 모두 네이티브 코드 컴파일에 필요한 도구와 커널 BTF 정보를 요구함.
  • crates.io 설치에는 cargo install procinsh --locked를 사용하고, 웹 브라우저에서 http://127.0.0.1:9090에 접속함.
  • 자체 빌드에는 Node.js 22 이상, npm, rustup을 통한 Rust가 추가로 필요하며, 웹 자산 빌드 후 릴리스 바이너리를 컴파일함.
  • 원격 접속 옵션은 인증 없이 프로세스 메모리와 환경 변수를 노출하므로 주의가 필요하고, WSL2 지원은 매우 제한적임.

ProcInsh 소개

  • ProcInsh는 “Process in the Shell”을 뜻하는 리눅스용 웹 기반 프로세스 검사기임.
  • “Ghost in the Shell”처럼 고스트와 함께 프로세스 공간을 돌아다니며 탐색하는 방식임.
  • 관련 블로그 게시물도 안내함.

사용 및 요구 사항

  • Linux x86-64가 필요하며, 두 설치 방법 모두 네이티브 코드를 컴파일함.
  • 필요한 도구와 정보는 Rust, C 컴파일러, BPF 백엔드가 포함된 clang, bpftool, pkg-config, libelf 및 zlib 개발 파일, /sys/kernel/btf/vmlinux의 BTF 정보임.
  • WSL2 지원은 매우 제한적이며, crates.io에서 설치하기보다 소스에서 빌드하는 방식을 권장함.
  • Docker 같은 컨테이너 환경에서는 테스트하지 않음.

crates.io에서 설치

  • Ubuntu를 기준으로 한 안내이며, 다른 배포판에서는 패키지 설치 명령을 환경에 맞게 해석해야 함.
  • build-essential, clang, llvm, pkg-config, libelf-dev, zlib1g-dev, python3, linux-tools-common, linux-tools-generic을 설치한 뒤 cargo install procinsh --locked로 설치함.
  • 다음 명령으로 로컬 주소에 서버를 실행하고 브라우저에서 http://127.0.0.1:9090에 접속함.
  • sudo "$HOME/.cargo/bin/procinsh" --listen 127.0.0.1:9090
  • 원격 접속을 허용하려면 --allow-non-loopback 옵션을 사용하지만, 인증 없이 프로세스 메모리와 환경 변수가 노출됨.
  • sudo를 사용하지 않으려면 다음 권한을 setcap으로 부여한 뒤 실행함.
  • cap_sys_ptrace, cap_bpf, cap_perfmon, cap_dac_read_search 권한을 실행 파일에 설정함.
  • $HOME/.cargo/bin/procinsh에 권한을 설정한 다음 --listen 127.0.0.1:9090으로 실행함.

직접 빌드

  • Node.js 22 이상, npm, rustup을 통한 Rust가 추가로 필요함.
  • Rust 버전과 구성 요소는 rust-toolchain.toml에 고정되어 있으며, 필요한 경우 rustup이 자동으로 설치함.
  • 저장소를 복제한 뒤 필요한 시스템 패키지를 설치하고, npm ci로 의존성을 설치함.
  • npm run build:web로 웹 부분을 빌드한 다음 cargo build --release --locked로 릴리스 빌드를 수행함.
  • 다음 명령으로 서버를 실행함.
  • sudo ./target/release/procinsh --listen 127.0.0.1:9090

Ubuntu의 WSL2에서 빌드

  • Ubuntu의 bpftool 래퍼는 WSL2 커널 버전과 Ubuntu 도구 패키지의 버전이 달라 bpftool not found for kernel ... 오류를 낼 수 있음.
  • 래퍼를 우회하려면 패키지에 포함된 실행 파일을 직접 찾아 BPFTOOL 환경 변수에 지정함.
  • linux-tools-generic 설치 후 /usr/lib/linux-tools/*/bpftool을 검색해 실행 가능한 파일을 BPFTOOL에 설정하고, 해당 실행 파일의 버전을 확인함.
  • 지정한 bpftool로 /sys/kernel/btf/vmlinux의 BTF를 /tmp/procinsh-vmlinux.h에 덤프함.
  • 이후 npm ci, npm run build:web, cargo build --release --locked 순서로 빌드하고 sudo ./target/release/procinsh --listen 127.0.0.1:9090으로 실행함.
  • “이제 어디로 갈까? 프로세스 공간은 광활함.”