web-dev-qa-db-ja.com

dpkg-reconfigure:ダイアログフロントエンドはpostfixを正常にセットアップします。非対話型フロントエンドが失敗する

(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_にバウンスが表示されます。

私の質問

  1. 私の最初の仮定は正しかったですか?
  2. 上記の不一致はバグですか、それとも予想される動作ですか? (そして、それが予想される動作である場合、この設計選択の理由は何でしたか?)

補遺

_rm /etc/postfix/main.cf_を実行する前に_dpkg-reconfigure --frontend noninteractive postfix_を実行すると、_/etc/mailname_と_/etc/postfix/main.cf_の両方が作成され、postfixがメールを送信できるようになります。これは上記の失敗に対する実行可能な回避策のようですが、確かに 驚き最小の原則 に違反しており、信頼すべきではない未定義の動作である可能性があるように感じます。

3
sampablokuper

/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は、接尾辞の設定を書き込みません。

回避策?

  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. postconf を使用して/etc/postfix/main.cfなどのオプションを管理するための代替スイッチ。 (echo "postfix postfix/main_mailer_type select No configuration" | debconf-set-selectionsセーフティネットを用意することをお勧めします)

2
Firefishy