Se você quiser usar os recursos systemd
dentro de seus contêineres systemd-nspawn
, precisará de várias coisas
-
dbus
no seu contêiner - Você precisa inicializar o contêiner com
systemd-nspawn --boot
Se eu tenho um diretório que eu bootstraped com debootstrap
que eu tenho dentro de execução systemd-nspawn
o que eu tenho que fazer a sua% internasystemd
funcional?
$ 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
Se eu tentar manualmente mount --bind
, recebo um erro diferente,
$ sudo mount --bind /proc /opt/foo/proc
$ sudo chroot /opt/foo/
root@x230:/# systemctl
Running in chroot, ignoring request.
Dentro desse chroot existe um serviço instalado que eu gostaria de iniciar?
Se você quiser usar os recursos systemd
dentro de seus contêineres systemd-nspawn
, precisará de várias coisas
dbus
no seu contêiner systemd-nspawn --boot
O systemd está correto aqui. Você está tentando executá-lo a partir do chroot, mas o chroot tem um conjunto totalmente diferente de caminhos, bibliotecas e serviços. Permitir que você chame systemctl seria uma bagunça: é a biblioteca correta do D-Bus? As versões systemctl estão dentro do mesmo que o daemon fora?
Se tudo o que você quer fazer é usar um serviço dentro do chroot, você tem duas opções:
systemd-nspawn --boot
para executar uma instância separada do systemd dentro do chroot. Então, você pode habilitá-lo e ele só terá efeito dentro dele. Tags chroot systemd systemd-nspawn