Ein fremdes Debian APT-Repository einschränken

Oft genug steht man vor dem Problem: Man braucht ein bestimmtes Stück Software, doch in Debian ist es nicht zu finden. Sei es nun aus rechtlichen, ideologischen oder Unbeachtetheits-Gründen nicht im Kern-Debian; irgendwo muss das Programm her.

Trägt man nun ein fremdes APT-Repository in seine /etc/apt/sources.list ein, scheint die Welt erstmal in Ordnung; doch setzt man sich damit auch gewissen Risiken aus. Dieser Artikel versucht, dem Leser ein größeres Maß an Kontrolle über die Nutzung des Fremd-Repository zu geben.

(Ab hier nur skizzenhafte Vor-Ausarbeitung.)

Annahmen

Ann.: /etc/apt/sources.list enthält:

deb     http://foo.example.com/debian stable-bar main
deb-src http://foo.example.com/debian stable-bar main

Release enthält:

Origin: Fooluff Bartor
Label: bar
Codename: etch-bar
Suite: stable-bar

Grundabsicherung

In die /etc/apt/preferences tun:

Explanation: Ignore packages from the foo repository unless explicitly allowed.
Explanation:
Package: *
Pin: origin foo.example.com
Pin-Priority: -1

Package: *
Pin: release o=Fooluff Bartor
Pin-Priority: -1

Package: *
Pin: release l=bar
Pin-Priority: -1

Package: *
Pin: release a=etch-bar
Pin-Priority: -1

Package: *
Pin: release a=stable-bar
Pin-Priority: -1

Einzelne Pakete erlauben

Möchte man nun Paket baz installieren:

Explanation: Use baz from the foo repository because of $reason.
Package: baz
Pin: release l=bar
Pin-Priority: 500

Reflektion

Nun kann der Betreiber des externen Repositories einem zumindest nicht mehr unbemerkt einfach "Ersatz" für Kern-Debian unterschieben, auch wenn der Key seines Repositories in apt-key(8) eingetragen ist.

Zu Beachten ist allerdings: Ein rm -rf / ins post-inst vom Paket baz tun (oder schlimmeres) kann man natürlich immer.

Die Hinweise in diesem Artikel sollen in erster Linie größere Kontrolle über die Paketwahl sowie einen praktischen Einstieg in apt_preferences(5) ermöglichen; sie ersetzen nicht das nötige Vertrauen in den Betreiber eines Fremd-Repositories (oder der es hostenden Maschinen).

Note: This document is (somewhat) valid HTML4.01, not XHTML.