Scripts

Differences between revisions 2 and 13 (spanning 11 versions)
Revision 2 as of 2009-09-09 13:16:28
Size: 1455
Editor: gw
Comment:
Revision 13 as of 2010-04-28 19:35:44
Size: 3152
Editor: ua-178
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
||<tablestyle="float:right; width:30%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Contents'''||
||<<TableOfContents(2)>>||
Line 2: Line 4:

= ubumirror =

One can use the scripts from the '''[[https://code.launchpad.net/~ubumirror-devs/ubumirror/trunk|ubumirror]]''' project to keep their mirror in sync, or use the scripts provided below.

This project has been [[https://launchpad.net/ubuntu/+source/ubumirror|packaged since Lucid]] onwards, please file any bug reports you find [[https://bugs.launchpad.net/ubuntu/+source/ubumirror|against it]].
Line 9: Line 17:
 #/bin/dash {{{
#/bin/dash
Line 11: Line 20:
 fatal() {
  echo "$1"
   exit 1
 }
fatal() {
  echo "$1"
  exit 1
}
Line 16: Line 25:
 # Find a source mirror near you which supports rsync on
 # https://launchpad.net/ubuntu/+archivemirrors
 # rsync://archive.ubuntu.com/ubuntu should always work
 RSYNCSOURCE=rsync://archive.ubuntu.com/ubuntu
warn() {
  echo "$1"
}
Line 21: Line 29:
 # Define where you want the mirror-data to be on your mirror
 BASEDIR=/var/www/ubuntuarchive/
# 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://rsync.archive.ubuntu.com/ubuntu
Line 24: Line 34:
 rsync --recursive --times --links --hard-links \
   --stats \
   --exclude "Packages*" --exclude "Sources*" \
   --exclude "Release*" \
   ${RSYNCSOURCE} ${BASEDIR} || fatal "First stage of sync failed"
# Define where you want the mirror-data to be on your mirror
BASEDIR=/var/www/ubuntuarchive/
Line 30: Line 37:
 rsync --recursive --times --links --hard-links \
   --stats --delete --delete-after \
   ${RSYNCSOURCE} ${BASEDIR} || fatal "Second stage of sync failed"
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 --hard-links \
  --stats \
  --exclude "Packages*" --exclude "Sources*" \
  --exclude "Release*" \
  ${RSYNCSOURCE} ${BASEDIR} || fatal "First stage of sync failed."

rsync --recursive --times --links --hard-links \
  --stats --delete --delete-after \
  ${RSYNCSOURCE} ${BASEDIR} || fatal "Second stage of sync failed."
}}}
Line 35: Line 54:

For Releases mirrors, stuff is a little less complicated. There are no dependencies between files, so you can just rsync away.

== The script ==

{{{
#/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://rsync.releases.ubuntu.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 --hard-links \
  --stats--delete-after \
  ${RSYNCSOURCE} ${BASEDIR} || fatal "Failed to rsync from ${RSYNCSOURCE}."

}}}

To be able 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.

ubumirror

One can use the scripts from the ubumirror project to keep their mirror in sync, or use the scripts provided below.

This project has been packaged since Lucid onwards, 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. Therefor, you need a 'Two stage sync'. This means that you download new packages first, and new Packages.gz after that. After you've downloaded the Packages.gz files, it's safe to delete old packages.

The script

#/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://rsync.archive.ubuntu.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 --hard-links \
  --stats \
  --exclude "Packages*" --exclude "Sources*" \
  --exclude "Release*" \
  ${RSYNCSOURCE} ${BASEDIR} || fatal "First stage of sync failed."

rsync --recursive --times --links --hard-links \
  --stats --delete --delete-after \
  ${RSYNCSOURCE} ${BASEDIR} || fatal "Second stage of sync failed."

Releases mirrors

For Releases mirrors, stuff is a little less complicated. There are no dependencies between files, so you can just rsync away.

The script

#/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://rsync.releases.ubuntu.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 --hard-links \
  --stats--delete-after \
  ${RSYNCSOURCE} ${BASEDIR} || fatal "Failed to rsync from ${RSYNCSOURCE}."

Mirrors/Scripts (last edited 2025-09-19 14:32:48 by sally-makin)