26.02.2014 Aufrufe

Linux-Magazin Clean Linux (Vorschau)

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Titelthema<br />

www.linux-magazin.de Apt intern 09/2013<br />

32<br />

Der Problem-Resolver weist jedem Paket<br />

einen Punktewert zu (Score), der seine<br />

Wichtigkeit ausdrückt. Eine hohe Zahl<br />

verweist auf ein wichtiges Paket. Um die<br />

Scores einzelner Pakete zu betrachten,<br />

ruft man die Option »‐o Debug::pkgProblemResolver::ShowScores=true«<br />

auf. Die<br />

Berechnung dieses Wertes ist relativ kompliziert,<br />

denn es fließen einige Faktoren<br />

ein wie die Priority und das »Essential:<br />

yes«-Flag. Auch erhalten installierte Pakete<br />

eine höhere Priorität.<br />

Als Nächstes wird untersucht, wie viele<br />

andere Pakete ein bestimmtes Paket als<br />

Abhängigkeiten voraussetzen (Reverse<br />

Dependencies). Jede Abhängigkeit erhöht<br />

den Score. Dies stellt sicher, dass zentrale<br />

Bibliotheken einen hohen Stellenwert erhalten.<br />

So hat etwa die »libgcc1« auf einem<br />

typischen Desktop einen Wert von<br />

mehr als 2000.<br />

An dieser Stelle werden auch Provides<br />

berücksichtigt. Zum Beispiel erhalten<br />

Pakete, die den »notification‐daemon« in<br />

ihrer Provides-Liste führen, einen höheinstalliert<br />

solche Pakete, indem er die Option<br />

»‐‐install‐suggests« aktiviert, und<br />

sudo apt‐get install ‐‐install‐suggests<br />

‐‐fix‐policy<br />

schaut nach, welche »suggests« auf dem<br />

System fehlen – in der Regel sind das<br />

recht viele.<br />

Kommt es zu Konflikten, wird zwischen<br />

Conflicts und Breaks unterschieden. Ein<br />

Konflikt tritt auf, wenn sich zwei Pakete,<br />

die identische Dateien enthalten, zur selben<br />

Zeit auf dem Dateisystem befinden,<br />

etwa »/usr/sbin/sendmail«. Ein Break<br />

weist auf einen schwächeren Konflikt<br />

hin: Er tritt auf, wenn sich zwei Pakete<br />

zur gleichen Zeit im Installed-Zustand<br />

befinden – unpacked dürfen sie hingegen<br />

sein.<br />

Typischerweise nutzen Breaks eine Versionsnummer,<br />

zum Beispiel »Break: foo<br />

( ( devel )<br />

08 Broken build‐essential:amd64 Depends on dpkg‐dev [<br />

amd64 ] < 1.16.1.2ubuntu7.1 > ( utils ) (>= 1.13.5)<br />

09 Considering dpkg‐dev:amd64 10001 as a solution to<br />

build‐essential:amd64 0<br />

10 Removing build‐essential:amd64 rather than change<br />

dpkg‐dev:amd64<br />

11 Done<br />

ändert, wodurch es für ältere Versionen<br />

anderer Software, die dieses Interface<br />

ebenfalls nutzen, unbenutzbar wird. Apt<br />

versucht daher im obigen Beispiel, das<br />

Paket »foo« auf eine Version 1.0 oder<br />

besser zu aktualisieren.<br />

Installation und Upgrades<br />

Gibt der User eine Installation oder ein<br />

Upgrade in Auftrag, schaut Apt zunächst<br />

in seinem Cache nach, ob es den Paketnamen<br />

kennt. Abhängig von der Policy<br />

wählt es die Candidate-Version aus und<br />

markiert diese für eine Installation oder<br />

ein Upgrade. Als Nächstes iteriert Apt<br />

über die Liste der Abhängigkeiten und<br />

markiert alle noch nicht erfüllten oder<br />

neuen Abhängigkeiten zur Installation.<br />

Alle negativen Abhängigkeiten (wie<br />

Conflicts und Breaks) markiert es zum<br />

Löschen.<br />

Der Admin kann Apt bei diesem Teil<br />

der Arbeit beobachten, indem er das<br />

Flag »‐o Debug::pkgDepCache::Auto Install=true«<br />

setzt. Listing 1 visualisiert<br />

über die eingerückten »Installing«-<br />

Anweisungen, wie Libapt die Abhängigkeiten<br />

auflöst, indem sie Schritt für<br />

Schritt den Abhängigkeitsbaum durchwandert.<br />

Noch weitere Details fördert<br />

»-o Debug::pkgDepCache::Marker=1«<br />

zutage.<br />

Anders als bei einer Installation betrifft<br />

ein Upgrade meist eine große Zahl von<br />

Paketen. Das Kommandozeilentool<br />

Apt‐get unterscheidet zwei Arten von<br />

Upgrades: »sudo apt‐get upgrade« installiert<br />

alle neuen Versionen von Software,<br />

die nicht die Installation oder das Löschen<br />

weiterer Pakete erfordern. Beim<br />

Kommando »sudo apt‐get dist‐upgrade«<br />

gibt es diese Einschränkung nicht. Weil<br />

etwa ein neuer Kernel aufgrund von ABI-<br />

Änderungen auch die stabilen Varianten<br />

neuer Pakete einfordert, ist ein »sudo<br />

apt‐get dist‐upgrade« für Upgrades im<br />

Allgemeinen die bessere Wahl.<br />

Der Algorithmus für »upgrade« arbeitet<br />

sehr einfach: Er iteriert über alle installierten<br />

Pakete und markiert sie für ein<br />

Upgrade, wobei er die Option »AutoInstall«<br />

explizit ausklammert. Der »ProblemResolver«<br />

setzt dann problematische<br />

Abhängigkeit zurück auf »keep«.<br />

Der Algorithmus für »dist‐upgrade« arbeitet<br />

ähnlich, allerdings nutzt er »AutoInstall«,<br />

um neue Abhängigkeiten zu<br />

installieren. Auch neue Pakete vom Typ<br />

»Essential: yes« landen damit auf dem<br />

Rechner. Anschließend startet der »ProblemResolver«,<br />

um die verbleibenden<br />

fehlerhaften Abhängigkeiten in Ordnung<br />

zu bringen.<br />

Der Problemlöser<br />

Operationen wie »install«, »dist‐upgrade«<br />

oder »remove« führen unter Umständen<br />

dazu, dass der Cache inkonsistent wird,<br />

das heißt, Abhängigkeiten verletzt oder<br />

Konflikte nicht aufgelöst werden. Dies<br />

kann zum Beispiel passieren, wenn die<br />

Installation von Paket A ein Paket B installiert,<br />

das in Konflikt mit einem bereits<br />

installierten Paket steht.<br />

An dieser Stelle kommt der so genannte<br />

Problem-Resolver von Apt ins Spiel. Er<br />

soll eine Lösung für die Inkonsistenzen<br />

finden, seine Handlungen lassen sich über<br />

»‐o Debug::pkgProblemResolver=true«<br />

beobachten. Neben dem Problem-Resolver<br />

gibt es noch weitere Implementierungen:<br />

So bringt Aptitude eine eigene<br />

Variante mit, daneben gibt es externe<br />

Tools wie »aspcud«.<br />

Pakete mit Punkten

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!