Skip to content

How to upgrade a server

Preparation

Before an upgrade can be performed, the current OS needs to be brought up to date, and some dependencies need to be installed.

Bring all packages up to date

Upgrade all packages on the server:

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get autoremove

Install dependencies

Next, ensure that the upgrade services themselves are installed, and screen:

sudo apt-get install update-manager-core screen

Configure apt and dpkg

In order to ensure that the the upgrade is non-interactive, we need to configure apt and dpkg to always keep the old configuration of any package it updates. Normally, every time that dpkg installs a new configuration file that has been modified, it will stop the upgrade and ask you whether you want to keep your modified configuration or replace it with one from the package maintainer. For upgrading a headless server, we want to ensure that the upgrade does not depend on any human interaction, in case the ssh connection with the server drops during the upgrade process. We need to make use of the following dpkg settings:

  • --force-confold which means do not modify the current configuration file, the new version of the file will be written to disk with a .dpkg-dist file extension. With this option alone, even configuration files that you have not modified are left untouched, but if you combine it with --force-confdef then dpkg will overwrite configuration files that have not been modified.
  • --force-confdef which means ask dpkg to decide alone when it can safely replace an unmodified configuration file, and prompt otherwise. This is default behaviour.

See the dpkg manpage for more details.

To make these settings permanent, open /etc/apt/apt.conf.d/local in a text editor, and add the following text (if it isn't already there):

Dpkg::Options {
"--force-confdef";
"--force-confold";
}

Reboot

Just in case the Linux kernel has been replaced since the last reboot, reboot now:

sudo reboot

Upgrade

Run the upgrade task itself:

sudo do-release-upgrade -f DistUpgradeViewNonInteractive

Once the upgrade has finished, check that you have a new Ubuntu version:

lsb_release -a

and ensure that the following packages are installed:

sudo apt-get install sssd-dbus libsss-simpleifp0

Warning

If you miss this step, the VM may not come back up after a reboot.

Reboot

Once the upgrade has finished and you have run sudo apt-get install sssd-dbus libsss-simpleifp0 reboot with:

sudo reboot

Documentation

Once you have completed the upgrade and checked that the machine is sending date to our Nagios server make sure you update the Server Map. You will need to check that all the columns for the server are up to date.

Troubleshooting

Since you are upgrading over ssh, do-release-upgrade will automatically start a screen session, in case your ssh connection drops. Because you are running the upgrade task non-interactively, you will not see the notice that is normally printed to the terminal, which is:

... an additional SSH daemon will be started at port
'1022'.

If your connection does drop out, try connecting again (using the alternative port, if necessary) and run screen -r to re-attached to the session.

Further reading