Debian-Mirror aufsetzen

Ein Debian-Mirror ist eine komplette Spiegelung sämtlicher Dateien von offiziellen Debian-Mirrors. Soetwas ist sinnvoll, wenn man zB eine sehr kleine Internetverbindung hat und mehrere PCs auf Debian-Dateien zum installieren und updaten zugreifen müssen. Da diese Mirrors aber zT über 100 GB groß werden können (je nachdem, was man alles spiegeln möchte) ist es für den einfachen Privatgebrauch meist sinnvoller, einen Debian-Proxy zu installieren, zum Beispiel „approx“.  Wer trotzdem der Meinung ist, er benötigt das gesamte Repository, hier eine Anleitung zum Tool „debmirror“. Analog zu Debian funktioniert das Programm auch mit sämtlichen Derivaten wie Ubuntu.

Installation

# apt-get install debmirror debian-keyring patch

Danach legen wir einen User und Gruppe „mirror“ an, unter dessen Rechten wir „debmirror“ ausführen. Desweiteren legen wir den Mirror-Ordner direkt in das root-Verzeichnis als /mirror

# groupadd mirror
# useradd -g  mirror -d /mirror -c "Debian Mirror" mirror

Im folgenden werden die benötigten Verzeichnisse und Rechte angelegt:

# mkdir  -p /mirror/debian
# chown -R mirror:mirror /mirror

Damit unser Archiv auch mit den offiziellen gpg-keys signiert ist und wir somit als authentische Quelle gelten haben wir während der Installation „debian-keyring“ runtergeladen. Diese liegen standartmäßig im Verzeichnis /usr/share/keyrings/debian-archive-keyring.gpg und müssen nun noch dem User „mirror“ hinzugefügt werden (für Ubuntu ersetzt man einfach das Wort debain):

cat /usr/share/keyrings/debian-archive-keyring.gpg >> /mirror/.gnupg/trustedkeys.gpg

Ist noch keine key-Datei vorhanden, funktioniert folgende Methode ebenso:

su mirror -c "gpg --no-default-keyring --keyring trustedkeys.gpg --import /usr/share/keyrings/debian-archive-keyring.gpg"

Ausführen von debmirror

Debmirror funktioniert ohne config-Datei. Sämtliche Werte müssen als Parameter übergeben werden. Führt man „debmirror“ aus, so werden alle möglichen Parameter angezeigt, der einzig zwingend nötige ist der Dateipfad. Um den Vorgang zu vereinfachen, erstelle ich einfach ein eigenes Script „mirror“ unter dem Pfad /usr/local/bin/ mit

 touch /usr/local/bin/mirror

Im folgenden mal der Beispielinhalt einer Config:

#!/bin/bash

MIRRORUSER=mirror
MIRRORUID=`cat /etc/passwd | grep ${MIRRORUSER}: | cut -d : -f 3`
if [ ! $UID -eq $MIRRORUID ]; then
echo "Warnung: Dieses Script wird nicht vom user $MIRRORUSER ausgefuerhrt"
echo "Warnung: Bitte per \"su $MIRRORUSER -c mirror\" starten"
exit 1
fi

logger -t mirror[$$] Updating Debian Mirror
debmirror /mirror/debian --progress --nosource --host=ftp.debian.org/  \
--root=/debian --dist=squeeze,wheezy --section=main,contrib,non-free \
--method=http --arch=i386,amd64 --passive  --getcontents 
logger -t mirror[$$] Finished Updating Debian Mirror

Im oberen Teil wird überprüft, dass das Script nur als user „mirror“ ausgeführt wird. Der Befehl „logger -t“ schreibt Nachrichten in den Syslog.

Einige wichtige Sachen kurz erklärt:

  • –progress – zeigt den Fortschritt an
  • –no-source – lädt die Source-Dateien nicht mit runter (was ratsam ist, da sie nur selten benötigt werden)
  • –host – hier muss der Mirror eingetragen werden, von dem das Archiv gezogen wird. um hier den schnellsten Server zu finden empfielt sich unter debian das tool „netselect-apt“
  • –root – der Pfad für das jeweilige Linux (taucht als Unterordner in /mirror auf)
  • –dist – Auflistung der Versionen, die gespeichert werden sollen (squeeze und wheezy sind Debain 6 und 7), ältere Versionen (Sarge,Etch,Lenny) spielen quasi keine Rolle mehr
  • –section – Unterteilung der Software in verschiedene Sektionen wie main (offizielle Debian-Pakete), contrib (Pakete die frei zur Verfügung stehen aber abhängig von nicht freien sind), non-free (Software mit Lizenzbeschränkungen)
  • –method – legt fest ob via http, ftp oder rsync kopiert werden soll
  • –arch – ein wichtiger Punkt der festlegt, ob man 32bit-Systeme (i386) oder 64bit-Systeme (amd64) hosten möchte. Gerade hier kann der Speicherbedarf enorm steigen wenn man mehrere Versionen wählt. weitere meist unwichtige Architekturen sind alpha arm armel hppa hurd-i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
  • –passive – im passiven Modus runterladen (notwendig bei stateless Firewall)
  • –getcontents – lädt die contents.<arch>.gz Dateien runter
  • –diff – kann bei älteren Versionen auch pdiff heissen

Um die Datei noch für den user „mirror“ ausführbar zu machen, müssen wir ihm noch die Rechte dafür geben:

# chmod 700 /usr/local/bin/mirror
# chown mirror:mirror /usr/local/bin/mirror

Danach ist alles fertig und kann gestartet werden. Je Nach Internetverbindung und Datenmenge kann der Vorgang schnell mehrere Stunden bishin zu einigen Tagen dauern, wenn es sich um einen heimischen DSL-Anschluss handelt.

# su mirror -c mirror

Den lokalen mirror können wir anschließend mit diesen Einträgen in der /etc/apt/sources.list benutzen (wahlweise squeeze oder wheezy)

deb file:/mirror/debian squeeze main non-free contrib

Cron-Eintrag

Soll Der Mirror regelmäßig automatisch geupdatet werden, empfiehlt es sich, einen Cron-Eintrag zu machen und das script so regelmäßig (im Beispiel Täglich um 5 Uhr) auszuführen:

55   5   *   *    *  /usr/local/bin/mirror >/dev/null 2>&1

HTTP-Zugriff

Um einen Mirror für anderere Rechner anzubieten, ist es vorteilhaft dies über http:// zu machen Nutzt man Apache2 als Webserver fügt man dazu einfach in /etc/apache2/httpd.conf folgendes ein

<Directory /mirror>
 Options Indexes FollowSymLinks
 AllowOverride None
 Order allow,deny
 allow from all 
</Directory> 
Alias /debian /mirror/debian

Damit wir unseren Debian-Mirror nun via http nutzen können, müssen wir auf dem client die Datei /etc/apt/sources.list bearbeiten

deb http://(rechnername)/debian/ wheezy main non-free contrib
deb http://(rechnername)/debian/ squeeze main non-free contrib

Proftp

Für die Verbindung via ftp sei hier das Tool Proftpd genannt. Für einen Anonymous Zugang ist folgendes in die /etc/proftpd.conf eintzutragen

  
<Anonymous ~mirror> 
 User ftp
 Group nogroup
 UserAlias anonymous ftp
 RequireValidShell off
 # Limit the maximum number of anonymous logins
 MaxClients 20
 DisplayLogin welcome.msg
 DisplayFirstChdir .message
 # Limit WRITE everywhere in the anonymous chroot
 <Directory *>
  <Limit WRITE>
    DenyAll
  </Limit>
 </Directory>
</Anonymous>

Entsprechend dazu muss die /etc/apt/sources.list wie folgt angepasst werden:

deb ftp://(rechnername)/debian/ sarge main non-free contrib
deb ftp://(rechnername)/debian/ etch main non-free contrib
deb ftp://(rechnername)/debian/ sid main non-free contrib

Das wars schon, viel Spass beim Nachbauen. Bei fragen, schreibt mir 😉 Als Vorlage für dieses Tutorial diente dieses tut von Andreas Kraus

Stay Tuned – Støertebeker

Veröffentlicht unter Linux, Tutorials

Schreibe einen Kommentar