dpkg-reconfigure: o frontend do diálogo configura o postfix com sucesso; front-end não interativo falha

3

(N.B. Nessa pergunta, um # inicial indica um prompt raiz, não um comentário. Além disso, substituí o nome do host real por <myhostname> .)

Como os estados debconf (7) man-page, dpkg-reconfigure pode ser chamado com qualquer um dos vários front-ends, incluindo o front-end interativo padrão (" dialog ") e o frontend " noninteractive ".

Estou certo em pensar que a corrida

# dpkg-reconfigure postfix

para invocar o front-end do diálogo , e pressionando Enter em resposta a cada pergunta, deve ser equivalente a executar o seguinte?

# dpkg-reconfigure -f noninteractive postfix

Se sim, então não entendo a seguinte discrepância.

Discrepância

Em um VPS recém-preenchido com o Debian 9 "Stretch" da imagem do meu host (que tem o postfix já instalado), eu fiz o preseed usando debconf-set-selections :

# debconf-set-selections <<< "postfix postfix/destinations string <myhostname>"
# debconf-set-selections <<< "postfix postfix/mailbox_limit string 51200000"              
# debconf-set-selections <<< "postfix postfix/mailname string <myhostname>"    
# debconf-set-selections <<< "postfix postfix/main_mailer_type select Internet Site"      
# debconf-set-selections <<< "postfix postfix/protocols select ipv4"                      
# debconf-set-selections <<< "postfix postfix/root_address string root"                   

Se eu, então, executar dpkg-reconfigure interativamente, e pressionar Enter para cada pergunta, eu recebo:

# dpkg-reconfigure postfix
dpkg-reconfigure postfix
Removing sqlite map entry from /etc/postfix/dynamicmaps.cf
setting synchronous mail queue updates: false
Adding sqlite map entry to /etc/postfix/dynamicmaps.cf
changing /etc/mailname to <myhostname>
setting myorigin
setting destinations: localhost
setting relayhost: 
setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
setting mailbox_size_limit: 51200000
setting recipient_delimiter: +
setting inet_interfaces: all
setting default_transport: smtp
setting relay_transport: smtp
setting inet_protocols: ipv4
WARNING: /etc/aliases exists, but does not have a root alias.

Postfix (main.cf) is now set up with the changes above.  If you need to make 
changes, edit /etc/postfix/main.cf (and others) as needed.  To view Postfix 
configuration values, see postconf(1).

After modifying main.cf, be sure to run 'service postfix reload'.

Running newaliases

Observe que isso faz bastante, incluindo a configuração /etc/mailname . Neste ponto, o postfix está pronto para enviar e-mails.

Por outro lado, se eu usar o mesmo VPS, começar de novo a partir de uma nova imagem e executar os mesmos comandos, exceto por invocar dpkg-reconfigure não interativamente, recebo:

# dpkg-reconfigure --frontend noninteractive postfix
Removing sqlite map entry from /etc/postfix/dynamicmaps.cf
Adding sqlite map entry to /etc/postfix/dynamicmaps.cf

Postfix (main.cf) configuration was not changed.  If you need to make changes, 
edit /etc/postfix/main.cf (and others) as needed.  To view Postfix 
configuration values, see postconf(1).

After modifying main.cf, be sure to run 'service postfix reload'.

Running newaliases

Observe que, desta vez, /etc/mailname não foi definido. Além disso, neste momento, o postfix não está pronto para enviar e-mails e qualquer tentativa de fazê-lo resultará em retornos aparecendo em /var/log/mail.log .

Minhas perguntas

  1. A minha suposição inicial estava correta?
  2. A discrepância acima é um bug ou é um comportamento esperado? (E se é um comportamento esperado, qual foi a justificativa para essa escolha de design?)

Adendo

Se eu executar rm /etc/postfix/main.cf antes de executar dpkg-reconfigure --frontend noninteractive postfix , então /etc/mailname e /etc/postfix/main.cf serão criados e o postfix estará pronto para enviar e-mails. Esta parece ser uma solução viável para a falha acima, mas certamente viola o Regra de Menos Surpresa e sente como se fosse um comportamento indefinido que não deveria ser invocado.

    
por sampablokuper 23.12.2017 / 12:04

1 resposta

1

Os arquivos de configuração do postfix, incluindo /etc/mailname NÃO PODEM ser alterados usando debconf-set-selections e dpkg-reconfigure depois que os arquivos de configuração do postfix forem gravados. Eu queimei muitas horas tentando descobrir por que ...

Por quê?

dpkg-reconfigure -f noninteractive return 30 perguntas ignoradas para todas as questões ( e usa as debconf-set-selections presets), o código em /var/lib/dpkg/info/postfix.config então não define as configurações do debconf como alteradas e /var/lib/dpkg/info/postfix.postinst então não escreve nenhuma configuração do postfix.

Soluções alternativas

  1. A solução alternativa encontrada é remover /etc/postfix/main.cf , o que força /var/lib/dpkg/info/postfix.postinst a escrever uma nova configuração para o postfix, que incluirá as novas opções debconf-set-selections .

  2. Uso alternativo dpkg-reconfigure em um modo interativo e confirme as perguntas. Nesse caso, /var/lib/dpkg/info/postfix.config marca as opções como alteradas e /var/lib/dpkg/info/postfix.postinst grava as alterações.

  3. Alterne a opção para gerenciar as opções de /etc/postfix/main.cf etc usando o postconf . (Provavelmente é uma boa ideia ter uma rede de segurança echo "postfix postfix/main_mailer_type select No configuration" | debconf-set-selections )

por 27.05.2018 / 19:30