Ein zentraler Ansatz der meisten heute verwendeten Linux Distributionen ist das man Software nicht wie unter Windows oder MacOS üblich mit einem Installationsprogramm installiert, sondern das man diese zentral über eine einzige Stelle bezieht: Die Paketverwaltung.

Nun, so eine Paketverwaltung selbst stellt diese jedoch noch nicht bereit, es ist nur ein Tool welches die Installation aus den sog. Paketquellen oder auch Repositories genannten Speicherorten ermöglicht.

Dieser Ansatz ist gut, der Anwender bekommt (hoffentlich) alles was er benötigt über eine zentrale Stelle, noch dazu werden Programme aus den für die Paketverwaltung verfügbaren quellen auch automatisch auf den neuesten (sicheren) Stand gebracht. Der Anwender muss sich also nicht wie z.B. unter Windows damit beschäftigen wie ein bestimmtes Programm auf die neueste Version aktualisiert werden kann.

Ein Nachteil davon ist allerdings das der Anwender eben nur Programme in der Version bekommt welche der Distributor vorsieht, z.B. ist Firefox oder LibreOffice bei den meisten Distributionen immer 1-2 Versionen hinter der aktuellen - oft sogar noch etwas mehr.

Eine Aktualisierung auf neue Versionen kann viele verschiedene Gründe haben, meistens sind es neue Funktionen oder ein kritischer Fehler welcher in der alten Version nicht behoben wurde und damit den Arbeitsablauf stört.

Der Anwender kann nun Software auf mehrere Arten aktualisieren, die gängigsten hierbei:

  1. Das Paket an der Paketverwaltung vorbei bauen und installieren.
  2. Das Paket für die jeweilige Distribution neu bauen und mit der Paketverwaltung manuell installieren.
  3. Eine externe Quelle einfügen welche das entsprechende Paket bereitstellt.

Möglichkeit 1, also das Paket einfach schnell aus den Quellen bauen ist meistens die dümmste Idee. Bei einem Update des Systems kann es sein das die Paketverwaltung der Meinung ist (die weiß es ja) das bestimmte Dateien zu anderen Paketen gehören, bei der Installation des Paketes wurden diese jedoch ohne die Paketverwaltung zu informieren überschrieben oder anderweitig verändert. Mit der Zeit sorgen zunehmend mehr und mehr Pakete welche manuell gebaut, und oft nicht mehr sauber deinstalliert werden können, dazu das man ein System bekommt welches sich komisch verhält, vor allem wenn man sich mit der Paketverwaltung beschäftigt oder diese nutzt.

Möglichkeit 2 ist der richtige Ansatz, man baut das Paket für die auf dem System verwendete Paketverwaltung in der passenden Version. Gibt es Konflikte sorgt die Paketverwaltung dafür das diese aufgelöst werden, oder zumindest der Administrator (du!) eine Information über das Problem bekommt. Je nach Buildsystem ist dies mehr oder weniger umständlich, daher wird diese Methode von Laien gemieden :-/

Möglichkeit 3 beschreibt eine Methode bei welcher man seinem System eine oder mehrere zusätzliche Paketquellen unterschiebt. Es muss also nichts manuell gebaut werden, gleichzeitig bekommt man (mit etwas Glück) auch Aktualisierungen über eben diese zusätzliche Quelle.

Die PPAs, also Personal Package Archives, welche Ubuntu seinen Benutzern anbietet sind also eine Variante der Möglichkeit 3, eine zusätzliche Paketquelle.

Wie funktioniert das? Nun, ein Entwickler erstellt eine Anleitung zum Bau des Paketes, lädt diese in einem bestimmten Format in sein PPA und eine Maschine bei Canonical kümmert sich darum das ein Paket gemäß Anleitung gebaut wird. Gibt es hierbei einen Fehler bekommt der Entwickler die entsprechende Fehlermeldung, hat alles funktioniert steht dem Anwender die neue Version zu Verfügung. Bis jetzt klingt das ganze richtig toll, jemand anders kümmert sich darum für dich Pakete zu bauen, fast schon eine win-win Situation ;-)

Jetzt kommen aber die Probleme, bisher waren lediglich einige Mitarbeiter vom Distributor in der Lage dir etwas unsicheres auf dein System zu schieben. Inhalte von Paketquellen (egal welche) werden ja immer nur vom zuständigen Entwickler/Maintainer betreut und gewartet. Bei einem PPA jedoch kann jeder Pakete seiner Wahl einstellen, ich könnte also in mein PPA eine Apache Version hochladen welche mir ein Backdoor installiert. Auch könnte ich eine modifizierte Variante der libc auf deinem System installieren, alles was ich dazu machen muss ist das meine Version eine höhere Nummer als die vom Distributor hat.

Hintergrund ist das Paketverwaltungen bei der Installation nur relativ wenig Sachen prüfen:

  • Paket schon vorhanden?
  • Paketversion aktuell?
  • Abhängigkeiten?
  • Quelle vertrauenswürdig?
  • Gibt es Konflikte bei Dateien, gehört also eine Datei zu mehr als einem Paket?
Beim Punkt Quelle vertrauenswürdig? ist übrigens nur gemeint ob bestimmte Zertifikate und Signaturen der Pakete passen, nicht mehr, nicht weniger.

Natürlich gibt es Möglichkeiten der Paketverwaltung zu sagen das Pakete doch bitte standardmäßig nur aus Quelle X kommen sollen und andere müssen manuell installiert oder aktualisiert werden (Google: apt pinning), dies hilft jedoch nur jemandem der sich damit auskennt. Die meisten Laien werden ohne nachzudenken gemütlich ein PPA nach dem anderen aktivieren, wie weitreichend hierdurch vertrauen verschenkt/ausgesprochen wird ist den Anwendern aber in der Regel nicht bekannt.

Fazit / TLDR

Hier nur ein paar Stichpunkte, zum nachdenken:

  • PPAs können dir Software installieren welche du nicht möchtest, das geht sehr einfach z.B. mit Abhängigkeiten von Paketen.
  • Signaturen von Paketen oder Paketquellen sorgen dafür das ein Paket nicht nach dem Bau verändert wurde, es hat nichts damit zu tun ob ein Entwickler vertrauenswürdig ist, oder eben nicht ;-)
  • PPAs können, wenn diese schlecht gebaut wurden, sehr effektiv dafür sorgen das ein Update deines Systems Probleme macht oder nach dem Update bestimmte Programme ein komisches/unerwartetes verhalten an den Tag legen.
Vermeidet also PPAs wenn es möglich ist, das kann einem jede Menge ärgern sparen ;-)