SelfLinux Systemverwaltung APT Howto Abschnitt 3 | SelfLinux-0.13.0

| APT Howto | Autoren Formatierung GFDL

#### 3 Paketverwaltung

#### 3.1 Update der Liste der verfügbaren Pakete

Das Paketsystem benutzt eine eigene Datenbank mit Informationen über installierte, nicht installierte und für eine Installation verfügbare Pakete. Das Programm apt-get benutzt diese Datenbank, um herauszufinden, wie es die vom Benutzer angeforderten Pakete installieren soll und welche zusätzlichen Pakete benötigt werden, damit die ausgewählten Pakete ordentlich funktionieren.

Um diese Liste zu updaten, benutzt man das Kommando apt-get update. apt-get sucht dann nach den Paketlisten in den Archiven aus der /etc/apt/sources.list. Im Kapitel Die Datei /etc/apt/sources.list finden Sie weitere Information über diese Datei.

Es ist eine gute Idee, dieses Kommando regelmäßig auszuführen, um sich selbst und sein System auf dem neusten Stand über mögliche Paket- bzw. Sicherheitsupdates zu halten.

#### 3.2 Installieren von Paketen

Endlich kommt das, worauf Sie alle gewartet haben! Mit der fertigen sources.list und der Liste der verfügbaren Pakete auf dem neusten Stand ist alles, was Sie zu tun haben apt-get auszuführen, um das gewünschte Paket zu installieren. Zum Beispiel:

root@linux # apt-get install xchat

APT durchsucht seine Datenbank nach der aktuellsten Version dieses Paketes und holt es aus dem entsprechenden Archiv, welches in der sources.list spezifiziert ist. Wenn es eintritt, dass das Paket von einem anderen abhängt -- wie es hier der Fall ist -- überprüft APT die Abhängigkeiten und installiert die benötigten Pakete. Sehen Sie folgendes Beispiel:

root@linux # apt-get install nautilus
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
bonobo libmedusa0 libnautilus0
The following NEW packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded.
Need to get 8329kB of archives. After unpacking 17.2MB will be used.
Do you want to continue? [Y/n]

Das Paket nautilus benötigt die genannten Bibliotheken (bonobo libmedusa0 libnautilus0), deshalb holt APT sie aus dem Archiv. Übergibt man apt-get die Namen der Bibliotheken beim Aufruf mit, fragt es nicht, ob es fortfahren soll, es akzeptiert automatisch, dass die genannten Pakete installiert werden sollen.

Das bedeutet, dass APT nur um Bestätigung bittet, wenn es Pakete installieren muss, die man nicht auf der Kommandozeile übergeben hat.

Die folgenden Optionen von apt-get können hilfreich sein:

-h | Dieser Hilfetext
-d | Nur herunterladen - Nicht installieren oder entpacken
-f | Versuche fortzufahren wenn der integrity check fehlschlägt
-s | Nichts wirklich tun. Simulation durchführen.
-y | Beantworte alle Fragen mit Ja anstatt sie zu stellen.
-u | Zeige eine Liste der Pakete die geupgraded werden.

Es können mehrere Pakete in einer Zeile zur Installation ausgewählt werden. Pakete, die über das Netzwerk oder Internet heruntergeladen wurden, werden im Verzeichnis /var/cache/apt/archives für spätere Installationen gespeichert.

Ebenfalls kann man Pakete zum Entfernen auf derselben Zeile angeben, indem man ein -direkt hinter den Paketnamen hängt wie im folgenden:

root@linux # apt-get install nautilus gnome-panel-
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
bonobo libmedusa0 libnautilus0
The following packages will be REMOVED:
gnome-applets gnome-panel gnome-panel-data gnome-session
The following NEW packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
Need to get 8329kB of archives. After unpacking 2594kB will be used.
Do you want to continue? [Y/n]

Im Abschnitt Pakete entfernen finden Sie weitere Details zum Entfernen von Paketen.

Wenn Sie ein installiertes Paket irgendwie beschädigt haben oder einfach die Dateien eines Paketes mit der aktuellsten verfügbaren Version neu installieren möchten, können Sie die Option --reinstall wie im folgenden nutzen:

root@linux # apt-get --reinstall install gdm Reading Package Lists... Done Building Dependency Tree... Done 0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded. Need to get 0B/182kB of archives. After unpacking 0B will be used. Do you want to continue? [Y/n]

Die Version des APT, die zur Erstellung dieser Anleitung benutzt wurde, ist Version 0.5.3, die aktuelle Version in Debian unstable (sid) zur Zeit als sie geschrieben wurde. Wenn diese Version installiert ist, kann APT auf Ihren Wunsch noch mehr: Sie können ein Kommando der Form apt-get install paket/distribution benutzen, um ein Paket einer anderen Distribution zu installieren, oder apt-get install package=version. Zum Beispiel:

root@linux # apt-get install nautilus/unstable

Dies installiert nautilus aus der Distribution unstable, auch wenn die aktuell laufende Distribution stable ist. Mögliche Werte für distribution sind stable, testing, und unstable.

Meistens ist es besser, die Option -t zu benutzen, um eine Distribution zu wählen, was dazu führt, dass apt-get diese Distribution beim Auflösen von Abhängigkeiten bevorzugt.

WICHTIG: Die unstable-Version von Debian ist die Version, in welcher neue Versionen von Debian-Paketen zuerst erscheinen. Diese Distribution sieht alle Änderungen, die an Paketen vorgenommen werden, kleinere und größere, welche mehrere Pakete oder das ganze System betreffen können. Aus diesem Grund sollte sie nicht von unerfahrenen Benutzern oder solchen, die geprüfte Stabilität brauchen, verwendet werden.

Die testing-Distribution ist ein wenig besser als unstable was Stabilität angeht, jedoch sollte für Produktionssysteme die Distribution stable benutzt werden.

#### 3.3 Pakete entfernen

Wenn ein Paket nicht mehr gebraucht wird, kann es mit APT vom System entfernt werden. Geben Sie einfach apt-get remove package ein. Zum Beispiel:

root@linux # apt-get remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]

Wie im obigen Beispiel zu sehen ist, kümmert sich APT ebenfalls um das Entfernen der Pakete, die das Paket, das Sie entfernen wollen, benötigen. Es gibt keine Möglichkeit, Pakete mit APT zu entfernen, ohne gleichzeitig die Pakete zu entfernen, die von dem entfernten Paket abhängen.

Wenn man apt-get ausführt wie oben angegeben, werden die Pakete entfernt, aber die Konfigurationsdateien, falls es welche gibt, bleiben auf dem System. Für eine komplette Entfernung der Pakete, sehen Sie folgendes Beispiel:

root@linux # apt-get --purge remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets* gnome-panel* gnome-panel-data* gnome-session* 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]

Der * hinter den Namen der Pakete, die vom zu entfernenden Paket abhängen, bedeutet, dass deren Konfigurationsdateien ebenso entfernt werden.

Genau wie bei der Methode install kann man auch bei remove ein Symbol benutzen, um die Wirkung für ein einzelnes Paket umzukehren. Hier fügt man einem Paket ein + zu und das Paket wird installiert, anstatt entfernt zu werden.

root@linux # apt-get --purge remove gnome-panel nautilus+
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
The following packages will be REMOVED:
gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
The following NEW packages will be installed:
bonobo libmedusa0 libnautilus0 nautilus
0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
Need to get 8329kB of archives. After unpacking 2594kB will be used.
Do you want to continue? [Y/n]

apt-get listet die Pakete auf, die extra installiert werden (die gebraucht werden, damit das Programm einwandfrei funktionieren kann), die entfernt werden und die installiert werden (hier werden die extra-Pakete noch einmal mit aufgelistet).

#### 3.4 Upgrade von Paketen

Das Aktualisieren von Paketen ist eine tolle Sache mit APT. Es braucht dafür nur einen einzigen Befehl: apt-get upgrade. Man kann diesen benutzen, um Pakete aus der gleichen Distribution zu aktualisieren, oder aus einer neuen Distribution, obwohl für letzteres apt-get dist-upgrade empfehlenswerter ist; siehe Upgrade einer Debian-Version für weitere Einzelheiten.

Es ist sinnvoll, diesen Befehl mit der Option -u auszuführen. Diese Option lässt APT die komplette Liste der Pakete anzeigen, die aktualisiert werden sollen. Ohne diese Option aktualisiert man quasi blind. APT lädt die aktuellsten Versionen aller Pakete herunter und installiert sie in der richtigen Reihenfolge. Es ist wichtig, dass vor jedem Aktualisieren der Pakete apt-get update ausgeführt wird. Siehe Abschnitt Update der Liste der verfügbaren Pakete. Zum Beispiel:

root@linux # apt-get -u upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages have been kept back
cpp gcc lilo
The following packages will be upgraded
adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp
indent
ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0
libesd0-dev
libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0
libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc
29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used.
Do you want to continue? [Y/n]

Das Ganze ist extrem einfach. Die ersten paar Zeilen sagen, dass einige Pakete zurückgehalten werden (have been kept back). Das bedeutet, dass es neuere Versionen dieser Pakete gibt, die aus irgendeinem Grund nicht installiert werden. Mögliche Gründe sind unerfüllbare Abhängigkeiten (z.B. wenn ein Paket, von dem das neue Paket abhängt, nicht im Archiv verfügbar ist) oder neue Abhängigkeiten (das Paket hängt nun von neuen Paketen ab).

Es gibt keine saubere Lösung für das erste Problem. Für den zweiten Fall kann man apt-get install für das spezielle Paket ausführen, das zurückgehalten wurde, da dann auch die Abhängigkeiten aufgelöst werden. Eine noch sauberere Lösung ist es, dist-upgrade zu benutzen. Siehe Abschnitt Upgrade einer Debian-Version.

#### 3.5 Upgrade einer Debian-Version

Diese Funktion erlaubt es, ein ganzes Debian-System entweder über das Internet oder von einer neuen CD (die sie kaufen oder aus dem Internet herunterladen können) auf einmal zu aktualisieren.

Ausserdem ist es sinnvoll, wenn an den Abhängigkeiten zwischen den Paketen Änderungen vorgenommen wurden. Mit apt-get upgrade werden solche Pakete nicht installiert (sie werden auf dem derzeitigen Stand gehalten kept back).

Wenn auf Ihrem System z.B. Revision 0 der stabilen Debian-Version läuft und Sie sich Revision 3 auf CD kaufen, können Sie APT benutzen, um ein Upgrade auf die neue Version von CD durchzuführen. Dafür benutzen Sie apt-cdrom (siehe Abschnitt Hinzufügen einer CD-ROM in die sources.list), um die CD zu ihrer /etc/apt/sources.list hinzuzufügen und führen Sie apt-get dist-upgrade aus.

Es ist wichtig zu wissen, dass APT immer nach der aktuellsten Version eines Pakets sucht. Wenn also Ihre /etc/apt/sources.list auf ein Archiv zeigt, das eine neuere Version eines Pakets enthält als sich auf der CD befindet, lädt APT das Paket aus diesem herunter.

In dem Beispiel aus Upgrade von Paketen sehen wir, dass manche Pakete nicht aktualisiert wurden (kept back). Wir werden dieses Problem nun mit der Funktion dist-upgrade lösen:

root@linux # apt-get -u dist-upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
Calculating Upgrade... Done
The following NEW packages will be installed:
cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1
libpcre2 logrotate mailx
The following packages have been kept back
lilo
The following packages will be upgraded
adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common
ftp gcc
indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0
libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev
liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit
procps psmisc
31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
Need to get 0B/7098kB of archives. After unpacking 3118kB will be used.
Do you want to continue? [Y/n]

Hier ist zu bemerken, dass die Pakete aktualisiert werden, aber neue Pakete (neue Abhängigkeiten der aktualisierten Pakete) zusätzlich installiert werden. Weiterhin wird lilo immer noch nicht aktualisiert, es gibt möglicherweise schwerwiegendere Probleme mit diesem Paket. Wir können das prüfen, in dem wir folgendes ausführen:

root@linux # apt-get -u install lilo
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
logrotate mailx
The following packages will be REMOVED:
debconf-tiny
The following NEW packages will be installed:
cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
logrotate mailx
The following packages will be upgraded
lilo
1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded.
Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used.
Do you want to continue? [Y/n]

Hier erfahren wir, dass das neue lilo einen Konflikt mit dem Paket debconf-tiny hat, was bedeutet, dass wir es nicht installieren (oder aktualisieren) können, ohne debconf-tiny zu entfernen.

Um herauszufinden, wovon ein Paket zurückgehalten oder entfernt wird, können Sie folgendes tun:

root@linux # apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
Calculating Upgrade... Starting
Starting 2
Investigating python1.5
Package python1.5 has broken dep on python1.5-base
Considering python1.5-base 0 as a solution to python1.5 0
Holding Back python1.5 rather than change python1.5-base
Investigating python1.5-dev
Package python1.5-dev has broken dep on python1.5
Considering python1.5 0 as a solution to python1.5-dev 0
Holding Back python1.5-dev rather than change python1.5
Try to Re-Instate python1.5-dev
Done
Done
The following packages have been kept back
gs python1.5-dev
0 packages upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

Auf diesem Wege ist es einfach festzustellen, dass das Packet python1.5-dev wegen einer ungelösten Abhängigkeit zu python1.5 nicht installiert werden kann.

#### 3.6 Ungenutzte Pakete entfernen: apt-get clean and autoclean

Wenn ein Paket installiert werden soll, bezieht APT von den Quellen, die in der /etc/apt/sources.list aufgelistet sind, die nötigen Dateien, legt sie in ein lokales Archiv (/var/cache/apt/archives/) und fährt mit der Installation fort. (sehen Sie Installieren von Paketen).

Nach und nach kann dieses lokale Archiv immer größer werden und eine Menge Platz auf der Festplatte belegen. Auch für diesen Fall bietet APT Werkzeuge an, um sein lokales Archiv zu warten: apt-get clean und autoclean Methoden.

apt-get clean entfernt alles bis auf Lock-Dateien aus /var/cache/apt/archives/ und /var/cache/apt/archives/partial/. In der Folge muss APT ein Paket, das Sie erneut installieren wollen auch erneut herunterladen.

apt-get autoclean entfernt nur Pakete, die nicht mehr heruntergeladen werden können.

Das folgende Beispiel sollte zeigen, wie apt-get autoclean arbeitet:

root@linux # ls /var/cache/apt/archives/logrotate* /var/cache/apt/archives/gpm* logrotate_3.5.9-7_i386.deb logrotate_3.5.9-8_i386.deb gpm_1.19.6-11_i386.deb

In /var/cache/apt/archives liegen zwei Versionen des Pakets logrotate und eine Version des Pakets gpm.

root@linux # apt-show-versions -p logrotate logrotate/stable uptodate 3.5.9-8 root@linux # apt-show-versions -p gpm gpm/stable upgradeable from 1.19.6-11 to 1.19.6-12

apt-show-versions zeigt, dass logrotate_3.5.9-8_i386.deb die aktuelle Version von logrotate bereitstellt, daher wird logrotate_3.5.9-7_i386.deb nicht mehr benötigt. Ebenso wird gpm_1.19.6-11_i386.deb nicht mehr benötigt, da eine aktuellere Version von den Debian-Archiven heruntergeladen werden kann.

root@linux # apt-get autoclean Reading Package Lists... Done Building Dependency Tree... Done Del gpm 1.19.6-11 [145kB] Del logrotate 3.5.9-7 [26.5kB]

apt-get autoclean entfernt also nur die alten Pakete. Für weitere Informationen über apt-show-versions sehen Sie Upgrade von Paketen spezieller Debian-Versionen.

#### 3.7 APT unter dselect verwenden...

dselect ist ein Programm, das Debian-Benutzern hilft, zu installierende Pakete auszuwählen. Viele halten es für zu kompliziert und vielmehr langweilig, aber mit ein wenig Übung kann man durchaus Gefallen an seiner konsolen-basierten ncurses-Oberfläche finden.

Eine Stärke von dselect ist es, dass es mit den Möglichkeiten umgehen kann, die Debian-Pakete haben, um andere Pakete zu empfehlen (suggesting) oder vorzustellen (recommending). Um es zu benutzen, rufen Sie dselect als root auf. Wählen Sie apt als Zugriffsmethode. Das ist zwar nicht dringend notwendig, aber wenn Sie keine CD-ROM benutzen und Pakete aus dem Internet herunterladen möchten, ist es der beste Weg.

Um ein besseres Verständnis über die Benutzung von dselect zu erhalten, lesen sie die Dokumentation auf der Debian-Homepage http://www.debian.org/doc/ddp.

Nachdem Sie Ihre Auswahl mit dselect getroffen haben, benutzen Sie folgendes Kommando

root@linux # apt-get -u dselect-upgrade

wie im folgenden Beispiel:

root@linux # apt-get -u dselect-upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
lbxproxy
The following NEW packages will be installed:
bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0
gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl
libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules
libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk
tidy
util-linux-locales vacation xbill xplanet-images
The following packages will be upgraded
debian-policy
1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded.
Need to get 7140kB of archives. After unpacking 16.3MB will be used.
Do you want to continue? [Y/n]

Im Vergleich: apt-get dist-upgrade auf demselben System:

root@linux # apt-get -u dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Done The following packages will be upgraded debian-policy 1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 421kB of archives. After unpacking 25.6kB will be freed. Do you want to continue? [Y/n]

Viele der Pakete im oberen Beispiel werden installiert, weil andere Pakete sie empfehlen (suggest or recommend). Andere werden aufgrund unserer Auswahl, die wir beim Navigieren durch die Paketlisten von dselect getroffen haben, installiert oder entfernt (Im Falle von lbxproxy z. B.). dselect kann in Verbindung mit APT ein nützliches Werkzeug sein.

#### 3.8 Wartung eines "gemischten" Systems

Viele benutzen die testing-Distribution, da sie stabiler ist als unstable und aktueller als stable ist. Benutzer, die aktuelle Versionen von Paketen wollen, sich aber nicht trauen, ihr ganzes System auf unstable umzustellen, haben die Möglichkeit testing und unstable zu mischen. Auf der anderen Seite möchten konservativere Benutzer vielleicht stable und testing mischen.

Für diesen Zweck muss die folgende Zeile in die /etc/apt/apt.conf eingefügt werden:

/etc/apt/apt.conf

    APT::Default-Release "testing";

Um nun Pakete aus unstable zu installieren, muss die Option -t benutzt werden:

root@linux # apt-get -t unstable install Paketname

Vergessen Sie aber nicht, dass sie, um ein Paket aus einer anderen Debian Version zu installieren, eine Quellzeile in die /etc/apt/sources.list einfügen müssen. In unserem Beispiel brauchen wir Quellzeilen für die unstable-Distribution neben denen für testing.

#### 3.9 Upgrade von Paketen spezieller Debian-Versionen

apt-show-versions bietet einen sicheren Weg für Benutzer gemischter Systeme, um ihre Systeme zu aktualisieren, ohne mehr aus der weniger stabilen Distribution zu installieren als sie im Sinn haben. Zum Beispiel ist es möglich, nur die unstable-Pakete zu aktualisieren, in dem man folgendes ausführt:

root@linux # apt-get install `apt-show-versions -u -b | grep unstable`

#### 3.10 Wie man bestimmte Versionen eines Paketes behält (komplex)

Manchmal gibt es Gründe, etwas in einem Paket zu verändern, und es fehlt die Zeit oder die Lust, diese Dinge auf neue Versionen des Paketes zu übertragen. Vielleicht haben Sie auch gerade ihre Debian-Version auf 3.0 aktualisiert, aber möchten trotzdem ein Paket aus Version 2.2 behalten. Es ist möglich, die installierte Version zu markieren (pin), so dass sie nicht aktualisiert wird.

Diese Möglichkeit einzusetzen ist einfach. Editieren Sie einfach die Datei /etc/apt/preferences.

Das Format ist trivial:

/etc/apt/preferences

    Package: <Paket>
    Pin: <Pin-Definition>
    Pin-Priority: <Priorität des Pins>

Um zum Beispiel das Paket sylpheed in Version 0.4.99 zu behalten, fügen wir folgendes hinzu:

/etc/apt/preferences

    Package: sylpheed
    Pin: version 0.4.99*

Beachten Sie das * (Sternchen/Asterisk). Es funktioniert als Platzhalter; das bedeutet, dass dieser Pin für alle Versionen, die mit 0.4.99 beginnen, gültig sein soll. Das ist nötig, da Pakete in Debian eine Nummer für die Debian-Revision enthalten und ich nicht verhindern möchte, dass diese Revisionen installiert werden. Folglich werden die Versionen 0.4.99-1 und 0.4.99-10 installiert, sobald sie verfügbar sind. Beachten Sie, dass Sie das vermutlich nicht möchten, wenn Sie das Paket modifiziert haben, da diese Änderungen dann verloren gehen.

Das Feld Pin-Priority ist optional; wenn nicht anders spezifiziert, hat der Pin die Priorität 989.

Lassen Sie uns einen Blick darauf werfen, wie die Pin-Priorität funktioniert. Eine niedrigere Priorität als Null bewirkt, dass das Paket nie installiert wird. Prioritäten von 0 bis 100 bezeichnen Pakete, die nicht installiert sind und keine verfügbare Version haben. Solche Pakete werden in der Auswahl verfügbarer Versionen nicht berücksichtigt. Die Priorität 100 bezeichnet ein installiertes Paket. Damit eine installierte Version von einer anderen ersetzt wird, muss die Priorität über 100 liegen.

Prioritäten über 100 sagen aus, dass ein Paket installiert werden soll. Normalerweise wird ein installiertes Paket nur durch neuere Versionen ersetzt. Alle Prioritäten zwischen 100 und 1000 (inklusive) führen zu diesem Normalverhalten. Ein Paket mit solcher Priorität wird nicht durch eine niedrigere Version ersetzt. Wenn ich also zum Beispiel sylpheed 0.5.3 installiert habe und einen Pin auf sylpheed 0.4.99 mit der Priorität 999 definiert habe, wird Version 0.4.99 nicht installiert werden, um den Pin zu erfüllen. Um Pakete deaktualisieren zu können, um einen Pin zu erfüllen, braucht der Pin eine Priorität von über 1000.

Ein Pin kann für die Version, das Release oder die Herkunft (origin) definiert werden.

Für einen Pin auf die Version, wie oben beschrieben, kann man sowohl Versionsnummern als auch Platzhalter (Sternchen) verwenden. Letzteres spezifiziert mehrere Versionen in einem Pin.

Die Option Release benutzt die Release-Datei aus den APT-Archiven oder von den CDs. Die Brauchbarkeit dieser Version verfällt, wenn Sie APT-Archive benutzen, die diese Datei nicht zur Verfügung stellen. Sie können den Inhalt der Release-Dateien, die Sie haben in /var/lib/apt/lists/ nachlesen. Die Parameter für ein Release sind: a (Archiv(Archive)), c (Sektion(Component)), v (Version(Version)), o (Herkunft(Origin)) und l (Label(Label)).

Beispiel:

/etc/apt/preferences

    Package: *
    Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian
    Pin-Priority: 1001

In diesem Beispiel wählen wir die Debian-Version 2.2* (was 2.2r2, 2.2r3 sein kann -- r* bezeichnet so genannte point releases, welche normalerweise Sicherheitsupdates und andere extrem wichtige Updates enthalten), das stable Archiv, die Sektion main (im Gegensatz zu contrib oder non-free) und Herkunft und Label Debian. Herkunft (o=) bezeichnet, wer die Release-Datei erstellt hat, das Label (l=) definiert den Namen der Debian-Distribution: Debian für Debian selbst und Progeny für Progeny Linux zum Beispiel. Ein Beispiel einer Release-Datei:

root@linux # cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release Archive: stable Version: 2.2r3 Component: main Origin: Debian Label: Debian Architecture: i386