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 es schlicht und einfach /opt/paketarchiv. Sofern es noch nicht vorhanden ist, legen Sie dieses im 1. Schritt noch wie folgt an:

# mkdir -p /opt/paketarchiv

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

# cp -v *.deb /opt/paketarchiv

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 das Paket dpkg-dev 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 > gleich in eine passende Datei umzulenken. Der nachfolgende Aufruf geht noch einen Schritt weiter und komprimiert die Ausgabe zusätzlich mittels gzip:

# dpkg-scanpackages /opt/paketarchiv | gzip -c > /opt/paketarchiv/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 Paket openjdk-8-jre

Package: openjdk-8-jre
Source: openjdk-8
Version: 8u232-b09-1~deb9u1
Architecture: amd64
Maintainer: OpenJDK Team <openjdk@lists.launchpad.net>
Installed-Size: 254
Depends: openjdk-8-jre-headless (= 8u232-b09-1~deb9u1), libglib2.0-0 (>= 2.24), libxrandr2, libxinerama1, libgl1-mesa-glx | libgl1, libgtk2.0-0 (>= 2.14), libatk-wrapper-java-jni (>= 0.33.3-9~), libasound2 (>= 1.0.16), libc6 (>= 2.14), libgif7 (>= 5.1), libjpeg62-turbo (>= 1.3.1), libpng16-16 (>= 1.6.2-1), libpulse0 (>= 0.99.1), libx11-6, libxext6, zlib1g (>= 1:1.1.4)
Recommends: fonts-dejavu-extra
Suggests: icedtea-8-plugin
Replaces: openjdk-8-jre-headless (<< 8u20~b20-3)
Provides: java2-runtime, java5-runtime, java6-runtime, java7-runtime, java8-runtime
Filename: ./openjdk-8-jre_8u232-b09-1~deb9u1_amd64.deb
Size: 69506
MD5sum: 139071a27ce3d94da67652f941752057
SHA1: 51a88b51fcf2e324b91f6b9a96702503c4ce5801
SHA256: 75057205b56791edbc4dd0358cb56efd7d20ce0cb730d6ecba38e37267d72b9b
Section: java
Priority: optional
Multi-Arch: same
Homepage: http://openjdk.java.net/
Description: OpenJDK Java runtime, using Hotspot JIT
 Full Java runtime environment - needed for executing Java GUI and Webstart
 programs, using Hotspot JIT.
 .
 The packages are built using the IcedTea build support and patches
 from the IcedTea project.

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:

#! /bin/bash
dpkg-scanpackages /opt/paketarchiv | gzip -c > /opt/paketarchiv/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:

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

Um das Paketarchiv auch für andere Benutzer via 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:

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

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