Per Make apt-get (or aptitude) run with -y but not prompt for replacement of configuration files?
I did the following:
ec2run ami-3c994355 --region us-east-1 -n 1 -t m1.large -z us-east-1d
On the machine:
sudo apt-get update
sudo apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade
I still get a prompt asking me which config file I want to use. These are the lines that come before the prompt:
Setting up grub-pc (1.99-21ubuntu3.1) ...
then:
┌───────────────────────────────────────────────────────┤ Configuring grub-pc ├───────────────────────────────────────────────────────┐
│ A new version of configuration file /etc/default/grub is available, but the version installed currently has been locally modified. │
│ │
│ What do you want to do about modified configuration file grub? │
│ │
│ install the package maintainer's version │
The
/etc/default/grub
file is generated at package install time, which is necessary because it integrates with debconf. This means that it can not treated as a dpkg conf file, and so dpkg's configuration file handling doesn't know about it.Instead, it uses
ucf
, a more sophisticated Debian tool for handling configuration. This, unfortunately, doesn't understand dpkg options, so settingDpkg::Options::="--force-confdef"
won't help. It does have its own way of doing no-prompt upgrades, though, through theUCF_FORCE_CONFFNEW
andUCF_FORCE_CONFFOLD
environment variables.ucf
usesdebconf
for prompting, so setting the debconf interface tononinteractive
will also silence the message. If you really want non-interactive updates you'll need to do this anyway - arbitrary packages may ask debconf questions (although they generally won't during upgrades).You can set the debconf interface as a one-off by adding
DEBIAN_FRONTEND=noninteractive
to your environment, or can set it permanently by runningdpkg-reconfigure debconf
and selecting the noninteractive frontend. If you're using the noninteractive frontend you'll get the default answer for any questions a package might ask.For
ucf
, the default answer is “keep the existing file”.So, the full command to do a really, 100% guaranteed¹ no-prompting update would be.
¹: It's technically possible for packages to use another method of prompting than debconf, but this is against Debian policy. If you run across such a package, file a bug.
going off of RAOF's answer and after spending countless hours searching on the web to be able to perform a completely hands-off update & dist-upgrade on Ubuntu 12.04, i came up with this thanks to the fact this post (https://bugs.launchpad.net/ubuntu/+source/grub/+bug/239674/comments/1) points out that grub adheres to UCF and not Dpkg Options when you want to use the package maintainers grub menu.lst instead of any possible local menu.lst edits.
i left the Dpkg force-confnew options in for other packages that aren't grub.
The previous solutions wouldn't work with 16.04. This works from this answer on stack overflow:
After much testing, the only thing that worked was:
For what I was doing it (Ubuntu 16.04 in Vagrant with provisioning), the
DEBIAN_FRONTEND=noninteractive
was not enough. Thanks others in this thread, I needed to addUCF_FORCE_CONFFOLD=YES
forgrub-pc
I've been wrangling with the same issue on Ubuntu 18.04 the past few days. On launching a new EC2 instance (specifically ami-00035f41c82244dab), I run an automated provisioning script (via User Data config supplied at the time of initialisation), one of the first steps of which is to run apt update/upgrade.
The script gets blocked while the user is prompted about modified GRUB files - first /etc/default/grub, and then /boot/grub/menu.lst. Since this is running in an unattended mode when supplied as User Data, the process stalls and never recovers.
From lots of Googling, it seems this has been a long-running GRUB issue in one form or another, with fixes being applied and then latter regressing again, as far as I can tell.
Ultimately, the only workaround I have been able to apply successfully is the following ugly hack in my provisioning script. Hopefully it might get somebody else out of a bind though!
I can only assume the problem I encountered is quite specific to the Ubuntu 18.04 AMI version currently available, and any updated version that incorporates newer GRUB packages may not be subject to the same issue. In particular, the nature of the changes to
/etc/default/grub
are not likely to be applicable to newer versions of the AMI. Just putting this out there anyway.