Updating all the software on your system can be a pain, but with Linux it doesn’t have to be that way. We’ll show you how to combine the apt package management system with a task scheduler to automatically update your system.
If you’ve been using Linux for even a short time you’ll surely have experienced the wonders of having a package management system at your disposal. For Debian and Ubuntu users the package manager you get is the excellent apt-get
system. apt-get
makes installing a new program (e.g. xclock
, a graphical clock) as simple as:
% apt-get install xclock
That’s nice, but the real reason apt
is so useful is that updating your entire system all at once is just as easy:
% apt-get update ... % apt-get upgrade ...
This will refresh the apt
system with the newest information about packages and then download and install any packages that have newer versions. Do it regularly and you can be sure that you’ve got the latest and most secure software on your machine, without needing to hunt down the newest edition of each program individually.
You can make things even easier, however, by combining the apt
system with the Linux scheduling daemon cron
. cron
let’s you schedule any command to run periodically at given intervals. Take the following command:
% (apt-get update && apt-get -y upgrade) > /dev/null
Which both updates the apt cache and upgrades the system. The -y
flag tells apt-get
to answer yes to every question, which prevents the process from hanging waiting for user input, say in the middle of the night so the bandwidth from the downloads won’t bother anyone. It’s also a good idea to redirect the output of the command to /dev/null
, so that your terminal is not flooded with the results of automatic maintenance.
It’s a bad idea to just install everything regardless of errors, sometimes incompatible software can creep into the repository, and that can bring down your whole system. A better idea if you want to be more careful with what your machine is doing is to add the -d
flag, which tells apt
to merely download the packages, but not install them. You can then run apt-get dist-upgrade
later to install the packages without waiting for them to download, and letting you keep a watchful eye over what’s being installed without having to wait for everything to download.
If you want to use this approach then you can add the following lines to your crontab using crontab -e
, which will download new packages every Sunday morning at 12am:
# Automatic package upgrades 0 0 * * 0 root (apt-get update && apt-get -y -d upgrade) > /dev/null
There is still an easier way — using the cron-apt
package, which as the name might suggest, combines the cron and apt utilities, but provides a bit more flexibility and a simpler interface — as well as supporting e-mail alerts on errors or new information. cron-apt
automatically adds the -d
flag, so you’ll have to run apt-get dist-upgrade
to install the changes. You can install cron-apt
like any other common utility by using apt:
% apt-get install cron-apt
The configuration for cron-apt
reside in /etc/cron-apt/config
— except how often the script runs, that’s depended on cron
so you can find it in /etc/cron.d/cron-apt
. One popular configuration change is to add the line:
MAILON="always"
This will make sure an e-mail is always sent when the update runs, rather than only when an error occurs.
That’s it. Setting up your machine to automatically update itself is as simple as a couple of lines in the console. If you need to have closer control over what is happening during the automatic update process then you’ll want to write your own script, the Ubuntu help pages have a good run down of how to write a script around aptitude to achieve the same results.