30.2. dpkg-scanpackages

Die nachfolgend vorgestellte Lösung ist ähnlich zu der in Abschnitt 30.1, „Verzeichnis mit Paketen“. Es ergänzt diese jedoch noch um passende Metadaten (auch Packages index files genannt). Die Basis bildet hier ebenfalls ein Verzeichnis, welches Sie als Ablage für ihre Softwarepakete benutzen möchten. Hier heißt dieses Verzeichnis beispielhaft /opt/paketarchiv/local. Sofern es noch nicht vorhanden ist, legen Sie dieses im 1. Schritt noch wie folgt an:

Schritt 1: Verzeichnis für das Paketarchiv anlegen. 

# mkdir -p /opt/paketarchiv/local

Im 2. Schritt kopieren Sie alle gewünschten .deb-Pakete in dieses Verzeichnis:

Schritt 2: Daten hineinkopieren. 

# cp -v *.deb /opt/paketarchiv/local

Im 3. Schritt erzeugen Sie noch zusätzliche Metadaten für ihr Paketarchiv. Dabei kommt das Werkzeug dpkg-scanpackages aus dem Paket dpkg-dev [Debian-Paket-dpkg-dev] zum Einsatz. Sofern Sie bisher noch keine Debian-Pakete selbst gebaut haben, dürfte dieses Paket noch nicht auf ihrem System vorhanden sein und Sie müssen es daher vor der Benutzung nachinstallieren.

Nun erstellen Sie die benötigten Metadaten mittels dpkg-scanpackages. Als minimale Angabe erwartet dpkg-scanpackages den Pfad zum Paketarchiv und schreibt dann seine Ausgabe auf stdout. Besser ist es, die Ausgabe mittels Umleitungsoperator > gleich in eine passende Datei namens Packages umzulenken (Schreibweise des Dateinamens mit großem P). Der nachfolgende Aufruf geht noch einen Schritt weiter und komprimiert die Ausgabe zusätzlich mittels gzip, so dass als Ergebnis die Datei Packages.gz entsteht:

Schritt 3: Metadaten zum Paketarchiv erzeugen (Packages.gz). 

# cd /opt/paketarchiv
# dpkg-scanpackages local/ | gzip -c > local/Packages.gz
dpkg-scanpackages: Information: 6 Einträge wurden in Ausgabe-Paketdatei geschrieben.
#

Liegen bspw. 6 Debian-Pakete in Form von .deb-Dateien im Paketarchiv, liest dpkg-scanpackages deren Metadaten, gibt eine Meldung wie oben aus und leitet die Informationen an gzip weiter. gzip komprimiert die empfangenen Daten zunächst und speichert diese dann als Datei Packages.gz im Verzeichnis des Paketarchivs. Die erzeugte Datei Packages.gz beinhaltet Informationen pro Paket in der folgenden Form:

Paketinformationen zum beispielhaft verwendeten Paket meta-mc

# cat local/Packages
Package: meta-mc
Version: 1.0
Architecture: all
Maintainer: Frank Hofmann <frank.hofmann@efho.de>
Installed-Size: 9
Depends: mc, mc-data
Filename: local/meta-mc_1.0_all.deb
Size: 3392
MD5sum: e8889ea18c25b40ba4cac00b7faf1518
SHA1: 58e5f6b03643d6da7fa471f63f387335a2df5e55
SHA256: fb6ee7948c5a5b243b6940b172af96fa72123d9c031caca62541d8c4f14aa7de
Section: misc
Priority: optional
Multi-Arch: foreign
Description: Installs the Midnight Commander
 Installs the Midnight Commander

...
#

Die Pfadangabe, die Sie dpkg-scanpackages geben, ist jedoch tückisch. Laut Manpage und den von uns online gefundenen Beispielen kann jeder Pfad verwendet werden, in unseren Tests können wir das jedoch nicht bestätigen. Die von uns oben genutzte Form funktioniert auch später mit APT und aptitude zur Installation von Paketen.

Anmerkung

Bitte beachten Sie, dass Sie diesen Schritt mittels dpkg-scanpackages jedes Mal wiederholen müssen, wenn Sie Pakete im Paketarchiv hinzufügen oder Pakete daraus entfernen. Mit dem folgenden Shellskript lässt sich der Schritt automatisieren:

Automatisierung mit Hilfe eines Shellskriptes. 

#! /bin/bash
dpkg-scanpackages /opt/paketarchiv/local | gzip -c > /opt/paketarchiv/local/Packages.gz

Idealerweise legen Sie das Skript unter einen passenden Pfad wie bspw. /usr/bin ab. Damit vereinfacht sich ihr Aufruf.

Nun folgt der 4. Schritt — das Hinzufügen ihres soeben erzeugten, lokalen Paketarchivs zur Liste der von Ihnen genutzten Repositorys (siehe Abschnitt 3.3, „Die Datei /etc/apt/sources.list verstehen“). Entweder ergänzen Sie die Datei /etc/apt/sources.list um eine Zeile mit ihrem Paketarchiv oder Sie erstellen eine separate Datei im Verzeichnis /etc/apt/sources.list.d. Für obiges Beispiel sieht die Zeile wie folgt aus, um ihr Paketarchiv zunächst lokal einzubinden:

Schritt 4: Zusätzlicher Eintrag in der Datei /etc/apt/sources.list

deb [trusted=yes] file:///opt/paketarchiv local/

Die Angabe [trusted=yes] teilt APT mit, dass die Pakete aus der angegebenen, lokalen Paketquelle vertrauenswürdig sind. Damit sparen Sie sich (zunächst) den kryptographischen Überbau und können ihr Archiv sofort verwenden.

Um das Paketarchiv nun auch für andere Benutzer via HTTP oder HTTPS zugänglich zu machen, stellen Sie das Verzeichnis bspw. mit Hilfe eines lokalen Webservers bereit. Ein gültiger Eintrag wäre bspw. der folgende:

Zusätzlicher Eintrag in der Datei /etc/apt/sources.list (Webserver). 

deb [trusted=yes] https://www.webserver.com/paketarchiv local/

Anmerkung

Ab APT in der Version 1.5 (verfügbar ab Debian 10 Buster) unterstützt es HTTPS von sich aus. Nutzen Sie (noch) eine frühere Veröffentlichung und möchten ihr Paketarchiv ebenfalls via HTTPS anzubieten, greifen Sie zusätzlich auf das Paket apt-transport-https [Debian-Paket-apt-transport-https] zurück. Mehr Informationen dazu finden Sie unter [LambAptHTTPS].

Mit obigem Eintrag vertraut APT nun allen Paketen aus ihrem Paketarchiv. Aktualisieren Sie nun Ihre Liste der verfügbaren Pakete — bspw. mit apt-get update — „lernt“ APT ihr Paketarchiv und kann Softwarepakete daraus in ihr System einbinden.

Anmerkung

Bitte beachten Sie, dass es bei dieser Lösung keine Authentifizierung und Integritätsprüfung der Pakete im Archiv gibt. Die Verantwortung über die bereitgestellten Softwarepakete liegt vollständig bei Ihnen.