[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ]

Kapitel 5


Anzahl der Absätze: 269

Project-Id-Version: 0 POT-Creation-Date: 2012-05-09T20:00:15 PO-Revision-Date: 2012-05-09T20:00:15 Last-Translator: Automatically generated Language-Team: None MIME-Version: 1.0 Content-Type: application/x-publican; charset=UTF-8 Content-Transfer-Encoding: 8bit


Binärpaket


Quellcodepaket


dpkg


Abhängigkeiten


Konflikt


Packaging System: Werkzeuge und grundlegende Prinzipien


Als Debian-Systemadministrator wird man häufig mit .deb Paketen umgehen, denn sie enthalten festgelegte funktionale Einheiten (Anwendungen, Dokumentationen, etc.), deren Installation und Wartung sie vereinfachen. Deshalb ist es eine gute Idee, zu wissen was sie sind und wie man mit ihnen umgeht.


In diesem Kapitel werden die Struktur und der Inhalt von "binary"- und "source"-Paketen beschrieben. Erstere sind .deb-Dateien, welche direkt mittels dpkg benutzt werden können, wohingegen letztere den Quellcode des Programmes sowie Anweisungen zum Bau des Binärpakets enthalten.


Struktur eines Binärpakets.


PaketBinärpaket


ar


Das Debian-Paketformat ist so gestaltet, dass der Inhalt auf jedem Unix_system entpackt werden kann, welches die klassischen Befehle ar, tar, und gzip besitzt. Diese trivial erscheinende Eigenschaft ist wichtig für die Portabilität und Fehlerkorrektur.


Stelle dir beispielsweise vor, dass du aus Versehen das dpkg-Programm gelöscht hast und daher keine Debian-Pakete mehr installieren kannst. Da dpkg selbst ein Debian-Paket ist, sähe es so aus, als währe es das gewesen. Glücklicherweise kennst du das Format eines Paketes und kannst daher die .deb-Datei des dpkg-Paketes downloaden und es manuell installieren (siehe "TOOLS"-Seitenleiste). Wenn durch Pech eines oder mehrere der Programme ar, tar oder gzip verschwunden sind, dann musst du nur die die fehlenden Programme von einem anderen System kopieren (da jedes von diesen in einer komplett autonomen Weise ohne Abhängigkeiten operiert reicht eine einfache Kopie aus).


TOOLS dpkg, APT and ar


dpkg


APT


dpkg ist das Programm, welches .deb-Dateien bearbeitet, insbesondere extahiert, analysiert und entpackt es sie.


APT ist eine Gruppe von Programmen, die die Ausführung von "higher-level" Veränderungen am System erlauben: installieren oder entfernen eines Paketes (dabei wird sichergestellt, dass die Abhängigkeiten erfüllt bleiben), Aktualisierung ("update") des Systems, Auflistung der verfügbaren Pakete, usw.


ar Das arar t archiv zeigt die Liste der Dateien in solch einem Archiv an, ar x archiv entpackt die Dateien aus dem Archiv in das aktuelle Arbeitsverzeichnis, ar d archiv datei löscht eine Datei aus dem Archiv usw. Seine Manpage (ar1) dokumentiert noch viele weitere Arbeitsgänge. ar ist ein sehr rudimentäres Werkzeug, das ein Unix-Administrator nur in seltenen Fällen verwenden würde. Administratoren verwenden dagegen gewöhnlich tar, ein höher entwickeltes Programm für das Archiv- und Dateimanagement. Daher ist es einfach, dpkg wieder herzustellen, falls es versehentlich gelöscht wurde. Sie brauchen nur das Debian Paket herunterzuladen und seinen Inhalt aus dem Archiv data.tar.gz in das Wurzelverzeichnis des Systems (/) zu entpacken:


# ar x dpkg_1.15.8.5_i386.deb # tar -C / -p -xzf data.tar.gz


ZURÜCK ZU DEN GRUNDLAGEN Man page Notation


Es kann für Anfänger verwirrend sein, Verweise zu “ar1” in der Literatur zu finden. Damit ist üblicherweise das Weiterleiten zur Handbuch-Seitear in Abschnitt 1 gemeint.


Manchmal wird dieser Hinweis auch benutzt, um Zweideutigkeit zu vermeiden, zum Beispiel um einen Unterschied zu machen zwischen dem Befehl printf der auch ausgeführt werden kann durch printf1 bzw. die Funktion printf in der Programmiersprache C, das an printf3 weitergeleitet werden kann.


erläutert die Handbuchseiten ausführlicher (siehe ).


Betrachtet man den Inhalt der .deb-Datei:


$ ar t dpkg_1.15.8.5_i386.deb debian-binary control.tar.gz data.tar.gz $ ar x dpkg_1.15.8.5_i386.deb $ ls control.tar.gz data.tar.gz debian-binary dpkg_1.15.8.5_i386.deb $ tar tzf data.tar.gz | head -15 ./ ./var/ ./var/lib/ ./var/lib/dpkg/ ./var/lib/dpkg/updates/ ./var/lib/dpkg/parts/ ./var/lib/dpkg/info/ ./var/lib/dpkg/alternatives/ ./sbin/ ./sbin/start-stop-daemon ./usr/ ./usr/sbin/ ./usr/sbin/install-info ./usr/bin/ ./usr/bin/dpkg-split $ tar tzf control.tar.gz ./ ./control ./preinst ./md5sums ./conffiles ./postrm ./postinst $ cat debian-binary 2.0


Wie Du sehen kannst, beinhaltet das ar Archiv eines Debian Paketes aus drei Dateien:


debian-binary. Das ist eine Textdatei, die einfach die Version der benutzten .deb-Datei anzeigt (2011: Version 2.0).


control.tar.gz. Diese Archivdatei enthält jede verfügbare Meta-Information. In ihr finden Paketverwaltungswerkzeuge unter anderem den Namen und die Version des Paketes. Manche dieser Meta-Informationen erlauben ihnen, zu entscheiden, ob es möglich ist, die enthaltenen Programme zu installieren oder zu deinstallieren, zum Beispiel gemäß der Liste der bereits auf dem Gerät installierten Pakete.


data.tar.gz. Dieses Archiv enthält alle Dateien, die aus dem Paket entpackt werden sollen; hier sind die ausführbaren Dateien, die Dokumentation, usw. gespeichert. Möglicherweise verwenden einige Pakete andere Komprimierungsformate, wobei die Datei dann anders heißt (data.tar.bz2 für bzip2, data.tar.xz für XZ, data.tar.lzma für LZMA).


Package Meta-Information


package meta-information


PaketMeta-Information


Das Debian Paket ist nicht nur ein für die Installation vorgesehenes Archiv von Dateien. Es ist Teil eines größeren Ganzen und beschreibt seine Beziehungen zu anderen Debian Paketen (Abhängigkeiten, Konflikte, Vorschläge). Es stellt auch Skripte zur Verfügung, die die Ausführung von Befehlen in verschiedenen Lebensphasen des Paketes (Installation, Entfernung, Aktualisierung) ermöglichen. Diese vom Paket-Verwaltungsprogramm benutzten Daten sind nicht Teil des Softwarebündels, sondern sind innerhalb des Pakets sogenannte "Meta-Informationen" (Information über andere Information).


Beschreibung: Die Kontroll Datei


control


Diese Datei verwendet eine den E-Mail Headers ähnliche Struktur (wie sie in RFC 2822 definiert ist). So sieht die control-Datei für apt zum Beispiel folgendermaßen aus:


$ apt-cache show apt Package: apt Priority: important Section: admin Installed-Size: 5612 Maintainer: APT Development Team <deity@lists.debian.org> Architecture: i386 Version: 0.8.0 Replaces: manpages-pl (<< 20060617-3~) Provides: libapt-pkg4.10 Depends: libc6 (>= 2.3.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0), zlib1g (>= 1:1.1.4), debian-archive-keyring, gnupg Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt Conflicts: python-apt (<< 0.7.93.2~) Filename: pool/main/a/apt/apt_0.8.0_i386.deb Size: 1965454 MD5sum: 43364819b898e49b8175e88ec5787241 SHA1: 350a8a7a43fe182d54f3b7d73b8032f85b5d7ddf SHA256: a593e7d7f9b3cffa37770201a3c13bd2c8bc588bafbf39b4aaa5e13b5fb00b8b Description: Advanced front-end for dpkg This is Debian's next generation front-end for the dpkg package manager. It provides the apt-get utility and APT dselect method that provides a simpler, safer way to install and upgrade packages. . APT features complete installation ordering, multiple source capability and several other unique features, see the Users Guide in apt-doc. Tag: admin::package-management, hardware::storage, hardware::storage:cd, interface::commandline, network::client, protocol::{ftp,http,ipv6}, role::program, suite::debian, use::downloading, use::searching, works-with::software:package


ZURÜCK ZU DEN GRUNDLAGEN RFC — Internet Standarts


RFC


Request For Comments


RFC ist die Abkürzung für "Request For Comments". Ein RFC ist üblicherweise ein technisches Dokument, das einen zukünftigen Internet-Standard beschreibt. Bevor sie standardisiert und für Veränderungen gesperrt werden, werden diese Standards einer öffentlichen Überprüfung unterworfen (daher der Name). Die IETF (Internet Engineering Task Force) entscheidet über die Statusentwicklung dieser Dokumente (vorgeschlagener Standard, Standardentwurf oder Standard).


RFC 2026 definiert den Prozess der Standardisierung von Internet-Protokollen.


Abhängigkeiten: dieDepends-Zeile


Abhängigkeit


Depends, Kopfzeile


PaketAbhängigkeit


Die Abhängigkeiten sind in der Depends-Zeile im Paketkopf definiert. Dies ist eine Liste von Bedingungen, die erfüllt sein müssen, damit das Paket korrekt arbeitet - diese Information wird von Programmen wie apt dazu verwendet, die erforderlichen Bibliotheken in der passenden Version zu installieren, auf die das zu installierende Programm angewiesen ist. Für jede Abhängigkeit kann der Bereich der Versionen, die diese Bedingung erfüllen, eingeschränkt werden. Anders ausgedrückt ist es möglich, die Tatsache zu bekunden, dass wir das Paket libc6 in einer Version größer oder gleich "2.3.4" benötigen (geschrieben "libc6 (>= 2.3.4)"). Für den Versionsvergleich gibt es folgende Operatoren:


<<: kleiner als;


<=: kleiner oder gleich zu;


=: gleich zu (beachte, “2.6.1” ist nicht gleich zu “2.6.1-1”);


>=: größer oder gleich zu;


>>: größer als.


In einer Liste der zu erfüllenden Bedingungen dient das Komma als Trennzeichen. Logisch würde es als "und" interpretiert. In den Bedingungen drückt der vertikale Strich ("|") ein logisches "oder" aus (es ist ein nichtausschließendes Oder im Gegensatz zu "entweder/oder"). Es hat einen höheren Rang als "und" und kann so oft eingesetzt werden, wie es erforderlich ist. So wird die Abhängigkeit "(A oder B) und C" geschrieben als A | B, C. Dagegen sollte der Ausdruck "A oder (B und C) geschrieben werden als "(A oder B) und (A oder C)", da die Depends-Zeile keine Klammern zulässt, die die Rangordnung zwischen den logischen Operatoren "oder" und "und" verändern. Es würden daher geschrieben als A | B, A | C.


Meta-Paket


Das Abhängigkeitssystem ist eine gute Vorrichtung, um das Funktionieren eines Programms sicherzustellen, aber es hat mit "Meta-Paketen" noch eine weitere Funktion. Dies sind leere Pakete, die lediglich Abhängigkeiten beschreiben. Sie erleichtern die Installation einer zusammenhängenden Gruppe von Programmen, die vom Betreuer des Meta-Pakets ausgewählt wurden. So wird apt-get install Meta-Paket automatisch alle Programme unter Verwendung der Abhängigkeiten des Meta-Pakets installieren. Die Pakete gnome, kde und linux-image-2.6-686 sind Beispiele solcher Meta-Pakete.


DEBIAN POLITIK Pre-Depends, ein anspruchsvolleres Depends


Pre-Depends, Kopfzeile


Vorabhängigkeit


"Vorabhängigkeiten", die in der "Pre-Depends"-Zeile des Paketkopfes aufgelistet sind, vervollständigen die normalen Abhängigkeiten; ihre Syntax ist identisch. Eine normale Abhängigkeit bedeutet, dass das betreffende Paket vor dem Paket, das die Abhängigkeit feststellt, entpackt und konfiguriert werden muss. Eine Vorabhängigkeit schreibt vor, dass das betreffende Paket entpackt und konfiguriert werden muss, bevor das Skript zur Vorbereitung der Installation des Paketes, das die Vorabhängigkeit feststellt, ausgeführt wird, das heißt, vor dessen Installation.


Eine Vorabhängigkeit ist für apt sehr schwierig, da es der Reihenfolge der zu installierenden Pakete eine strenge Restriktion auferlegt. Deshalb wird von Vorabhängigkeiten abgeraten, es sei denn, sie sind unbedingt erforderlich. Es wird sogar empfohlen, andere Entwickler auf debian-devel@lists.debian.org zu Rate zu ziehen, bevor eine Vorabhängigkeit eingefügt wird. Es ist normalerweise möglich, eine andere Lösung zur Umgehung des Problems zu finden.


DEBIAN POLITIK Recommends-, Suggests- und Enhances-Zeilen


Recommends, Kopfzeile


Suggests, Kopfzeile


Die Recommends- und Suggests-Zeilen bezeichnen Abhängigkeiten, die nicht obligatorisch sind. Die "empfohlenen" (recommended) Abhängigkeit sind wichtiger und verbessern die Funktionen des Pakets, sind für seinen Einsatz aber nicht unentbehrlich. Die "vorgeschlagenen" (suggested) Abhängigkeiten sind weniger wichtig und deuten darauf hin, dass bestimmte Pakete die Nützlichkeit ergänzen oder verbessern können, aber es ist absolut akzeptabel, das eine ohne die anderen zu installieren.


Sie sollten immer die "empfohlenen" Pakete installieren, außer Sie wissen genau, warum Sie diese nicht brauchen. Im Gegenzug ist es nicht nötig, die "vorgeschlagenen" Pakete zu installieren, außer Sie wissen, warum Sie diese benötigen.


EnhancesKopfzeile


Die Enhances-Zeile beschreibt auch eine Empfehlung, aber in einem anderen Zusammenhang. Und zwar befindet sie sich in dem vorgeschlagenen Paket, nicht in dem Paket, dem der Vorschlag zugute kommt. Sie ist deshalb interessant, weil es die Hinzufügung einer Empfehlung ermöglicht, ohne das betroffene Paket zu verändern. So können alle Add-ons, Plug-ins und sonstigen Erweiterungen in der Liste von Empfehlungen für ein Programm aufgeführt werden. Obwohl es bereits seit mehreren Jahren existiert, wird diese Zeile noch weitgehend von Programmen wie apt-get oder synaptic ignoriert. Sein Zweck besteht darin, dass ein Vorschlag, der von der Enhances-Zeile gemacht wird, dem Nutzer zusätzlich zu den herkömmlichen Vorschlägen - in der Suggests-Zeile - erscheint.


Konflikte: die Conflicts-Zeile


Konflikte


Konflikte, Kopfzeile


PaketKonflikt


Die Conflicts-Zeile zeigt an, wenn ein Paket nicht gleichzeitig mit einem anderen installiert sein kann. Die häufigsten Gründe hierfür sind, dass beide Pakete eine Datei mit dem gleichen Namen enthalten, dass sie den gleichen Dienst am selben TCP-Port anbieten oder dass sie sich gegenseitig im Betrieb behindern würden.


dpkg wird sich weigern, ein Paket zu installieren, falls es einen Konflikt mit einem bereits installierten Paket auslöst, es sei denn, das neue Paket gibt an, dass es die installierten Pakete "ersetzen" wird. In diesem Fall wird sich dpkg dafür entscheiden, das alte Paket durch das neue zu ersetzen. apt-get folgt immer Ihren Anweisungen: wenn Sie es vorziehen, ein neues Paket zu installieren, wird es automatisch anbieten, das Paket, das ein Problem darstellt, zu deinstallieren.


Inkompatibilitäten: die Breaks-Zeile


Inkompatibilitäten


Breaks, Kopfzeile


PaketInkompatibilität


Die Breaks-Zeile hat einen ähnlichen Effekt wie die Conflicts-Zeile, jedoch mit einer besonderen Bedeutung. Sie deutet darauf hin, dass die Installation eines Paketes ein anderes Paket (oder bestimmte Versionen davon) "brechen" wird. Normalerweise ist die Inkompatibilität zwischen zwei Paketen vorübergehend, und die Breaks-Beziehung bezieht sich auf die inkompatiblen Versionen.


dpkg wird sich weigern, ein Paket zu installieren, das ein bereits installiertes Paket brechen würde, und apt-get wird versuchen, das Problem dadurch zu lösen, dass es das Paket, das gebrochen würde, auf eine neuere Version zu aktualisieren (von der angenommen wird, dass sie korrigiert und damit wieder kompatibel ist).


Diese Art von Situation kann bei Aktualisierungen ohne rückwärtige Kompatibilität auftreten: dies ist der Fall, wenn eine neue Version nicht mehr zusammen mit der älteren Version funktioniert und eine Fehlfunktion in einem anderen Programm verursacht, ohne dafür besondere Vorkehrungen zu treffen. Die Breaks-Zeile erspart es dem Nutzer, in diese Probleme zu geraten.


Bereitgestellte Elemente: die Provides-Zeile


Provides, Kopfzeile


Diese Zeile führt das sehr interessante Konzept eines "virtuellen Paketes" ein. Sie hat viele Aufgaben, aber zwei sind von besonderer Bedeutung. Die erste Aufgabe besteht darin, ein virtuelles Paket dazu zu benutzen, ihm einen generischen Dienst zuzuordnen (das Paket "stellt" den Dienst "bereit"). Die zweite zeigt an, dass ein Paket ein anderes vollständig ersetzt, und dass es daher auch die Abhängigkeiten erfüllen kann, die das andere erfüllen würde. Auf diese Weise kann ein Ersatzpaket erstellt werden, ohne den selben Paketnamen verwenden zu müssen.


VOCABULARY Metapakete und virtuelle Pakete


Paketvirtuelles Paket


virtuelles Paket


Es ist unerlässlich, zwischen Meta-Paketen und virtuellen Paketen zu unterscheiden. Erstere sind wirkliche Pakete (einschließlich wirklicher .deb-Dateien), deren einziger Zweck darin besteht, Abhängigkeiten aufzuzeigen.


Dagegen existieren virtuelle Pakete nicht wirklich; sie sind lediglich ein Mittel, um wirkliche Pakete auf der Basis gemeinsamer, logischer Kriterien (des bereitgestellten Dienstes, der Kompatibilität mit einem Standardprogramm oder einem schon vorher bestehdenden Paket, usw.) zu identifizieren.


Anbieter eines "Service"


Lassen Sie uns den ersten Fall anhand eines Beispiels ausführlicher erörtern: alle Mailserver, wie postfix oder sendmail, "stellen" angeblich das virtuelle Paket mail-transport-agent "bereit". Daher erklärt jedes Paket, das diesen Service benötigt um funktionsfähig zu sein (z. B. Mailinglisten-Manager wie smartlist oder sympa), in seinen Abhängigkeiten einfach, dass es einen mail-transport-agent braucht, anstatt eine lange, jedoch unvollständige Liste möglicher Lösungen aufzustellen (z. B. postfix | sendmail | exim | …). Außerdem ist es sinnlos, zwei Mailserver auf demselben Rechner zu installieren, weshalb jedes dieser Pakete einen Konflikt mit dem virtuellen Paket mail-transport-agent angibt. Der Konflikt mit sich selbst wird vom System ignoriert, jedoch verhindert diese Methode. dass zwei Mailserver nebeneinander installiert werden.


DEBIAN POLITIK Liste der virtuellen Pakete


Damit virtuelle Pakete brauchbar sind, müssen alle sich über ihre Namen einig sein. Daher sind sie in der Debian Politik standardisiert. Die Liste enthält unter anderem mail-transport-agent für Mailserver, c-compiler für Kompilierer der Programmiersprache C, www-browser für Webbrowser, httpd für Webserver, ftp-server für FTP-Server, x-terminal-emulator für Terminal-Emulatoren im Grafikmodus (xterm) und x-window-manager für Fenstermanager.


Eine vollständige Liste ist im Internet unter der URL zu sehen


Austauschbarkeit mit einem anderen Paket


Die Provides-Zeile ist wieder von Interesse, wenn der Inhalt eines Paketes in einem größeren Paket enthalten ist. So war zum Beispiel das Perl-Modul libdigest-md5-perl ein optionales Modul in Perl 5.6 und ist als Standard in Perl 5.8 (und späteren Versionen wie der aktuellen Version 5.10 in Squeeze) integriert worden. Daher gibt das Paket perl seit der Version 5.8 Provides: libdigest-md5-perl an, so dass die Abhängigkeiten von diesem Paket erfüllt sind, falls der Nutzer Perl 5.8 oder 5.10 hat. Das Paket libdigest-md5-perl selbst ist irgendwann gelöscht worden, da es keinen weiteren Nutzen hatte, sobald alte Perl-Versionen entfernt waren.


Verwendung einer Provides-Zeile zur Vermeidung des Brechens von Abhängigkeiten


Dieses Merkmal ist sehr nützlich, da es nie möglich ist, die Wechselfälle der Entwicklung vorherzusehen, und es erforderlich ist, sich auf die Umbenennung oder einen anderen selbsttätigen Ersatz einer veralteten Software einzustellen.


ZURÜCK ZU DEN GRUNDLAGEN Perl, ein Programmiersprache


Perl


CPAN


Perl (Practical Extraction and Report Language) ist eine sehr populäre Programmiersprache. Sie hat zahlreiche gebrauchsfertige Module, die ein weites Spektrum von Anwendungen abdecken und die durch die Server des CPAN (Comprehensive Perl Archive Network) verteilt werden, einem vollständigen Netzwerk von Perl-Paketen.


Da es eine interpretierte Sprache ist, brauchen in Perl geschriebene Programme vor ihrer Ausführung nicht kompiliert zu werden. Daher werden sie "Perl-Skripte" genannt.


Aktuelle Einschränkungen


Virtuelle Pakete leiden an beunruhigenden Einschränkungen, von denen die wichtigste das Fehlen einer Versionsnummer ist. Um zum vorhergehenden Beispiel zurückzukehren: eine Abhängigkeit wie Depends: libdigest-md5-perl (>= 1.6) wird trotz der Anwesenheit von Perl 5.10 von der Paketverwaltung niemals als erfüllt angesehen werden - obwohl sie in Wirklichkeit höchstwahrscheinlich erfüllt ist. In Unkenntnis dieser Tatsache wählt die Paketverwaltung die risikoärmste Option und geht davon aus, dass die Versionen nicht übereinstimmen.


GOING FURTHER Virtuelle Paket Versionen


Obwohl virtuelle Pakete bisher keine Versionen haben können, wird dies nicht immer der Fall sein. apt ist in der Tat bereits in der Lage, mit Versionen virtueller Pakete umzugehen und das wird bei dpkg eines Tages auch so sein. Wir werden dann Zeilen wie Provides: libstorable-perl (= 1.7) schreiben können um anzuzeigen, dass ein Paket dieselbe Funktionalität wie libstorable-perl in seiner Version 1.7 bereitstellt.


Dateien ersetzen: Das Ersetzen-Feld


Ersetzung


Ersetzt, Kopfzeile


PaketErsatz


Die Replaces-Zeile zeigt an, dass das Paket Dateien enthält, die auch in einem anderen Paket vorhanden sind, aber dass das Paket offiziell berechtigt ist, sie zu ersetzen. Ohne diese Angabe würde dpkg scheitern und erklären, dass es die Dateien eines anderen Paketes nicht überschreiben kann (allerdings kann es durch die Option --force-overwrite dazu gezwungen werden). Hierdurch ist es möglich, eventuelle Probleme zu identifizieren, und es erfordert vom Betreuer, die Angelegenheit zu untersuchen, bevor er entscheidet, ob er solch eine Zeile einfügt.


Die Verwendung dieser Zeile ist gerechtfertigt, wenn sich Paketnamen ändern oder wenn ein Paket in einem anderen enthalten ist. Dies kommt auch vor, wenn der Betreuer sich entschließt, Dateien in unterschiedlicher Weise auf mehrere Binärpakete zu verteilen, die vom selben Quellpaket erstellt werden: eine ersetzte Datei ist nicht mehr Teil des alten Pakets, sondern nur noch des neuen.


Sobald alle Dateien eines installieren Pakets ersetzt wurden, gilt das Paket als gelöscht. Ausserdem veranlasst dieses Feld dpkg das ersetzte Paket zu löschen wenn ein Konflikt auftritt.


GOING FURTHER Das Tag Feld


In obenstehendem apt-Beispiel sehen wir eine Zeile, die wir noch nicht erläutert haben: die Tag-Zeile. Diese Zeile beschreibt keine Beziehung zwischen Paketen, sondern ist eine einfache Möglichkeit, ein Paket in einer thematischen Taxonomie zu kategorisieren. Diese Einordnung von Paketen aufgrund verschiedener Kriterien (Art der Schnittstelle, Programmiersprache, Verwendungsbereich usw.) ist eine neuere Entwicklung in Debian. Für diesen Zweck ist es noch nicht in allen Werkzeugen integriert; aptitude zeigt diese Kennzeichnungen an und erlaubt es, sie als Suchkriterien zu verwenden. Für diejenigen, denen aptitudes Suchkriterien nicht gefallen, ermöglicht folgende Seite das Durchsuchen der Kennzeichen-Datenbank: aptitude


Konfigurationsskripte


postinst


preinst


postrm


prerm


control.tar.gz


Zusätzlich zur control-Datei kann das control.tar.gz-Archiv jedes Debian Pakets eine Anzahl von Skripten enthalten, die von dpkg in verschiedenen Phasen der Paketverarbeitung aufgerufen werden. Die Debian Politik beschreibt ausführlich die möglichen Fälle, indem es die aufgerufenen Skripte benennt und die Parameter, die sie entgegennehmen. Diese Abläufe können kompliziert werden, da dpkg im Falle des Scheiterns eines Skripts versuchen wird, zu einem zufriedenstellenden Zustand zurückzukehren, indem es die Installation oder die gerade stattfindende Entfernung (insofern möglich) abbricht.


WEITERE SCHRITTE dpkg-Datenverzeichnis


/var/lib/dpkg/


Alle Konfigurationsskripte für installierte Pakete sind im Verzeichnis /var/lib/dpkg/info/ in Form einer Datei gespeichert, der der Dateiname vorangestellt ist. In diesem Verzeichnis befindet sich für jedes Paket auch eine Datei mit der Erweiterung .list, die eine Liste der Dateien enthält, die zu dem jeweiligen Paket gehören.


Die Datei /var/lib/dpkg/status enthält eine Reihe von Datenblöcken (im Format der bekannten Mail-Kopfzeilen, RFC 2822), die den Status jedes Pakets beschreiben. Die Information aus der control-Datei der installierten Pakete ist hier ebenfalls wiedergegeben.


Im Allgemeinen wird das Skript preinst vor der Installation eines Pakets ausgeführt, postinst danach. In gleicher Weise wird prerm vor dem Entfernen eines Pakets aufgerufen und postrm danach. Die Aktualisierung eines Pakets ist gleichbedeutend mit einem Entfernen der vorhergehenden Version und einer Installation der neuen. Alle möglichen Szenarien können hier nicht ausführlich beschrieben werden, aber wir werden die zwei häufigsten erörtern: eine Installation/Aktualisierung und ein Entfernen.


VORSICHT Symbolische Skriptnamen


Die in diesem Abschnitt beschriebenen Schritte bezeichnen Konfigurationsskripte mit spezifischen Namen wie old-prerm oder new-postinst. Dies sind das in der alten Version des Pakets enthaltene Skript prerm (das vor der Aktualisierung installiert worden war) und das in der neuen Version enthaltene Skript postinst (das durch die Aktualisierung installiert wird).


TIP Zustandsdiagramme


Manoj Srivastava hat diese Diagramme erstellt, die erklären, wie die Konfigurationsskripte von dpkg aufgerufen werden. Ähnliche Diagramme wurden auch vom Projekt Debian Women entwickelt; sie sind etwas einfacher zu verstehen, aber weniger vollständig.


Installation und Upgrade


Das passiert während einer Installation (oder eines Updates):


Für eine Aktualisierung ruft dpkg das Skript old-prerm upgrade new-version auf.


Ebenfalls für eine Aktualisierung führt dpkg dann new-preinst upgradeold-version aus; für eine erstmalige Installation führt es new-preinst install aus. Möglicherweise fügt es im letzten Parameter die alte Version hinzu, falls das Paket früher bereits installiert war und seither entfernt wurde (aber nicht vollständig gelöscht, da die Konfigurationsdateien noch zurückbehalten wurden).


Die neuen Paketdateien werden dann entpackt. Falls eine Datei bereits vorhanden ist, wird sie ersetzt, wobei aber vorübergehend eine Sicherheitskopie erstellt wird.


Für eine Aktualisierung führt dpkg das Skript old-postrm upgrade new-version aus.


dpkg aktualisiert alle internen Daten (Dateiliste, Konfigurationsskripte usw.) und entfernt die Sicherheitskopien der ersetzten Dateien. Dies ist der Punkt, an dem es kein Zurück mehr gibt: dpkg hat keinen Zugang zu all den Elementen mehr, die für eine Rückkehr zum vorherigen Zustand erforderlich wären.


dpkg wird dann die Konfigurationsdateien aktualisieren, wobei es den Nutzer auffordert, Entscheidungen zu treffen, falls es diese Aufgabe nicht selbsttätig erledigen kann. Die Einzelheiten dieses Vorgangs sind in erläutert.


Schließlich konfiguriert dpkg das Paket, indem es new-postinst configure last-version-configured ausführt.


Paket deinstallieren


Dies passiert während des löschens eines Pakets:


dpkg calls prerm remove.


dpkg entfernt alle Paketdateien bis auf die Konfigurationsdateien und die Konfigurationsskripte.


dpkg führt postrm remove aus. Hierdurch werden alle Konfigurationsskripte bis auf postrm entfernt. Falls der Nutzer nicht die Option "purge" benutzt hat, ist der Vorgang hiermit abgeschlossen.


Für eine vollständige Entfernung des Paketes (durch den Befehl dpkg --purge oder dpkg -P) werden sowohl die Konfigurationsdateien entfernt, als auch eine Anzahl von Kopien (*.dpkg-tmp, *.dpkg-old, *.dpkg-new) und temporären Dateien; dpkg führt dann abschließend postrm purge aus.


dpkg, interner Ablauf


config, debconf script


VOCABULARY "purge", vollständiges Entfernen


vollständiges Entfernen ("purge") eines Pakets


Wenn ein Debian Paket entfernt wird, bleiben die Konfigurationsdateien erhalten, um eine mögliche Re-Installation zu erleichtern. In gleicher Weise werden die von einem Hintergrundprogramm erzeugten Daten (wie der Inhalt eines LDAP-Server-Verzeichnisses oder der Inhalt einer SQL-Server-Datenbank) normalerweise erhalten.


Um alle mit einem Paket in Verbindung stehenden Daten zu entfernen, muss das Paket mit dem Befehl dpkg -P package, apt-get remove --purge package oder aptitude purge package gelöscht werden.


Angesichts der Unwiderruflichkeit einer derartigen Datenlöschung sollte "purge" nicht unbedacht verwendet werden.


Die vier im folgenden beschriebenen Skripte werden durch ein config-Skript ergänzt, das von Paketen bereitgestellt wird, die debconf verwenden, um vom Nutzer Informationen für die Konfigurierung zu bekommen. Während der Installation bestimmt dieses Skript im Einzelnen die Fragen, die von debconf gestellt werden. Die Antworten werden zur späteren Verwendung in der debconf-Datenbank aufgezeichnet. Das Skript wird von apt normalerweise ausgeführt, bevor es ein Paket nach dem anderen installiert, um so alle Fragen zu gliedern und sie dem Nutzer vollständig zu Beginn des Vorgangs zu stellen. Die Vor- und Nachinstallationsskripte können dann diese Information verwenden, um den Wünschen des Nutzers entsprechend zu agieren.


TOOL debconf


debconf


debconf wurde entwickelt, um ein in Debian immer wiederkehrendes Problem zu lösen. Alle Debian Pakete, die ohne eine wenigstens minimale Konfiguration nicht funktionieren konnten, stellten gewöhnlich Fragen, indem sie die Befehle echo und read in Shell-Skripten oder ähnlichen aufriefen. Dies bedeutete jedoch, dass der Nutzer während einer umfangreichen Installation oder Aktualisierung beim Rechner bleiben musste, um diverse Fragen, die sich jederzeit ergeben konnten, zu beantworten. Auf dieses manuelle Zusammenwirken kann inzwischen dank debconf fast vollständig verzichtet werden.


debconf hat zahlreiche interessante Merkmale: es verlangt vom Entwickler, Interaktionen mit dem Nutzer festzulegen; es erlaubt die Lokalisierung der Eingabe verschiedener Zeichenfolgen (alle Übersetzungen der Interaktionsbezeichnungen sind in der Template-Datei gespeichert); es verfügt über verschiedene Anzeigearten zur Darstellung der Fragen an den Nutzer (Textmodus, Grafikmodus, nicht interaktiv); und es ermöglicht die Erstellung einer zentralen Datenbank von Antworten, um so die selbe Konfiguration mit verschiedenen Rechnern zu teilen... aber das Wichtigste ist, dass es jetzt möglich ist, dem Nutzer vor Beginn einer langen Installation oder Aktualisierung alle Fragen in einem Block zu stellen. Der Nutzer kann dann andere Aufgaben erledigen, während das System die Installation selbständig erledigt, und er braucht nicht mehr vor Ort zu bleiben und in Erwartung möglicher Fragen auf den Bildschirm zu starren.


Checksummen, Liste der Konfigurationsdateien


md5sums


conffiles


DateienKonfigurationsdateien


KonfigurationDateien


Zusätzlich zu den in den vorherigen Kapiteln genannten enthält in einem Debian Paket die control.tar.gz-Datei weitere Konfigurationsdateien. Die erste, md5sums, enthält eine Liste der digitalen Fingerabdrücke aller Dateien des Pakets. Ihr Hauptvorteil besteht darin, dass sie es einem Programm wie debsums (auf das wir in noch näher eingehen werden) gestattet, zu überprüfen, ob diese Dateien seit ihrer Installierung verändert worden sind.


conffiles führt Paketdateien auf, die als Konfigurationsdateien behandelt werden müssen. Dies geht mit einer besonderen Handhabung einher, da Konfigurationsdateien durch den Administrator angepasst werden können, und da diese Anpassungen bei einer Paketaktualisierung normalerweise erhalten bleiben.


Im Ergebnis verhält sich dpkg in dieser Situation möglichst intelligent: falls die Standard-Konfigurationsdatei zwischen zwei Versionen nicht verändert worden ist, tut es gar nichts. Falls die Datei jedoch verändert wurde, wird es versuchen, sie zu aktualisieren. Zwei Fälle sind möglich: entweder hat der Administrator diese Konfigurationsdatei nicht angerührt, dann installiert dpkg automatisch die neue Version; oder die Datei ist verändert worden, dann fragt dpkg den Administrator, welche Version er verwenden möchte (die alte mit den Veränderungen oder die neue, die mit dem Paket bereitgestellt wird). Um diese Entscheidung zu erleichtern, bietet dpkg an, ein "diff" anzuzeigen, das die Unterschiede zwischen den beiden Versionen aufführt. Falls der Nutzer sich entscheidet, die alte Version zu behalten, wird die neue am selben Ort abgespeichert in einer Datei mit dem Zusatz .dpkg-old. Eine weitere mögliche Maßnahme besteht darin, dpkg vorübergehend anzuhalten und dann die Datei zu editieren, und dabei zu versuchen, die relevanten Veränderungen (die zuvor durch diff identifiziert worden sind) wieder einzusetzen.


GOING FURTHER Vermeiden der Fragen zur Konfiguration


dpkg erledigt die Aktualisierung von Konfigurationsdateien, unterbricht aber regelmäßig diese Aktionen, um den Administrator um Eingaben zu bitten. Dies ist für diejenigen, die Aktualisierungen in einer nicht-interaktiven Weise ablaufen lassen möchten, weniger erfreulich. Daher bietet dieses Programm auch Optionen an, die es dem System ermöglichen, selbständig in Übereinstimmung mit der gleichen Logik zu verfahren: --force-confold behält die alte Dateiversion; --force-confnew verwendet die neue (diese Auswahlmöglichkeiten werden selbst dann eingehalten, wenn die Datei nicht vom Administrator verändert wurde, was selten den gewünschten Effekt hat). Durch Hinzufügen der Option --force-confdef wird dpkg mitgeteilt, dass es die Standardoption verwenden soll, wenn eine Auswahl angeboten wird (anders ausgedrückt, wenn die ursprüngliche Konfigurationsdatei nicht angerührt worden ist), und dass es die Optionen --force-confnew oder --force-confold nur in anderen Fällen verwendet.


Diese Optionen gelten für dpkg, aber meistens wird der Administrator direkt mit den Programmen aptitude oder apt-get arbeiten. Es ist daher erforderlich, die Syntax zu kennen, die zur Bezeichnung der Optionen verwendet wird, die an dpkg weitergeleitet werden (ihre Befehlszeilen-Schnittstellen sind sehr ähnlich).


# apt-get -o DPkg::Options::="--force-confdef" -o DPkg::options::="--force-confold" dist-upgrade


Diese Optionen können direkt in der Konfiguration des apt-Programms gespeichert werden, statt sie jedesmal auf der Befehlszeile anzugeben. Hierzu schreiben Sie einfach die folgende Zeile in die Datei /etc/apt/apt.conf.d/local;


DPkg::Options { "--force-confdef"; "--force-confold"; }


Die Aufnahme dieser Option in die Konfigurationsdatei ermöglicht es, sie auch in einer grafischen Schnittstelle wie aptitude zu verwenden.


GOING FURTHER Zwinge dpkg nach Konfigurationsdatei Fragen zu stellen


Die Option --force-confask zwingt dpkg dazu, die Fragen zu den Konfigurationsdateien selbst in den Fällen anzuzeigen, in denen sie normalerweise nicht notwendig wären. So wird dpkg bei der Re-Installation eines Paketes mit dieser Option erneut die Fragen zu allen Konfigurationsdateien stellen, die vom Administrator verändert worden sind. Dies ist vor allem sehr praktisch für das erneute Installieren der ursprünglichen Konfigurationsdatei, falls sie gelöscht worden ist oder keine andere Kopie verfügbar ist: eine normale Re-Installation würde nicht funktionieren, weil dpkg das Entfernen als eine zulässige Form der Veränderung ansieht und daher die gewünschte Konfigurationsdatei nicht installiert.


Struktur eine Source Pakets


PaketQuellpaket


Quelle (Paket)


Format


DSC file


diff.gz Datei


Ein Quellpaket besteht normalerweise aus drei Dateien, eine .dsc, eine .orig.tar.gz und eine .debian.tar.gz oder .diff.gz. Sie erlauben es, aus ihrem Quellcode, der in einer Programmiersprache geschrieben wurde, Binärpakete zu erstellen (.deb-Dateien, wie oben beschrieben).


Die Datei .dsc (Debian Source Control) ist ein kurzer Text, der einen RFC 2822 Header enthält (genau wie die in untersuchte control-Datei), der das Quellpaket beschreibt und angibt, welche anderen Dateien dazugehören. Sie ist von ihrem Betreuer signiert, wodurch Authentizität gewährleistet ist. Siehe für weitere Einzelheiten zu diesem Thema.


A .dsc Datei


-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Format: 3.0 (quilt) Source: zim Binary: zim Architecture: all Version: 0.48-1 Maintainer: Emfox Zhou <emfox@debian.org> Uploaders: Raphaël Hertzog <hertzog@debian.org> Homepage: http://zim-wiki.org Standards-Version: 3.9.0 Vcs-Browser: http://svn.debian.org/wsvn/collab-maint/deb-maint/zim/trunk?op=log Vcs-Svn: svn://svn.debian.org/collab-maint/deb-maint/zim/trunk Build-Depends: debhelper (>= 7.4.12), python-support (>= 0.8), xdg-utils, python (>= 2.5), libgtk2.0-0 (>= 2.6), python-gtk2, python-xdg, python-simplejson | python (>= 2.6) Checksums-Sha1: bd84fa5104de5ed85a49723d26b350856de93217 966899 zim_0.48.orig.tar.gz 352111ff372a20579664416c9abd4970839835b3 9615 zim_0.48-1.debian.tar.gz Checksums-Sha256: 77d8df7dc89b233fdc3aab1a8ad959c6888881ae160770f50bf880a56e02f895 966899 zim_0.48.orig.tar.gz 0fceab5d3b099075cd38c225fa4002d893c1cdf4bbcc51d1391a34248e1e1a22 9615 zim_0.48-1.debian.tar.gz Files: 88cfc18c0c7339528d5f5f463647bb5f 966899 zim_0.48.orig.tar.gz 608b6e74aa14252dfc6236ab184bdb0c 9615 zim_0.48-1.debian.tar.gz -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Signed by Raphael Hertzog iQEcBAEBCAAGBQJMSUAfAAoJEAOIHavrwpq5qjUIAKmM8p86GcHYTxMmKENoBUoW UPi5R7DzrLMbFrUXKgXWLvEKQTXpmkJhh2aSWq2iY+5piBSHwMiITfaBTpdTRvzU 5nT/n9MlF8sJFESet/NgZaMPFDzWUbIy5aYbuG1TXmn/7XiDrBaQGiVqKkVLPrqc yWhsotn3JNKIjbPDW/DjImYyKD5RZpXrbVjuIgDT1E6yxtNYwUyBlK0cx/GITNep uV48hsT8cj0paqVXl5+P9Ww8XIE3clxNpE/45/tvKvkqGOeysc6OPAqsIw6HYFY9 0EnvMTfMpeQOA68ZqsNpUjomv5r/EGwdCbAWo5iJDsZzXQ1Feh6iSNrjv3yeRzg= =qnbh -----END PGP SIGNATURE-----


Build-Depends, Kopfzeile


Beachten Sie, dass das Quellpaket ebenfalls Abhängigkeiten (Build-Depends) hat, die jedoch mit denen der Binärpakete nichts gemein haben, da sie die Programme benennen, die erforderlich sind, um die betreffende Software zu kompilieren und sein Binärpaket zu erstellen.


VORSICHT Unterschiedliche Namensräume


Es ist hier wichtig festzustellen, dass es keine enge Beziehung zwischen dem Namen eines Quellpakets und der daraus erstellten Binärpakete gibt. Dies ist leicht einzusehen, wenn man weiß, dass jedes Quellpaket verschiedene Binärpakete erzeugen kann. Daher hat die .dsc-Datei Zeilen für Source und Binary, um so ausdrücklich das Quellpaket zu nennen und eine Liste von Binärpaketen zu speichern, die es erzeugt.


KULTUR Warum in mehrere Pakete aufteilen


Nicht selten kann ein Quellpaket (für eine bestimmte Gruppe von Programmen) verschiedene Binärpakete erzeugen. Die Gründe sind manningfach: häufig kann ein Programm in unterschiedlichen Zusammenhängen verwendet werden. Dann kann eine gemeinsame Bibliothek installiert werden, um eine Anwendung zum Laufen zu bringen (zum Beispiel libc6). Oder es wird installiert, um ein neues Programm zu entwickeln (dann wäre libc6-dev das richtige Paket). Wir finden den gleichen Gedankengang bei Client/Server-Diensten, bei denen wir den Serverteil auf einem Rechner installieren möchten und den Clientteil auf anderen (dies ist zum Beispiel bei openssh-server und openssh-client der Fall).


Genauso oft wird die Dokumentation in einem speziell dafür vorgesehenen Paket bereitgestellt: der Nutzer kann es unabhängig von der Software installieren und sich jederzeit dazu entschließen, es zu entfernen, um Speicherplatz zu sparen. Darüberhinaus spart dies auch Speicherplatz auf den Debian Spiegelservern, da alle Dokumentationspakete von allen Architekturen gemeinsam benutzt werden (anstatt die Dokumentation in den Paketen jeder Architektur zu reproduzieren).


PERSPECTIVE Verschiedene Quellpaket-Formate


Ursprünglich gab es nur ein Quellpaket-Format. Dies ist das 1.0-Format, das ein .orig.tar.gz-Archiv mit einem .diff.gz.tar.gz-Archiv besteht, das automatisch verwendet wird, wenn kein .orig.tar.gz verfügbar ist).


Seit Debian Squeeze haben Debianentwickler die Möglichkeit, neue Formate zu verwenden, die zahlreiche Probleme des früheren Formats beheben. Format 3.0 (quilt) kann mehrere Ursprungsarchive in einem Quellpaket vereinen: zusätzlich zu den üblichen .orig.tar.gz-Archiven ergänzende .orig-component.tar.gz-Archive. Dies ist bei Software hilfreich, die in Form verschiedener Ursprungskomponenten veröffentlicht ist, für die aber ein einzelnes Quellpaket erwünscht ist. Diese Archive können auch mit bzip2 komprimiert werden statt mit gzip (lzma und xz werden von dpkg-source unterstützt, aber werden für die offiziellen Archive akzeptiert), wodurch Speicherplatz und Netzwerkressourcen gespart werden. Schließlich wurde der monolithische Patch .diff.gz durch ein .debian.tar.gz-Archiv ersetzt, das die Kompilierungsanweisungen enthält und einen Satz von Ursprungspatches, die vom Paketbetreuer beigesteuert wurden. Letztere sind in einem Format aufgezeichnet, das mit quilt kompatibel ist, einem Programm, das die Verwaltung einer Reihe von Patches erleichtert.


.orig.tar.gz ist ein Archiv, das den Programm-Quellcode enthält, wie er vom ursprünglichen Entwickler bereitgestellt wurde. Entwickler sind gebeten, dieses Archiv nicht zu verändern, damit es möglich ist, den Ursprung und die Integrität der Datei (durch einen einfachen Vergleich mit einer Prüfsumme) zu kontrollieren, und um die Wünsche mancher Autoren zu respektieren.


Das .debian.tar.gz-Archiv enthält alle vom Debian-Betreuer vorgenommenen Veränderungen, insbesondere auch ein ergänzendes debian-Verzeichnis, das Ausführungsanweisungen für die Erstellung eines Debian-Paketes enthält.


TOOL Auspacken eines Quellpaketes


dpkg-source


Falls Sie ein Quellpaket haben, können Sie dpkg-source (aus dem dpkg-dev-Paket) benutzen, um es zu entpacken:


$ dpkg-source -x package_0.7-1.dsc


Sie können auch apt-get dazu benutzen, ein Quellpaket herunterzuladen und direkt zu entpacken. Hierzu ist es jedoch erforderlich, dass die entsprechenden deb-src-Zeilen in der Datei /etc/apt/sources.list vorhanden sind (für weitere Einzelheiten siehe ). Diese dienen dazu, die "Quellen" der Quellpakete aufzulisten (das heißt, die Server, die eine Gruppe von Quellpaketen beherbergen).


$ apt-get source package


Verwendung innerhalb von Debian


Das Quellpaket ist die Grundlage für alles in Debian. Alle Debian Pakete gehen aus einem Quellpaket hervor, und jede Veränderung in einem Debian Paket ist die Folge einer Veränderung in einem Quellpaket. Die Debian-Betreuer arbeiten mit dem Quellpaket, kennen jedoch die Auswirkungen ihrer Handlungen auf die Binärpakete. Die Früchte ihrer Arbeit sind daher in den von Debian bereitgestellten Quellpaketen zu finden: Sie können problemlos zurückgehen und alles verfolgen.


Wenn eine neue Version eines Pakets (Quellpaket und ein oder mehrere Binärpakete) beim Debian-Server eintrifft, ist das Quellpaket das wichtigste. Es wird dann nämlich von einem Netzwerk aus Rechnern verschiedener Architekturen benutzt, um Kompilierungen für die verschiedenen von Debian unterstützten Architekturen zu erstellen. Die Tatsache, dass der Entwickler auch ein oder mehrere Binärpakete für eine bestimmte Architektur mitschickt (gewöhnlich i386 oder amd64), ist relativ unwichtig, da diese genauso gut automatisch erzeugt worden sein könnten.


Pakete verändern mit dpkg


dpkg ist der Grundbefehl zum Umgang mit Debian-Paketen auf dem System. Falls Sie .deb-Pakete haben, ermöglicht dpkg es Ihnen, sie zu installieren oder ihren Inhalt zu analysieren. Aber dieses Programm sieht nur einen begrenzten Ausschnitt des Debian-Universums: es weiß, was auf dem System installiert ist und was auch immer in der Befehlszeile eingegeben wird, aber es weiß nichts von den anderen verfügbaren Paketen. Daher wird es scheitern, wenn eine Abhängigkeit nicht erfüllt ist. Im Gegensatz hierzu werden Programme wie apt-get eine Liste von Abhängigkeiten erstellen, die soweit wie möglich automatisch installiert werden müssen.


NOTE dpkg oder apt-get?


dpkg sollte als ein Systemprogramm (backend) angesehen werden und apt-get als ein Programm, das dem Nutzer näher steht und die zuvor erwähnten Einschränkungen überwindet. Diese Programme arbeiten zusammen, jedes mit seinen Besonderheiten und seiner Eignung für bestimmte Aufgaben.


Pakete Installieren


Installationvon Paketen


PaketInstallation


dpkg ist vor allem ein Programm zur Installation eines bereits vorhandenen Debian Pakets (da es nichts herunterlädt). Hierzu verwenden wir seine -i oder --install Option.


Installation eines Pakets mit dpkg


# dpkg -i man-db_2.5.7-4_i386.deb (Reading database... 284247 files and directories currently installed.) Preparing replacement man-db 2.5.7-3 (using .../man-db_2.5.7-4_i386.deb) ... Unpacking the man-db update... Configuring man-db (2.5.7-4) ... Updating database of manual pages ... Processing triggers for “doc-base”... Processing 1 modified documentation file(s) Recording documents with scrollkeeper ...


Wir können die verschiedenen Schritte, die von dpkg durchgeführt werden, sehen; so wissen wir, an welchem Punkt möglicherweise ein Fehler aufgetreten ist. Die Installation kann in zwei Phasen betroffen sein: erstens beim Entpacken und zweitens bei der Konfigurierung. apt-get nutzt dies, um die Anzahl der Aufrufe von dpkg zu begrenzen (weil jeder Aufruf aufwendig ist, da jedes Mal die Datenbank in den Speicher geladen werden muss, vor allem die Liste der bereits installierten Dateien).


Getrenntes Entpacken und Konfigurieren


# dpkg --unpack man-db_2.5.7-4_i386.deb (Reading database... 284247 files already installed.) Preparing replacement of man-db 2.5.7-3 (using .../man-db_2.5.7-4_i386.deb) ... Unpacking the man-db update... Processing triggers for “doc-base”... Treatment of a modified documentation file(s) Recording documents with scrollkeeper ... # dpkg --configure man-db Configuring man-db (2.5.7-4) ... Updating database of manual pages ...


PaketEntpacken


Manchmal wird dpkg bei der Installation eines Pakets scheitern und eine Fehlermeldung ausgeben; falls der Nutzer die Anweisung gibt, ihn zu ignorieren, wird es nur eine Warnung anzeigen; aus diesem Grund haben wir die verschiedenen --force-* Optionen. Der Befehl dpkg --force-help oder die Dokumentation dieses Befehls zeigt Ihnen eine vollständige Liste dieser Optionen. Der häufigste Fehler, dem Sie früher oder später mit Sicherheit begegnen werden, ist eine Dateikollision. Wenn ein Paket eine Datei enthält, die bereits mit einem anderen Paket installiert worden ist, wird dpkg sich weigern, es zu installieren. In diesem Fall wird dann folgende Meldung erscheinen:


Unpacking libisc52 (from .../libisc52_1%3a9.6.ESV.R1+dfsg-0+lenny2_amd64.deb) ... dpkg : error processing /var/cache/apt/archives/libisc52_1%3a9.6.ESV.R1+dfsg-0+lenny2_amd64.deb (--unpack) : trying to overwrite "/usr/lib/libisc.so.50", which is also in package libisc50 1:9.6.1.dfsg.P1-3


Falls Sie in diesem Fall denken, dass das Ersetzen dieser Datei kein wesentliches Risiko für die Stabilität Ihres Systems bedeutet (was normalerweise der Fall ist), können Sie die Option --force-overwrite benutzen, die dpkg anweist, diesen Fehler zu ignorieren und die Datei zu überschreiben.


Obwohl viele --force-* Optionen verfügbar sind, wird wahrscheinlich nur --force-overwrite häufiger gebraucht werden. Es gibt diese Optionen nur für außergewöhnliche Situationen, und es ist besser, soweit wie möglich die Finger von ihnen zu lassen, um die vom Paketverwaltungsmechanismus vorgegebenen Regeln zu beachten. Sie sollten nicht vergessen, dass diese Regeln die Konsistenz und Stabilität Ihres Systems sicherstellen.


VORSICHT Effektive Verwendung von --force-*


Gebrochene Abhängigkeit


Falls Sie nicht vorsichtig sind, kann der Gebrauch einer der --force-* Optionen zu einem System führen, bei dem die APT-Befehlsfamilie nicht mehr funktioniert. In der Tat erlauben es einige dieser Optionen, ein Paket zu installieren, obwohl eine Abhängigkeit nicht erfüllt ist, oder wenn ein Konflikt vorliegt. Das Ergebnis ist ein aus Sicht der Abhängigkeiten inkonsistentes System, und die APT-Befehle werden sich weigern, irgendeine Aktion auszuführen, es sei denn, dass diese Aktion es ihnen ermöglicht, das System wieder in einen konsistenten Zustand zurückzuführen (dies besteht oft darin, dass die fehlende Abhängigkeit installiert oder ein problematisches Paket entfernt wird). Häufig führt dies zu einer Meldung wie der folgenden, die angezeigt wurde, nachdem eine neue Version von rdesktop installiert und dabei seine Abhängigkeit von einer neueren Version von libc6 ignoriert wurde:


# apt-get dist-upgrade [...] You can run "apt-get -f install" to correct these problems. The following packages contain unmet dependencies: rdesktop: Depends on: libc6 (>= 2.5) but 2.3.6.ds1-13etch7 is installed E: missing dependencies. Try to use the option -f.


Ein mutiger Administrator, der von der Richtigkeit seiner Analyse überzeugt ist, wird sich möglicherweise entscheiden, eine Abhängigkeit oder einen Konflikt zu ignorieren und die entsprechende --force-* Option verwenden. Falls er in diesem Fall weiterhin in der Lage sein will, apt-get oder aptitude zu verwenden, muss er /var/lib/dpkg/status editieren, um die Abhängigkeit oder den Konflikt, über den er sich hinweggesetzt hat, zu löschen oder abzuändern.


Diese Manipulation ist ein hässlicher Hack und sollte niemals benutzt werden, oder doch nur im äußersten Notfall. Häufig besteht eine bessere Lösung darin, das Paket, das das Problem verursacht, neu zu kompilieren (siehe ) oder eine neue (möglicherweise korrigierte) Version von einer Seite wie backports.debian.org zu verwenden (siehe ).


ein Paket entfernen


PaketEntfernen


Paketvollständig löschen


Der Aufruf von dpkg mit der Option -r oder --remove, gefolgt von dem Paketnamen, entfernt das Paket. Dieses Entfernen ist jedoch nicht vollständig: alle Konfigurationsdateien und -skripte, Protokolldateien (Systemprotokolle) und andere vom Paket verarbeitete Nutzerdaten bleiben zurück. Sie werden zurückbehalten, um einerseits das Programm durch seine Deinstallation zu deaktivieren, andererseits aber die Option zu erhalten, es schnell und in der selben Konfiguration wieder zu installieren. Um alles, was mit einem Paket in Zusammenhang steht, vollständig zu entfernen, verwenden Sie die Option -P oder --purge, gefolgt von dem Paketnamen.


Entfernen und vollständiges Löschen des Pakets debian-cd


# dpkg -r debian-cd (Reading database... 14170 files and directories already installed.) Removing debian-cd ... # dpkg -P debian-cd (Reading database... 13794 files and directories already installed.) Removing debian-cd ... Removing debian-cd configuration files...


Andere dpkg Merkmale


PaketStatus


PaketDateiliste


PaketInhaltsüberprüfung


ZURÜCK ZU DEN GRUNDLAGEN Optionen Syntax


Die meisten Optionen gibt es sowohl in einer "langen" Version (ein oder mehrere einschlägige Wörter mit einem vorangestellten doppelten Gedankenstrich) als auch in einer "kurzen" Version (ein einzelner Buchstabe, häufig der Anfangsbuchstabe einer der Wörter der langen Version, mit einem einzelnen vorangestellten Gedankenstrich). Dieser Grundsatz ist so sehr verbreitet, dass er ein POSIX-Standard ist. POSIX OptionPOSIX


Bevor wir dieses Kapitel abschließen, vermerken wir, dass einige dpkg Optionen die interne Datenbank abfragen, um Informationen zu erhalten. Zunächst in der langen Version und dann der entsprechenden kurzen Version (die natürlich dieselben Parameter haben kann) führen wir hierzu folgende Beispiele an: --listfiles Paket (oder -L), listet die von diesem Paket installierten Dateien auf; --search Datei (oder -S), stellt das Paket fest, aus dem die Datei stammt; --status Paket (oder -s), zeigt die Kopfzeilen eines installierten Pakets an; --list (oder -l), zeigt eine Liste der Pakete an, die dem System bekannt sind, und ihren Installationsstatus; --contents datei.deb (oder -c), führt die in dem genannten Debian-Paket enthaltenen Dateien auf; --info datei.deb (oder -I), zeigt die Kopfzeilen des Debian-Pakets an.


Verschiedene Anfragen mit dpkg


$ dpkg -L base-passwd /. /usr /usr/sbin /usr/sbin/update-passwd /usr/share /usr/share/man /usr/share/man/ru /usr/share/man/ru/man8 /usr/share/man/ru/man8/update-passwd.8.gz /usr/share/man/pl /usr/share/man/pl/man8 /usr/share/man/pl/man8/update-passwd.8.gz /usr/share/man/man8 /usr/share/man/man8/update-passwd.8.gz /usr/share/man/fr /usr/share/man/fr/man8 /usr/share/man/fr/man8/update-passwd.8.gz /usr/share/doc-base /usr/share/doc-base/users-and-groups /usr/share/base-passwd /usr/share/base-passwd/passwd.master /usr/share/base-passwd/group.master /usr/share/lintian /usr/share/lintian/overrides /usr/share/lintian/overrides/base-passwd /usr/share/doc /usr/share/doc/base-passwd /usr/share/doc/base-passwd/copyright /usr/share/doc/base-passwd/users-and-groups.html /usr/share/doc/base-passwd/changelog.gz /usr/share/doc/base-passwd/users-and-groups.txt.gz /usr/share/doc/base-passwd/README $ dpkg -S /bin/date coreutils: /bin/date $ dpkg -s coreutils Package: coreutils Essential: yes Status: install ok installed Priority: required Section: utils Installed-Size: 12188 Maintainer: Michael Stone <mstone@debian.org> Architecture: i386 Version: 8.5-1 Replaces: mktemp, timeout Pre-Depends: libacl1 (>= 2.2.11-1), libattr1 (>= 2.4.41-1), libc6 (>= 2.6), libselinux1 (>= 1.32) Conflicts: timeout Description: GNU core utilities This package contains the basic file, shell and text manipulation utilities which are expected to exist on every operating system. . Specifically, this package includes: arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir dircolors dirname du echo env expand expr factor false flock fmt fold groups head hostid id install join link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc od paste pathchk pinky pr printenv printf ptx pwd readlink rm rmdir runcon sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test timeout touch tr true truncate tsort tty uname unexpand uniq unlink users vdir wc who whoami yes Homepage: http://gnu.org/software/coreutils $ dpkg -l 'b*' | head Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Description +++-===================-==========-============================================ un backupninja <none> (no description available) un base <none> (no description available) un base-config <none> (no description available) ii base-files 4 Debian base system miscellaneous files ii base-passwd 3.5.11 Debian base system master password and group $ dpkg -c /var/cache/apt/archives/iceweasel_2.0.0.18-0etch1_i386.deb drwxr-xr-x root/root 0 2008-11-23 23:18 ./ drwxr-xr-x root/root 0 2008-11-23 23:16 ./etc/ drwxr-xr-x root/root 0 2008-11-23 23:18 ./etc/iceweasel/ drwxr-xr-x root/root 0 2008-11-23 23:18 ./etc/iceweasel/profile/ -rw-r--r-- root/root 7138 2006-08-19 08:04 ./etc/iceweasel/profile/bookmarks.html -rw-r--r-- root/root 153 2006-09-14 19:13 ./etc/iceweasel/profile/localstore.rdf -rw-r--r-- root/root 3287 2005-02-01 18:36 ./etc/iceweasel/profile/search.rdf -rw-r--r-- root/root 287 2004-11-30 22:26 ./etc/iceweasel/profile/mimeTypes.rdf drwxr-xr-x root/root 0 2008-11-23 23:18 ./etc/iceweasel/profile/chrome/ -rw-r--r-- root/root 1078 2004-11-30 22:26 ./etc/iceweasel/profile/chrome/userChrome-example.css -rw-r--r-- root/root 663 2004-11-30 22:26 ./etc/iceweasel/profile/chrome/userContent-example.css -rw-r--r-- root/root 347 2004-07-28 23:20 ./etc/iceweasel/profile/prefs.js -rw-r--r-- root/root 53 2008-11-23 22:43 ./etc/iceweasel/iceweaselrc [...] $ dpkg -I /var/cache/apt/archives/iceweasel_2.0.0.18-0etch1_i386.deb new Debian package, version 2.0. size 9126828 bytes : control file = 37297 bytes. 346 bytes, 9 lines conffiles 1255 bytes, 20 lines control 122920 bytes, 1249 lines md5sums 1267 bytes, 37 lines * postinst #!/bin/sh 293 bytes, 8 lines * postrm #!/bin/sh 2763 bytes, 70 lines * preinst #!/bin/sh 274 bytes, 12 lines * prerm #!/bin/sh Package: iceweasel Version: 2.0.0.18-0etch1 Section: web Priority: optional Architecture: i386 Depends: fontconfig, psmisc, debianutils (>= 1.16), libatk1.0-0 (>= 1.12.2), libc6 (>= 2.3.6-6)... Suggests: iceweasel-gnome-support (= 2.0.0.18-0etch1), latex-xft-fonts, xprint, mozplugger, libkrb53 Conflicts: mozilla-firefox (<< 1.5.dfsg-1), firefox (<< 2.0+dfsg-1) Replaces: mozilla-firefox, firefox (<< 2.0+dfsg-1) Provides: www-browser Installed-Size: 26364 Maintainer: Eric Dorland <eric@debian.org> Description: lightweight web browser based on Mozilla Iceweasel is a redesign of the Mozilla browser component, similar to Galeon, K-Meleon and Camino, but written using the XUL user interface language and designed to be lightweight and cross-platform. . This browser is based on the Firefox source-code, with minor modifications. Historically, this browser was previously known as Firebird and Phoenix.


GOING FURTHER Versionsvergleich


Version, Vergleich


Versionsvergleich


Da dpkg das Programm für den Umgang mit Debian Paketen ist, stellt es auch die Anwendung zur Anzeige der Logik des Versionsnummernvergleichs dar. Es hat daher eine Option namens --compare-versions, die von externen Programmen benutzt werden kann (insbesondere von Konfigurationsskripten, die von dpkg selbst ausgeführt werden). Diese Option verlangt drei Parameter: eine Versionsnummer, einen Vergleichsoperator und eine zweite Versionsnummer. Die möglichen Operatoren sind lt (kleiner als), le (kleiner gleich als), eq (gleich), ne (ungleich), ge (größer gleich als) und gt (größer als). Falls der Vergleich zutrifft, gibt dpkg den Code 0 (Erfolg) aus; anderenfalls zeigt es einen von Null verschiedenen Rückgabewert an (Fehlschlag).


$ dpkg --compare-versions 1.2-3 gt 1.1-4 $ echo $? 0 $ dpkg --compare-versions 1.2-3 lt 1.1-4 $ echo $? 1 $ dpkg --compare-versions 2.6.0pre3-1 lt 2.6.0-1 $ echo $? 1


Beachten Sie den unerwarteten Fehlschlag des letzten Vergleichs: für dpkg hat pre, das normalerweise eine Vorabveröffentlichung bezeichnet, keine besondere Bedeutung, und es behandelt die Buchstaben in derselben Weise wie die Zahlen (a <b <c ...), in alphabetischer Reihenfolge. Daher hält es "0pre3" für größer als "0". Wenn wir möchten, dass die Versionsnummer eines Paketes eine Vorabveröffentlichung kennzeichnet, verwenden wir die Tilde "~":


$ dpkg --compare-versions 2.6.0~pre3-1 lt 2.6.0-1 $ echo $? 0


dpkg's Log Datei


Ein bei dpkg unlängst eingeführtes Merkmal ist das Führen eines Protokolls über alle seine Aktivitäten in /var/log/dpkg.log. Dieses Protokoll ist äußerst wortreich, da es jeden einzelnen Schritt aufzeichnet, durch den die von dpkg verarbeiteten Pakete gehen. Zusätzlich zu der Möglichkeit, das Verhalten von dpkg zu verfolgen, hilft es vor allem auch dabei, den Verlauf der Entwicklung des Systems festzuhalten: man kann den genauen Zeitpunkt feststellen, zu dem jedes Paket installiert oder aktualisiert worden ist, und diese Information kann für das Verständnis einer kürzlich aufgetretenen Verhaltensänderung äußerst hilfreich sein. Da alle Versionen aufgezeichnet werden, erleichtert es außerdem eine Gegenprobe mit changelog.Debian.gz für fragliche Pakete oder sogar mit Online-Fehlerberichten.


Koexistenz mit anderen Paketierungssystemen


RPM


Red Hat Package Manager


alien


Debian Pakete sind nicht die einzigen in der freien Software-Welt verwendeten Software Pakete. Hauptkonkurrent ist das RPM-Format für Red Hat Linux und seine zahlreichen Abkömmlinge. Red Hat ist eine sehr populäre kommerzielle Distribution. Häufig wird von Dritten bereitgestellte Software als RPM Paket angeboten und nicht als Debian.


Für diese Fälle sollten Sie das Programm rpm kennen, das RPM Pakete verarbeitet und als Debian Paket verfügbar ist, so dass es möglich ist, dieses Paketformat auf Debian zu verwenden. Jedoch sollte beachtet werden, dass diese Verarbeitung darauf beschränkt bleibt, Informationen aus einem Paket zu gewinnen oder seine Integrität zu überprüfen. Es ist dagegen unsinnig, rpm zur Installation eines RPM Pakets auf einem Debian System zu verwenden; RPM benutzt seine eigene Datenbank, getrennt von der für systemeigene Software (wie dpkg). Daher ist es auch nicht möglich, eine dauerhafte Koexistenz zweier Paketverwaltungssysteme zu erreichen.


Dagegen kann das Programm alien RPM Pakete in Debian Pakete konvertieren und umgekehrt.


GEMEINSCHAFT Ermunterung zur Verwendung von .deb


Falls Sie regelmäßig das Programm alien verwenden, um RPM Pakete zu installieren, die von einem Ihrer Lieferanten kommen, sollten Sie nicht zögern, ihm zu schreiben und in freundlicher Weise Ihre starke Vorliebe für das .deb Format zum Ausdruck zu bringen. Beachten Sie, dass das Format eines Pakets nicht alles ist: ein mit alien erzeugtes .deb Paket oder eines, das für eine andere Debian-Version erstellt wurde als die von Ihnen verwendete oder gar für eine abgeleitete Distribution wie Ubuntu, würde wahrscheinlich nicht das gleiche Niveau an Qualität und Integration bieten, wie ein Paket, das speziell für Debian Squeeze entwickelt wurde.


$ fakeroot alien --to-deb phpMyAdmin-2.0.5-2.noarch.rpm phpmyadmin_2.0.5-2_all.deb generated $ ls -s phpmyadmin_2.0.5-2_all.deb 64 phpmyadmin_2.0.5-2_all.deb


Sie werden feststellen, dass dieses Verfahren sehr einfach ist. Sie müssen jedoch wissen, dass das so erstellte Paket keinerlei Informationen über Abhängigkeiten hat, da die Abhängigkeiten in den beiden Paketformaten keine systematische Entsprechung miteinander haben. Der Administrator muss daher manuell sicherstellen, dass das konvertierte Paket richtig funktioniert, und aus diesem Grund sollten so erzeugte Debian Pakete möglichst vermieden werden. Glücklicherweise hat Debian von allen Distributionen die größte Sammlung an Softwarepaketen, und es ist wahrscheinlich, dass das, was Sie suchen, bereits darin vorhanden ist.


Wenn Sie sich die Handbuchseite für das Programm alien ansehen, werden sie feststellen, dass es auch andere Paketformate verarbeiten kann, vor allem solche der Slackware Distribution (dies sind einfache tar.gz Archive).


Die Stabilität der Software, die unter Verwendung des Programms dpkg zum Einsatz gebracht wird, trägt zu Debians gutem Ruf bei. Die Programmgarnitur APT, die im folgenden Kapitel beschrieben wird, bewahrt diesen Vorteil, während sie gleichzeitig den Administrator davon entlastet, den Status von Paketen verwalten zu müssen, eine notwendige aber schwierige Aufgabe.