Kapitel 6. Debian-Pakete im Detail
Zurück | 6.11 Debian-Spiegel | Weiter

## 6.11 Debian-Spiegel

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.

### 6.11.1 debmirror

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

### debmirror auf Sarge Systemen

Mit der 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.

### 6.11.2 Partieller Spiegel

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 unddebootstrap ) 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/

#### 6.11.2.1 Erzeugen des Spiegels

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

#### 6.11.2.2 Verwaltung des Spiegels

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

##### 6.11.2.2.1 Hinzufügen von Paketen

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.

##### 6.11.2.2.2 Aktualisieren des Spiegels

Wenn der Spiegel aktualisiert werden soll, so geschieht dies mit dem Kommando:

    ./update-mirror upgrade

#### 6.11.2.3 Spiegel für verschiedene Architekturen

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"

### 6.11.3 `debian-multimirror`

`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.

### 6.11.4 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 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%

Zurück | Nach oben | Weiter
6.10 Debian Package Tags (debtags) | Zum Anfang | 6.12 CD- und DVD-Images herunterladen

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).