dpkg-reconfigure: диалоговое окно успешно устанавливает postfix; неинтерактивный интерфейс не работает

(NB В этом вопросе ведущий # указывает на приглашение root, а не комментарий. Кроме того, я заменил фактическое имя хоста на <myhostname> .)

Как debconf (7) состояния man-страницы, dpkg-reconfigure может быть вызван любым из нескольких внешних интерфейсов, включая интерактивный внешний интерфейс по умолчанию (" диалог ") и " неинтерактивный " внешний интерфейс.

Правильно ли я думаю, что работает

# dpkg-reconfigure postfix

чтобы вызвать интерфейсную часть диалога и нажать Enter в ответ на каждый вопрос, должно быть эквивалентно выполнению следующего?

# dpkg-reconfigure -f noninteractive postfix

Если так, то я не понимаю следующего несоответствия.

несовпадение

На VPS, недавно заполненном Debian 9 "Stretch" ​​из образа моего веб-хоста (на котором уже установлен postfix), я использовал preseed, используя 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"                   

Если я тогда бегу dpkg-reconfigure в интерактивном режиме и нажмите Enter для каждого вопроса, я получаю:

# 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

Обратите внимание, что это довольно много, в том числе настройка /etc/mailname, На этом этапе postfix готов к отправке почты.

Напротив, если я использую тот же VPS, начиная с нового образа, и запускаю те же команды, за исключением вызова dpkg-reconfigure неинтерактивно я получаю:

# 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

Обратите внимание, что на этот раз, /etc/mailname не был установлен. Более того, на данный момент postfix не готов к отправке почты, и любые попытки сделать это приводят к появлению отказов в /var/log/mail.log,

Мои вопросы

  1. Было ли мое первоначальное предположение правильным?
  2. Является ли указанное выше расхождение ошибкой или ожидаемым поведением? (И если это ожидаемое поведение, то каково было обоснование этого выбора дизайна?)

добавление

Если я бегу rm /etc/postfix/main.cf перед запуском dpkg-reconfigure --frontend noninteractive postfix, затем /etc/mailname а также /etc/postfix/main.cf оба заканчивают тем, что были созданы, и postfix заканчивает тем, что был готов послать почту. Похоже, что это жизнеспособный обходной путь для вышеуказанного сбоя, но он, безусловно, нарушает Правило Наименьшего Сюрприза и чувствует, что это может быть неопределенное поведение, на которое нельзя полагаться.

1 ответ

Решение

Конфигурационные файлы postfix, включая /etc/mailname НЕ МОЖЕТ быть изменено с помощью debconf-set-selections а также dpkg-reconfigure как только файлы конфигурации postfix были записаны. Я прожег слишком много часов, пытаясь выяснить, почему...

Зачем?

dpkg-reconfigure -f noninteractive возвращает значение 30 вопрос пропущен для всех вопросов (и использует debconf-set-selections пресеты), код в /var/lib/dpkg/info/postfix.config затем не устанавливает параметры debconf как измененные и /var/lib/dpkg/info/postfix.postinst тогда не пишет никакой конфиг постфикса.

Обходные?

  1. Обходной путь, который вы нашли, это удалить /etc/postfix/main.cf какие силы /var/lib/dpkg/info/postfix.postinst выписать новый конфиг для постфикса, который будет включать в себя новый debconf-set-selections опции.

  2. Альтернативное использование dpkg-reconfigure в интерактивном режиме и подтвердить вопросы, в этом случае /var/lib/dpkg/info/postfix.config помечает параметры как измененные и /var/lib/dpkg/info/postfix.postinst выписывает изменения.

  3. Альтернативный переход на управление /etc/postfix/main.cf опции etc, использующие postconf. (Вероятно, хорошая идея иметь echo "postfix postfix/main_mailer_type select No configuration" | debconf-set-selections защитная сетка)

Другие вопросы по тегам