Um problema bem conhecido nas distribuições systemd (Arch Linux, OpenSUSE, Fedora).
O Systemd substitui o sysvinit e fornece uma grande vantagem sobre isso. No sysvinit, quando você solicita que um serviço seja iniciado, ele herda o contexto de execução da pessoa que está chamando o script, o que inclui variáveis de ambiente, ulimits e assim por diante. O Systemd melhora isso ao contrário, notificando um daemon, que iniciará o serviço em um ambiente constante, saudável e bem definido, onde é claro que os desempenhos dos serviços são muito mais fáceis de prever, já que o ambiente é sempre o mesmo.
Isso implica que, quando eu chamo systemctl de dentro do chroot, é irrelevante que eu esteja dentro do chroot, o ambiente que será herdado ainda é o do PID 1, não o meu atual. Mas fica pior do que isso: uma vez que sockets de comunicação são colocados dentro de / run / systemd, um processo em um chroot não será capaz de falar com o sistema init!
Então, como você faz o chroot'ing nas distribuições systemd?
-
Se tudo o que você quer fazer é ter um contêiner Linux, esta página do Arch Wiki dirá você como configurar um container Linux em menos de 30 segundos, graças a
systemd-nspawn
. -
Se você realmente quiser um ambiente chroot, esta página linda e clara na Web fornecerá você com duas soluções de trabalho (a segunda é uma versão modificada da oferecida no ponto # 1).