// Datei: ./werkzeuge/paketoperationen/sourcepakete-beziehen.adoc

// Baustelle: Fertig

[[sourcepakete-beziehen]]

=== Sourcepakete beziehen ===

// Schlagworte für den Index
(((Paketvarianten, Binärpaket)))
(((Paketvarianten, Sourcepaket)))
Die Möglichkeit, auch die Quellpakete (siehe <<sourcepakete>>) 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 <<binaerpakete>>)
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.

// Stichworte für den Index
(((apt-get, source)))
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 <<etc-apt-sources.list-verstehen>>). Für die Veröffentlichung
Debian 9 _Stretch_ sieht der Eintrag wie folgt aus:

// TODO: contrib und non-free raus, evtl. auch noch das ".de."

----
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 <<aufbau-und-format-source>>) – , aus denen das
Binärpaket zusammengebaut wurde und überprüft diese Komponenten (siehe
<<bezogenes-paket-verifizieren>>) 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:

// TODO: Hier kommt noch Wheezy in einem Beispiel vor

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

// Stichworte für den Index
(((Debianpaket, devscripts)))
(((dget)))
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
#
----

// Datei (Ende): ./werkzeuge/paketoperationen/sourcepakete-beziehen.adoc
