LUG Erding

Debian-Paketverwaltung aus Anwendersicht


Details zum Umgang mit Paketen auf der Kommandozeile


Dirk Geschke, LUG-Erding


Letzte Änderung: 21.12.2010


Einleitung

Es taucht gelegentlich die Frage auf, wie die Debian-Paketverwaltung funktioniert, also wie Softwarepakete eingespielt werden, wie diese gefunden werden, etc.

Nicht jeder kennt die Details, manche verwenden die grafischen Tools und manche sind auch andere Distributionen gewohnt die auf RPM-Dateien aufbauen. Hier geht es nun primär um die Paketverwaltung unter Debian auf der Kommandozeile, die grafischen Tools bauen in der Regel auf diesen auf, d.h. im Hintergrund werkelt oft dpkg.

Verwaltung von Paketen

Das eigentliche Tool zur Verwaltung der DEB-Pakete ist "dpkg". Damit können Pakete installiert, konfiguriert und entfernt werden. Es kann der Inhalt von Paketen aufgelistet werden aber auch die Suche nach dem Paket aus dem ein Programm stammt, ist damit möglich.

Der große Nachteil besteht allerdings darin, dass damit weder die Pakete vom Server geladen werden, noch dass Abhängigkeiten aufgelöst werden können. Dazu wird auf das Programm "apt-get" zurückgegriffen.

So kann mit

  apt-get update

eine Liste der aktuellen Versionen und Pakete von den Debian-Servern geholt werden. Ein Upgrade aller Pakete kann durch

   apt-get upgrade

erfolgen. Will man jedoch nur ein neues Paket installieren, so geht das mit dem Kommando

   apt-get install Paketname

Natürlich kann man mit

   apt-get remove Paketname

auch Pakete wieder deinstallieren. Allerdings werden hierbei die Pakete nicht deinstalliert, die auf Grund der Abhängigkeiten mitinstalliert wurden. Wenn diese aber von keinem anderen Paket mehr benötigt werden, so können diese mittels

   apt-get autoremove

wieder deinstalliert werden.

Finden von Paketen

Die Frage wie man ein Paket findet ist manchmal nicht so offensichtlich. Oft weiß man nur den Namen eines ausführbaren Programmes aus einem Paket oder es fehlt einem eine include-Datei.

Online kann dies einfach über das WWW erfolgen:

   http://www.debian.org/distrib/packages

oder aber es wird auf das Paket "apt-file" zurückgegriffen. Letzteres kann ganz normal installiert werden:

   apt-get install apt-file

Danach muss eine aktualisierte Liste aller Paket- und deren Dateinamen vom Server bezogen werden:

   apt-file update

Gesucht wird dann einfach mit

   apt-file search Dateiname

Dabei kann auch nur ein Teil des Namens angegeben werden oder aber auch Teile des Pfades, z.B.:

   $ apt-file search bin/glxgears
   mesa-utils: /usr/bin/glxgears

Als kleiner Tipp: Wird explizit nach einem ausführbaren Programm gesucht, so bietet es sich an ein bin/ vor den Namen zu setzen. Damit werden Manualpages oder auch include-Dateien die auf den Namen passen, nicht angezeigt. Wird der erste Slash weggelassen, so passt das Must auch auf ausführbare Programme, die in einem sbin-Verzeichnis liegen.

Ist das Programm schon installiert und man will wissen, aus welchem Paket es stammt, so kommt dpkg wieder ins Spiel:

   $ dpkg -S bin/glxgears
   mesa-utils: /usr/bin/glxgears

Will man den Status des Paketes wissen, so hilft die Option -l. Ohne Argument liefert sie alle bekannten Pakete auf, mit dem Paketnamen nur dessen Status:

   $ dpkg -l mesa-utils
   Desired=Unknown/Install/Remove/Purge/Hold
   | Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
   |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
   ||/ Name           Version        Description
   +++-==============-==============-============================================
   ii  mesa-utils     7.0.3-7        Miscellaneous Mesa GL utilities

Es ist also installiert und korrekt konfiguriert (ii).

Reine DEB-Pakete kann man mit -i installieren:

   dpkg -i Paketname.deb

Mittels der Option -L kann aufgelistet werden, was alles im Paket enthalten ist. Es gibt noch eine Vielzahl anderer Optionen, so können auch Einstellungen einfach überschrieben werden. Das kann z.B. notwendig werden, wenn 32-Bit Pakete auf einem 64-Bit-System installiert werden sollen.

Aufbau von DEB-Paketen

Das ist ein sehr einfaches Format, die DEB-Dateien sind lediglich ein Archiv (ar-Kommando) bestehend im Wesentlichen aus zwei tar.gz-Dateien. Die von apt-get installierten Pakete verwenden übrigens im lokalen Cacheverzeichnis abgelegt:

   /var/cache/apt/archives/

Diese können mit dem Kommando

   apt-get clean

gelöscht werden. Will man nur die Pakete löschen, die ohnehin nicht mehr vom Server bezogen werden können, so geht dies mit:

   apt-get autoclean

Ein liefert

   $ ar xf /var/cache/apt/archives/alsa-base_1.0.23+dfsg-2_all.deb

z.B. die 3 Dateien

   debian-binary
   control.tar.gz
   data.tar.gz

Die erster enthält nur die Version (2.0) des DEB-Formats. Die Datei data.tar.gz enthält alle Dateien des Pakets und control.tar.gz besteht, der Name legt es nahe, aus Kontrolldateien:

   $ tar tvzf control.tar.gz
   drwxr-xr-x root/root         0 2010-10-23 11:50 ./
   -rwxr-xr-x root/root      2639 2010-10-23 11:50 ./postinst
   -rw-r--r-- root/root      1209 2010-10-23 11:50 ./control
   -rw-r--r-- root/root        96 2010-10-23 11:50 ./conffiles
   -rwxr-xr-x root/root       508 2010-10-23 11:50 ./postrm
   -rwxr-xr-x root/root      1466 2010-10-23 11:50 ./preinst
   -rw-r--r-- root/root      2805 2010-10-23 11:50 ./md5sums

Die Datei md5sums enthält die md5-Prüfsummen der Dateien, preinst und postinst sind Shellskripte die vor bzw. nach der Installation ausgeführt werden. postrm erklärt sich wohl von selbst: Es wird nach der Installation aufgeräumt und temporäre Dateien werden entfernt. conffiles enthält die Dateien, die zur Konfiguration relevant sind und control enthält Daten zum Paket. Das sind neben einer Beschreibung auch noch die Version, Abhängigkeiten, unterstütze Plattform, Vorschläge zu anderen Paketen, etc.

Quellen der Pakete

Welche Quelle zum Bezug ausgewählt wird und welche Version installiert werden soll wird über das Verzeichnis /etc/apt/ geregelt. Hier ist vor allem die Datei sources.list relevant. Hierin steht, welche Version von welchem Server verwendet werden soll, z.B.:

   deb http://security.debian.org/ lenny/updates main contrib non-free

Dieser Eintrag ist für die Sicherheitsupdates von lenny. Für die reine Distribution sind solche Einträge von Bedeutung:

   deb http://ftp2.de.debian.org/debian/ squeeze main non-free contrib

Das ist nun die kommende Version squeeze, sie firmiert derzeit auch unter dem Namen testing. Man kann auch einfach stable angeben. Das kann aber den Nebeneffekt haben, dass bei einem Debian-Versionswechsel automatisch ein Upgrade erfolgt. Ein Upgrade der Distribution sollte man aber wohl eher nicht automatisch erfolgen lassen. Manuell geht es auch durch ändern des Distributionsnamens, wie hier squeeze, sowie einem

   apt-get dist-upgrade

Installiert wird hier main, d.h. die Hauptversion von Debian, sowie contrib, zugelieferte Software, die nicht im Hauptrepository liegt, als auch non-free. Letzteres sorgt immer wieder für Irritationen. So ist bei Debian die reine Open-Source-Lehre vorgeschrieben. Pakete die nicht freie Lizenzen haben, sind nicht enthalten. Sie existieren dennoch, aber im Zweig non-free. Man kann sie also durchaus auch installieren!

Der Vorteil ist aber: Will man auf Nummer Sicher gehen und keine Lizenzverstöße riskieren, kann man das durch main und contrib erreichen. Bei allen anderen Paketen kann dann gezielt die Lizenzen studiert werden und entschieden werden ob und wie hier verfahren werden soll. Für private Anwender spielt das keine Rolle, bei kommerziellen Anwendern könnte das aber eine lizenzrechtliche Bedeutung haben. Derer sollte man sich dann dessen bewusst sein!

Das Debian-Projekt hat sich zum Ziel gesetzt, eine besonders stabile Distribution zu erstellen. Als stabil kann aber nur gelten, was sich über längere Zeit im Alltag bewährt hat. Daher sind die Versionen der Programme im stabilen Zweig oft nicht die neuesten Versionen, dann kann das eine oder andere Feature schon einmal fehlen.

Einen Ausweg gibt es aber dennoch, es gibt die Zweige testing, unstable und experimental. Nur verlässt man dadurch natürlich den als stabil angesehen Pfad. Es gibt aber auch die Möglichkeit, Pakete auch aus diesen Bereichen zu installieren, das meiste aber aus stable zu belassen. Dazu genügt es einfach eine weitere Zeile in der Datei sources.list mit dem gewünschten Zweig einzutragen.

Welche Version nun genommen wird kann über die Datei /etc/apt/preferences eingestellt werden. Diese fehlt jedoch häufig, in diesem Fall wird normalerweise der erste Eintrag in sources.list für die Bestimmunng der Version verwendet.

Soll nun z.b. ein Programm aus testing installiert oder geupdatet werden, so kann dies entweder über

   apt-get install -f testing Paketname

erfolgen oder

   apt-get install Paketname/testing

Aber Vorsicht: Das kann zu Abhängigkeistproblemen führen!

Eine weitere gelegentlich gebrauchte Datei ist apt.conf. Über diese Datei können diverse Einstellungen für apt-get vorgenommen werden. So kann hier unter anderem auch ein Proxy definiert werden, z.B.

   $ cat /etc/apt/apt.conf
   Acquire::http::Proxy "http://192.168.1.5:3128/";

Seit einiger Zeit gibt es neben den Dateinamen auch noch Verzeichnisse, das erleichtert die Erweiterungen durch Pakete. So kann darüber gesteuert werden, ob automatisch Updates eingespielt werden sollen. Das geht aber nur, wenn auch das relevante Paket installiert ist.

So gibt es auch, wenn man chrome installiert hat, Einträge wie

   $ cat /etc/apt/sources.list.d/google-chrome.list
   ### THIS FILE IS AUTOMATICALLY CONFIGURED ###
   # You may comment out this entry, but any other modifications may be lost.
   deb http://dl.google.com/linux/chrome/deb/ stable main

D.h. auch chrome kann via apt-get upgrade aktualisiert werden.

Ferner gibt es noch den trusted.pgp-Anteil: Die Pakete sind signiert, das verhindert, dass versehentlich Pakete aus unsicheren Quellen automatisch installiert werden. Manuell via dpkg -i ist das natürlich weiterhin möglich.

Es gibt noch weitere Repositories, die man in Betracht ziehen sollte. So werden einige Pakete aus einer der nächsten Version durchaus rückportiert, d.h. es besteht nicht immer die Notwendigkeit auf z.B. testing zurückzugreifen. Weitere Infos dazu können hier gefunden werden:

   http://backports.debian.org/

Es gibt aber auch noch Pakete, die häufiger aktualisiert werden müssen. Hierunter fallen u.a. Spam-Filterung und Virenscanning. Auch hier gibt es eine einfache Methode aktuell zu bleiben. Nähere Informationen können hier gefunden werden:

   http://www.debian.org/volatile/index.de.html

Installation von RPM-Paketen

Auch das ist möglich, es kann mit Hilfe des Tools alien erfolgen, dieses kann rpm-Pakete in DEB-Pakte umwandeln. Die so entstandenen Pakete können in der Regel problemlos installiert werden. Probleme kann es wie üblich bei der Architektur geben: 32-Bit-Pakete kann man nicht so einfach in 64-Bit-Pakete umwandeln auch wenn die reinen Pakete so laufen würden.

Dirk Geschke, dirk@lug-erding.de