Mirror scripts¶
To create a mirror people can rely on, you need to have all the files, and you need them at the right moment. “File not found” errors cause a lot of issues and annoyances for users. This page provides you with scripts to sync from other mirrors and prevent 404’s.
Mirrors series
- Mirrors overview:
- Reference:
Mirror scripts (this page)
ubumirror¶
You can use the scripts from the
ubumirror
project to keep your mirror in sync, or use the scripts provided below. Please
file any bug reports you find
against it.
Archive mirrors¶
For Archive mirrors, it is very important not to delete packages before the
Packages.gz
files (which hold information about the packages available) are
updated.
Therefore, you need a “two-stage sync”. This means that you download new
packages first, and the new Packages.gz
after that. After you’ve downloaded
the Packages.gz
files, it’s safe to delete old packages.
#/bin/dash
fatal() {
echo "$1"
exit 1
}
warn() {
echo "$1"
}
# Find a source mirror near you which supports rsync on
# https://launchpad.net/ubuntu/+archivemirrors
# rsync://<iso-country-code>.rsync.archive.ubuntu.com/ubuntu should always work
RSYNCSOURCE=rsync://archive.ubuntu.mirror.isp.com/ubuntu
# Define where you want the mirror-data to be on your mirror
BASEDIR=/var/www/ubuntuarchive/
if [ ! -d ${BASEDIR} ]; then
warn "${BASEDIR} does not exist yet, trying to create it..."
mkdir -p ${BASEDIR} || fatal "Creation of ${BASEDIR} failed."
fi
rsync --recursive --times --links --safe-links --hard-links \
--stats \
--exclude "Packages*" --exclude "Sources*" \
--exclude "Release*" --exclude "InRelease" \
${RSYNCSOURCE} ${BASEDIR} || fatal "First stage of sync failed."
rsync --recursive --times --links --safe-links --hard-links \
--stats --delete --delete-after \
${RSYNCSOURCE} ${BASEDIR} || fatal "Second stage of sync failed."
date -u > ${BASEDIR}/project/trace/$(hostname -f)
Releases mirrors¶
For Releases mirrors, things are a little less complicated. There are no
dependencies between files, so you can just rsync
.
#/bin/dash
fatal() {
echo "$1"
exit 1
}
warn() {
echo "$1"
}
# Find a source mirror near you which supports rsync on
# https://launchpad.net/ubuntu/+cdmirrors
# rsync://<iso-country-code>.rsync.releases.ubuntu.com/releases should always work
RSYNCSOURCE=rsync://releases.ubuntu.mirror.isp.com/releases
# Define where you want the mirror-data to be on your mirror
BASEDIR=/var/www/ubuntureleases/
if [ ! -d ${BASEDIR} ]; then
warn "${BASEDIR} does not exist yet, trying to create it..."
mkdir -p ${BASEDIR} || fatal "Creation of ${BASEDIR} failed."
fi
rsync --verbose --recursive --times --links --safe-links --hard-links \
--stats --delete-after \
${RSYNCSOURCE} ${BASEDIR} || fatal "Failed to rsync from ${RSYNCSOURCE}."
date -u > ${BASEDIR}/.trace/$(hostname -f)