Ein eigener Debian-Spiegel (englisch „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 sofort 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 der Software auf 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 Spiegel unumgänglich.
Aufgrund des bereits großen Umfangs des Debian-Archivs ist es nicht sinnvoll, eine komplette Kopie aller Dateien lokal vorzuhalten. Meist ist es ausreichend, lediglich die Binaries für die verwendete Architektur (beispielsweise i386) vorzuhalten. Die Sourcen der Pakete werden nur in seltenen Fällen benötigt und können bei Bedarf gezielt besorgt werden. Informationen zum Spiegeln eines Debian-Servers finden Sie auch unter http://www.debian.org/mirror/ftpmirror.
Das Programm debmirror bietet eine sehr einfache Möglichkeit, einen Debian-FTP-Server - bei Bedarf auch nur in Teilen - zu spiegeln. Das Programm steht als offizielles Debian-Paket zur Verfügung.
debmirror benutzt keine Konfigurationsdatei; alle benötigten Parameter können auf der Kommandozeile angegeben werden. Sehr vorteilhaft ist bei diesem Skript, dass 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 usw.) 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-Spiegel 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.debian.org“ (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 Festplatte wird nicht angetastet (dazu gleich mehr). Weiterhin wird der 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 Internetverbindung steht Ihnen nach einiger Zeit ein lokaler Debian-Spiegel zur Verfügung.
Im Folgenden wird das Erstellen eines partiellen Spiegels beschrieben. Bei einem partiellen Spiegel wird nur ein ausgewählter Teil von Paketen im lokalen Spiegel abgelegt. Wolfgang Borgert stellt auf seinen Webseiten einige Skripte vor, mit denen ein solcher Spiegel erzeugt werden kann. Dabei wird auf die Programme apt, apt-move und debootstrap (siehe apt-move und debootstrap ) zurückgegriffen. Die Abhängigkeiten aller in der Liste angegebenen Pakete werden dabei aufgelöst, so dass ein vollständig funktionsfähiger Spiegel entsteht. Durch die Verwendung von debootstrap wird das zugrunde liegende Basissystem nicht verändert, alle Dateien werden in einer chroot-Umgebung abgelegt.
In den folgenden Beispielen wird die chroot-Umgebung unter /var/local/chroot/ erzeugt, innerhalb dieses Verzeichnisses wird der Spiegel mit den Debian-Paketen im Verzeichnis /var/local/mirrors/ angelegt. Der Spiegel wird über einen symbolischen Link aus der chroot-Umgebung heraus leichter zugänglich gemacht:
ln -s /var/local/chroot/var/local/mirrors/ /var/local/mirrors/
Das folgende Skript dient zum Erzeugen des Spiegels. Es sollte als Datei create-mirror abgelegt werden.
#!/bin/sh # generate a partial Debian mirror with debootstrap and apt-move # 2004-02, W. Borgert <debacle@debian.org> # Released under the terms of the GNU General Public License # the root directory of the mirror system CHROOT=/var/local/chroot # the mirror directory inside of the chroot MIRRORDIR=/var/local/mirrors/debian # the Debian archive next to you DEBIAN=http://ftp.de.debian.org/debian #### OUT=adduser,aptitude,apt-utils,at,base-config,bsdmainutils,\ console-common,console-data,console-tools,cpio,cron,debconf-i18n,\ dhcp-client,ed,exim4,exim4-base,exim4-config,exim4-daemon-light,\ fdutils,gettext-base,groff-base,ifupdown,info,ipchains,iptables,\ iputils-ping,klogd,libconsole,libgcrypt1,libgcrypt7,libgdbm3,\ libgnutls7,libgpg-error0,libident,liblocale-gettext-perl,\ liblockfile1,liblzo1,libnewt0.51,libopencdk8,libpcap0.7,libpcre3,\ libpopt0,libsigc++-1.2-5c102,libssl0.9.7,libtasn1-0,\ libtext-charwidth-perl,libtext-iconv-perl,libtext-wrapi18n-perl,\ libwrap0,lilo,logrotate,mailx,makedev,man-db,manpages,mbr,modconf,\ modutils,nano,netbase,netkit-inetd,net-tools,nvi,pciutils,ppp,\ pppconfig,pppoe,pppoeconf,procps,psmisc,setserial,slang1,sysklogd,\ syslinux,sysvinit,tasksel,tcpd,telnet,wget,whiptail IN=apt-move,bc,bzip2,dash,debconf-english,libbz2-1.0,libpam0g,\ libreadline4 #### apt-get install debootstrap mkdir $CHROOT debootstrap --exclude="$OUT" --include="$IN" sarge $CHROOT $DEBIAN
Im Wesentlichen wird hier debootstrap eingesetzt, um ein minimales Debian-System zu erzeugen. Dabei werden einige wenige Pakete hinzugefügt (über die Variable IN) und eine ganze Reihe Pakete nicht installiert, die normalerweise von debootstrap verwendet werden (Variable OUT). Dies führt zu einem Basissystem von lediglich circa 80 Mbyte Größe (bei Verwendung des Debian-Release „Sarge“).
Dieses Skript wird nur einmalig - bei der ersten Initialisierung des Spiegels - benötigt.
Zunächst ist die Datei /var/local/chroot/etc/apt/sources.list anzupassen. Als erster Eintrag muss das lokale Verzeichnis erscheinen, weitere Einträge verweisen auf externe Debian-Spiegel.
deb file:/var/local/mirrors/debian testing main deb http://ftp.de.debian.org/pub/debian/ testing main
Nun sind noch einige Variablen in der Konfigurationsdatei von apt-move (/etc/apt-move.conf) anzupassen, insbesondere APTSITES, LOCALDIR, DIST, PKGCOMP und CONTENTS. Hier sehen Sie ein Beispiel:
APTSITES="ftp.de.debian.org" LOCALDIR=/var/local/mirrors/debian DIST=testing PKGCOMP="none gzip" CONTENTS=yes
Nun können zunächst die Paketinformationen für den Spiegel aktualisiert werden; danach werden die (in der chroot-Umgebung) installierten Pakete geholt.
chroot /var/local/chroot apt-get update chroot /var/local/chroot apt-move get
Leider reicht eine Verzeichnisstruktur mit Debian-Paketen nicht aus. Wir benötigen noch Packages- und Release-Dateien. Um Letztere zu erzeugen, dient folgendes Skript, das als make-release im Verzeichnis /var/local/chroot/root/ gespeichert wird.
#!/bin/sh # generate Release files for a Debian mirror # 2003-10, W. Borgert <debacle@debian.org> # Released under the terms of the GNU General Public License ORIGIN="Debian" LABEL="Debian" SUITE="testing" CODENAME="sarge" DESC="Debian Testing distribution - Not Released" UNPACK=0 ARCHIVE=. # long options not yet implemented args=`getopt 'a:c:d:l:o:s:u' $*` for o do case "$o" in -a | --arch*) ARCHIVE="$2"; shift; shift;; -c | --code*) CODENAME="$2"; shift; shift;; -d | --desc*) DESC="$2"; shift; shift;; -l | --label) LABEL="$2"; shift; shift;; -o | --orig*) ORIGIN="$2"; shift; shift;; -s | --suite) SUITE="$2"; shift; shift;; -u | --unpa*) UNPACK=1; shift;; --) shift; break;; esac done #### cd $ARCHIVE DATE=`date -u` if [ $UNPACK -eq 1 ]; then PACKAGGZ=`find . -name Packages.gz -o -name Sources.gz` for p in $PACKAGGZ; do gunzip -c $p > `dirname $p`/`basename $p .gz` done fi PACKAGES=`find . -name Packages -o -name Packages.gz -o \ -name Sources -o -name Sources.gz` DIRS=`for p in $PACKAGES; do dirname $p; done|sort -u` COMPS=`for d in $DIRS; do echo $d | \ sed 's,[^A-Za-z0-9-]*\([A-Za-z0-9-]*\)/.*,\1,'; done|sort -u` ARCHS=`for d in $DIRS; do echo $d | \ sed 's,.*binary-\([A-Za-z0-9-]*\),\1,'; done|sort -u` for d in $DIRS; do cd $d ARCH=`echo $d | sed 's,.*binary-\([A-Za-z0-9-]*\),\1,'` COMP=`echo $d | \ sed 's,[^A-Za-z0-9-]*\([A-Za-z0-9-]*\)/.*,\1,'` echo "Archive: $SUITE Component: $COMP Origin: $ORIGIN Label: $LABEL Architecture: $ARCH" > Release cd - done rm -f Release MD5FILES=`find . -name Packages -o -name Packages.gz -o \ -name Sources -o -name Sources.gz -o -name Release \ | sed 's,^[^/]*/,,'` echo "Origin: $ORIGIN Label: $LABEL Suite: $SUITE Codename: $CODENAME Date: $DATE Architectures:" `echo $ARCHS`" Components:" `echo $COMPS`" Description: $DESC MD5Sum:" > Release for m in $MD5FILES; do echo -n " " >> Release SIZE=`wc -c $m | sed 's/ *\([0-9]*\).*/\1/'` SUM=`md5sum $m | sed 's/^ *\([A-Fa-f0-9]*\) .*/\1/'` printf "%s %16d %s\n" $SUM $SIZE $m >> Release done echo "SHA1:" >> Release for m in $MD5FILES; do echo -n " " >> Release SIZE=`wc -c $m | sed 's/ *\([0-9]*\).*/\1/'` SUM=`sha1sum $m | sed 's/^ *\([A-Fa-f0-9]*\) .*/\1/'` printf "%s %16d %s\n" $SUM $SIZE $m >> Release done
Die Information, welche Pakete in dem Spiegel vorgehalten werden sollen, findet sich in der Datei /var/local/chroot/root/packages. Ergänzungen können hier jederzeit vorgenommen werden. Die eigentliche Verwaltung des Spiegels übernimmt folgendes Skript:
#!/bin/sh # update a partial Debian mirror with apt-move # 2004-02, W. Borgert <debacle@debian.org> # Released under the terms of the GNU General Public License # the root directory of the mirror system CHROOT=/var/local/chroot # the mirror directory inside of the chroot MIRRORDIR=/var/local/mirrors/debian # master packages file inside of the chroot MASTER=/root/packages #### MODE=$1; shift case "$MODE" in clean) chroot $CHROOT apt-move --force delete exit 0 ;; install) PACKAGES="$*" if [ -f $CHROOT/$MASTER ]; then OLDPACKAGES=`cat $CHROOT/$MASTER` else OLDPACKAGES= fi for p in $OLDPACKAGES $PACKAGES; do echo $p; done | \ sort -u > $CHROOT/$MASTER ;; upgrade) if [ -f $CHROOT/$MASTER ]; then PACKAGES=`cat $CHROOT/$MASTER` else exit 0 fi ;; *) echo "Usage:" echo "$0 clean" echo "$0 install <packages>" echo "$0 upgrade" exit -1 ;; esac chroot $CHROOT apt-get update chroot $CHROOT apt-get install \ --option 'DPkg::Options::=--dry-run' --yes $PACKAGES chroot $CHROOT apt-move get chroot $CHROOT apt-move move chroot $CHROOT apt-move packages chroot $CHROOT /root/make-release -a $MIRRORDIR chroot $CHROOT apt-get autoclean
Das Hinzufügen weiterer Pakete ist recht einfach:
./update-mirror install dia ethereal glade-2
Dabei werden die Abhängigkeiten aller Pakete aufgelöst, und alle benötigten Pakete werden dem Spiegel hinzugefügt.
Um einen Spiegel auch für andere Hardware-Architekturen bereitzustellen, ist in der Datei /var/local/chroot/etc/apt/apt.conf die Architektur hinzuzufügen:
APT::Architecture "arm";
Weiterhin ist dies auch in /var/local/chroot/etc/apt-move.conf bekannt zu machen:
ARCHS="arm i386"
debian-multimirror ist ein in Perl geschriebenes Programm, das in der Lage ist, auch einen partiellen Spiegel eines oder mehrerer Debian-Server anzulegen. Die Basis für die Paketauswahl bilden dabei eine oder mehrere Listen von Paketen. Auch ist es möglich, ganze Bereiche von Paketen (beispielsweise games oder kde) auszublenden. debian-multimirror ist noch nicht als Paket in der Debian-Distribution enthalten, die Software ist unter http://pedro.larroy.com/debian/debian-multimirror/ zu finden.
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 Spiegel eine Datei angelegt werden. Das Programm selbst 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 sehen Sie 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%
© 1999-2005 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - KeineBearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/).