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
,
Мои вопросы
- Было ли мое первоначальное предположение правильным?
- Является ли указанное выше расхождение ошибкой или ожидаемым поведением? (И если это ожидаемое поведение, то каково было обоснование этого выбора дизайна?)
добавление
Если я бегу 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
тогда не пишет никакой конфиг постфикса.
Обходные?
Обходной путь, который вы нашли, это удалить
/etc/postfix/main.cf
какие силы/var/lib/dpkg/info/postfix.postinst
выписать новый конфиг для постфикса, который будет включать в себя новыйdebconf-set-selections
опции.Альтернативное использование
dpkg-reconfigure
в интерактивном режиме и подтвердить вопросы, в этом случае/var/lib/dpkg/info/postfix.config
помечает параметры как измененные и/var/lib/dpkg/info/postfix.postinst
выписывает изменения.Альтернативный переход на управление
/etc/postfix/main.cf
опции etc, использующие postconf. (Вероятно, хорошая идея иметьecho "postfix postfix/main_mailer_type select No configuration" | debconf-set-selections
защитная сетка)