81

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

109

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
    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 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? 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? Dec 4, 2018 at 11:52
  • 3
32

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
    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
    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 May 9 at 13:58
1

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. 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. 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
    Nov 2, 2022 at 22:06
0

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.