Debian - apt pinning

In diesem kleinen Beitrag arbeite ich das LUG Thema vom 06.03.2024 auf. Wir hatten dort das Thema Pinning von deb Paketen unter Debian. Eine weiterführende Dokumentation ist auch direkt auf der Debian Seite 1) https://wiki.debian.org/AptConfiguration zu finden.

Was ist apt

apt oder auch apt-get ist die Paketverwaltung unter Debian basierte Linux Distribution 2) Wie Linux Mint der Ubuntu zum Beispiel.

Was ist das Ziel?

Mit apt pinning möchte man in der Paketverwaltung bestimmte Programme bei der Installation priorisieren.
Beispiel:
Du möchtest als Standarddistribution Debian 12 bookworm verwenden, aber bestimmt Pakete aus einer anderen Version von Debian (oder einer anderen Distribution) dazu installieren.

Wichtig: Wenn du Pakete aus anderen Distributionen oder Versionen mischst, kann es zu ungewollten Seiteneffekte kommen. Daher gebe ich auf die Anleitung keine Funktionsgarantie und jeder führt diese auf eigenes Risiko durch.

Wie gehe ich vor?

Erstelle unter /etc/apt/source.list.d eine .list mit dem entsprechenden Repo, was du verwenden willst. -> Als Vorlage kann die /etc/apt/source.list dienen. -> Kopiere diese in den Ordner /etc/apt/source.list.d/ und bennen diese vorzugsweise um. Beispiel: cp /etc/apt/source.list /etc/apt/source.list.d/foo.list -> Ändere die Einträge in der Datei mit einem Editor deiner Wahl auf das passende Repo ab.

Lege unter /etc/apt/preferences.d/ eine Datei an, in der du das Pinning konfigurierst. -> Ich gebe der Datei immer voran gestellt eine Nummer und dann, was diese enthalten soll. -> Beispiel: 99-debian

Öffne die Datei mit dem Editor Deiner Wahl und ändere die Einträge wie folgt.

Package: * Pin: release a=unstable Pin-Priority: 500 Package: * Pin: release a=stable Pin-Priority: 900 Package: firefox* Pin: release a=unstable Pin-Priority: 1000 Package: keepass* Pin: release a=unstable Pin-Priority: 1000 Package: flameshot* Pin: release a=unstable Pin-Priority: 1000 Package: filius* Pin: release a=unstable Pin-Priority: 1000 Package: remmina* Pin: release a=unstable Pin-Priority: 1000 Package: libreoffi* Pin: release a=unstable Pin-Priority: 1000 Package: podman* Pin: release a=unstable Pin-Priority: 1000 Package: docker* Pin: release a=unstable Pin-Priority: 1000 Package: distrobox* Pin: release a=unstable Pin-Priority: 1000 Package: remmina* Pin: release a=unstable Pin-Priority: 1000 Package: qflipper* Pin: release a=unstable Pin-Priority: 1000 Package: mfcuk Pin: release a=unstable Pin-Priority: 1000 Package: mfoc Pin: release a=unstable Pin-Priority: 1000 Package: fritzing* Pin: release a=unstable Pin-Priority: 1000 Package: arduino* Pin: release a=unstable Pin-Priority: 1000

Die ersten dreier Block setzen die Priorität für sid/unstable auf den Wert 500. Das bedeutet, dass die Pakete aus diesem Repo installiert werden, wenn Sie benötigt werden.

Der zweite dreier Block setzte stable auf die Priorität 900. Dadurch liegt die Priorität für stable höher als 500 von unstable und dem Paket aus dem stabilen Zweck vorrangig installiert, wenn die dort Pakete mit einer niedrigeren Versionsnummer vorhanden sind.

Die nachfolgenden Blöcke priorisieren die Pakete aus unstable mit einer 1000. Die Priorität 1000 sagt, dass die Pakete explizit aus unstable installiert werden sollen und die nötigen Abhängigkeiten zwingend nach gezogen werden sollen. Dabei prüft apt ob er Abhängigkeiten aus dem stable und unstable Zweig der Repositorys auflösen kann.

Schlusswort

Wenn jemand einen Fehler findet, bitte sendet mir diesen zu. Ich korrigiere dann den Eintrag. Falls ich noch auf etwas eingehen soll, dann bitte auch eine Info. Ansonsten findet man sehr gute Anleitungen im Netz dazu, Ich hoffe ich konnte etwas Licht ins Dunkel bringen.