87

My system configuration script does an apt-get install -y postfix. Unfortunately the script is halted when the postfix installer displays a configuration screen. Is there a method to force postfix to use the defaults during installation so that an automated script can continue to the end?

Does the postfix installer maybe check for existing configuration in /etc/postfix, and if it exists, not bother the user with the configuration screen?

bathyscapher
  • 125
  • 4
sutch
  • 1,056

4 Answers4

117

You can use pre-seeding for this, using the debconf-set-selections command to pre-answer the questions asked by debconf before installing the package.

For example:

debconf-set-selections <<< "postfix postfix/mailname string your.hostname.com"
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"
apt-get install --assume-yes postfix
nuiun
  • 103
raphink
  • 13,027
31

If you want this globally:

dpkg-reconfigure debconf

Then configure it to be "noninteractive"

If you just want it for single install run:

DEBIAN_FRONTEND=noninteractive apt-get install PACKAGE
4

When executing from a shell that does not offer here-strings (<<<), pipe the answers:

echo "postfix postfix/mailname string my.hostname.example" | debconf-set-selections
echo "postfix postfix/main_mailer_type string 'Internet Site'" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive apt-get postfix
anx
  • 10,888
1

Another way it can be done is by creating a file e.g. myconf:

postfix postfix/main_mailer_type  select Internet Site
postfix postfix/mailname          string your.hostname3.com

Then call debconf-set-selections and pass the file as argument:

debconf-set-selections myconf

You can also do like other answers by piping the strings into debconf-set-selections instead:

echo "postfix postfix/main_mailer_type select Internet Site"      | debconf-set-selections
echo "postfix postfix/mailname         string your.hostname3.com" | debconf-set-selections

A way you can use the piping method is if you want to pass them from one server to another as described in the manpage using the sister command debconf-get-selections which is available in debconf-utils:

debconf-get-selections | ssh anotherserver debconf-set-selections

The temporary file where debconf-set-selections stores them is:

/var/cache/debconf/config.dat

You can check inside and it should contain the settings you just set:

Name: postfix/mailname
Template: postfix/mailname
Value: your.hostname3.com
Owners: postfix
Flags: seen

Name: postfix/main_mailer_type Template: postfix/main_mailer_type Value: Internet Site Owners: postfix Flags: seen

Then just run the installer and there will be no prompts:

apt install postfix -y

Now if you uninstall postfix:

apt remove postfix --purge

You will notice that there are no more postfix settings at all in /var/cache/debconf/config.dat at all, so if you decide to re-install postfix, and don't run debconf-set-selections again before, you will get the usual prompts.

Wadih M.
  • 1,102