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
Package-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
debmirror auf Sarge-Systemen | |
---|---|
Mit dem Release von „Sarge“ können die Optionen für„non-US“ entfallen, die Pakete sind in den „main“-Zweig integriert worden. |
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 aufwändige
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 - 2024 | Das Debian GNU/Linux Anwenderhandbuch von Frank Ronneburg steht unter einer Creative Commons Namensnennung-Nicht Kommerziell-Keine Bearbeitung 3.0 Deutschland Lizenz.