Programster's Blog

Tutorials focusing on Linux, programming, and open-source

Deploy A Local Ubuntu Mirror using Rsync

I've been having problems with using apt-mirror to create a local mirror for Ubuntu 16.04. Luckily, we can use rsync as an alternative solution that we will never have to change, and can be run from any distro. However, it does require more storage space. At the time of writing this article, my ubuntu mirror takes up 1,084 GiB of space.

Related Posts


Firstly, we need to set install apache and a storage path. The storage path should have over 1 TiB of space.

sudo apt install apache2 -y

sudo mkdir -p $STORAGE_PATH
sudo ln -s $STORAGE_PATH /var/www/ubuntu

Configure Apache

Run the following command to configure apache.

sudo echo '<VirtualHost *:80>

    DocumentRoot /var/www
        <Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>' | sudo tee /etc/apache2/sites-enabled/000-default.conf

Now we need to create a user that will be executing the sync, yet the webserver can access all the files of. It's nice to be able to log in as this user to manually run the sync from time to time.

sudo adduser [mirror user]
sudo adduser www-data [mirror user]
su [mirror user name]
cd $HOME

In the home directory of the user we created, create and execute the following script. I called it which will be referenced later in a cron.



rsync \
  --recursive \
  --links \
  --perms \
  --times \
  --compress \
  --progress \
  --delete \
  rsync:// \

You can add --bwlimit=1000 to limit the bandwidth to 1000 Kilobytes per second. You will need to do the math to convert from kilobytes to Megabits.


Now we need the mirror to automatically stay up to date. We will run the task every 6 hours. Make sure you only do this after you have completed the initial sync which will probably take longer than 6 hours.

crontab -e

Add the following line:

0 */6 * * * /home/[mirror user]/

Use Your Mirror

You can now configure your ubuntu computers to use this mirror for updates.


Last updated: 17th April 2021
First published: 16th August 2018