nspawnでsystemdユーティリティ(systemctlなど)を実行しますか?

nspawnでsystemdユーティリティ(systemctlなど)を実行しますか?

debootstrap実行時に起動するディレクトリがある場合に内部でsystemd-nspawn動作させるにはどうすればよいですかsystemd

$ sudo systemd-nspawn -D ./foo
Spawning container mschroot on /opt/foo.
Press ^] three times within 1s to kill container.
root@foo:~# systemctl
Failed to connect to bus: No such file or directory

手動で試してみると、mount --bind他のエラーが発生します。

$ sudo mount --bind /proc /opt/foo/proc
$ sudo chroot /opt/foo/
root@x230:/# systemctl
Running in chroot, ignoring request.

起動したいこのchrootにサービスがインストールされていますか?

答え1

systemdコンテナ内の機能を使用するには、systemd-nspawnいくつかの作業を行う必要があります。

  1. dbusあなたの容器に
  2. 実際にコンテナを起動する必要があります。systemd-nspawn --boot

答え2

systemdはここで正確です。 chrootで実行しようとしていますが、chrootにはまったく異なるパス、ライブラリ、およびサービスセットがあります。 systemctl呼び出しを許可すると混乱する可能性があります。正しいD-Busライブラリですか?内部のsystemctlバージョンは外部デーモンバージョンと同じですか?

chroot内でのみサービスを使用するには、2つのオプションがあります。

  • 使用新しいポータブルサービス、systemd 239で導入されました。内部サービスを外部からアクセスできるようにしたい場合は、これがあなたが望むものです。
  • chroot メモリが systemd にあり、systemd-nspawn --bootchroot 内で別々の systemd インスタンスを実行するために使用されることを確認します。その後、有効にすることができ、内部的にのみ適用されます。

関連情報