プログラミング
Show HN: Procinsh – Linuxプロセスを3Dでインスペクトするツール
Show HN: Procinsh – A 3D Linux process inspector (github.com)
要約
Procinshは、Linuxのプロセスをシェル上で3D表示するWebベースのインスペクターです。Rustで開発されており、プロセスの階層や詳細情報を視覚的に探索できます。インストールにはRustやBPF関連のツールが必要ですが、ソースからのビルドが推奨されています。
全文翻訳
ProcInSh - Process in the Shell
Linux向けのWebベースのプロセスインスペクターです。
Ghost in the Shellのように、ゴーストでプロセス空間をさまようことができます。
ブログ記事も参照してください。
スクリーンショット
使用方法
Linux x86-64が必要です。
どちらのインストール方法もネイティブコードをコンパイルし、Rust、Cコンパイラ、BPFバックエンドを持つclang、bpftool、pkg-config、libelfおよびzlib開発ファイル、そして/sys/kernel/btf/vmlinuxにあるBTF情報が必要です。
WSL2でのサポートは非常に限定的です。crates.ioからインストールするよりも、ソースからprocinshをビルドすることを推奨します。
Dockerのようなコンテナ環境ではテストしていません。
crates.ioからのインストール
crates.ioからprocinshをインストールして実行します:
(申し訳ありませんが、Ubuntuを使用していると仮定しています。そうでない場合は解釈し直してください)
sudo apt-get install --yes --no-install-recommends \
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を開きます。
リモートアクセスを許可するには、--allow-non-loopbackを使用しますが、注意してください。これは認証なしでプロセスメモリと環境変数を公開します。
sudo "$HOME/.cargo/bin/procinsh" --listen 127.0.0.1:9090
sudoを使いたくない場合は、代わりにsetcapを使用してください。
sudo setcap \
cap_sys_ptrace,cap_bpf,cap_perfmon,cap_dac_read_search=ep \
"$HOME/.cargo/bin/procinsh"
"$HOME/.cargo/bin/procinsh" --listen 127.0.0.1:9090
自己ビルド
Node.js 22以降(npm付き)と、rustup経由のRustも必要です。
Rustのバージョンとコンポーネントはrust-toolchain.tomlでピン留めされており、必要に応じてrustupが自動的にインストールします。
このリポジトリをクローンし、ルートから以下を実行します:
sudo apt-get install --yes --no-install-recommends \
build-essential clang llvm pkg-config libelf-dev zlib1g-dev python3 \
linux-tools-common linux-tools-generic
npm ci
npm run build:web
cargo build --release --locked
その後、実行します:
sudo ./target/release/procinsh --listen 127.0.0.1:9090
WSL2 (Ubuntu)でのビルド
Ubuntuのbpftoolラッパーは、WSL2カーネルバージョンがUbuntuツールパッケージと異なるため、bpftoolが見つからないというエラーで失敗する可能性があります。
ラッパーをバイパスして、パッケージ化された実行可能ファイルにBPFTOOLを設定します:
sudo apt-get update
sudo apt-get install --yes --no-install-recommends \
build-essential clang llvm pkg-config libelf-dev zlib1g-dev python3 \
linux-tools-common linux-tools-generic
for tool in /usr/lib/linux-tools/*/bpftool; do if [ -x "$tool" ]; then export BPFTOOL="$tool" break fi done
"${BPFTOOL:?No packaged bpftool found; install linux-tools-generic}" version "$BPFTOOL"
btf dump file /sys/kernel/btf/vmlinux format c >/tmp/procinsh-vmlinux.h
npm ci
npm run build:web
cargo build --release --locked
その後、実行します:
sudo ./target/release/procinsh --listen 127.0.0.1:9090
さて、どこへ行こうか?
プロセス空間は広大です。