41.3. Werkzeuge

41.3.1. Offline-Verwaltung mit apt-get und wget

In diesem Szenario kombinieren wir aus APT das Werkzeug apt-get mit awk und wget. 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]. wget ist hingegen ein Kommandozeilenprogramm, um Dateien über das Netzwerk zu beziehen [Debian-Paket-wget]. Während gawk zu den essentiellen Paketen zählt, ist wget optional und daher ihrerseits vor dessen Verwendung gegebenenfalls noch zu installieren.

Der Ablauf ist wie folgt:

  1. Einhängen („mounten“) eines externen, mobilen Datenträgers im Verzeichnis /medium
  2. Aktualisieren der lokalen Paketdatenbank mittels apt-get update
  3. Erzeugen der URLs mittels apt-get für die Pakete, die zu aktualisieren sind, und Umleitung der Ausgabe in die lokale Datei uris
  4. Generieren der passenden wget-Aufrufe aus den zuvor gespeicherten URLs mittels awk. Ausgabe auf stdout und Umleitung der Ausgabe in die lokale Skriptdatei /medium/wget-script.
  5. Ausführung der der Skriptdatei zum Bezug der bezeichneten Pakete vom Spiegelserver und der Speicherung der bezogenen Pakete im lokalen Verzeichnis.

Aufrufreihenfolge mittels apt-get, awk und wget

# apt-get update
# apt-get -qq --print-uris dist-upgrade > uris
# awk '{print "wget -O " $2 " " $1}' < uris > /medium/wget-script
# cd /medium
# sh -x ./wget-script

Als Ergebnis dieser Aufrufe finden Sie auf dem mobilen Datenträger alle deb-Pakete, die zur Aktualisierung mittels apt-get dist-upgrade erforderlich sind. Unmounten Sie den mobilen Datenträger auf dem ersten System und mounten Sie diesen auf dem Zielsystem. Als finalen Schritt erfolgt auf dem Zielsystem ein Aufruf von apt-get dist-upgrade mit dem Paketcache auf dem mobilen Medium. Dazu verwenden Sie den Schalter -o mit der APT-Direktive dir::cache::archives und dem passenden Pfad zum Paketcache. Der Einfachheit halber heißt dieser hier ebenfalls /medium.

Eine Distributionsaktualisierung mit einem externen Paketcache. 

# apt-get -o dir::cache::archives="/medium/" dist-upgrade

41.3.2. Das Projekt apt-offline

  • Ablauf:

    • Signatur für die Maschine erzeugen, die aktualisierte Paketinformationen und Pakete bekommen soll (auf der Maschine, die offline ist)
# apt-offline set /tmp/apt-offline.sig
  • Option --update: nur Updates (Einspielen aktualisierter, fehlerbereinigter Pakete mit der gleichen Versionsnummer)
  • Option --upgrade: nur Upgrades (Einspielen aktualisierter, fehlerbereinigter Pakete mit einer neueren Version)
  • ohne Optionen: alles auf den allerneuesten Stand bringen (entspricht einem dist-upgrade)

    • Paketinfo für die offline-Maschine holen, inkl. Bug-Reports und Ausführung als parallele 5 Threads (auf einer Maschine, die über eine Netzanbindung verfügt)
# apt-offline get apt-offline.sig --bug-reports --threads 5
  • bezogene Paketinformationen auf der offline-Maschine einspielen, hier beispielhaft als Datei von einem Speichermedium, welches über USB eingehängt ist (USB-Stick oder USB-Festplatte)
# apt-offline install /media/USB/apt-offline.zip
  • aktualisiert den APT-Cache, sodaß alles daher kommt und nichts von extern bezogen werden muß

41.3.3. Pakete mit dpkg-split aufteilen

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 kann diese Stücke dann auch wieder zusammensetzen. 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)
Zeigt die Hilfeseite zu dpkg-split an.
-a (Langform: --auto)
Reiht die Stücke automatisch in die Warteschlange und setzt, falls möglich, das Paket wieder zusammen.
-d (Langform: --discard)
Löscht Einträge aus der Warteschlange derer, die auf die verbleibenden Stücke ihrer Pakete warten.
-I (Langform: --info)
Gibt Informationen zu einem Stück aus, welches zuvor von dpkg-split erzeugt wurde.
-j (Langform: --join)
Vereinigt einzelne Stücke zu einer .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)
Listet den Inhalt der Warteschlange der wieder zusammenzubauenden Pakete auf.
-o (Langform: --output)
Gibt den Ausgabedateinamen für ein Wiederzusammenbauen an. Ohne diesen Schalter erzeugt dpkg-split eine Ausgabedatei mit dem Namen basierend auf dem Paketnamen, der Version und der Architektur (Paket-Version_Architektur.deb).
-Q (Langform: --npquiet)
Führen Sie ein automatisches Einreihen oder Wiederzusammensetzen durch, gibt 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)
Legt die Größe der Stücke fest. Die Angabe erfolgt in Kilobytes zur Basis 1024 Byte. Die Standardgröße beträgt 450 KB.
-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
Spezifiziert ein alternatives Verzeichnis für die Warteschlange von den Stücken, die auf automatisches Wiederzusammenführen warten. Standardmäßig ist dies das Verzeichnis /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
Gibt die verwendete Version von 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
$

41.3.4. Keryx

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