Debian Mirror

Ein eigener Debian Mirror, also eine lokale Kopie aller benötigten Dateien vom Debian-FTP Server kann für verschiedene Zwecke sinnvoll sein. Zunächst einmal hat man sofortigen Zugriff auf alle Dateien und kann diese installieren ohne auf den Download der Dateien warten zu müssen. Natürlich ist auch die Aktualität der Software um einiges besser als bei der Installation von CD-ROMs. Für die Installation von mehreren Rechnern ist eine solche lokale Kopie ebenfalls die erste Wahl. Wenn, wie im nächsten Abschnitt beschrieben, eigene Debian CDs erstellt werden sollen, ist ein Mirror unumgänglich.

Aufgrund des bereits großen Umfangs des Debian-Archives ist es nicht sinnvoll eine komplette Kopie aller Dateien lokal vorzuhalten. Meist ist es ausreichend lediglich die Binarys für die verwendete Architetur (beispielsweise i386) vorzuhalten. Die Sourcen der Pakete werden nur in seltenen Fällen benötigt und können gezielt bei Bedarf besorgt werden. Informationen zum spiegeln eines Debian Servers finden sich auch unter http://www.debian.org/mirror/ftpmirror.

absurd_debmirror

absurd_debmirror ist ein auf rsync basierendes Shellscript. Der Vorteil bei der Verwendung von rsync ist der schonendere Umgang mit den Systemresourcen. absurd_debmirror überträgt neben den eigentlichen Paketen auch die entsprechenden Bootdisketten der gewünschten Release, so das sich dieses Programm sehr gut eignet um einen lokalen Mirror zu erzeugen aus dem bootfähige CD-ROMs generiert werden können.

absurd_debmirror enthält eine umfangreiche Dokumentation innerhalb des Scriptes. Als Parameter beim Aufruf von absurd_debmirror ist zunächst das lokale Verzeichnis anzugeben in dem die Pakete abgelegt werden sollen (ohne Angabe des Verzeichnisses debian). Zweiter Parameter ist der Server von dem die Pakete geholt werden, gefolgt von dem Verzeichnis auf diesem Server. Als drittes folgt die gewünschte Release, mehrere Releases sind dabei durch Anführungszeichen zusammenzufassen. Gleiches gilt für die Bereiche sowie für die gewünschten Architekturen.

Ein Aufruf von absurd_debmirror kann demnach wie folgt aussehen:


absurd_debmirror /home/ftp ftp.debian.org debian "woody sid" "main contrib 
non-free non-US/main non-US/contrib non-US/non-free" "i386"

Natürlich ist es auch möglich den Non-US Bereich eines Servers zu spiegeln. Dies kann mit folgendem Aufruf geschehen:


/usr/local/bin/absurd_debmirror /home/ftp/debian non-us.debian.org 
debian-non-US "woody sid" "non-US/main non-US/contrib non-US/non-free" "i386"


absurd_debmirror wird nicht mehr weiterentwickelt, stattdessen kann das im folgenden beschriebene debmirror verwendet werden.

debmirror

Das Programm debmirror von Joey Hess bietet eine sehr einfach Möglichkeit einen Debian FTP Server, bei Bedarf auch nur in Teilen, zu spiegeln. Das Programm steht leider nicht als offizielles Debian Paket zur Verfügung, da es sich aber um ein Perl Script handelt ist dies keine große Katastrophe. Sie finden die aktuelle Version unter http://cvs.kitenet.net/joey-cvs/bin/Attic/debmirror. Alternativ kann auf das nicht-offizielle Paket unter http://www.openoffice.de/linux/debian/dists/woody/main/binary-i386/misc/ zurückgegriffen werden.

debmirror benutzt keine Konfigurationsdatei, alle benötigten Parameter können auf der Kommandozeile angegeben werden. Sehr vorteilhaft ist bei diesem Script das es speziell auf die Bedürfnisse von Debian angepasst wurde, so kann es beispielsweise mit Package-Pools problemlos umgehen. Das Packages-Pool Konzept wurde mit der Entwicklung von „woody“ eingeführt und erlaubt es verschiedene Releases (testing, stable, unstable...) auf Basis der Daten innerhalb des Verzeichnisses pool/ zu verwalten. Weiterhin werden die benötigten Dateien auf Basis der Package-Dateien ermittelt, somit ist auch hier immer ein einheitlicher Stand sichergestellt.

Die Verwendung von debmirror ist ziemlich simpel. Wenn das Programm ohne weitere Parameter aufgerufen wird, bekommen Sie eine Übersicht der möglichen Parameter:


sushi:~# ./debmirror 
mirrordir not specified
Usage: ./debmirror mirrordir [--debug] [--progress] [--source|--nosource]
          [--md5sums|--nomd5sums] [--passive] [--host=remotehost]
          [--user=remoteusername]
          [--root=directory] [--dist=foo[,bar,..] ...]
          [--section=foo[,bar,..] ...] [--arch=foo[,bar,..] ...]
          [--cleanup|--nocleanup] [--skippackages] [--adddir=directory]
	  [--ignore=regex] [--getcontents] [--exclude=regex] [--help]


Als einziger Parameter ist „mirrordir“ zwingend erforderlich. Dieser beschreibt das lokale Verzeichnis in dem der Debian Spiegel erzeugt werden soll. Wenn dieses Verzeichnis nicht vorhanden ist, so wird es erzeugt.

Folgendes Kommando erzeugt einen Debian Mirror für die Architektur „i386“ im Verzeichnis /home/ftp/debian/, es werden die Versionen „potato“, „woody“ und „sid“ mit den Bereichen „main“, „contrib“ und „non-free“ kopiert. Als Server dient „ftp.debianorg“ (hier sollte auf alle Fälle ein gut erreichbarer Server benutzt werden), es werden keine Sourcen übertragen und das Verzeichnis „debian-non-US“ auf der lokalen Platte wird nicht angetastet (dazu gleich mehr). Weiterhin wird Fortschritt laufend angezeigt.


debmirror -a i386 -s main -s contrib -s non-free \
 -h ftp.debian.org \
 -d woody -d potato -d sid \
 /home/ftp/debian \
 --nosource \
 --ignore=debian-non-US/ --progress

Da auf dem offiziellen Debian FTP Server die Pakete aus dem non-US Bereich fehlen, können diese Pakete mit einer zweiten Zeile auf den heimischen Rechner geholt werden:

debmirror -a i386 -h ftp.de.debian.org \
 -r /debian-non-US -s non-US/main,non-US/contrib,non-US/non-free \
 -d woody -d potato -d sid \
 /home/ftp/debian/debian-non-US --progress

Je nach Bandbreite Ihrer Internetanbindung steht Ihnen nach einiger Zeit ein lokaler Debian Mirror zur Verfügung.

debmirror-wrapper

debmirror-wrapper ist ein Script welches einige der Fehler in debmirror umschifft und einige Funktionen implementiert die nur in seltenen Fällen gebraucht werden. Beispielsweise werden auf einem durchschnittlichen Mirror keine Bootdisketten benötigt und diese werden auch von debmirror deshalb nicht berücksichtigt. Diese können aber mittels debmirror-wrapper übertragen werden, beispielsweise wenn diese zur Herstellung von eigenen Debian CD-ROMs benötigt werden.

Durch den Einsatz von debmirror-wrapper wird auch die Syntax beim Aufruf noch einfacher. Viele der benötigten Optionen können direkt im Script fest verankert werden, lange Kommandozeilen Optionen entfallen damit. debmirror-wrapper von Stephan A. Suerken ist auf seinen Webseiten zu finden.

mirror

mirror steht als Debian Paket zur Verfügung und wird seit vielen Jahren auch auf großen FTP Servern (beispielsweise an Universitäten) benutzt um Inhalte anderer FTP Server lokal zu speichern. Für eine lokale Kopie der Daten eines Debian FTP Servers wird neben dem eigentlichen Programm mirror vor allem viel Festplattenplatz benötigt. Da mirror als universelles Programm zum spiegeln von FTP Servern entwickelt wurde, kennt es natürlich keine Debian Besonderheiten wie Package-Pools. Um nicht unnötig Pakete zu kopieren ist leider eine etwas aufwendige Konfiguration nötig.

Die Konfigurationsdateien für das Programm mirror finden sich nach der Installation im Verzeichnis /etc/mirror/packages/. Hier kann für jeden gewünschten Mirror eine Datei angelegt werden. Das Program selber wird dann mit der Konfigurationsdatei als Parameter aufgerufen. Zusätzlich kann die Option -d (auch mehrfach) angegeben werden um mehr Informationen über den Vorgang zu bekommen.

Hier eine Konfigurationsdatei die die Architekturen i386 und powerpc vom Debian FTP Server kopiert.

package=Debian
	#
	comment=Mirror of parts of ftp.debian.org/pub/debian
	#	
	# specify remote host, directory and ls-lR file
	site=ftp.de.debian.org
	remote_dir=/debian
	store_remote_listing=/tmp/DEBIANREMOTE
	ls_lR_file=ls-lR.gz
	#
	# specify the local directory 
	local_dir=/home/ftp/debian
	#
	# inform this user about results
	mail_to=fr
	#
	# Compress these files.
	#compress_patt=\.*(C|c)ontents(-i386)?
	#compress_patt+|Packages(-Master)?|ls-lR|md5sums
	#compress_patt+|Maintainers|msdos-names
	#
	# Exclude these files or directories 
	exclude_patt=private/|project/|ls-lR|ls-lR.gz|ls-lR.patch.gz|dsync.list
	exclude_patt+|debian-(bugs|lists)/
        exclude_patt+|\.*(hurd-i386|hppa|mipsel|mips|ia64|s390|arm|m68k|alpha|
	hurd|mips|sparc).deb?
        exclude_patt+|\.*(hurd-i386|hppa|mipsel|mips|ia64|s390|arm|m68k|alpha|
	hurd|mips|sparc).udeb?
        exclude_patt+|\.*(hurd-i386|hppa|mipsel|mips|ia64|s390|arm|m68k|alpha|
	hurd|mips|sparc).gz?
        exclude_patt+|\.*(hurd-i386|hppa|mipsel|mips|ia64|s390|arm|m68k|alpha|
	hurd|mips|sparc).diff.gz?
        exclude_patt+|\.*(hurd-i386|hppa|mipsel|mips|ia64|s390|arm|m68k|alpha|
	hurd|mips|sparc).dsc?
        exclude_patt+|\.*(hurd-i386|hppa|mipsel|mips|ia64|s390|arm|m68k|alpha|
	hurd|mips|sparc).tar.gz?
        exclude_patt+|\.tar.gz?
        exclude_patt+|\.dsc?
        exclude_patt+|\.changes?
        exclude_patt+|\.diff.gz?
        exclude_patt+|bo/
        exclude_patt+|rex/
        exclude_patt+|slink/
        exclude_patt+|binary-arm/
        exclude_patt+|binary-m68k/
        exclude_patt+|binary-ia64/
        exclude_patt+|binary-hppa/
        exclude_patt+|binary-sparc/
        exclude_patt+|binary-mipsel/
        exclude_patt+|binary-mips/
        exclude_patt+|binary-alpha/
        exclude_patt+|disks-alpha/
        exclude_patt+|disks-m68k/
        exclude_patt+|disks-sparc/
        exclude_patt+|upgrade-alpha/
        exclude_patt+|upgrade-m68k/
        exclude_patt+|upgrade-sparc/
        exclude_patt+|binary-s390/
        exclude_patt+|binary-hurd-i386/
        exclude_patt+|md5sums
        exclude_patt+|md5sums.gz
        exclude_patt+|/potato/main/disks-arm/
        exclude_patt+|/potato/main/binary-arm/
        exclude_patt+|/potato/contrib/binary-arm/
        exclude_patt+|/potato/non-free/binary-arm/
        exclude_patt+|/potato/main/binary-sparc/
        exclude_patt+|/potato/contrib/binary-sparc/
        exclude_patt+|/potato/non-free/binary-sparc/
        exclude_patt+|woody/non-free/binary-sparc/
        exclude_patt+|woody/non-free/binary-alpha/
        exclude_patt+|woody/main/binary-sparc/
        exclude_patt+|woody/main/binary-alpha/
        exclude_patt+|woody/contrib/binary-sparc/
        exclude_patt+|woody/contrib/binary-alpha/
        exclude_patt+|woody/main/binary-hurd/
        exclude_patt+|woody/main/binary-hurd-i386/
        exclude_patt+|woody/main/binary-arm/
        exclude_patt+|woody/main/binary-mips/
        exclude_patt+|woody/main/binary-mipsel/
        exclude_patt+|binary-hppa/
        exclude_patt+|binary-sh/
        exclude_patt+|woody/main/binary-sparc/
        exclude_patt+|woody/main/disks-sparc/
        exclude_patt+|woody/main/binary-alpha/
        exclude_patt+|woody/Contents-arm.gz
        exclude_patt+|woody/Contents-hurd-i386.gz
        exclude_patt+|woody/Contents-alpha.gz
        exclude_patt+|woody/Contents-sparc.gz
        exclude_patt+|woody/Contents-hppa.gz
        exclude_patt+|woody/Contents-sh.gz
        exclude_patt+|woody/Contents-mips.gz
        exclude_patt+|woody/Contents-mipsel.gz
	#
	exclude_patt+|\.notar
	#
	# Don't delete what is mirrored by the other mirror package below
	#
        # delete_excl=(local|debian-non-US|non-US|project)(/|$)
	# Do not delete if more than 20% of all files would vanish
	max_delete_files=20%