(Raspian) Condições de corrida de inicialização do DHCP - muitas falhas de serviço na inicialização (sem DNS por ~ 5-10 segundos)

3

(Editar: Isso se aplica a muito mais do que o postfix; é exatamente onde eu notei / depurei)

Instalei o postfix, mas quando ele é iniciado e cria seu chroot, ele recebe uma cópia vazia de /etc/resolv.conf , o que significa que não é possível resolver nenhum domínio.

Eu adicionei alguns logs em vários scripts de rede para ver quando o resolve.conf está sendo limpo / re-preenchido e quando o postfix está iniciando ...

Aqui está o log de uma inicialização:

Sun Mar 27 19:12:30 UTC 2016
  EXECUTE: root + /sbin/resolvconf2 -d eth0 -f

Sun 27 Mar 19:12:31 UTC 2016
  Postfix startup script

Sun Mar 27 19:12:37 UTC 2016
  EXECUTE: root + /sbin/resolvconf2 -a eth0

Note que há 7 segundos entre o resolvconf ser chamado para limpar a configuração e então recolocá-la. Para este período, o /etc/resolv.conf está efetivamente vazio. É entre essas chamadas que o postfix (e muitos outros serviços) é iniciado.

Parece estranho que os serviços estejam sendo iniciados nesta enorme lacuna entre o resolvconf sendo limpo / recriado.

Esta é uma instalação limpa do Raspbian com o Postfix instalado e sem outras alterações.

EDITAR : Olhando no syslog, na verdade existem toneladas de coisas que falham devido a nenhum DNS no período entre o início e o término do dhcpcd. Parece falho que outros serviços estão tentando iniciar simultaneamente?

    
por Danny Tuppeny 27.03.2016 / 17:46

3 respostas

6

Ok, depois de muitas horas desperdiçadas, eu encontrei isso em raspi-conf ...

Entãoparecequeissoéquebradopordesign.Opadrãode"inicialização rápida" vem às custas da falha aleatória. Em uma instalação limpa do Raspian, mesmo sem o postfix instalado, meu syslog contém muitos erros de DNS de vários scripts durante o processo DHCP.

Assim, a correção é definir isso para inicialização "lenta", que cria um script que aguarda a rede na inicialização. Editar : você pode fazer o script da chamada para raspi-config da seguinte forma:

sudo raspi-config nonint do_wait_for_network Slow

Isso corrige o problema do postfix que notei e também limpa uma tonelada de erros relacionados ao DNS normalmente gravados no syslog durante a inicialização.

Eu acho que como comportamento padrão, isso é loucura. Eu postei feedback sobre o GitHub .

    
por 27.03.2016 / 23:08
2

Há também outra coisa que deve ser levada em conta, para serviços precedentes em um servidor que tenha um endereço IP fornecido pelo DHCP.

dhcpclient por padrão não aguarda o endereço IP. Enquanto você pode não estar interessado em mudar isso em uma estação de trabalho, em um servidor que cria problemas de precedência.

Portanto, dhclient é invocado por padrão com a opção -nw que, de acordo com o manual :

-nw Become a daemon process immediately (nowait) rather than waiting until an IP address has been acquired.

Essa precedência estava me causando alguns problemas (por exemplo, o BIND não inicializou corretamente, mesmo com uma reinicialização nos ganchos de saída do DHCP)

Alterei minha eth0 de:

iface eth0 inet dhcp

para

iface eth0 inet manual
   pre-up /sbin/dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
    
por 29.03.2016 / 09:55
1

Outra maneira de lidar com isso é recopiar o resolv.conf depois que a rede estiver totalmente ativada. Você pode fazer isso com o systemd colocando o seguinte em um arquivo em / etc / systemd / system e chamá-lo de algo como fixpostfix.service , então execute sudo systemctl fixpostfix.service . Agora, após cada reinicialização, assim que a rede estiver totalmente online, isso copiará o resolv.conf

corretamente preenchido.
[Unit]
Description=Fix poorly copied resolv.conf for postfix
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/cp /etc/resolv.conf /var/spool/postfix/etc/resolv.conf

[Install]
WantedBy=multi-user.target
    
por 27.11.2016 / 03:15