(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
- A minha suposição inicial estava correta?
- 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.