Local mirror
Note: If you want to create an official mirror see this page.
Contents
STOP
It is generally frowned upon to create a local mirror due the bandwidth that is required. One of the alternatives will likely fulfill your needs. Please look at the alternatives below.
Alternatives:
Local Mirror
Things to keep in mind:
- Bandwidth is not free for the mirrors. They must pay for all the data they serve you
- This still applies although you pay your ISP
- There are many packages that will be downloaded that you will likely never use
- Mirror operators will much prefer you to download only the packages you need
- Really please look at the alternatives above
If you are absolutely certain that a local mirror is the only sensible solution, then follow the pointers below.
Server Configuration
Building Rsync Command
- Use the rsync arguments from DeveloperWiki:NewMirrors
- Select a server from the above article
- Exclude folder/files you don't want by including --exclude-from="/path/to/exclude.txt" in the rsync arguments. Example contents might include:
iso #Exclude i686 Packages */os/i686 pool/*/*-i686.pkg.tar.xz pool/*/*-i686.pkg.tar.gz #Exclude x86_64 Packages */os/x86_64 pool/*/*-x86_64.pkg.tar.xz pool/*/*-x86_64.pkg.tar.gz
- All packages reside in the pool directory. Symlinks are then created from pool to core/extra/testing/etc..
- As of 9/21/2010 this migration is not yet complete.
- There may be actual packages, instead of symlinks, in ${repo}/os/${arch}
- As of 9/21/2010 this migration is not yet complete.
- Exclude any top-level directories that you do not need
Example: rsync $rsync_arguments --exclude="/path/to/exclude.txt" rsync://example.com/ /path/to/destination
Example Script
DO NOT USE THIS SCRIPT UNLESS YOU HAVE READ WARNINGS AT THE START OF THIS ARTICLE
Yes, this script is partially broken ON PURPOSE to avoid people doing copy-and-paste to create their own mirror. It should be easy to fix if you REALLY want a mirror.
#!/bin/bash ################################################################################################# ### It is generally frowned upon to create a local mirror due the bandwidth that is required. ### One of the alternatives will likely fulfill your needs. ### REMEMBER: ### * Bandwidth is not free for the mirrors. They must pay for all the data they serve you ### => This still applies although you pay your ISP ### => There are many packages that will be downloaded that you will likely never use ### => Mirror operators will much prefer you to download only the packages you need ### * Really please look at the alternatives on this page: ### http://wiki.archlinux.org/index.php?title=Local_Mirror ### If you are ABSOLUTELY CERTAIN that a local mirror is the only sensible solution, then this ### script will get you on your way to creating it. ################################################################################################# # Configuration SOURCE='rsync://mirror.example.com/archlinux' DEST='/srv/mirrors/archlinux' BW_LIMIT='500' REPOS='core extra' RSYNC_OPTS="-rtlHq --delete-after --delay-updates --copy-links --safe-links --max-delete=1000 --bwlimit=${BW_LIMIT} --delete-excluded --exclude=.* --exclude=iso/" LCK_FLE='/var/run/repo-sync.lck' # Make sure only 1 instance runs if [ -e "$LCK_FLE" ] ; then OTHER_PID=`/bin/cat $LCK_FLE` echo "Another instance already running: $OTHER_PID" exit 1 fi echo $$ > "$LCK_FLE" for REPO in $REPOS ; do echo "Syncing $REPO" echo /usr/bin/rsync $RSYNC_OPTS ${SOURCE}/${REPO} ${DEST} done # Cleanup /bin/rm -f "$LCK_FLE" exit 0
Serving
Client Configuration
- Add the proper Server= variable in /etc/pacman.d/mirrorlist
- For physical media (such as flash drive) the following can be used: Server = file:///mnt/media/repo