// Datei: ./praxis/debian-backports/installierte-pakete-anzeigen.adoc
// Baustelle: Rohtext

// Stichworte für den Index
(((Debian Backports, installierte Pakete anzeigen)))
(((dpkg, installierte Pakete aus Debian Backports anzeigen)))

=== Die installierten Pakete anzeigen ===

Wie bereits genannt, gliedern sich die Pakete aus Debian Backports
recht nahtlos in den Paketbestand ein. Möchten Sie herausfinden, welche
der installierten Pakete auf ihrem System aus den Backports stammen,
kommt ihnen das Namens- und Versionsschema von Debian entgegen (siehe
'Benennung einer Paketdatei' in <<benennung-eines-debian-pakets>>). 

In der Versionsangabe des Pakets ist die Zeichenkette `~bpo` plus die
Versionsnummer der Debianveröffentlichung enthalten, so bspw. `~bpo8`
für eine Rückportierung auf Debian 8 _Jessie_ und `~bpo9` für eine
Rückportierung auf Debian 9 _Stretch_. Diese Angabe ist soweit
verlässlich, da sich die meisten Entwickler brav an diese Konvention für
die Benennung halten. Zusätzlich achten die FTP-Master für Debian
Backports recht pedantisch darauf, dass diese Schreibweise eingehalten
wird.

Mit einem beherzten Griff zu `dpkg`, `grep` und `awk` filtern Sie aus
der Paketliste alle Pakete samt Versionsnummer heraus, die diese
Zeichenkette enthalten:

.Auflisten der installierten Pakete samt Versionsnummer aus Debian Backports
----
$ dpkg -l | grep ~bpo8 | awk '{print $2 " " $3}'
libroutino-slim0 3.1.1-1~bpo8+1
libroutino0 3.1.1-1~bpo8+1
qmapshack 1.7.2-1~bpo8+1
routino 3.1.1-1~bpo8+1
routino-common 3.1.1-1~bpo8+1
$
----

Geht es Ihnen nur um die Paketnamen, vereinfacht sich der Aufruf wie
folgt -- Sie filtern mittels `awk` und einem Regulären Ausdruck und
geben danach nur noch die zweite Spalte jeder Zeile aus:

.Auflisten der installierten Pakete aus Debian Backports
----
$ dpkg -l | awk '/~bpo8/{print $2}'
libroutino-slim0
libroutino0
qmapshack
routino
routino-common
$
----

Das Risiko bei den beiden Varianten ist, dass Sie auch andere Pakete
erwischen, die diese Zeichenkette in der Versionsnummer oder der
Paketbeschreibung tragen. Zudem müssen Sie das bspw. in Skripten immer
wieder an die von Ihnen verwendete Debianversion anpassen. Um diese
Fallen zu umgehen, bestehen zwei weitere Lösungswege -- a) mit Hilfe von
`aptitude` und b) mit Hilfe von `apt`. Letzteres gelingt Ihnen erst ab
Debian 8 _Jessie_, da es vorher `apt` nicht als Werkzeug in Debian gibt.

// Stichworte für den Index
(((Debian Backports, installierte Pakete anzeigen)))
(((aptitude, installierte Pakete aus Debian Backports anzeigen)))

Die Variante a) mit `aptitude` kombiniert mehrere Aufrufparameter -- so
`search ~i` zur Suche in den installierten Paketen und dazu `?narrow()`
zur weiteren Eingrenzung der Auswahl. `~VCURRENT` bezieht sich dabei auf
die aktuelle Debianversion, `~Abackports` auf die Pakete, die aus den
Paketquellen (Archiv) kommen, in denen Backports im Archivnamen
vorkommt.

.Auflisten der installierten Pakete aus Debian Backports mittels `aptitude`
----
$ aptitude search '~i ?narrow(~VCURRENT, ~Abackports)'
i A libroutino-slim0                - Routino slim routing library
i A libroutino0                     - Routino routing library
i   qmapshack                       - GPS mapping (GeoTiff and vector) and GPSr
i A routino                         - Set of tools to find a path between two po
i A routino-common                  - Routino data
$
----

Nachteilig ist, dass `aptitude` etwas Zeit benötigt, um das Ergebnis zu
ermitteln. `aptitude` baut intern erst alle möglichen Datenstrukturen
auf, bevor es darauf herumrechnet. Von Vorteil ist, dass diese Variante
unabhängig von einer Veröffentlichung funktioniert und somit auch gut
mit älteren Debianvarianten nutzbar ist.

// Stichworte für den Index
(((Debian Backports, installierte Pakete anzeigen)))
(((apt, installierte Pakete aus Debian Backports anzeigen)))

Die Variante b) auf der Basis von `apt` und `fgrep` liefert das gleiche
Ergebnis, jedoch eine andere Ausgabe. Jede Zeile beinhaltet den
Paketnamen samt Repository, aus dem Paket stammt, sowie die
Versionsnummer, die Architektur und den Installationsstatus.

.Auflisten der installierten Pakete aus Debian Backports mittels `apt`
----
$ apt list --installed | fgrep backports

WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts.

libroutino-slim0/jessie-backports,now 3.1.1-1~bpo8+1 amd64 [Installiert,automatisch]
libroutino0/jessie-backports,now 3.1.1-1~bpo8+1 amd64 [Installiert,automatisch]
qmapshack/jessie-backports,now 1.7.2-1~bpo8+1 amd64  [installiert]
routino/jessie-backports,now 3.1.1-1~bpo8+1 amd64 [Installiert,automatisch]
routino-common/jessie-backports,now 3.1.1-1~bpo8+1 all [Installiert,automatisch]
$
----

// Datei: ./praxis/debian-backports/installierte-pakete-anzeigen.adoc
