(N.B。この質問では、先頭の_#
_はコメントではなくルートプロンプトを示します。また、実際のホスト名を_<myhostname>
_に置き換えました。)
debconf (7)
のマニュアルページの状態として、_dpkg-reconfigure
_は、デフォルト( "dialog)を含むいくつかのフロントエンドのいずれかで呼び出すことができます。 = ")インタラクティブフロントエンド、および" noninteractive "フロントエンド。
私は走っていると思っているのは正しいですか
_# dpkg-reconfigure postfix
_
dialogフロントエンドを呼び出し、を押します Enter 各質問に答えて、次を実行することと同等である必要がありますか?
_# dpkg-reconfigure -f noninteractive postfix
_
もしそうなら、私は次の不一致を理解していません。
Webホストのイメージ(接尾辞がすでにインストールされている)からDebian 9 "Stretch"を新たに入力したVPSで、_debconf-set-selections
_を使用してpreseedします。
_# 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がメールを送信できるようになります。これは上記の失敗に対する実行可能な回避策のようですが、確かに 驚き最小の原則 に違反しており、信頼すべきではない未定義の動作である可能性があるように感じます。
/etc/mailname
を含む後置構成ファイルは、後置構成ファイルが変更されると、debconf-set-selections
およびdpkg-reconfigure
を使用して変更できません書き出された。私は理由を見つけようとして何時間も燃やしすぎました...
なぜですか?
dpkg-reconfigure -f noninteractive
は値を返します の質問はスキップされます すべての質問に対して(そして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
は変更を書き出します。
postconf を使用して/etc/postfix/main.cf
などのオプションを管理するための代替スイッチ。 (echo "postfix postfix/main_mailer_type select No configuration" | debconf-set-selections
セーフティネットを用意することをお勧めします)