Executando utilitários systemd como systemctl sob um nspawn?

1

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?

    
por Evan Carroll 22.07.2018 / 22:26

2 respostas

4

Se você quiser usar os recursos systemd dentro de seus contêineres systemd-nspawn , precisará de várias coisas

  1. dbus no seu contêiner
  2. Você precisa inicializar o contêiner com systemd-nspawn --boot
por 24.07.2018 / 21:29
2

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:

  • Use os novos serviços portáteis , apresentados com o systemd 239. Se você quiser o serviço dentro para ser acessível de fora, então é isso que você quer.
  • Certifique-se de que systemd esteja presente dentro do chroot e use 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.
por 23.07.2018 / 03:42