85

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?

4 Answers 4

116

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
8
  • 1
    What are the available options for main_mailer_type? Is there a list to reference somewhere without having to run it interactively once first?
    – beporter
    Commented Jun 24, 2015 at 21:06
  • 3
    beporter, apparently: No configuration , Internet site, Internet with smarthost, Satellite system, Local only however it seems like Internet Site is generally the best choice for most people: bugs.debian.org/cgi-bin/bugreport.cgi?bug=450787 Commented Jan 9, 2016 at 20:16
  • 2
    Could some body explain how can we get this string for other packages? (kerberos in my case): "postfix postfix/mailname string your.hostname.com" I mean, what is the first "postfix", and the second "postfix/" and then "mailname", etc.... where can i get those strings for my package? Commented Nov 28, 2016 at 23:33
  • I know the question is about Ubuntu but I need this for Amazon Linux (AWS) which is an offshoot of RHEL... Anyone? Commented Dec 4, 2018 at 11:52
  • 4
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
3
  • 3
    You could also do export DEBIAN_FRONTEND=noninteractive to set it globally in an unattended fashion.
    – Mahn
    Commented Sep 5, 2014 at 13:49
  • I found this worked well on Ubuntu 14.04 for a default 'deliver to local /var/mail' setup, whereas the debconf-set-selections answer above didn't.
    – RichVel
    Commented Apr 28, 2017 at 9:00
  • Works for me. I just needed to remember to pass the env to apt and not sudo (i.e. sudo DEBIAN_FRONTEND=noninteractive apt install PACKAGE and NOT DEBIAN_FRONTEND=noninteractive sudo apt install PACKAGE Commented May 9, 2023 at 13:58
3

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
3
  • This is exactly the same as the already accepted answer. Commented Mar 3, 2022 at 14:28
  • 2
    the answer with <<<'s didnt work for me during automated installation via user-data. Instead using echo with a pipe to debconf-set-selections worked. Commented Mar 3, 2022 at 14:30
  • This is a good point. Perhaps you should add an alternative along with this explanation as an edit to the accepted answer. People may miss it down here.
    – Utkonos
    Commented Nov 2, 2022 at 22:06
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.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .