How to create and use a local repository mirror on Ubuntu 9.10. These instructions should work with minor modifications for other versions of Ubuntu.
# File: HOWTO Create a Local Repository Mirror on Ubuntu.notes # Date: 2010/03/17 # Refs: https://help.ubuntu.com/community/Debmirror # http://ubuntuforums.org/archive/index.php/t-599479.html # http://www.arsgeek.com/2007/02/14/how-to-set-up-your-own-local-repositories-with-apt-mirror/ # http://pwet.fr/man/linux/commandes/debmirror # Desc: How to create a local repository for # Ubuntu 9.10 Karmic Koala. # ------------------------------------- # Setup the Server # ------------------------------------- # Install Ubuntu (I used 9.10) on a machine with plenty of # free storage space (I used an 8GB OS vmdk and an 80GB data # vmdk used through LVM so that I could easily add/grow to # it in the future if necessary). # Create the mirror user, I'll be using ubuntu. # NOTE: You don't have to add this user to the wheel but if you don't, the steps below that require sudo # will require you to run them from an account with root or wheel access and may also require # that you change the ownership/group of files/directories afterwards. sudo useradd -m ubuntu -Gusers,wheel sudo password ubuntu # UPDATE 2012/01/30: As Dave points out below, you'll need to create your mirrorkeyring folder with the correct user account. # If you aren't already running as that user, you can change your shell using su su - ubuntu # Update your apt-get package listing sudo apt-get update # Install debmirror sudo apt-get install debmirror # Create the location for the repo data to live sudo mkdir -P /mirror/ubuntu # Set the permissions for the repo data sudo chown -R ubuntu:ubuntu /mirror/ubuntu sudo chmod -R 771 /mirror/ubuntu # Setup the keyring for correctly verifying Release signatures gpg --no-default-keyring --keyring /home/ubuntu/mirrorkeyring/trustedkeys.gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg # Create the mirrorbuild.sh script vim /home/ubuntu/mirrorbuild.sh # NOTE: The ubuntu community documentation has you using # the HTTP protocol for the mirror build script # however, I prefer rsync because we can rate limit. # When the download is going to take days, # I'd like to be able to use my connection in # the interim. # -------------------------------------------- # BEGIN MIRRORBUILD.SH SCRIPT # -------------------------------------------- #!/bin/bash ## Setting variables with explanations. # # Don't touch the user's keyring, have our own instead # export GNUPGHOME=/home/ubuntu/mirrorkeyring # Arch= -a # Architecture. # For Ubuntu can be i386, amd64, powerpc and/or sparc (sparc support begins with dapper) # # Comma separated values arch=i386,amd64 # Minimum Ubuntu system requires main, restricted # Section= -s # Section # (One of the following - main/restricted/universe/multiverse). # You can add extra file with $Section/debian-installer. # ex: main/debian-installer,universe/debian-installer,multiverse/debian-installer,restricted/debian-installer section=main,restricted,universe,multiverse # Release= -d # Release of the system # (Dapper, Edgy, Feisty, Gutsy, Hardy, IntrepidJaunty, Karmic), # and the -updates and -security ( -backports can be added if desired) dist=karmic,karmic-updates,karmic-security # Server= -h # Server name, # minus the protocol and the path at the end # CHANGE "*" to equal the mirror you want to create your # mirror from. au. in Australia ca. in Canada. This can be # found in your own /etc/apt/sources.list file, # assuming you have Ubuntu installed. server=us.archive.ubuntu.com # Dir= -r # Path from the main server, # so http://my.web.server/$dir, Server dependant # Lead with a '/' for everything but rsync, # where we lead with a ':' inPath=:ubuntu # Proto= -e # Protocol to use for transfer # (http, ftp, hftp, rsync) # Choose one - http is most usual the service, and the # service must be availabee on the server you point at. # NOTE: debmirror uses -aIL --partial by default. # However, if you provide the --rsync-options # paramter (which we do) then you HAVE to provide # it -aIL --partial in addition to whatever You # want to add (e.g. --bwlimit) If you don't # debmirror will exit with thousands of files # missing. proto=rsync rsyncoptions="-aIL --partial --bwlimit=100" # Outpath= # Directory to store the mirror in # Make this a full path to where you want to mirror the material. # outPath=/mirror/ubuntu/ # The --nosource option only downloads debs and not deb-src's # The --progress option shows files as they are downloaded # --source \ in the place of --no-source \ if you want sources also. # --nocleanup Do not clean up the local mirror after mirroring # is complete. Use this option to keep older repository # Start script # debmirror -a $arch \ --no-source \ -s $section \ -h $server \ -d $dist \ -r $inPath \ --progress \ -e $proto \ --rsync-options="$rsyncoptions" \ $outPath # ----------------------------------------------------- # END BUILDMIRROR.SH SCRIPT # ----------------------------------------------------- # Add execute permissions on the mirrorbuild.sh script chmod +x mirrorbuild.sh # Run the script ./mirrorbuild.sh # Go home, kick back, have a beer while it downloads 43GBs # (in the case of karmic, karmic-update, karmic-securty for # i386 and amd64) # -------------------------------------- # Setup the mirror # -------------------------------------- # Install apache2 sudo apt-get install apache2 # Symlink the mirror data into the web root sudo ln -s /mirror/ubuntu /var/www/ubuntu # Point your browser at http://localhost/ubuntu and # you should see your pool! # ------------------------------------- # Updating the Repo Mirror # ------------------------------------- # To update the repo mirror, just execute the mirrorbuild.sh # script used to initially build it. ./mirrorbuild.sh # ------------------------------------- # Configure Clients to Use this Repo # ------------------------------------- # Update the apt sources list cd /etc/apt sudo mv sources.list sources.list.orig sudo sensible-editor sources.list # Replace 'mirrorbox' with your server's DNS name # (e.g. karmic-repo.test.com) # ----------------------------------------------------------------------------- # BEGIN SOURCES.LIST # ----------------------------------------------------------------------------- # Local network mirror sources. deb http://mirrorbox/ubuntu karmic main restricted universe multiverse deb http://mirrorbox/ubuntu karmic-updates main restricted universe multiverse deb http://mirrorbox/ubuntu karmic-security main restricted universe multiverse # ----------------------------------------------------------------------------- # END SOURCES.LIST # ----------------------------------------------------------------------------- # Test to see if you are able to pull down updates # from the new mirror sudo apt-get update
4 thoughts