Estou executando o Arch Linux e, além disso, o Ubuntu dentro de um contêiner systemd-nspawn. De repente, estou tendo problemas para iniciar o apache (dentro do contêiner).
Tudo estava funcionando bem alguns dias atrás, mas agora não está. Não sei se uma atualização dentro ou fora do container mudou alguma coisa.
Dentro do container, vejo o seguinte:
root@container:~# apachectl -k start
/usr/sbin/apachectl: 99: ulimit: error setting limit (Operation not permitted)
Setting ulimit failed. See README.Debian for more information.
(13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
Action '-k start' failed.
The Apache error log may have more information.
Verifiquei usando lsof
e netstat
nada mais está rodando nas portas 80/443. Além disso, o que é esse erro "ulimit"? O que está acontecendo lá?
Eu usei para editar assudo systemctl edit [email protected]
configurações para desabilitar a rede privada e habilitar algumas montagens de ligação:
[Service]
ExecStart=
ExecStart=/usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest -U --settings=override --machine=%i \
--bind-ro=/etc/resolv.conf:/etc/resolv.conf \
--bind=/home/nticompass/Code/website:/opt/website
Sim, a configuração do apache dentro do contêiner está configurada para ser usada /opt/website
como raiz. Eu o tenho montado para que eu possa usar meu IDE no meu sistema operacional principal (Arch Linux) para editar os arquivos e, em seguida, fazer com que o contêiner possa acessá-los (sem ter que copiá-los / transferi-los).
Não tenho certeza do que fazer aqui. Alguma coisa mudou em uma atualização? Preciso atualizar uma configuração no meu Arch Linux? Por que o contêiner não pode acessar as portas? O que é esse erro "ulimit"?
EDIT: Aqui está uma lista de pacotes que foram atualizados/instalados na última semana no meu sistema Arch Linux (principal): https://pastebin.com/5xyGpBrw
Não podemos dizer se uma atualização mudou alguma coisa, porque não há informações sobre atualizações em sua pergunta. Precisamos saber quais atualizações foram instaladas no sistema antes que ele pare de funcionar.
Tanto o
ulimit
erro quanto a falha de inicialização do Apache são provavelmente causados por privilégios insuficientes.Então, definitivamente algo mudou a forma como seu contêiner é inicializado.
Esse problema foi causado por uma alteração do kernel do Linux no Arch Linux. Desde o kernel 4.14.5, a
-U
opção (que é padrão parasystemd-nspawn
), cria um container sem privilégios . Costumava criar um privilegiado, mas não mais.Isso é o que estava bloqueando o Apache de abrir as portas 80 e 443.
A solução é executar
sudo systemctl edit [email protected]
e remover a-U
opção. Eu também tive que editar/etc/systemd/nspawn/my-container.nspawn
e adicionar o seguinte:Obrigado a: https://bbs.archlinux.org/viewtopic.php?pid=1756246#p1756246