debian(sid)でsystemdが正常動作しなくなったので,原因と対処方法を記録しておきます.
症状
- debain (sid)をamd64環境で使用
- 検証のためカスタムカーネルを使用
- 2024年11月23日に apt dist-upgrade でパッケージを更新
- sysytemd 257 rc2 がインストールされる
- 再起動
- ssh経由でログインできない
- 以下のエラーが出ている
systemd-logind.service: Failed to connect stdout to journal socket, ignoring: connection refused
sshd.service: Failed to connect stdout to journal socket, ignoring: connection refused
- systemd-journald が起動していない
- コンソールからはログインできる
調査結果
- systemd-journald を再起動しても駄目
$ sudo systemctl --failed UNIT LOAD ACTIVE SUB DESCRIPTION systemd-journal-flush.service loaded failed failed Trigger Flushing of Journal to Persistent Storage systemd-journald.service loaded failed failed Journal Service systemd-journald.socket loaded failed failed Journal Socket
- sshdやlogindのlogが記録されていない
$ sudo journalctl -u sshd.service -b -- No entries --
- どうやら kernel の config が原因
暫定措置
カーネルの以下のCONFIGを"y"にしてカーネルをリビルドすると,journaldが起動し,問題は解決した
- CONFIG_BPF=y
- CONFIG_BPF_SYSCALL=y
- CONFIG_BPF_JIT=y
状況と原因の整理
systemd の README(https://github.com/systemd/systemd/blob/main/README)を確認,原因を整理した
まずREADMEを確認.READMEの記載によると,以下の機能を使うためにはlinuxカーネルのBPFが必要,とのこと.
- SocketBind{Allow|Deny}=
- RestrictNetworkInterfaces=
- IPAddressDeny=
- IPAddressAllow=
- IPIngressFilterPath=
- IPEgressFilterPath=
- RestrictFileSystems=
しかし /etc/systemd 以下のファイルでは上記の機能に関する設定は見当たらなかった.READMEに記載漏れの情報があるか,sysytemd 257 rc2 のバグのような気がするが,ここで時間切れ
まとめ
- journaldが起動しない原因を調査
- 最近の systemd はbpfへの依存度が高くなっている(気がする)
- 自前でカーネルをビルドする際は CONFIG_BPF=y をつけておいたほうが良いかもしれない