Automating Ubuntu 16 Updates With Vultr Startup Scripts

Last Updated: Fri, Mar 3, 2017
FAQ Ubuntu
Archived content

This article is outdated and may not work correctly for current operating systems or software.

Ubuntu 16 and newer performs periodic tasks related to apt (such as updating the package list, and applying unattended upgrades) using a systemd timer. This timer is usually triggered at the start of launching an Ubuntu 16 VPS, which can cause apt tools (apt, apt-get) to fail with an error similar to the following:

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)

A common use case of Vultr startup scripts is to update the system packages. Without checking the error codes returned from apt or apt-get, system updates can fail. When the lock condition is encountered, apt will typically return code 100.

This sample script can be used as a Vultr startup script to retry installing system updates. You can modify it to fit your needs.

#!/bin/bash

UPGRADE_ATTEMPT_COUNT=100

UPGRADE_STATE=1

for i in `seq 1 $UPGRADE_ATTEMPT_COUNT`;

do

    if [ "$UPGRADE_STATE" -eq "1" ]; then

        apt-get -y update

        if [ "`echo $?`" -eq "0" ]; then

            echo "package list updated."

            UPGRADE_STATE=2;

        fi

    fi



    if [ "$UPGRADE_STATE" -eq "2" ]; then

        apt-get -y upgrade

        if [ "`echo $?`" -eq "0" ]; then

            echo "packages updated."

            UPGRADE_STATE=3;

        fi

    fi



    if [ "$UPGRADE_STATE" -eq "3" ]; then

        break

    fi



    sleep 5

done



if [ "$UPGRADE_STATE" -ne "3" ]; then

    echo "ERROR: packages failed to update after $UPGRADE_ATTEMPT_COUNT attempts."

fi

More information about Automatic Updates is available in the Ubuntu LTS documentation.

Want to contribute?

You could earn up to $600 by adding new articles.