Debian Pakete lokal spiegeln

Linux Debian Pakete lokal spiegeln

Ein lokaler "Paketserver" hat schon so seine Vorteile: Der Heimanwender spart sich die Suche nach den CDs oder der DVD und in einer Firma kann mit einem zentralen Server für Debian-Pakete verhindert werden, dass jedes Paket etliche male aus dem Netz geladen wird. Zudem ist in der Infrastruktur der Firma dann der Weg jedes Paketes vom Debian Server zum Zielrechner bestimmbar und auf dem Paketserver können diverse Tests durchgeführt werden, um beispielsweise festzustellen, ob die Pakete auch wirklich von den Debian-Leuten kommen. Wer einmal einen solchen lokalen Paketserver hat, der wird sich auch über wesentlich schnellere Installationen via lokalem Netzwerk erfreuen können. Ach ja: Bevor du irgend etwas machst, stelle erstmal sicher, dass du tatsächlich die mindestens benötigten 5 Gigabyte Platz auf deiner Festplatte hast. Etwas mehr ist auch nicht schlecht. ;-) Die Anzahl der Debian-Pakete wird ja auch nicht kleiner. In diesem Artikel werden zwei Programme vorgestellt, die auf unterschiedliche Weise an die Sache herangehen. Ich verwende im Moment apt-proxy und habe mal apt-move verwendet. Bei apt-move benötigt man zusätzlich noch einen ftp Server wie proftp (lässt sich aber recht einfach installieren) wenn man die Pakete anderen Rechnern anbieten möchte. Der wesentliche Vorteil von apt-proxy ist seine eingebaute "Intelligenz". Es werden nur Pakete herunter geladen, die wirklich benötigt werden und auch alte Pakete unter festzulegenden Bedingungen automatisch gelöscht, sofern gewünscht. Apt-move hingegen eignet sich besser für Heimanwender, die nur einen Rechner mit Paketen versorgen. Dabei kann man sich auch den FTP-Server sparen.

Apt-Move: Installation und Konfiguration

In diesem Abschnitt geht es ausschließlich um den Einsatz von "apt-move", welches für Debian woody erhältlich ist. Dieses Programm kann wie gewohnt als root mit

apt-get install apt-move

installiert werden. Als erstes sollte man sich nach der Installation die Datei "/etc/apt-move.conf" ansehen. Die Datei ist gut kommentiert, so dass die notwendigen Änderungen nicht sonderlich schwer fallen, sofern man die englischen Kommentare versteht. Für alle anderen Menschen stelle ich hier mal meine eigene angepasste Version dieser Datei zur Verfügung:

#  Configuration file for the apt-move script.
#
#  You should modify the following configuration to suit your system.
#  See the apt-move(8) manpage for information about these settings.
#
#  The defaults for this file are simply the settings I currently use.

# Configuration for apt-move script --------------------------------------

# The sites in ``/etc/apt/sources.list'' that you wish to mirror.
APTSITES="ftp2.de.debian.org security.debian.org"

# The architectures that your site contain, separated with spaces.
ARCHS="i386"

# The absolute path to your debian directory (top of your local mirror).
# This MUST appear as the first entry of your sources.list if you use
# sync or mirror.
LOCALDIR=/mirrors/debian

# The distribution you want to mirror (see the apt-move(8) manpage for
# details) 
DIST=woody

# The package types you want to mirror. 
# Possible values are: binary, source, and both (use only one).
PKGTYPE=binary

# The full (absolute) path to your local cache of package files. The default
# will work for the apt-get packages, unless you've reconfigured apt.
FILECACHE=/var/cache/apt/archives

# The full (absolute) path to your local cache of Packages files.  The
# default will work for the apt-get Packages, unless you've reconfigured apt.
LISTSTATE=/var/lib/apt/lists

# Do you want apt-move to delete obsolete files from your mirror? (yes/no)
DELETE=no

# Maximum percentage of files to delete during a normal run.
MAXDELETE=20

# Only move packages if its version matches "exactly" with the master files.
# (yes/no)
STRICTMOVE=no

# End Configuration ------------------------------------------------------

Wichtig ist eigentlich nur, die Einträge "ARCHS", "LOCALDIR" und "DIST" anzupassen. Dabei legt ARCHS fest, für welche Rechnerarchitekturen man die Debian-Pakete haben will. Da man in der Regel an einem PC sitzen wird, der einen Intel-ähnlichen Prozessor verwendet, ist hier i386 die richtige Wahl. LOCALDIR gibt an, wo im Verzeichnisbaum die Pakete abgelegt werden sollen. Hier sollte man darauf achten, dass dieses Verzeichnis auch tatsächlich existiert. Mit DIST wählt man nun den Namen der gewünschten Distribution aus. Ich habe hier "woody" genommen, weil ich doch ganz gern mit einem stabilen System arbeite. Früher oder später wird man dann noch den Eintrag "DELETE" auf "yes" setzen, so dass veraltete Pakete nicht unnötig Platz verschwenden.

Um die lokal vorgehaltenen Pakete zur Installation verwenden zu können, muss noch am Anfang der Datei "/etc/apt/sources.list" die nachstehende Zeile eingefügt werden:

deb file:/mirrors/debian woody main contrib non-free

Wer mit apt-move auch einen Debian Paketserver spiegeln möchte, der ist noch nicht fertig. Es muss noch festgelegt werden, was man genau vom Debian-Server spiegeln möchte. Dies geschieht über eine Datei namens ".exclude", welche man in dem Verzeichnis ablegen muss, das man unter LOCALDIR angegeben hat. In dieser Datei listet man die Namen von Paketen auf, die nicht herunter geladen werden sollen. Eine Beispiel-Datei mit dem Namen "SAMPLE.exclude" findet man unter /usr/share/doc/apt-move/examples. Bei der Anpassung gilt es, einen Kompromiss zwischen Plattenplatz und Onlinezeit auf der einen und gewünschten Paketen auf der anderen Seite zu finden. In der Regel wird man einfach einige Dinge ausschließen, von denen man weiß, dass man diese sowieso nie installieren wird. Meine exclude Datei sieht so aus:

#
# I make my own local Packages file
Packages*
#
# I'm not a ham...
hamradio/
#
# I'm refusing all kernel stuff except for 2.0.36 and 2.2.10
**/kernel-*-2.0.*
**/kernel-*-2.1.*
#
# lots of foreign language stuff I don't need
*kanji*
*-es_*
*-fr_*
*-hr_*
*-it_*
*-ja_*
*-ja-dev_*
*-ko_*
*-pl_*
*-pl-dev_*
*-pl-html_*
*-sv_*
*-zh_*
*-fi_*
*-hu_*
*japanese*
*arabic*
*asian*
*chinese*
*european*
*brazilian*
*british*
*czech*
*danish*
*dutch*
*french*
*italian*
*norwegian*
*polish*
*portuguese*
*spanish*
*swedish*
*cyrillic*
*greek*
*wnn*
*canna*
*big5*
*-cjk_*
**/kakasi-dic*

Nun passt man in der Datei /etc/apt-move.conf noch den Eintrag "APTSITES" an, um die zu spiegelnden Paketserver anzugeben. Dann wäre zumindest die Konfiguration so weit fertig.

Apt-Move: Existierende Pakete einspielen

Wer bereits über einen Satz von Debian-CDs oder gar eine DVD mit Debian Paketen verfügt, der hat mit apt-move die Möglichkeit, diese Pakete auf die Festplatte zu spielen und alle Installationen von der Festplatte vorzunehmen. Die CD oder DVD wird einfach gemountet (hier nach /cdrom) und mit

find /cdrom -type f -name "*deb" -exec cp {} /pfad/zum/temporären/cache \;

die vorhandenen Pakete auf die Festplatte kopiert. Dabei ist /pfad/zum/temporären/cache ein Verzeichnis auf der Festplatte, welches nun mit den vorhandenen Debian-Paketen befüllt wird. Bei einem Satz von CD-Roms wird man diesen Vorgang mehrmals wiederholen. Dann ändert man den Eintrag "FILECACHE" in der Datei /etc/apt-move.conf und setzt diesen auf das soeben befüllte Verzeichnis. Mit einem Aufruf von

apt-move update

übernimmt apt-move diese Dateien in seine Verzeichnisstruktur, und erzeugt die von apt-get benötigten Index-Dateien. Gerade letzteres kann eine Weile dauern. Hier sollte man etwas Geduld haben. Nach dieser Aktion sollte das Verzeichnis, in welches man die Pakete hinein kopiert hatte, leer sein. Anschließend sollte man nicht vergessen, die Änderung an der Datei /etc/apt-move.conf rückgängig zu machen und wieder den zuvor eingestellten Pfad zu verwenden.

Der tägliche Einsatz von Apt-Move

Beim Heim-Anwender dürfte der Einsatz so aussehen, dass nach dem Aufruf von

apt-get dist-upgrade

, also einem Sicherheits-Update, oder der Installation neuer Pakete aus dem Netz

apt-move update

aufgerufen wird, um die neu herunter geladenen Pakete in die Verzeichnisstruktur von apt-move zu übernehmen. Man hat dann quasi einen lokalen Paketserver nach Bedarf gebaut, der alle die Pakete vorhält, die bereits einmal herunter geladen wurden. Neue Pakete kommen dann aus dem Netz und bei der Installation von "alten" Paketen, freut man sich über die Geschwindigkeit, mit der dies funktioniert.

Wer nun - aus welchen Gründen auch immer - auch vorsorglich Pakete speichern möchte, die man noch nicht benötigt hat, der kann durch Eingabe von

apt-move mirror

den in der Konfiguration-Datei angegebenen Debian Paketserver spiegeln. Dabei werden alle Pakete herunter geladen, die im lokalen Paketverzeichnis fehlen oder nicht mehr aktuell sind. Per [DOC:START:45]cron-job[DOC:END] kann man dies auch automatisiert tun. Jetzt fehlt eigentlich nur noch ein FTP-Server, um dieses Verzeichnis anderen Rechnern im lokalen Netz zur Verfügung zu stellen...

Apt-Proxy: Installation und Konfiguration

Die Installation von apt-proxy geht recht einfach vonstatten:

apt-get install apt-proxy

Wer zusätzlich noch alle bereits mit apt-get herunter geladenen Pakete aus dem Verzeichnis /var/cache/apt/archives in den Paketcache von apt-proxy importieren will, der sollte noch das Paket dpkg-dev installieren. Wie bei apt-move schadet es auch hier nicht, wenn man sich neben der Manpage (man apt-proxy) die entsprechende Konfigurationsdatei /etc/apt-proxy/apt-proxy.conf anschaut. Auch diese Konfigurationsdatei ist gut kommentiert, wenn auch auf Englisch. Hier sollte man zunächst den Eintrag

APT_PROXY_CACHE=/var/cache/apt-proxy

so ändern, dass er zumindest auf eine ausreichend große Festplattenpartition verweist. Dann sollte man bei gehen und all diejenigen FTP Server aus der Konfigurationsdatei entfernen, die man nicht benutzen will. Vielleicht mag man ja auch ganz andere Server hier eintragen, die gleich um die Ecke stehen. Auf der [LINK:START:309]Website[LINK:END] von apt-proxy findet man eine schöne Beispielkonfiguration, die auch Paketquellen für OpenOffice und KDE berücksichtigt. In der Beispielkonfiguration ist mit APTPROXY jeweils der Rechnername oder die IP-Adresse des Rechners gemeint, auf dem apt-proxy läuft. Nett an dieser Beispielkonfiguration ist auch, dass dort entsprechende Einträge für die Datei /etc/apt/sources.list beispielhaft aufgelistet sind. Ich habe bei meiner Konfiguration zusätzlich den Eintrag

CLEAN_SWEEP=60

durch Voranstellen einer Raute "#" auskommentiert. Denn sonst werden alle 60 Tage (oder wieviel auch immer angegeben sind) nicht benutzte Debian Pakete gelöscht. Ich habe aber etwas mehr Platz als nötig und gehe davon aus, dass ich später wieder einmal ein Paket installieren möchte, welches länger als 60 Tage nicht benutzt wurde. Meine Konfigurationsdatei sieht nun so aus:

# Configuration for apt-proxy

# Change this path if you do not want to keep your cache under var
APT_PROXY_CACHE=/var/cache/apt-proxy

### Rsync Backends
# Three or more fields each:
# 1) URL prefix
# 2) Dir to put files in (remember the trailing /!)
# 3...) rsync backends to replace it with (remember the trailing /!)

# You can specify multiple backends like this:
#add_backend /main/					\
#	$APT_PROXY_CACHE/debian/			\
#	SERVERONE::debian/				\
#	SERVERTWO::debian/				\
#	SERVERTHREE::debian/

# HINT: Any request matching none of these is not served, making
# partial caching easy.

add_backend /main/					\
	$APT_PROXY_CACHE/debian/			\
	ftp.de.debian.org::debian/			\
	ftp2.de.debian.org::debian/			\

add_backend /non-US/					\
	$APT_PROXY_CACHE/non-US/			\
	ftp.de.debian.org::debian-non-US/		\
	ftp2.de.debian.org::debian-non-US/		\

# Diesen Eintrag habe ich für die Sicherheits-Updates
# hinzugefügt:
add_backend /security/					\
	$APT_PROXY_CACHE/security/			\
	security.debian.org::debian-security/		\
	non-us.debian.org::debian-security/		


############################## OTHER VARS ##################################
#	Automatically delete old debs when we download a newer one
#	after this many days of the older not being accessed.



#	Comment out to avoid, set to 0 for `instantly' (not recommended;
#	sometimes the new versions are broken
CLEANUP_DAYS=14

#	Once every n days, look through tree to erase and debs which
#	haven't been accessed in that long (eg. obsolete, rarely used, etc).
#	Comment out to disable.
#CLEAN_SWEEP=60

#       Maximum number of versions of each package to keep in cache
#       directory.  Version purging is carried out immediately after a new
#       version is downloaded.
#	Comment out to disable.
MAX_VERSIONS=2

#	Maximum frequency of Packages/etc. updates from back end (minutes)
#	Keep high to speed things up.
BACKEND_FREQ=240

#	Number of seconds for rsync to wait before timing out.
RSYNC_TIMEOUT=30

#	Number of seconds for wget to wait to connect before timing out.
WGET_TIMEOUT=30

#       Uncomment to change the path to wget, or add extra options.  For
#       example, if you are behind a firewall that does not allow active
#       FTP, use WGET="wget --passive-ftp"
#WGET=wget

#       Uncomment to change the path to rsync or add extra options.
#RSYNC=rsync

#	Uncomment to keep stats of successful backend transfers in the log.
#KEEP_STATS=1

#	Uncomment this for debugging messages
#DEBUG=true

Apt-Proxy: Anpassung der sources.list

Die Datei /etc/apt/sources.list dient der Konfiguration von apt-get. In ihr werden die Paket-Server angegeben, von denen sich der Rechner seine Pakete holen soll. In einem Netzwerk mit einem apt-proxy wird nun nur noch der Rechner, auf dem apt-proxy läuft, als Paket-Server benutzt. Denn apt-proxy stellt netterweise auf Port 9999 einen HTTP-Dienst nur für diese Zwecke zur Verfügung. Daher kann man bei allen Rechnern im Netzwerk die gleiche sources.list verwenden. Hier ein kleines Beispiel:

#/etc/apt/sources.list

deb http://aptproxy:9999/security stable/updates main contrib non-free
deb http://aptproxy.intern:9999/main woody main contrib non-free
deb http://aptproxy.intern:9999/non-US woody/non-US main contrib non-free
deb-src http://aptproxy.intern:9999/main woody main contrib non-free
deb-src http://aptproxy.intern:9999/non-US woody/non-US main contrib non-free

Die Beispielkonfiguration auf der Website enthält wie gesagt noch mehr Vorschläge auch für KDE und so. Beim Rechner mit apt-proxy kann man hingegen die Zeile

deb file:/Pfad/zum/apt-proxy/cache woody main contrib non-free

an den Anfang der sources.list schreiben, um die bereits herunter geladenen Pakete zu verwenden. Dabei muss natürlich der Pfad aus der apt-proxy.conf eingetragen werden. Dabei wird der grandiose Mechanismus für diesen Rechner selbst umgangen, so dass man hier eventuell Pakete aus dem Verzeichnis /var/cache/apt/archives via apt-proxy-import persönlich "einladen" muss.

Apt-Proxy: Einspielen von Paketen

Danach habe ich mich daran gemacht, auf CD-Rom gesicherte Debian-Pakete in den Proxy-Cache einzuspielen. Hierzu verwendet man apt-proxy-import, welches man auch (als root) auf den apt-get Paketcache anwenden kann:

apt-proxy-import /var/cache/apt/archives

Zu beachten ist dabei lediglich, dass man zuvor noch einmal auf dem Client(!)

apt-get update

ausgeführt haben sollte. Wer dieses Kommando fälschlicherweise auf dem Rechner mit apt-proxy ausführt, bekommt beim anschließenden Import die Fehlermeldung:

apt-proxy-import: No backend filelists found.

Zum Einspielen der CD-Roms habe ich die Pakete zunächst in ein Verzeichnis kopiert:

find /cdrom -type f -name "*deb" -exec cp {} /home/ich/ein/Verzeichnis \;

Dieser Schritt kann entfallen, wenn sich die Pakete auf der CD sowieso in einem Verzeichnis befinden, was bei den Debian Installations-CDs jedoch nicht der Fall ist. Anschließend ruft man einfach apt-proxy-import (als root) auf

apt-proxy-import /home/ich/ein/Verzeichnis

und kann nach dem Vorgang die Pakete aus diesem Verzeichnis wieder löschen. Unterdessen sollte das Verzeichnis, welches in der Konfiguration als APT_PROXY_CACHE angegeben wurde etwas dicker geworden sein.

Apt-Proxy: Benutzung und Wartung

Bei apt-proxy ist beides nicht schwer: Benutzen kann man diesen Mechanismus ganz normal via

apt-get update
apt-get dist-upgrade

, also so wie sonst auch und apt-proxy macht dann den Rest. Die Wartung beschränkt sich auf den prüfenden Blick auf den Plattenplatz. Mehr ist eigentlich nicht zu tun. Also viel Spaß damit.

Artikelbewertung: 
5
Average: 5 (1 vote)
War dieser Artikel hilfreich?