Sometimes, having a local mirror of Ubuntu packages can be useful. Not only this can save tons of network bandwidth when installing an Ubuntu system multiple times. An example of this are testing, development and QA environments that rely on virtual machines. When installing a new Ubuntu system, just point the installer to the local Ubuntu mirror and you’ll save time and reduce your WAN/Internet traffic considerably.
In order to create and keep a local mirror of Ubuntu, you can use apt-mirror
which is available in the universe
repository. And, for the record, this post is heavily based on another one — Ubuntu – Set Up A Local Mirror.
Ubuntu, as many other Linux distributions, retrieve packages for installation over HTTP. Therefore, the first thing to do is to install Apache, if not already installed. And, at the same time, let’s install apt-mirror
too:
$ sudo apt-get install apache2 apt-mirror
Next step consists of configuring apt-mirror
. The configuration is very similar to /etc/apt/sources.list
. apt-mirror
reads its configuration from /etc/apt/mirror.list
. By default, it mirrors packages for the architecture on which it’s running, but you’ll likely want it to mirror packages for x86_64 and i386 systems. Also, beware of the size of the local mirror: mirroring all the repositories can consume quite a lot of disk space in the local system (30GB or even more). It’s a good idea to mirror those repositories that you need. Here’s an example of my /etc/apt/mirror.list
:
############# config ##################
#
# set base_path /var/spool/apt-mirror
#
# set mirror_path $base_path/mirror
# set skel_path $base_path/skel
# set var_path $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads 20
set _tilde 0
#
############# end config ##############
deb-amd64 http://archive.ubuntu.com/ubuntu trusty main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-security main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-updates main restricted
deb-i386 http://archive.ubuntu.com/ubuntu trusty main restricted
deb-i386 http://archive.ubuntu.com/ubuntu trusty-security main restricted
deb-i386 http://archive.ubuntu.com/ubuntu trusty-updates main restricted
clean http://archive.ubuntu.com/ubuntu
This configuration requests 20 download threads, and mirrors the main
and restricted
repositories for x86_64 and i386 systems exclusively.
To initiate the mirror process, just run:
This will spawn workers threads that will mirror the configured repositories into /var/spool/apt-mirror
.
In order to serve this mirror via Apache, just create a symlink into the root Apache directory:
$ sudo ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com/ubuntu/ /var/www/html/ubuntu
It might also be a good idea to remove or rename /var/www/html/index.html
so that one can browse the repository using a Web browser.
And finally, you can configure cron
to run apt-mirror
periodically. For example, by adding the following line to your crontab
:
@daily /usr/bin/apt-mirror