Paketmanagement mit Zypper

Aus LinuxUser 01/2010

Paketmanagement mit Zypper

© natulrich, 123rf.com

Reißverschluss

Vergessen Sie RPM und YaST: Mit OpenSuses vielseitigem Zypper verwalten Sie Pakete blitzschnell auf der Kommandozeile.

Trotz seines katastrophalen Starts (siehe Kasten “Was lange währt”) ist Zypper das Beste, was OpenSuse seit der Übernahme durch Novell auf die Beine gestellt hat: Das Tool macht die Installation auf der Kommandozeile intuitiv bedienbar, schnell und vor allem einheitlich. Im Folgenden erklären wir die grundlegenden Funktionen von Zypper und stellen ein paar besondere Features für Fortgeschrittene vor.

Als Einstieg bei Problemen oder Fragen empfiehlt sich zypper --help, daneben besitzt Zypper auch eine sehr detaillierte und aktuelle Manpage. Auch in der Konfigurationsdatei /etc/zypp/zypp.conf finden sich sehr viele für das Verständnis des OpenSuse-Paketmanagers [1] hilfreiche Kommentare.

Was lange währt

Während sich heute die meisten Flame-Wars um das Thema KDE oder Gnome, hübsch oder hässlich beziehungsweise cool oder uncool drehen, hatte man in den Anfängen der Linux-Distributionen ein besonders beliebtes Thema für ausgiebige Diskussionen: Das Paketmanagement. Für Einsteiger, die unter Suse YaST 1 starteten und versierte Red-Hat-User, die stolz waren, das Red Hat Package Management zu nutzen, hatte die Debian-Gemeinde höchstens ein Lächeln übrig, blieben diese Tools doch Welten hinter den Möglichkeiten zurück, die apt-get auf der Konsole bot. Um dem ein Ende zu bereiten und auch selbst einen brauchbares Kommandozeilen-Frontend für das Paketmanagement zu haben, begannen Red Hat und Novell nach der Jahrtausendwende damit, eigene konsolenbasierte Tools zu schreiben beziehungsweise von anderen Distributionen zu übernehmen.

Während sich Yum mit dem Wechsel von Red Hat zu Fedora quasi automatisch mit etablierte, kam die Umstellung von YaST auf Zypper relativ rasch und vor allem zu wenig durchdacht. Um ein paar Features für den Suse Linux Enterprise Server 10 bereitzustellen, wollte Novell in die als Basis dienende OpenSuse-Version 10.2 unbedingt den Zenworks-Linux-Management-Daemon (ZLM-Daemon) einbauen. Während Zypper und die zugrundeliegende Bibliothek Libzypp noch halbwegs brauchbar waren, befand sich der ZLM-Client in einem Alpha-Stadium. Die Benutzer bekamen dies in erster Linie daran zu spüren, dass das Installieren eines noch so kleinen Pakets mehrere Minuten dauerte und YaST sich mit dem Zen-Installer nicht einig war, welche Pakete denn es nun zu installieren galt. So erstaunt es denn nicht, dass in dieser Zeit sehr viele Nutzer zu Smart [2] oder Apt4rpm [3] wechselten – oder die Distribution gleich komplett über Bord warfen.

Eine brauchbare Zypper-Version stellte Novell erstmals mit OpenSuse 11.0 bereit, in Sachen Geschwindigkeit kann der Novell-Paketmanager seit 11.1 mit der Apt- und Yum-Konkurrenz mithalten. Novell hat zudem die Entwicklung des Paketmanagements von der Enterprise-Version getrennt: Für die ZLM-Features gibt es das Kommandozeilentool Rug, das in weiten Bereichen zu Zypper kompatibel ist, aber weit weniger Features unterstützt – seit Version 11.2 bietet Zypper davon ziemlich viele: So zeigt zum Beispiel zypper ps nach einer Installation an, welche laufenden Prozesse eine Installation oder ein Update betrifft, zudem lässt sich mit Zypper das Repo-Management, die Suche und die Installation über ein einziges Tool verwirklichen. Auch die fehlertolerante Suche im Stil “Meinten Sie MPlayer?” oder die Installation per Wildcard (zypper install gstreamer-*plugins-*) beherrscht kaum ein anderer Paketmanager (Abbildung 1).

Abbildung 1: Das kann nur Zypper: Installation per Wildcard – mit ausführlichen Informationen zum Geschehen.

Abbildung 1: Das kann nur Zypper: Installation per Wildcard – mit ausführlichen Informationen zum Geschehen.

Eins, zwei, drei

Wer von einem Debian-basierten System auf OpenSuse wechselt, muss eigentlich nur einen Alias von apt-get und apt-cache auf den Befehl zypper setzen – und schon kann er quasi wie zu Hause Pakete installieren, löschen und suchen: Der Befehl zypper search Paket überprüft, ob es ein fragliches Paket gibt, zypper install Paket spielt ein Programm ein. Mit zypper remove Paket löschen Sie es später wieder aus dem System. Ein bereits installiertes Paket spielen Sie mit der Option -f erneut ein:

# zypper install -f Paket

Im Unterschied zu Apt-get zeigt Zypper bei der letzten Funktion auch Pakete an, die sich in der Schreibweise leicht unterscheiden. Es sucht zudem in der Standardeinstellung nur im Paketnamen und in der Kurzbeschreibung. Dadurch fällt die Trefferliste in der Regel etwas kürzer aus, und man findet das gesuchte Programm relativ schnell (in etwa wie bei apt-cache search --names-only).

Ein weiterer großer Unterschied in der Arbeitsweise von Zypper und Apt oder Yum besteht darin, dass Zypper jedes aus dem Internet heruntergeladene Paket sogleich installiert und nicht auf sämtliche Abhängigkeiten wartet. Das kann bei einer schlechten Internetverbindung zu Problemen führen, beschleunigt jedoch in der Regel das Einrichten größerer Software-Brocken (zum Beispiel eines kompletten Gnome-Desktops).

Up & dup

Sie haben seit Tagen keine Benachrichtigungen über Updates erhalten? Dann rufen Sie zypper lu auf. Der Befehl zeigt Ihnen nicht die Pakete an, für die ein Update ansteht, sondern auch die zugehörigen Paketquellen (Abbildung 1). So können Sie selbst entscheiden, welche Programme Sie aktualisieren möchten. Haben Sie sich für ein Update eines einzelnen Pakets entschieden, genügt der Befehl:

# zypper update Paket

Sämtliche möglichen Updates spielt das Kommando zypper dup ein, das sich seit Version 11.2 von OpenSuse auch offiziell für ein Distributionsupgrade eignet. Möchten Sie hingegen nur die Pakete auffrischen, die das OpenSuse-Team als kritisch eingestuft hat, dann rufen Sie zypper up auf.

Abbildung 2: Zypper informiert ausführlich über die anstehenden Updates.

Abbildung 2: Zypper informiert ausführlich über die anstehenden Updates.

Pakettypen

Zwar schlagen sich die meisten Nutzer mit den drei Standardaufgaben install, search und remove durchs tägliche Linux-Paketmanagement, doch bietet Zypper noch weit mehr Möglichkeiten. So stellt OpenSuse neben einzelnen Paketen auch komplette Paketgruppen zum Download bereit, die in etwa den Meta-Paketen bei Apt entsprechen. Diese Schemata nennt Zypper “Patterns”. Möchten Sie nach sämtlichen Patterns suchen, die etwas mit Spielen zu tun haben, erledigt das der Aufruf:

# zypper search -t pattern game

Analog dazu installieren Sie auch komplette Patterns. Um das Pendant zu dem in der Ubuntu-Dokumentation so oft zitierten build-essential einzurichten, genügt das Kommando:

# zypper install -t pattern devel_basis

Pakete zur Kernelentwicklung finden Sie im Pattern devel_kernel, und so weiter. Neben Paketen und Pattern kennt Zypper noch die Installationstypen Patch, Produkt und Quellpaket. Während Produkte in der Regel nur bei den Enterprise-Versionen von OpenSuse zum Einsatz kommen, bieten sich die Patches und Quellen auch für den heimischen Gebrauch an. Den Quellcode des Gimp-Pakets installieren Sie zum Beispiel über zypper install -t srcpackage gimp, ob es irgendwelche Patches gibt, testen Sie mit zypper search -t patch ohne zusätzliche Parameter (Abbildung 3).

Abbildung 3: Welche Patches zurzeit gerade zur Verfügung stehen, testen Sie mit     <code srcset=

zypper search -t patch.” width=”300″ height=”135″ /> Abbildung 3: Welche Patches zurzeit gerade zur Verfügung stehen, testen Sie mit zypper search -t patch.

Doppelt gemoppelt

Über den Befehl zypper refresh lädt Zypper die Metadaten zu den einzelnen Repositories herunter und frischt den lokalen Zwischenspeicher mit den entsprechenden Informationen auf. Um bei dieser Arbeit und bei der Installation möglichst flink zu sein, benutzt Zypper dazu einen doppelten Cache: Unter /var/cache/zypp/raw/ finden sich jeweils in einem eigenen Verzeichnis pro Repo die Metadaten mit den Datei-Informationen befinden. Daneben sammelt der Paketmanager in /var/cache/zypp/solve/ Informationen dazu, welche Abhängigkeiten ein Paket verursacht und wie sich diese am besten und am schnellsten auflösen lassen.

Bei den Meta-Informationen, die auf den Servern im Verzeichnis repodata liegen, handelt es sich um mit Gzip komprimierte XML-Dateien, die je nach Repository ein paar MByte groß sein können. Um diese Daten nicht bei jeder Installation erneut herunterladen zu müssen, stellt jedes Repository auch eine Inhaltsliste bereit. Zypper vergleicht zunächst die Prüfsummen dieser Indexdateien mit der lokalen Version und verzichtet bei Übereinstimmung auf einen erneuten Download der Meta-Informationen.

Diese Prüfung nimmt der OpenSuse-Paketmanager praktisch bei jedem Aufruf vor – was vor allem bei Rechnern ohne Internetverbindung sowie bei der Paketinstallation von festen Repositories lediglich Zeit verschwendet. Um den automatischen Check auszuschalten, markieren Sie einfach in YaST im Paketmanager-Modul die Checkbox vor dem Autorefresh-Eintrag. Per Kommandozeile funktioniert das mit:

# zypper mr -R Repo-Nummer

Die Nummer des Repositories entnehmen Sie der Ausgabe von zypper lr. Einen Mittelweg bietet die Zypper-Konfigurationsdatei an: Hier legen Sie eine bestimmte Zeitspanne fest, während der Zypper kein automatisches Update vornehmen soll. Öffnen Sie dazu mit administrativen Rechten die Datei /etc/zypp/zypp.conf im Editor Ihrer Wahl und entfernen Sie in Zeile 121 das Rautezeichen vor dem Eintrag repo.refresh.delay = 10. Der Zahlenwert legt fest, wie viele Minuten Zypper nur auf die lokalen Meta-Informationen zugreift.

Schließlich gibt es noch die Option --no-refresh, die sich in erster Linie bei der Suche anbietet, wenn keine Internetverbindung besteht:

# zypper --no-refresh search gimp

Im Unterschied zu Apt verlangt Zypper vom Benutzer ab und zu manuelle Eingriffe. Das hängt mit der Herkunft der Paketquellen zusammen: Findet Zypper in einer nicht offiziellen Paketquelle ein aktuelleres Paket, dann gilt dessen Installation als Herstellerwechsel. In einem solchen Fall müssen Sie als Benutzer entscheiden, ob Zypper die ältere Version aus den offiziellen Quellen behalten oder per Herstellerwechsel die allerneueste Variante installieren soll. Über die Kommandozeile oder die Konfigurationsdatei /etc/zypp/zypp.conf lässt sich auch dieses Verhalten anpassen.

Tabus

Manchmal verbringt man Stunden mit der manuellen Installation eines bestimmten Pakets oder eines Setups – und merkt dann nach einem Update oder einer schnellen Paketinstallation, dass der Paketmanager gerade das wertvolle Setup durch ein Update einer Komponente zunichte gemacht hat. Um sich vor solchen Problemen zu schützen, kennt Zypper die Möglichkeit von Paketsperren. Die bieten sich auch bei bestimmter Hardware an, wie etwa auf Rechnern, die für die 3D-Beschleunigung einen proprietären Treiber von ATI oder Nvidia benötigen. Falls Zypper einen solchen in einem Repo entdeckt, installiert er ihn automatisch. Um das zu verhindern, setzen Sie in YaST das Paket auf “Tabu” oder errichten mit Zypper eine Paketsperre:

# zypper al gimp

Dieser Befehl verhindert jede Installation, die das Paket Gimp betrifft. Welche Sperren gerade aktiv sind, zeigt die Ausgabe von zypper ll, nicht mehr benötigte Sperren bei gelöschten Paketen löst zypper cl.

Repos und Services

Während ein Repository die Informationen zu einer einzigen Paketquelle enthält, bietet ein Service Informationen über mehrere Repos. Zurzeit gibt es nur einen Service für Zypper, den Repository Index Service (RIS).

Die ersten Versionen von Zypper machten noch keinen Unterschied zwischen Paketquellen und Diensten. Deshalb bemerkte der Nutzer auch keinen Unterschied, egal ob er zypper addrepo oder zypper service add aufrief. Einige Überbleibsel davon existieren bis heute: So ist die Ausgabe der Befehle zypper sl (“services list”) und zypper lr (“listrepo”) identisch. Weiter zur Verwirrung trägt unter Umständen bei, dass die Syntax der Zypper-Befehle bei Services umgekehrt funktioniert: anstelle von addrepo heißt es service add, anstelle von modify reposervice modify und so weiter.

Als Heimnutzer benötigen Sie in der Regel nur das Repo-Management von Zypper, merken Sie sich deshalb am besten die Befehle zypper ar, zypper lr, zypper mr und so weiter.

Repos verwalten

Die zweithäufigste Aufgabe von Zypper neben der Paketinstallation besteht im Repo-Management. So lassen sich mit Zypper Paketquellen hinzufügen, umbenennen, entfernen oder priorisieren. Angenommen, Sie haben neben den offiziellen Quellen auch die KDE-Backports installiert und möchten nun Amarok installieren. Allerdings soll Zypper nicht die neueste Version aus den Backports einspielen, sondern die offizielle aus dem Update-Repo. Dazu schalten Sie einfach das Backport-Repository vorübergehend aus:

# zypper mr -d Backports

Der Befehl funktioniert allerdings nur, falls Sie dem Repository den Namen Backports gegeben haben. Welchen Namen das Repo besitzt, zeigt Ihnen die Ausgabe von zypper lr. Alternativ können Sie auch die Reponummer benutzen, zum Beispiel zypper mr -d 6.

Löschen nach Nummer

Achten Sie beim Löschen von Repositories darauf, dass Zypper die Einträge nach jedem Vorgang neu ordnet. Haben Sie sich zum Beispiel gemerkt, dass Sie Repo 4 und 5 löschen möchten und löschen den vierten Eintrag, dann rückt der fünfte an dessen Stelle. Folglich entfernt nun ein zypper rr 5 den ursprünglich sechsten Eintrag aus der Liste. Nutzen Sie deshalb zum Löschen nach Möglichkeit den Namen, den Sie bei enthaltenen Leerzeichen in Anführungszeichen setzen. Um auf Nummer Sicher zu gehen, schauen Sie sich lieber noch einmal die Ausgabe von zypper lr an, bevor Sie zu zypper rr greifen.

Über die Option modifyrepo schalten Sie auch den Zwischenspeicher für die Pakete ein und aus. Im Unterschied zu Apt-basierten Systemen entfernt Zypper nach einer Installation sämtliche Pakete. Möchten Sie diese auf der Festplatte behalten, dann aktivieren Sie den Cache entweder pro Paketquelle einzeln oder für alle nicht lokalen Repos mit zypper mr -kt

Eine Übersicht der wichtigsten Befehle finden Sie in der Tabelle “Der Repo-Manager”.

Der Repo-Manager

Befehl Kurzschreibweise Erklärung
zypper repos zypper lr Listet die eingerichteten Paketquellen auf
zypper addrepo URLName zypper ar URLName Fügt ein Repository unter dem gewählten Namen hinzu
zypper removerepo Name zypper rr Name Enfernt das Repository mit dem angegebenen Namen
zypper renamerepo NummerName zypper nr NummerName Vergibt einem Repository einen neuen Namen
zypper modifyrepo --enable Name zypper mr -e Name Aktiviert ein Repository
zypper modifyrepo --disable Name zypper mr -d Name Schaltet ein Repository aus
zypper modifyrepo --refresh Name zypper mr -r Name Schaltet die automatische Aktualisierung ein
zypper modifyrepo --no-refresh Name zypper mr -R Name Schaltet die automatische Aktualisierung aus
zypper modifyrepo --priority WertName zypper mr -p WertName Setzt die Priorität des Repos auf den angegebenen Wert (kleiner ist höher)

Prioritäten setzen

Vielleicht ist Ihnen schon aufgefallen, dass Zypper in der Grundeinstellung stets versucht, Pakete vom Installationsmedium (der DVD) zu installieren. Bei diesem Verhalten handelt es sich um ein Relikt aus der Zeit, als ein DSL-Anschluss noch als Luxus galt. Welche Installationsquelle Zypper wann benutzt, legen Sie über die Prioritäten fest, die Sie auch in YaST bequem per grafischem Frontend einrichten können.

In der Grundeinstellung besitzen sämtliche Repositories eine Priorität von 99. Je höher die Zahl, desto geringer die Priorität. Bieten zwei Paketquellen das selbe Paket an, dann installiert YaST die Variante mit der höheren Versionsnummer. Auf diese Weise lassen sich zum Beispiel sämtliche Pakete von Novell per Update mit den zugehörigen Packman-Paketen überschreiben.

Dieses Verhalten muss jedoch nicht immer erwünscht sein: Möchte Sie zum Beispiel die Installations-DVD als Paketquelle nicht komplett ausschalten, sondern nur dann benutzen, wenn keine Internetverbindung besteht, dann setzen Sie einfach die Priorität auf 100 oder 110. Zypper (und YaST) greifen dann nur noch auf das Medium zurück, wenn sie das gesuchte Paket in allen anderen Repos nicht finden.

Wie die bisher beschriebenen Änderungen lassen sich auch Prioritäten entweder für ein einzelnes Repository oder für bestimmte Typen festlegen, zum Beispiel für alle lokalen Quellen oder für sämtliche Quellen vom Typ DVD und so weiter. Möchten Sie zum Beispiel die Priorität für sämtliche lokalen Quellen auf 100 stellen, dann geben Sie dazu folgenden Befehl ein:

# zypper mr -p 100 -t -l

Achten Sie darauf, offiziellen Quellen keine Priorität unter 99 zuzuteilen, da Sie damit eventuell die Stabilität des Systems gefährden.

Spezialfälle

Neben den hier geschilderten Grundfunktionen beherrscht Zypper inzwischen eine sehr große Liste an Tricks und Fähigkeiten, die nicht nur dem Durchschnittsnutzer das Leben erleichtern, sondern auch Admins. Dazu zählen beispielsweise Einstellungen zur Bandbreitenbegrenzung oder zum Mirror-Verhalten, die Sie direkt in der Konfigurationsdatei /etc/zypp/zypp.conf vornehmen.

Über zypper update -d laden Sie alle vorhandenen Updates herunter, ohne diese jedoch zu installieren. Ein erneuter Aufruf von zypper update – diesmal ohne die Option -d – richtet dann die lokal bereits vorhandenen Pakete ein.

Hegen Sie einem anstehenden Kernel-Update gegenüber Bedenken, dann starten Sie das Update mit Zypper über den Zusatz --skip-interactiv. Damit überspringt der Paketmanager sämtliche Pakete, die einen Neustart des Systems benötigen, eine Bestätigungsmeldung anzeigen oder bei denen eine Lizenz angenommen werden muss. In der legalen Grauzone arbeitet der Parameter -l: Er weist Zypper an, sämtliche Lizenzklauseln zu akzeptieren.

Übersetzen Sie oft Pakete aus dem Quellcode übersetzt, finden Sie sicher an der Option source-install (kurz si) Gefallen. Über den Befehl zypper si -d inkscape installiert der OpenSuse-Paketmanager sämtliche Pakete, die Sie benötigen, um Inkscape von Hand zu übersetzen.

Manchmal kommt es vor, dass Sie nicht nach einem Paket mit einem bestimmtem Namen suchen, sondern nach einem, das eine bestimmte Datei oder Dateiversion bereitstellt. Solche Eigenschaften eines Pakets nennt Zypper “Capabilities” und akzeptiert sie als Parameter beim Suchen, Installieren und Löschen. Möchten Sie zum Beispiel alle Amarok-Versionen löschen, die eine Versionsnummer kleiner 2.2 besitzen, gelingt das mit dem Befehl:

# zypper remove "amarok<2.2"

Über die Capabilities lässt sich auch eine bestimmte Versionsnummer installieren. Möchten Sie aus der Auswahl von Amarok-Paketen genau die Version 2.2.0-2 einspielen, erledigt das der Befehl

# zypper install "amarok=2.2.0-2"

Weitere Details zu den Einsatzmöglichkeiten solcher Capabilities finden Sie in der Manpage von Zypper.

Nicht zuletzt bietet Zypper über den info-Befehl zahlreiche Möglichkeiten nach der Versionsnummer, Abhängigkeiten und Empfehlungen von Paketen zu suchen. Mit zypper info libxine1 erfahren Sie zum Beispiel, aus welcher Quelle diese Bibliothek stammt, wer das Paket gebaut hat, ob es installiert ist, ob es sich aktualisieren lässt, und viele weitere Details (Abbildung 4).

Abbildung 4: Über den Befehl     <code srcset=

zypper info erfahren Sie auch die Versionsnummer von Paketen.” width=”292″ height=”300″ /> Abbildung 4: Über den Befehl zypper info erfahren Sie auch die Versionsnummer von Paketen.

Fazit

Ein schneller Paketmanager für die Kommandozeile ist ein Muss. Mit Zypper haben die OpenSuse-Entwickler den Schritt auf die Konsole zunächst in einem denkbar ungünstigen Zeitpunkt und unter schlechten Bedingungen vollbracht. Die seither implementierten Features und vor allem die einfache und trotzdem sehr mächtige Syntax lassen die alten Zeiten aber schnell vergessen: Smart und Apt4rpm sind definitiv Geschichte.

LinuxUser 01/2010 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben