204

I have a server build script which uses apt-get to install packages. It then puts pre-written configuration files directly in place, so the interactive post-install configuration dialog in packages such as postfix is not needed. How do I skip this stage of the installation? It creates a piece of manual intervention that I would rather avoid.

I am aware of the -qq option, but the manpage warns against using it without specifying a no-action modifier. I do want to perform an action, I just want to suppress a specific part of it.

3 Answers 3

313

You can do a couple of things for avoiding this. Setting the DEBIAN_FRONTEND variable to noninteractive and using -y flag. For example:

export DEBIAN_FRONTEND=noninteractive
apt-get -yq install [packagename]

If you need to install it via sudo, use:

sudo DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
2
  • 41
    This worked for me until one day it didn't. Some kind of "urgency=high" message. You need DEBIAN_FRONTEND, y AND the q flag set, i.e. DEBIAN_FRONTEND=noninteractive apt-get -yq install [packagename]
    – Jeff Mixon
    Commented Jul 20, 2016 at 6:45
  • Did no work for me when installing iptables-persistent :/ Commented Oct 16, 2020 at 19:11
2

I've found that setting -yqq and DEBIAN_FRONTEND=noninteractive don't work in some cases where apt-get stalls at the end with

Restarting the system to load the new kernel will not be handled automatically, so you should consider
rebooting. [Return]

It will not exit until after you press the enter key.

My solution to this is to do everything everyone else suggested, but also with yes piped to apt-get as follows

yes | sudo DEBIAN_FRONTEND=noninteractive apt-get -yqq purge 'my-package'
0

You can redefine apt as a function in your bash scripts if you are going to be running these commands regularly in automated stacks, so that you don't have to remember everything:

## apt ##
function apt {
    export DEBIAN_FRONTEND=noninteractive
    export DEBIAN_PRIORITY=critical
    export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
    command /usr/bin/apt --yes --quiet --option Dpkg::Options::=--force-confold --option Dpkg::Options::=--force-confdef "$@"
}

Or better yet just rename it to like my_apt or whatever.

And then it can be used in child functions, here are some examples we use in SlickStack:

## ss_apt_update ##
function ss_apt_update {
    apt update > /dev/null 2>&1
}

## ss_apt_upgrade ##
function ss_apt_upgrade {
    apt upgrade > /dev/null 2>&1
}

## ss_apt_full_upgrade ##
function ss_apt_full_upgrade {
    apt full-upgrade > /dev/null 2>&1
}

You must log in to answer this question.

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