debian(sid)でsystemdが正常動作しない件

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 をつけておいたほうが良いかもしれない