In diesem Szenario kombinieren wir die Werkzeuge apt-get
, awk
und
wget
miteinander. Diese wunderbare Idee und Beschreibung ist entlehnt
aus Frank Ronneburgs Debian-Anwenderhandbuch [Debian-Anwenderhandbuch-apt-offline]
sowie dem Beitrag von Samuel Suter [Suter-apt-offline], hier jedoch
nur für ausgewählte Pakete.
awk
ist ein Analyse- und Filterprogramm für Textdaten
[Debian-Paket-gawk]. Mit wget
beziehen Sie hingegen Dateien über das
Netzwerk [Debian-Paket-wget] auf der Basis von HTTP, HTTPS und FTP.
Während awk
zu den essentiellen Programmen zählt, ist wget
optional
und daher ihrerseits vor dessen Verwendung noch zu installieren, falls
es noch nicht auf ihrem System vorhanden ist.
Benötigt wird ein Rechner ohne Internetzugang (genannt rechner-offline) und ein Rechner mit Internetzugang (nachfolgend rechner-online genannt). Beide Rechner verfügen über den gleichen Paketbestand.
Auf rechner-online ist im Verzeichnis /usbplatte
ein externer,
mobiler Datenträger eingebunden, um darauf die Anweisungen zum
nachfolgenden Bezug der Pakete und die Pakete selbst zu speichern. Diese
spielen Sie dann auf rechner-offline ein. Der Ablauf zum Bezug der
Pakete umfasst zunächst die nachfolgenden Schritte und beginnt auf
rechner-online:
apt-get update
oder apt update
apt-get
. Umleitung der Ausgabe von apt-get
in die lokale Datei uris
wget
-Aufrufe aus den zuvor gespeicherten
URLs mittels awk
. Die Ausgabe von awk
leiten Sie in die Datei
/usbplatte/wget-script
um.
wget-script
zum Bezug der bezeichneten Pakete vom
Paketmirror. Damit speichern Sie die bezogenen Pakete auf dem
eingebundenen, mobilen Datenträger.
Hier sehen Sie alle Anweisungen auf der Basis von apt-get
. Der
Schalter -qq
von apt-get
ist die verschärfte Form von -q
(Langform: --quiet
) und sorgt dafür, dass apt-get
eine „vollkommen
stille“ Ausgabe erzeugt, die für unsere Automatisierung geeignet ist.
Der Schalter --print-uris
gibt die URLs aus, mit deren Hilfe wget
die Pakete herunterladen kann.
Aufrufreihenfolge mittels apt-get
, awk
und wget
.
# apt-get update # apt-get -qq --print-uris upgrade > uris # awk '{print "wget -O " $2 " " $1}' < uris > /usbplatte/wget-script # cd /usbplatte # sh -x ./wget-script
Die Datei uris
enthält Einträge in folgender Form, hier beispielhaft
für ImageMagick und GCC 4.9, die von einem Freexian-Mirror für eine
LTS-Version bezogen werden. In der ersten Spalte befindet sich die URL,
danach folgt der Name der Paketdatei und die MD5-Summe zum Paket.
URLs von bezogenen Paketen.
'http://deb.freexian.com/extended-lts/pool/main/i/imagemagick/libmagickcore-6.q16-2-extra_6.8.9.9-5+deb8u26_amd64.deb' libmagickcore-6.q16-2-extra_8%3a6.8.9.9-5+deb8u26_amd64.deb 177540 MD5Sum:8757d67ecdb5da92129e13e9b46fdc1f 'http://deb.freexian.com/extended-lts/pool/main/l/linux/linux-compiler-gcc-4.9-x86_3.16.84-1_amd64.deb' linux-compiler-gcc-4.9-x86_3.16.84-1_amd64.deb 463996 MD5Sum:21bd9aea54e20e0bfefa0cf993c270a2
Das Skript für wget
enthält dann Aufrufe in folgender Form:
Pakete per wget
beziehen.
wget -O libmagickcore-6.q16-2_8%3a6.8.9.9-5+deb8u26_amd64.deb 'http://deb.freexian.com/extended-lts/pool/main/i/imagemagick/libmagickcore-6.q16-2_6.8.9.9-5+deb8u26_amd64.deb' wget -O linux-compiler-gcc-4.9-x86_3.16.84-1_amd64.deb 'http://deb.freexian.com/extended-lts/pool/main/l/linux/linux-compiler-gcc-4.9-x86_3.16.84-1_amd64.deb'
Rufen Sie das Skript auf, holt wget
ein Paket nach dem anderen von der
angegebenen URL. Als Ergebnis dieser Aufrufe finden Sie auf dem mobilen
Datenträger alle deb
-Pakete, die zur Aktualisierung mittels apt-get
upgrade
erforderlich sind. Hängen Sie nun den mobilen Datenträger auf
rechner-online aus und binden Sie diesen nun auf rechner-offline
ein.
Nun spielen Sie die zuvor bezogenen Pakete ein. Dabei hilft Ihnen der
Aufruf apt-get upgrade
mit dem Paketcache auf dem mobilen Datenträger.
Damit apt-get
diesen Paketcache auch verwendet, benötigt es noch einen
Hinweis von Ihnen. Ins Spiel kommt der Schalter -o
mit der APT-Direktive
dir::cache::archives
und dem passenden Pfad zum Paketcache. Hier heißt
dieser beispielhaft /usbplatte
.
Eine Aktualisierung mit einem externen Paketcache.
# apt-get -o dir::cache::archives="/usbplatte/" upgrade
Ab jetzt verfügt der Rechner ohne Internetzugang wieder über einen aktuellen Paketbestand.
Nicht immer hängt ein Computer am Netzwerk und hat Zugang zu dem hinterlegten Paketmirror. Das Projekt apt-offline (Projektseite [apt-offline-Projektseite]) baut Ihnen eine Brücke, um mit Hilfe eines anderen Rechners Änderungen am Paketbestand möglich zu machen. Es steht in Form der beiden Pakete apt-offline [Debian-Paket-apt-offline] für die Kommandozeile und apt-offline-gui [Debian-Paket-apt-offline-gui] mit graphischer Bedienoberfläche zur Verfügung. Beide Pakete setzen auf der Programmiersprache Python auf. Seit der Version 11 Bullseye sind die beiden Pakete fester Bestandteil der stabilen Veröffentlichung.
Die Idee hinter apt-offline ist das Erzeugen einer Beschreibungsdatei mit allen Informationen für die Abfrage der Paketdatenbank. Damit weiß der Paketmirror, welche Pakete er bereitstellen muß. Diese bezogenen Pakete übertragen Sie auf das eigentliche System — bspw. mit einem USB-Stick oder einer externen Festplatte — und spielen diese wie gewohnt über die Paketverwaltung ein. Wie das genau funktioniert, erklären wir Ihnen gleich. Als Basis dafür benutzten wir eine Reihe von Anleitungen zum Thema Offline Package Management for APT (siehe [Ritesh-apt-offline], [xubuntu-apt-offline] und [Damienoh-apt-offline])
In Schritt 1 erzeugen Sie eine Signatur für die Maschine, die
aktualisierte Paketinformationen und die Pakete bekommen soll. Das
erfolgt auf der Maschine, die offline ist. Dazu benutzen Sie das
nachfolgende Kommando mittelt apt-offline
. Der verwendete Schalter
set
erzeugt die Signaturdatei, welchen Sie im Aufruf nach dem Schalter
benennen. Bezüglich des Dateinamens gibt keine Vorgabe — hier haben wir
beispielhaft die Datei /tmp/apt-offline.sig
gewählt.
# apt-offline set /tmp/apt-offline.sig
Alternativ kennt apt-offline
noch die folgenden Schalter für andere
Aktionen:
--bug-reports
--bundle
get
--install-packages
--threads
--update
--upgrade
dist-upgrade
)
Das folgende Beispiel zeigt, wie Sie die Paketinformationen für die offline-Maschine holen, die auch Bugreports enthält. Die Ausführung erfolgt über 5 parallele Threads. Diese Kommando führen Sie als Schritt 2 noch auf der Maschine aus, die nicht über eine Netzanbindung verfügt.
# apt-offline get apt-offline.sig --bug-reports --threads 5
Ergebnis obigen Aufrufs sind Zusatzinformationen in der Datei
apt-offline.sig
, die Sie nun auf einen Datenträger kopieren.
Für ein einzelnes Paket sieht der Aufruf etwas anders aus. Um die Installation des Pakets approx [Debian-Paket-approx] vorzubereiten, benutzen Sie diesen Aufruf:
# apt-offline set --install-packages approx apt-offline.sig
Nun beziehen Sie die gewünschten Pakete. Als Schritt 3 führen Sie den nachfolgenden Aufruf auf dem Rechner mit Netzanbindung aus:
# apt-offline get --bundle bundle.zip apt-offline.sig
Die notwendigen Pakete befinden sich in dem ZIP-Archiv bundle.zip
.
In Schritt 4 spielen Sie dieses Archiv auf der Offline-Maschine ein.
Hier sehen Sie das beispielhaft als Datei von einem Speichermedium,
welches über USB unter dem Pfad /media/USB/bundle.zip
eingehängt
ist (USB-Stick oder USB-Festplatte).
# apt-offline install /media/USB/bundle.zip
Die Pakete landen im lokalen Paketcache und wirken für APT jetzt so, als
wenn sie vorher schonmal bezogen wurden. Mittels apt-get install
Paketname spielen Sie jetzt das gewünsche Paket ein.
Möchten Sie nicht mit den Schaltern von tar
, rar
, zip
oder hoz
hantieren, bietet sich hier das Werkzeug dpkg-split
aus dem Paket
dpkg [Debian-Paket-dpkg] an. Es zerlegt eine deb
-Datei in kleinere
Stücke und setzt diese Stücke dann auch wieder zusammen. Dieses
Werkzeug ist nützlich, um Binärpakete auf mehrere Medien mit geringer
Kapazität zu verteilen, bspw. wenn Sie gerade nichts anderes zur Hand
haben.
dpkg-split
kommt mit einer ganzen Reihe von nützlichen Schaltern:
-?
(Langform: --help
)
dpkg-split
an.
-a
(Langform: --auto
)
-d
(Langform: --discard
)
-I
(Langform: --info
)
dpkg-split
erzeugt wurde.
-j
(Langform: --join
)
.deb
-Datei. Standardmäßig folgt der Name der Ausgabedatei basierend
auf dem Paketnamen, der Version und der Architektur
(Paket-Version_Architektur.deb).
-l
(Langform: --listq
)
-o
(Langform: --output
)
dpkg-split
eine Ausgabedatei mit dem Namen basierend auf dem Paketnamen, der Version und der Architektur (Paket-Version_Architektur.deb).
-Q
(Langform: --npquiet
)
dpkg-split
normalerweise eine
Meldung aus, falls ein übergebener Teil kein Binärpaketteil ist. Dieser
Schalter unterdrückt diese Meldung, um Programmen wie dpkg
zu
erlauben, sowohl mit geteilten als auch ungeteilten Paketen umzugehen,
ohne störende Meldungen zu erzeugen.
-S
(Langform: --partsize
)
-s
(Langform: --split
)
Teilt ein einzelnes Debian-Binärpaket in mehrere Stücke. Die Benennung der Ausgabedateien folgt Paketname.nofm.deb mit n als Stücknummer und m als Anzahl der Stücke.
Geben Sie im Aufruf kein Präfix an, wird der Dateiname vom
Komplettarchiv entnommen, einschließlich Verzeichnis, wobei das
abschließende .deb
entfernt wird.
--depotdir
/var/lib/dpkg
.
--msdos
Erzwingt, dass die von -s
erzeugten Ausgabedateinamen
MSDOS-kompatibel sind.
Dies verstümmelt das Präfix — entweder den voreingestellten aus dem
Eingabedateinamen abgeleiteten oder den als Argument übergebenen. Dabei
werden alphanummerische Zeichen durch Kleinbuchstaben und Pluszeichen
durch x
ersetzt sowie alle anderen Zeichen entfernt. Das Ergebnis wird
dann soweit wie nötig abgeschnitten. Ergebnis ist ein Dateiname der Form
Präfixnofm.deb mit n als Stücknummer und m als Anzahl der Stücke.
--version
dpkg-split
aus.
Nachfolgend erklären wir anhand des Paketes xsnow, wie Sie
dpkg-split
benutzen.
Beispiel 1 ist das Zerlegen des Pakets xsnow in Stücke mit einer
Größe von 10 KB. Zum Einsatz kommen im Aufruf die beiden Schalter -s
(zerlegen) und -S 10
. Letzteres bestimmt die Größe der Ausgabedatei
von maximal 10 KB.
Als Ergebnis erhalten Sie vier Stücke. Diese werden in der Form Paketname.nofm.deb mit n als Stücknummer (im Beispiel die Werte 1 bis 4) und m als Anzahl der Stücke (im Beispiel 4) benannt.
Zerlegen des Debianpakets xsnow in Stücke zu 10 KB.
$ dpkg-split -s -S 10 xsnow_1%3a1.42-9_amd64.deb Paket xsnow wird in 4 Teile aufgeteilt: 1 2 3 4 fertig $ ls -lh insgesamt 136K -rw-r--r-- 1 frank frank 9,2K Jan 7 11:09 xsnow_1%3a1.42-9_amd64.1of4.deb -rw-r--r-- 1 frank frank 9,2K Jan 7 11:09 xsnow_1%3a1.42-9_amd64.2of4.deb -rw-r--r-- 1 frank frank 9,2K Jan 7 11:09 xsnow_1%3a1.42-9_amd64.3of4.deb -rw-r--r-- 1 frank frank 8,2K Jan 7 11:09 xsnow_1%3a1.42-9_amd64.4of4.deb $
In Beispiel 2 zeigen Sie die Informationen zu einem Stück eines
mittels dpkg-split
zerlegten deb-Pakets an. Dazu benutzen Sie den
Schalter -I
gefolgt von einem Dateiname als Parameter, hier:
xsnow_1%3a1.42-9_amd64.3of4.deb
. Die Ausgabe umfasst die
Formatversion, die Paketinformationen, die Nummer des Stücks (hier 3 von
4), die Größe ("Teil-Länge") sowie den Offset im Originalpaket
("Teil-Offset").
Informationen zum Teil xsnow_1%3a1.42-9_amd64.3of4.deb
erhalten.
$ dpkg-split -I xsnow_1%3a1.42-9_amd64.3of4.deb xsnow_1%3a1.42-9_amd64.3of4.deb: Teil-Formatversion: 2.1 Teil des Paketes: xsnow ... Version: 1:1.42-9 ... Architektur: amd64 ... MD5-Prüfsumme: 3ddeabaec77416662e45de36d9960a2a ... Länge: 35836 Byte ... geteilt alle: 9216 Byte Teil-Nummer: 3/4 Teil-Länge: 9216 Byte Teil-Offset: 18432 Byte Teil-Dateigröße (ben. Anteil): 9418 Byte $
Das Beispiel 3 zeigt, wie Sie ein Paket wieder aus einzelnen Stücken
zusammensetzen. Dazu benutzen Sie den Schalter -j
für die Aktion
"Zusammensetzen".
Nun erzeugt dpkg-split
als Ausgabedatei xsnow_1:1.42-9_amd64.deb, da
die Benennung den Angaben zum Paketnamen, der Paketversion sowie der
Architektur (Paket-Version_Architektur.deb) folgt. Am Ende des Aufrufs
geben Sie noch die Dateinamen der Stücke an, die Sie wieder
zusammensetzen möchten.
Einfaches Zusammenfügen der Paketstücke.
$ dpkg-split -j xsnow_1%3a1.42-9_amd64.* Paket xsnow wird aus 4 Teilen zusammengesetzt: 1 2 3 4 fertig $
Um eine Ausgabedatei mit einem spezifischen Dateinamen zu erhalten,
kommt nun noch der Schalter -o
für die Angabe der Ausgabedatei zum
Einsatz. Bitte beachten Sie dabei, dass Sie im Aufruf zuerst den
Schalter -o
und erst danach den Schalter -j
angeben. Nachfolgend
sehen den vollständigen Aufruf, der als Ergebnis die Datei
xsnow_1%3a1.42-9_amd64.deb
liefert.
Zusammenfügen der Paketstücke mit Ausgabedatei.
$ dpkg-split -o xsnow_1%3a1.42-9_amd64.deb -j xsnow_1%3a1.42-9_amd64.* Paket xsnow wird aus 4 Teilen zusammengesetzt: 1 2 3 4 fertig $
Anschließend raten wir Ihnen, zu überprüfen, ober alles beim Zusammenbau
geklappt hat. Mittels md5sum
vergleichen Sie die Hashwerte der beiden
Pakete wie folgt:
Vergleichen zweier Dateien mittels md5sum
.
$ md5sum xsnow_1%3a1.42-9_amd64.deb /var/cache/apt/archives/xsnow_1%3a1.42-9_amd64.deb 3ddeabaec77416662e45de36d9960a2a xsnow_1%3a1.42-9_amd64.deb 3ddeabaec77416662e45de36d9960a2a /var/cache/apt/archives/xsnow_1%3a1.42-9_amd64.deb $
Das Projekt Keryx [Keryx] beschreibt sich als eine freie, plattformunabhängige Softwareanwendung, um Linuxsysteme ohne Internetanbindung zu aktualisieren. Es hat den Fokus auf Benutzer mit Einwahlverbindungen und Systeme, die nur über eine dünne Leitung an das Internet verfügen.
Ursprünglich nur für Ubuntu entwickelt, erlaubt es mittlerweile das Auswählen und Herunterladen von Paketen auf Debian-basierten Systemen und auch anderen Betriebssystemen wie bspw. Microsoft Windows. Die bezogenen Pakete werden auf einem mobilen Speichermedium abgelegt und können von da aus auf dem eigentlichen System eingespielt werden. Es ist für die Anwendung an einzelnen Systemen gedacht, geschieht das in einem größeren Rahmen, ist für das Vorgehen der Begriff „Turnschuhnetzwerk“ [Turnschuhnetzwerk] gebräuchlich.
Keryx basiert auf dem Gimp Tool Kit. Die letzte Veröffentlichung als Ubuntu-PPA erfolgte 2011 (Version 1), 2017 wurde die Version 0.92.5 freigegeben. Aktuellere Veröffentlichungen sind nicht bekannt.
Es existiert zudem eine Erweiterung um eine graphische Bedienoberfläche, die auf wxPython (Paket python-wxversion) aufsetzt.