8.36. Sourcepakete beziehen

Die Möglichkeit, auch die Quellpakete (siehe Abschnitt 2.7.4, „Source-Pakete (dsc und weitere Dateien)“) zu den verwendeten Programmen zu erhalten, zählt zu den zentralen Säulen Freier Software. Neben dem Lerneffekt steht die Befriedigung der Neugierde, zu sehen, woraus überhaupt ein Debian-Binärpaket (siehe Abschnitt 2.7.1, „Binärpakete (deb)“) entsteht und aus welchen Komponenten sich dieses zusammensetzt.

Damit erhalten Sie einen Blick hinter die Kulissen und können anhand des Quellcodes ersehen, wie die Software programmiert wurde. Nur über diesen Schritt können Sie ganz konkret nachvollziehen, wie diese funktioniert. Das hilft Ihnen insbesondere auch dabei, die Ursache zu lokalisieren, wenn ein Programm sich entgegen ihrer Erwartungen verhält.

Viele Entwickler weisen der Dokumentation ihrer Software häufig einen niedrigen Stellenwert zu. Es kommt daher vor, dass die Dokumentation unvollständig, fehlerhaft bzw. veraltet ist oder in einer Sprache vorliegt, die sie nicht beherrschen. Schwachpunkte sind zudem die Verfahren, welche implementiert wurden, aber auch die Parameter, Schalter und Konfigurationsdateien, mit der Sie das Verhalten der Software steuern und beeinflussen können.

Das Programm apt-get bringt hier den Schalter source mit und erwartet danach die Angabe eines oder mehrerer Paketnamen. Damit apt-get nach dem Aufruf die Quellpakete auch beziehen kann, benötigt es einen entsprechenden Eintrag in der Liste der Paketquellen (siehe Abschnitt 3.4, „Die Datei /etc/apt/sources.list verstehen“). Für die Veröffentlichung Debian 9 Stretch sieht der Eintrag wie folgt aus:

deb-src http://ftp.de.debian.org/debian/ stretch main contrib non-free

APT wertet die Paketbeschreibung aus, bezieht danach alle Quellpakete von dem angegebenen Paketmirror – den Debian Source Code (dsc) plus Paketierung (siehe Abschnitt 4.2.2, „Source-Pakete“) – , aus denen das Binärpaket zusammengebaut wurde und überprüft diese Komponenten (siehe Abschnitt 8.32.1, „Prüfung eines Paketes auf Unversehrtheit“) anhand deren öffentlichem Schlüssel. Am Schluss werden die drei Archive dsc, tar und diff im aktuellen Verzeichnis entpackt.

Gibt es zusätzliche Änderungen am Quellcode in Form von Patches, werden diese ebenfalls bezogen und nacheinander auf den entpackten Quellcode angewendet. Nachfolgendes Beispiel zeigt diesen Vorgang anhand des Pakets libapache2-mod-authn-yubikey für den Webserver Apache:

Bezug des Sourcepakets libapache2-mod-authn-yubikey mit APT. 

$ apt-get source libapache2-mod-authn-yubikey
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Es müssen 22,5 kB an Quellarchiven heruntergeladen werden.
Holen: 1 http://ftp.de.debian.org/debian/ wheezy/main libapache2-mod-authn-yubikey 1.0-1 (dsc) [1.891 B]
Holen: 2 http://ftp.de.debian.org/debian/ wheezy/main libapache2-mod-authn-yubikey 1.0-1 (tar) [16,5 kB]
Holen: 3 http://ftp.de.debian.org/debian/ wheezy/main libapache2-mod-authn-yubikey 1.0-1 (diff) [4.115 B]
Es wurden 22,5 kB in 5 s geholt (4.095 B/s).
gpgv: Schlüsselblockhilfsmittel`/home/frank/.gnupg/trustedkeys.gpg': Fehler beim Öffnen der Datei
gpgv: Unterschrift vom Do 17 Feb 2011 16:22:26 CET mittels RSA-Schlüssel ID 8649AA06
gpgv: Unterschrift kann nicht geprüft werden: Öffentlicher Schlüssel nicht gefunden
dpkg-source: Warnung: Fehler beim Überprüfen der Signatur von ./libapache2-mod-authn-yubikey_1.0-1.dsc
dpkg-source: Information: libapache2-mod-authn-yubikey wird nach libapache2-mod-authn-yubikey-1.0 extrahiert
dpkg-source: Information: libapache2-mod-authn-yubikey_1.0.orig.tar.bz2 wird entpackt
dpkg-source: Information: libapache2-mod-authn-yubikey_1.0-1.debian.tar.gz wird entpackt
$

Desweiteren existiert auch eine Alternative namens dget aus dem Paket devscripts [Debian-Paket-devscripts]. Darüber kombinieren Sie den Bezug der Paketinhalte. dget akzeptiert als Parameter eine Liste von Paketnamen, die es nacheinander vom Paketmirror bezieht und im lokalen Verzeichnis speichert. Liegt das betreffende Paket bereits im Paketcache, entnimmt dget dieses von dort [Kemp-dget].

Bezug der beiden Pakete bash-doc und libbash-doc via dget

# dget bash-doc
dget: using /var/cache/apt/archives/bash-doc_4.2+dfsg-0.1_all.deb (copy)
#
# dget libbash-doc
dget: retrieving http://ftp.de.debian.org/debian/pool/main/libb/libbash/libbash-doc_0.9.11-1_all.deb
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 20468  100 20468    0     0   166k      0 --:--:-- --:--:-- --:--:--  243k
#