Kategorie:APT

Aus Foxwiki

apt (Advanced Packaging Tool) ist ein Paketmanager für Debian-Systeme

Beschreibung

APT („Advanced Package Tool“) stellt die nächste Generation der Debian GNU/Linux-Paketverwaltung dar.

In diesem Abschnitt wird zunächst auf die Konfiguration und Benutzung von Kommandozeilentools wie apt und dpkg sowie deren Verwandten eingegangen.

  • Später werden dann auch grafische Frontends zur Paketverwaltung beschrieben.

apt ist ein Werkzeug, um Software-Pakete zu verwalten

  • installiert
  • Abhängigkeiten automatisch auflösen
  • Konfigurationsdateien beim Installieren bzw. Aktualisieren berücksichtigen
Funktion
  • Suche und Verwaltung von Paketen
  • Abfrage von Informationen zu Paketen
apt-get
  • Vorgänger von apt
  • Gleiche Funktionalität

Installation

Das Advanced Package Tool ist grundlegender Bestandteil von Debian und ist auf jedem System verfügbar.

Syntax

# apt [Befehl [Optionen]] (Paket)


Befehle

Befehl Option Beschreibung
update Aktualisierung der Paketquellen
upgrade Aktualisierung aller installierten Pakete des Systems (Neuinstallation von Paketen, falls Abhängigkeiten dies erfordern - jedoch keine Entfernung von existierenden Paketen)
full-upgrade wie upgrade - jedoch können installierte Pakete entfernt werden, wenn dies erforderlich ist, um das Upgrade des Systems zu gewährleisten
autoremove entfernt automatisch installierte Pakete, wenn diese nicht mehr benötigt werden (beispielsweise durch geänderte Abhängigkeiten)
remove entfernt das angegebene Paket, ohne jedoch dessen Konfigurationsdateien zu löschen
purge vollständige Entfernung des angegebenen Paketes (inklusive Konfigurationsdateien)
list --upgradable --installed Ausgabe einer Liste aktualisierbarer bzw. installierbarer Pakete
show zeigt Informationen zu einem angegebenen Paket: Beschreibung, Version, Abhängigkeiten, Download-Größe etc.
search Begriff durchsucht den Volltext sämtlicher Paketbeschreibungen nach dem angegebenen Suchbegriff und gibt eine Liste gefundener Pakete aus (inklusive Kurzbeschreibung)
install Angegebenes Paket installieren
remove remove ist identisch mit install, mit der Ausnahme, dass Pakete entfernt anstatt installiert werden.
purge purge entspricht remove mit der Ausnahme, dass Pakete entfernt und vollständig gelöscht werden (jegliche Konfigurationsdateien werden mitgelöscht )
update update wird verwendet, um von allen konfigurierten Quellen Paketinformationen herunterzuladen.
upgrade upgrade wird verwendet, um verfügbare Upgrades für alle derzeit auf dem System installierten Pakete .Neue Pakete werden installiert, falls dies nötig ist.
autoremove autoremove wird benutzt, um Pakete zu entfernen, die automatisch installiert wurden, um Abhängigkeiten für andere Pakete zu erfüllen und die nicht mehr benötigt werden, da sich die Abhängigkeiten geändert haben oder die Pakete, die sie benötigten, in der zwischenzeit entfernt wurden.
full-upgrade full-upgrade verrichtet die Funktion von »upgrade«, wird aber auch installierte Pakete entfernen, falls dies erforderlich ist, um ein Upgrade des Systems als Ganzes durchzuführen.
show show zeigt Informationen über die angegebenen Pakete einschließlich ihrer Abhängigkeiten, Installations- und Herunterladegröße, Quellen, in denen das Paket verfügbar ist, der Beschreibung des Paketinhalts und vieles mehr. Es kann z.B. hilfreich sein, einen Blick auf diese Informationen zu werfen, bevor du apt erlaubst, ein Paket zu entfernen oder wenn du neue Pakete zur Installation suchen.

Optionen

-t, --tempdir Verzeichnis, in dem temporäre Dateien abgelegt werden
-h, --help Kurze Hilfe
-v, --version Programmversion
-c, --config-file Konfigurationsdatei, die vor der /etc/apt/apt.conf gelesen wird
-o, --option Setzt Konfigurationsoptionen
  • Syntax: -o Foo::Bar=bar

Parameter

Umgebungsvariablen

Exit-Status

Anwendungen

Kommandovervollständigung

In der unter Linux verwendeten Shell bash lassen sich teilweise eingegebene Befehlsnamen durch Drücken der TAB-Taste vervollständigen.

  • Zunächst funktioniert das ausschließlich für den Programmnamen und nicht für Kommandos und Optionen.

Mit dem Kommando source /etc/bash_completion können einige weitere Makros für die Shell geladen werden.

  • Danach ist es möglich, auch Optionen von Befehlen automatisch zu vervollständigen (tippen Sie beispielsweise dpkg -TABTAB, so werden alle Optionen zum Befehl dpkg angezeigt).
  • Dies funktioniert natürlich nicht nur mit Befehlen zur Verwaltung von Debian Paketen, sondern auch mit jedem anderen Befehl.

Darüber hinaus ist es möglich, auch Paketnamen, beispielsweise bei der Installation, zu vervollständigen.

  • Tippen Sie hierzu: apt-get install im TABTAB, so werden alle verfügbaren Pakete angezeigt, die mit „im“ beginnen.

Fehlerbehebung

Konfiguration

Dateien

sources.list

sources.list

Sicherheit

Siehe auch

Befehl Beschreibung
apt-cache
apt-config
apt-file
apt-get
apt-listbugs
apt-show-versions
apt-add-repository
apt-cdrom
apt-extracttemplates
apt-ftparchive
apt-key
apt-mark
apt-sortpkgs

Unterseiten

Dokumentation

RFC

Man-Pages

Info-Pages

Links

Einzelnachweise

Projekt

Weblinks

Testfragen

Testfrage 1

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5


Advanced Package Tool (APT)

Paketbeschreibungen

Zu jedem Paket existiert eine Beschreibung, jeweils als Kurzbeschreibung in einer Zeile und als ausführliche Beschreibung in mehreren Sätzen.

  • Diese Beschreibungen sind in den Package.gz-Dateien auf den Debian Spiegeln abgelegt

Das „Debian Description Translation Project“ (DDTP, http://ddtp.debian.org/) übersetzt diese Paketbeschreibungen in verschiedene Sprachen.

  • Um die übersetzten Paketbeschreibungen zu nutzen, muss eine Anpassung an der Datei /etc/apt/sources.list vorgenommen werden.
  • Dort ist der Eintrag für das verwendete Release von Debian durch einen entsprechenden Eintrag des DDTP-Servers zu ersetzen.
So wird beispielsweise aus
# deb ftp://ftp.de.debian.org/debian sarge main 

der Eintrag:

# deb http://ddtp.debian.org/aptable de/sarge main

Nach dem Ausführen des Kommandos apt-get update sollten dann die Beschreibungen zu den Paketen in deutscher Sprache erscheinen:

# Package: bash
Essential: yes
Priority: required
Section: base
Installed-Size: 1228
Maintainer: Matthias Klose <doko@debian.org>
Architecture: i386
Source: bash (2.05b-2-15)
Version: 2.05b-15
Replaces: bash-doc (<= 2.05-1), bash-completion
Depends: base-files (>= 2.1.12)
Pre-Depends: libc6 (>= 2.3.2.ds1-4), libncurses5 (>= 5.4-1)
Suggests: bash-doc
Conflicts: bash-completion
Filename: pool/main/b/bash/bash_2.05b-15_i386.deb
Size: 622470
MD5sum: b804b1efff12046675a8826b41de7a37
Description: Die GNU Bourne Again Shell
 Bash ist ein sh-kompatibler Befehlssprachen-Interpreter, der Befehle
 ausführt, die von der Standardeingabe oder aus einer Datei kommen.
 Bash beinhaltet auch nützliche Fähigkeiten der Korn- und C-Shells
 (ksh und csh).
 .
 Letztendlich soll Bash eine kompatible Implementation der IEEE POSIX
 Shell and Tools Spezifikation (IEEE Working Group 10003.2) sein.
 .
 Im bash-Paket ist der Programmable Completion Code von Ian
 Macdonald enthalten.

Zugriff auf ältere Debian Releases

Manchmal kann es notwendig oder sinnvoll sein, ältere Debian Releases einzusetzen, beispielsweise um Debian auf älterer Hardware zu installieren.

Zugriff auf tägliche Versionen von Paketen

Die jeweils aktuell in der Entwicklung befindliche Debian Version („testing“ oder „unstable“) unterliegt einem häufigen Wechsel der Paketversionen.

  • Manchmal ist ein Paket nur für einen oder wenige Tage verfügbar.
  • Da nun neuere Versionen nicht immer eine Verbesserung mit sich bringen, wollen Sie vielleicht auf ein älteres Paket ausweichen.

Leider sind auf den Debian Servern ältere Pakete nicht mehr verfügbar.

Der Zugriff auf dieses Archiv erfolgt mit einigen besonderen Einträgen in der Datei /etc/sources.list.

  • Hierbei kann zwischen dem Zugriff über ein absolutes oder ein relatives Datum gewählt werden.
deb http://snapshot.debian.net/archive/YYYY/MM/DD/debian unstable main contrib non-free
deb http://snapshot.debian.net/archive/YYYY/MM/DD/debian-non-US unstable/non-US main contrib non-free
deb-src http://snapshot.debian.net/archive/YYYY/MM/DD/debian unstable main contrib non-free
deb-src http://snapshot.debian.net/archive/YYYY/MM/DD/debian-non-US unstable/non-US main contrib non-free

Im vorhergehenden Beispiel kann gezielt auf den tagesaktuellen Stand zugegriffen werden.

  • Die Buchstabenkombination YYYY/MM/DD ist dabei durch das gewünschte Datum zu ersetzen.
deb http://snapshot.debian.net/archive/date/datestr/debian unstable main contrib non-free
deb http://snapshot.debian.net/archive/date/datestr/debian-non-US unstable/non-US main contrib non-free
deb-src http://snapshot.debian.net/archive/date/datestr/debian unstable main contrib non-free
deb-src http://snapshot.debian.net/archive/date/datestr/debian-non-US unstable/non-US main contrib non-free

In diesem Beispiel muss datestr durch einen String ersetzt werden, der dem Kommando date als Datum bekannt ist.

  • Dies kann beispielsweise yesterday, 2-days-ago oder last-week sein.

apt.conf

Die Konfigurationsdatei /etc/apt/apt.conf stellt die zentrale Stelle für alle Einstellungen von Programmen dar, die auf APT aufsetzen.

  • Von allen Programmen wird zum einen die gemeinsame Konfigurationsdatei, zum anderen auch ein Kommandozeilen-Interpreter (apt-config) genutzt, um die Konfigurationsdatei auszuwerten.
  • Dies garantiert für alle Programme eine einheitliche Arbeitsumgebung.
  • Beim Start eines auf APT basierenden Programmes wird zunächst die Umgebungsvariable APT_CONFIG ausgewertet. Über diese Umgebungsvariable lässt sich eine alternative Konfigurationsdatei angeben.

Die Konfigurationsdatei ist in einer Baumstruktur organisiert und trennt verschiedene Optionen in funktionale Gruppen.

  • Werte für Optionen werden durch zwei Doppelpunkte eingeleitet, beispielsweise so: APT::Get::Assume-Yes.
  • Optionen übernehmen keine Werte von übergeordneten Gruppen.

Die Syntax der Konfigurationsdatei ist an die von Programmen wie bind und dhcp angelehnt.

  • Zeilen, die mit den Zeichen // beginnen, werden als Kommentare behandelt und ignoriert.
  • Alle weiteren Zeilen entsprechen dem Aufbau von APT::Get::Assume-Yes "true";.
  • Wichtig ist hierbei das abschließende Semikolon am Ende jeder Zeile, die Werte selbst können, müssen aber nicht von Anführungszeichen umschlossen werden.
  • Ein neuer Bereich wird durch geschweifte Klammern umschlossen.
# APT {Get {
Assume-Yes "true";Fix-Broken "true"; };};

Leerzeilen können innerhalb eines Bereiches genutzt werden, um die Datei besser lesbar zu halten.

  • Einfache Einträge können erzeugt werden, indem innerhalb eines Bereiches ein Kommando abgelegt wird und der Eintrag mit einem Semikolon beendet wird.
Beispiel
# DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};

Hier ein einfaches Beispiel für eine APT-Konfigurationsdatei (/etc/apt/apt.conf):

# // $Id: apt.conf,v 1.43 1999/12/06 02:19:38 jgg Exp $
/* This file is a sample configuration file with a few harmless sample
   options.
*/
APT
{
  // Options for apt-get
  Get
  {
     Download-Only "false";
  };
};
// Options for the downloading routines
Acquire
{
  Retries "0";
};
// Things that effect the APT dselect method
DSelect
{
  Clean "auto";   // always|auto|prompt|never
};
DPkg
{
  // Probably don't want to use force-downgrade..
  Options {"--force-overwrite";}
}

Innerhalb der Konfigurationsdatei sind zwei spezielle Einträge erlaubt, #include und #clear. #include liest die angegebene Datei an der entsprechenden Stelle ein, solange der Dateiname nicht mit einem Slash (/) endet. #clear löscht eine Liste von Namen.

Allen APT-Programmen kann die Option -o übergeben werden, um eine Konfigurationsoption auf der Kommandozeile zu übergeben.

  • Die Syntax hierfür ist der volle Name der Option, beispielsweise APT::Get::Assume-Yes, gefolgt von einem Gleichheitszeichen und dem gewünschten Wert für diese Option.
  • Listen können Werte hinzugefügt werden, indem abschließend zwei Doppelpunkte (::) angegeben werden.

Im Folgenden werden die verschiedenen Gruppen in der Konfigurationsdatei beschrieben.

APT

Diese Gruppe enthält generelle Parameter zu allen APT-Programmen.

Architecture Die System Architektur. Über diesen Wert wird ermittelt, welche Paketlisten und Debian Pakete passend zur Hardware-Architektur geholt werden.
  • Voreingestellt ist immer die Architektur für die APT auf dem System übersetzt wurden.
Ignore-Hold Setzt den „Hold“-Status global für alle Pakete außer Kraft.
Clean-Installed Voreingestellt ist hier der Wert „on“.
Immediate-Configure Mit dieser Option lässt sich das unmittelbare Konfigurieren von Paketen abschalten.
  • APT ruft nach einer Anzahl von Paketen, die zur Installation vorgemerkt sind, die Konfiguration dieser Pakete auf.
  • Dies ist sinnvoll, da Pakete aufeinander basieren und es erforderlich ist, dass ein bestimmtes Paket vor einem anderen bereits installiert und konfiguriert ist.
  • Das Abschalten dieser Option kann die Installation von vielen Paketen auf einem langsamen System beschleunigen, führt aber unter Umständen zu Problemen bei der Installation.
Force-LoopBreak Diese Option erlaubt APT, ein essenzielles Paket kurzfristig zu entfernen, um eine Endlosschleife in einem Konflikt oder einer Abhängigkeit (Pre-Depend) auflösen zu können.
  • Solch eine Endlosschleife darf eigentlich nicht existieren und ist ein schwerwiegender Fehler.
  • Diese Option wirkt nicht bei den essenziellen Paketen tar, gzip, libc, dpkg, bash oder allen anderen Paketen, von denen diese Pakete abhängen.
  • Diese Option darf nur eingesetzt werden, wenn Sie genau verstanden haben, was dies für Konsequenzen haben kann.
Cache-Limit APT nutzt einen festgelegten Speicherbereich, um Informationen über die verfügbaren Pakete zu speichern.
  • Mit dieser Option kann der Wert verändert werden.
Get Dieser Abschnitt kontrolliert das Verhalten von apt-get.
Cache Dieser Abschnitt kontrolliert das Verhalten von apt-cache.
CDROM Dieser Abschnitt kontrolliert das Verhalten von apt-cdrom.

Acquire

In dieser Gruppe sind Optionen für das Herunterladen von Paketen und die Behandlung von URIs enthalten.

Queue-Mode Dieser Eintrag betrifft die Behandlung von ausgehenden Verbindungen bei der Übertragung von Paketen.
  • Der Wert „host“ bedeutet, dass zu jedem System, von dem Pakete geholt werden, eine Verbindung aufgebaut wird.
  • Der Wert „access“ bewirkt, dass je URI-Typ eine Verbindung aufgebaut wird.
Retries Anzahl der Versuche bei einem fehlgeschlagenen Download.
Source-Symlinks Nutzt symbolische Links für Quellcode-Archive, anstatt eine Kopie der Datei anzulegen.
  • Voreinstellung ist „True“.
Http HTTP-Adressen können mit diesem Eintrag über einen Proxy-Server erreicht werden.
  • Die Angabe http::Proxy stellt der Standard-Proxy für alle Anfragen dar.
  • Die Adresse des Proxy-Servers ist wie üblich als http://[[user][:pass]@]host[:port]/ anzugeben.
  • Alternativ kann für einzelne Server ein gesonderter Proxy in der Form http::Proxy::<host> gesetzt werden.
  • Soll für einen einzelnen Server kein Proxy verwendet werden, so ist das Schlüsselwort DIRECT zu benutzen.
  • Die Umgebungsvariable http_proxy überschreibt alle diese Angaben.
  • Es sind drei Werte im Zusammenhang mit diesem Eintrag erlaubt. No-Cache teilt dem Proxy mit, dass in keinem Fall Daten aus dem Cache benutzt werden sollen. Max-Age wird für Index-Dateien verwendet und gibt die Zeit in Sekunden an, die das maximale Alter der Index-Dateien bezeichnet.
  • Die Index-Dateien auf Debian Servern werden täglich aktualisiert, der vorgegebene Wert entspricht ebenso einem Tag. No-Store führt dazu, dass die Anfrage niemals im Cache gespeichert wird.
  • Mit der Option timeout lässt sich die Zeit für Verbindungs- und Daten-Timeouts einstellen.
Ftp FTP-Adressen können mit diesem Eintrag über einen Proxy-Server erreicht werden.
  • Die Angabe ftp::Proxy stellt der Standard-Proxy für alle Anfragen dar.
  • Die Adresse des Proxy-Servers ist wie üblich als ftp://[[user][:pass]@]host[:port]/ anzugeben.
  • Um einen FTP-Proxy zu nutzen, muss in der Konfigurationsdatei der Wert ftp::ProxyLogin mit einem Skript belegt sein.
  • Dieser Eintrag beschreibt die Kommandos, die an den FTP-Server beim Login-Vorgang gesendet werden.
ProxyLogin
 {
     "USER $(PROXY_USER)";
     "PASS $(PROXY_PASS)";
     "USER $(SITE_USER)@$(SITE):$(SITE_PORT)";
     "PASS $(SITE_PASS)";
 };

Die Umgebungsvariable ftp_proxy überschreibt alle diese Angaben.

Mit der Option timeout lässt sich die Zeit für Verbindungs- und Daten-Timeouts einstellen.

cdrom Der Wert für einen Eintrag, der eine CD (ein CD-ROM- oder DVD-Laufwerk) betrifft, bezieht sich auf das Verzeichnis im Dateisystem, an dem der Inhalt eingebunden wird.
  • Die Syntax für solch einen Eintrag lautet:

"/cdrom/"::Mount "foo";

Wichtig ist bei einem solchen Eintrag der vorangestellte Slash (/).

  • Das Kommando umount kann ebenso durch den Eintrag UMount mit einer solchen Syntax genutzt werden.

Verzeichnisse

Dir::State Dieser Abschnitt betrifft Verzeichnisse mit lokalen Status-Informationen. lists bezeichnet das Verzeichnis, in dem die heruntergeladenen Paketlisten abgelegt werden. status ist der Dateiname der dpkg-Status-Datei. preferences ist der Name der APT-Konfigurationsdatei. Dir::State bezeichnet das Verzeichnis, welches allen anderen Objekten in diesem Abschnitt vorangestellt wird, wenn diese nicht mit / oder ./ beginnen.
Dir::Cache In diesem Abschnitt werden Verzeichisse festgelegt, die mit heruntergeladenen Dateien zu tun haben.
  • Die Angaben pkgcache und srcpkgcache enthalten das Verzeichnis für Binär- und Quellcode-Pakete.
  • Die Verwendung des Cache kann deaktiviert werden, in dem die Verzeichnisnamen nicht angegeben werden.
  • Das voreingestellte Verzeichnis für alle Caches wird in Dir::Cache festgelegt.
Dir::Etc Enthält den Pfad zu den Konfigurationsdateien, sourcelist bezeichnet dabei die Datei sources.list, main ist die voreingestellte Konfigurationsdatei.
Dir::Parts Dieser Abschnitt liest alle Konfigurationsteile in alphabetischer Reihenfolge aus dem angegebenen Verzeichnis.
  • Danach wird die zentrale Konfigurationsdatei eingelesen.
Dir::Bin In diesem Verzeichnis werden binäre Programme gesucht. Dir::Bin::Methods enthält den Pfad zu den zusätzlichen Methoden.
  • Die Angaben zu gzip, dpkg, apt-get, dpkg-source, dpkg-buildpackage und apt-cache zeigen auf die jeweiligen Programme im Verzeichnisbaum.

APT innerhalb von dselect

Wird APT als Zugriffsmethode von dselect verwendet, so können die folgenden Parameter zur Konfiguration verwendet werden.

Clean Modus, um den Paketcache zu verwalten.
options Der Inhalt dieser Variablen wird an apt-get als Kommandozeilenoption weitergereicht, wenn eine Installation durchgeführt wird.
Updateoptions Der Inhalt dieser Variablen wird an apt-get als Kommandozeilenoption weitergereicht, wenn ein Update durchgeführt wird.
PromptAfterUpdate Wird die Funktion Update im Programm dselect verwendet, so wird immer nachgefragt, um eine Aktion fortzusetzen, wenn diese Variable auf True gesetzt ist.

Aufruf von DPKG über APT

Im Abschnitt DPkg der Konfigurationsdatei können verschiedene Parameter eingestellt werden, die sich mit dem Aufruf von dpkg aus APT-basierenden Programmen beschäftigen.

options Eine Liste von Optionen, die dem Aufruf von dpkg übergeben werden.
Pre-Invoke, Post-Invoke Eine Liste von Shell-Kommandos, die vor bzw.
  • nach dem Aufruf von dpkg ausgeführt werden.
  • Die Kommandos werden mittels /bin/sh ausgeführt, sollte eines der Kommandos mit einem Fehler beendet werden, so bricht auf APT an dieser Stelle die weitere Ausführung ab.
Pre-Install-Pkgs Dies ist eine Liste von Kommandos, welche vor dem Aufruf von dpkg ausgeführt werden.
  • Die Kommandos werden mittels /bin/sh ausgeführt, sollte eines der Kommandos mit einem Fehler beendet werden, so bricht auf APT an dieser Stelle die weitere Ausführung ab.
  • APT übergibt die Namen aller zu installierenden Debian Paketdateien (.deb) an die Kommandos.
Run-Directory APT wechselt in das hier angegebene Verzeichnis vor dem Aufruf von dpkg.
  • Voreingestellt ist hier das Verzeichnis /.
Build-options Diese Optionen werden dem Programm dpkg-buildpackage übergeben.
  • Voreingestellt ist, dass Pakete nicht digital signiert werden und alle Binär-Pakete erzeugt werden.

Abschließend ein Beispiel für die APT-Konfigurationsdatei mit allen Optionen.

  • Dieses Beispiel ist so in dieser Form nicht sinnvoll einzusetzen, zeigt aber sehr gut auf, wie verschiedene Optionen mit Werten belegt werden.
# // $Id: configure-index,v 1.10 2004/07/17 19:37:16 mdz Exp $
/* This file is an index of all APT configuration directives.
  • It should
   NOT actually be used as a real config file, though it is (except for the
   last line) a completely valid file.
  • Most of the options have sane default
   values, unless you have specific needs you should NOT include arbitary
   items in a custom configuration.
   In some instances involving filenames it is possible to set the default
   directory when the path is evaluated.
  • This means you can use relative
   paths within the sub scope.
   The configuration directives are specified in a tree with {} designating
   a subscope relative to the tag before the {}.
  • You can further specify
   a subscope using scope notation eg,
     APT::Architecture "i386";
   This is prefixed with the current scope.
  • Scope notation must be used
   if an option is specified on the command line with -o.
*/
quiet "0";
// Options for APT in general
APT
{
  Architecture "i386";
  Build-Essential "build-essential";
  // Options for apt-get
  Get
  {
     Arch-Only "false";
     Download-Only "false";
     Simulate "false";
     Assume-Yes "false";
     Force-Yes "false";             // I would never set this.
     Fix-Broken "false";
     Fix-Missing "false";
     Show-Upgraded "false";
     Show-Versions "false";
     Upgrade "true";
     Print-URIs "false";
     Compile "false";
     Download "true";
     Purge "false";
     List-Cleanup "true";
     ReInstall "false";
     Trivial-Only "false";
     Remove "true";
     Only-Source "";
     Diff-Only "false";
     Tar-Only "false";
  };
  Cache
  {
     Important "false";
     AllVersions "false";
     GivenOnly "false";
     RecurseDepends "false";
     ShowFull "false";
     Generate "true";
     NamesOnly "false";
     AllNames "false";
     Installed "false";
  };
  CDROM
  {
     Rename "false";
     NoMount "false";
     Fast "false";
     NoAct "false";
  };
  // Some general options
  Ignore-Hold "false";
  Clean-Installed "true";
  Immediate-Configure "true";      // DO NOT turn this off, see the man page
  Force-LoopBreak "false";         // DO NOT turn this on, see the man page
  Cache-Limit "4194304";
  Default-Release "";
};
// Options for the downloading routines
Acquire
{
  Queue-Mode "host";       // host|access
  Retries "0";
  Source-Symlinks "true";
  // HTTP method configuration
  http
  {
    Proxy "http://127.0.0.1:3128";
    Proxy::http.us.debian.org "DIRECT";  // Specific per-host setting
    Timeout "120";
    Pipeline-Depth "5";
    // Cache Control.
  • Note these do not work with Squid 2.0.2
    No-Cache "false";
    Max-Age "86400";     // 1 Day age on index files
    No-Store "false";    // Prevent the cache from storing archives
  };
  ftp
  {
    Proxy "ftp://127.0.0.1/";
    Proxy::http.us.debian.org "DIRECT"; // Specific per-host setting
    /* Required script to perform proxy login.
  • This example should work
       for tisfwtk */
    ProxyLogin
    {
       "USER $(PROXY_USER)";
       "PASS $(PROXY_PASS)";
       "USER $(SITE_USER)@$(SITE):$(SITE_PORT)";
       "PASS $(SITE_PASS)";
    };
    Timeout "120";
    /* Passive mode control, proxy, non-proxy and per-host.
  • Pasv mode
       is prefered if possible */
    Passive "true";
    Proxy::Passive "true";
    Passive::http.us.debian.org "true"; // Specific per-host setting
  };
  cdrom
  {
    mount "/cdrom";
    // You need the trailing slash!
    "/cdrom"
    {
       Mount "sleep 1000";
       UMount "sleep 500";
    }
  };
};
// Directory layout
Dir "/"
{
  // Location of the state dir
  State "var/lib/apt/"
  {
     Lists "lists/";
     xstatus "xstatus";
     userstatus "status.user";
     status "/var/lib/dpkg/status";
     cdroms "cdroms.list";
  };
  // Location of the cache dir
  Cache "var/cache/apt/" {
     Archives "archives/";
     srcpkgcache "srcpkgcache.bin";
     pkgcache "pkgcache.bin";
  };
  // Config files
  Etc "etc/apt/" {
     SourceList "sources.list";
     Main "apt.conf";
     Preferences "preferences";
     Parts "apt.conf.d/";
  };
  // Locations of binaries
  Bin {
     methods "/usr/lib/apt/methods/";
     gzip "/bin/gzip";
     dpkg "/usr/bin/dpkg";
     dpkg-source "/usr/bin/dpkg-source";
     dpkg-buildpackage "/usr/bin/dpkg-buildpackage"
     apt-get "/usr/bin/apt-get";
     apt-cache "/usr/bin/apt-cache";
  };
};
// Things that effect the APT dselect method
DSelect
{
   Clean "auto";   // always|auto|prompt|never
   Options "-f";
   UpdateOptions "";
   PromptAfterUpdate "no";
   CheckDir "no";
}
DPkg
{
#    // Probably don't want to use force-downgrade..
   // Auto re-mounting of a readonly /usr
   Pre-Invoke {"mount -o remount,rw /usr";};
   Post-Invoke {"mount -o remount,ro /usr";};
   // Prevents daemons from getting cwd as something mountable (default)
   Run-Directory "/";
   // Build options for apt-get source –compile
   Build-Options "-b -uc";
   // Pre-configure all packages before they are installed using debconf.
   Pre-Install-Pkgs {"dpkg-preconfigure --apt --priority=low –frontend=dialog";};
   // Flush the contents of stdin before forking dpkg.
   FlushSTDIN "true";
   // Control the size of the command line passed to dpkg.
   MaxBytes 1024;
   MaxArgs 350;
}
/* Options you can set to see some debugging text They correspond to names
   of classes in the source code */
Debug
{
  pkgProblemResolver "false";
  pkgAcquire "false";
  pkgAcquire::Worker "false";
  pkgDPkgPM "false";
  pkgOrderList "false";
  pkgInitialize "false";   // This one will dump the configuration space
  NoLocking "false";
  Acquire::Ftp "false";    // Show ftp command traffic
  Acquire::Http "false";   // Show http command traffic
  aptcdrom "false";        // Show found package files
  IdentCdrom "false";
}
/* Whatever you do, do not use this configuration file!! Take out ONLY
   the portions you need! */
This Is Not A Valid Config File

apt-setup

apt-setup

apt-cdrom

apt-cdrom

apt-get

# apt-get ist die zeitgemäße Benutzerschnittstelle zur Verwaltung von Paketen auf einem Debian System.
  • Während es mit dpkg möglich ist, jedes beliebige Debian Paket zu installieren (wenn es zuvor auf die lokale Festplatte kopiert wurde), so ist apt-get zwingend auf eine Paketliste und damit auch eine sinnvolle sources.list angewiesen.
  • Somit ist immer gewährleistet, dass das System in einem stabilen und fest definierten Zustand verbleibt.
  • Mit apt-get wird dem Administrator ein ebenso elegantes wie auch mächtiges Werkzeug gegeben.
  • Dies haben auch viele andere Distributionshersteller erkannt und haben apt-get in die eigenen Distributionen aufgenommen. apt-get ist somit auch auf RPM-basierten Systemen, wie beispielsweise Novell/SuSE oder RedHat/Fedora zu Hause.
  • Die Entwicklung wird dabei über die Webseite koordiniert.
  • Eine Übersicht von Repositories mit RPM-Paketen, die via APT installiert werden können, finden Sie unter http://freshrpms.net/apt/repositories.html.

Dieses Programm ohne grafische Benutzeroberfläche ist recht einfach zu benutzen.

  • Grafische Frontends zu apt sind mit aptitude und gnome-apt verfügbar.

Status-Report

Bevor apt-get die gewünschten Aktionen wie zum Beispiel das Löschen oder Installieren einzelner Pakete ausführt, die das System verändern, werden Sie über den zukünftigen Zustand des Systems informiert.

  • Es werden folgende Informationen angezeigt: die Anzahl der Pakete, die aktualisiert werden (neuere Version), die Anzahl der Pakete, die nicht verändert werden (kept back), die Anzahl der zu löschenden Pakete sowie die Anzahl der neu zu installierenden Pakete.

Zusätzlich werden, wenn Sie die Option install benutzen, die Pakete ausgewählt und angezeigt, die aufgrund der Abhängigkeiten der zu installierenden Pakete benötigt werden.

  • Hier ein Beispiel:
#      The following extra packages will be installed:
       libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl
       mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base
       bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy
       squake pgp-i python-base debmake ldso perl libreadlineg2
       ssh

Sollte es notwendig sein, Pakete zu löschen, oder wurden Pakete zum Entfernen ausgewählt, so werden auch diese gesondert angezeigt.

#      The following packages will be REMOVED:
       xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix
       xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel
       xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid
       nas xpilot xfig

Diese Liste sollte aufmerksam geprüft werden, um sicherzugehen, dass nicht versehentlich Pakete entfernt werden.

Wenn Pakete neu installiert werden, so wird auch darüber informiert:

#      The following NEW packages will be installed:
       zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base

Dies dient nur zur Information; diese Pakete sind bisher nicht auf Ihrem System installiert.

Bei der Auswahl der Pakete kann es passieren, dass aufgrund von nicht erfüllten Abhängigkeiten einzelne Pakete in der aktuellen Version behalten werden.

  • Da nicht alle benötigten Komponenten installiert werden können, werden diese Pakete nicht aktualisiert (kept back).
#      The following packages have been kept back:
       compface man-db tetex-base msql libpaper svgalib1
       gs snmp arena lynx xpat2 groff xscreensaver

Immer wenn ein System mit der Option upgrade aktualisiert wird, kann es passieren, dass einzelne Pakete nicht aktualisiert werden können, weil diese auf Paketen basieren, die noch nicht in der benötigten Version verfügbar sind, oder aber es bestehen Konflikte mit bereits installierten Paketen.

  • In diesem Fall werden die Pakete im aktuellen Zustand gehalten.
  • Sie können apt-get install benutzen, um diese Pakete trotzdem zu aktualisieren.
#      The following held packages will be changed:
       cvs

Wenn Sie ein auf „hold“ gesetztes Paket aktualisieren, bekommen Sie die Meldung, dass dieses Paket verändert (changed) wird.

  • Außer bei apt-get install kann diese Meldung auch bei apt-get dist-upgrade auftreten.

Abschließend findet sich noch eine Zusammenfassung über die Anzahl der betroffenen Pakete.

  • Weiterhin wird angezeigt, welches Datenvolumen übertragen werden muss und wie viel Festplattenplatz zusätzlich benötigt wird (oder auch frei wird).
# 206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.
12 packages not fully installed or removed.
Need to get 65.7M/66.7M of archives.
  • After unpacking 26.5M will be used.

Die erste Zeile ist eine knappe Zusammenfassung in Zahlen zu den bereits vorher ausgegebenen Informationen.

  • In der zweiten Zeile finden Sie die nicht installierten Pakete, die bereits entpackt, aber nicht konfiguriert wurden („N packages not fully installed or removed“).
  • In der dritten Zeile finden Sie die Informationen über den benötigten Platz und die zu übertragenden Daten.
  • Hierbei steht die erste Zahl für die tatsächlich noch zu übertragenden Daten und die zweite für den Gesamtwert.
  • Wenn bereits Pakete bei einer früheren Installation (möglicherweise auch nur teilweise) übertragen worden sind, aber nicht installiert werden konnten, so werden diese gespeichert und nicht noch einmal übertragen.

Wenn Sie nun mit der Installation beginnen (dies müssen Sie bei apt-get install mit einem y anstoßen), werden die Pakete von dem ausgewählten Medium gelesen und installiert.

Status-Anzeige

Während des Herunterladens von Archiven und Paketdateien zeigt apt-get eine Reihe von Informationen an:

# sushi:/root# apt-get update
Get:1 ftp://linux frozen/main Packages [833kB]
Get:2 ftp://linux frozen/main Release [93B]
Get:3 ftp://linux frozen/contrib Packages [33.4kB]
Get:4 ftp://linux frozen/contrib Release [96B]
Get:5 ftp://linux frozen/non-free Packages [78.1kB]
Get:6 ftp://linux frozen/non-free Release [97B]
Get:7 ftp://linux stable/non-US Packages [8880B]
Get:8 ftp://linux stable/non-US Release [95B]
Fetched 953kB in 12s (74.1kB/s)
Reading Package Lists... Done
Building Dependency Tree... Done

Unmittelbar während des Downloads wird auch der Fortschritt angezeigt, inklusive der voraussichtlich noch benötigten Zeit für die Übertragung:

# 11% [5 frozen/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s

In den mit Get: beginnenden Zeilen stehen die benutzte Methode (hier ftp) und der benutzte Server.

  • Den Servernamen können Sie in einem lokalen Netz auch verkürzt angeben, wie hier mit linux gezeigt.
  • Weiterhin werden der Bereich (frozen und stable) sowie die Verzeichnisse (main, contrib usw.) und die Dateinamen mit der Dateigröße angezeigt.

Bei der Installation von Paketen sieht der Vorgang ähnlich aus:

# sushi:/root# apt-get install aptitude
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
aptitude
0 packages upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 148kB of archives. After unpacking 471kB will be used.
Get:1 ftp://ftp.debian.de potato/main aptitude 0.0.4a-3 [148kB]
Fetched 148kB in 5s (25.3kB/s)
Selecting previously deselected package aptitude.
(Reading database ... 22625 files and directories currently installed.)
Unpacking aptitude (from .../aptitude_0.0.4a-3_i386.deb) ...
Setting up aptitude (0.0.4a-3) ...

Hier wird in der Zeile „Get:“ der Paketname der zu installierenden Software angezeigt.

  • Danach wird das Paket entpackt und installiert.

Installation von Paketen überwachen

Im laufenden Betrieb werden von den verschiedenen Diensten auf einem System Logdateien (im Verzeichnis /var/log/) erzeugt.

  • Wünschenswert wäre eine solche Funktionalität auch für die Installation von Software-Paketen, dpkg stellt ab der Version 1.13.5 die Option --log zur Verfügung.

Die Option --log protokolliert sowohl den Aufruf von dpkg (z.B. 2005-12-30 18:10:33 install hello 1.3.18 2.1.1-4) als auch die Ergebnisse (z.B. 2005-12-30 18:10:35 status installed hello 2.1.1-4)

Wenn jeder Aufruf von dpkg protokolliert werden soll (auch wenn dieser über Oberflächen wie aptitude geschehen ist), könnte der Eintrag log /var/log/dpkg.log der Datei /etc/dpkg/dpkg.cfg hinzugefügt werden.

  • Es ist dafür zu sorgen, dass die erstellte Protokolldatei regelmäßig rotiert wird, da die Größe der Datei bei jeder Installation (oder auch beim Entfernen) eines Pakets zunimmt.
  • Wenn das Programm logrotate benutzt wird, kann dies erreicht werden, indem eine Datei /etc/logrotate.d/dpkg mit folgendem Inhalt erstellt wird:
# /var/log/dpkg {
        missingok
        notifempty
        }

Optionen und Kommandos

apt-get benutzt folgende Syntax:

# apt-get [options] [command] [package ...] 

Die Optionen werden Sie sicher seltener benötigen, daher zuerst einige Worte zu den einzelnen Kommandos:

# check 
# Bei jedem Start von apt (es sei denn, Sie benutzen die Option update) wird eine Reihe von Prüfungen durchgeführt, um sicherzustellen, dass apt funktionsfähig und Ihr System in einem guten Zustand ist.
  • Sie können diese Prüfungen auch zu jeder Zeit selbst anstoßen:
# sushi:/root# apt-get check
Reading Package Lists...
  • Done
Building Dependency Tree...
  • Done
# Als Erstes werden die Paketdateien anhand der Informationen in /etc/apt/sources.list eingelesen.
  • Wenn Sie diesen Vorgang noch einmal wiederholen, werden Sie feststellen, dass der zweite Test deutlich schneller beendet ist, die Informationen werden von apt zwischengespeichert.
  • Für Paketdateien, die nicht gefunden werden, wird ggf.
  • eine Warnung ausgegeben; diese Pakete werden dann ignoriert.
# Im zweiten Schritt wird eine detaillierte Analyse des Systems durchgeführt, inklusive aller Abhängigkeiten.
  • Es werden von jedem installierten oder bereits entpackten, aber noch nicht konfigurierten Paket die Abhängigkeiten geprüft.
  • Wenn dabei ein Problem auftaucht, wird dies angezeigt, und apt-get bricht die weitere Bearbeitung ab.
# sushi:/root# apt-get check
Reading Package Lists... Done
Building Dependancy Tree... Done
You might want to run apt-get -f install' to correct these.
Sorry, but the following packages have unmet dependencies:
  9fonts: Depends: xlib6g but it is not installed
  uucp: Depends: mailx but it is not installed
  blast: Depends: xlib6g (>= 3.3-5) but it is not installed
  adduser: Depends: perl-base but it is not installed
  aumix: Depends: libgpmg1 but it is not installed
  debiandoc-sgml: Depends: sgml-base but it is not installed
  bash-builtins: Depends: bash (>= 2.01) but 2.0-3 is installed
  cthugha: Depends: svgalibg1 but it is not installed
           Depends: xlib6g (>= 3.3-5) but it is not installed
  libreadlineg2: Conflicts:libreadline2 (< 2.1-2.1)
# In diesem Beispiel gibt es eine ganze Reihe Probleme: Einige Pakete sind gar nicht installiert, bei anderen Paketen sind falsche Versionen installiert.
  • Für jedes einzelne Paket, bei dem ein Problem festgestellt wurde, wird eine Zeile ausgegeben mit den Informationen, um welches Paket es sich handelt und welches Problem festgestellt wurde.
# Es gibt zwei Möglichkeiten, wie es zu solchen Problemen kommen kann: Bei einem „Upgrade“ kann es passieren, dass ein benötigtes Paket fehlt, oder es ist während der Installation eines Pakets ein Problem aufgetreten.
  • Wenn Letzteres der Fall ist, dann wurde das Paket zwar entpackt, aber nicht korrekt konfiguriert.
# Beide Situationen können von apt in den meisten Fällen mit der Option -f selbst behoben werden.
  • Wenn Sie dselect mit der Methode apt benutzen, wird immer die Option -f verwendet, um eine einfache Verwendung zu gewährleisten.
# Trotzdem kann es passieren, dass bei einem schweren Problem apt nicht in der Lage ist, das Problem zu beheben.
  • In diesem Fall müssen Sie von Hand mit dem Programm dpkg den Konflikt beseitigen.
  • Sie können danach mit apt-get fortfahren.
# update 
# aktualisiert die Übersicht der verfügbaren Pakete, liest also die Informationen aus den Dateien Packages.gz der jeweiligen Distribution ein.
  • Sie sollten update immer ausführen, wenn Sie wissen, dass sich die Inhalte der Paketdateien beziehungsweise die verfügbaren Pakete auf dem Server geändert haben.
  • Auf jeden Fall sollten Sie update vor dem Aufruf von upgrade oder dist-upgrade aufrufen.
# Eine neue Fähigkeit von apt seit Debian 4.0 ist die Möglichkeit, lediglich die Änderungen der Packages-Dateien seit ihrer letzten Aktualisierung herunterzuladen. 
# upgrade 
# Um alle auf dem System installierten Pakete auf die aktuelle Version zu bringen, können Sie upgrade benutzen.
  • Alle bereits installierten Pakete, von denen eine neuere Version verfügbar ist, werden aktualisiert.
  • Es werden keine Pakete gelöscht, die bereits installiert sind (und in den neuen Paketdateien nicht mehr enthalten sind), oder Pakete installiert, die noch nicht auf dem System vorhanden sind.
  • Pakete, die bereits installiert sind und es bei einem Upgrade erforderlich machen, den Status anderer Pakete zu verändern, werden nicht aktualisiert. apt-get update muss vorab ausgeführt werden, so dass sichergestellt ist, dass die Paketinformationen auf dem neuesten Stand sind.
# dist-upgrade 
# ist eigentlich eine Ergänzung oder Erweiterung zu upgrade.
  • Es wird hierbei dafür Sorge getragen, dass für das System wichtigere Pakete zuerst installiert werden.
  • Hierbei werden in engen Grenzen auch Abhängigkeiten verändert, um ein Paket installieren zu können.
  • Dies ist dann notwendig, wenn ein System komplett auf eine neue Version umgestellt werden soll und kein „sanfter“ Übergang gewährleistet werden kann.
# dselect-upgrade 
# Mit dieser Option werden auch die Paketinformationen „recommends“ und „suggests“ ausgewertet.
  • Dies ist sonst nur mit dselect möglich.
  • Diese Vorschläge für weitere Pakete sind zur Funktion des gewünschten Pakets nicht zwingend erforderlich, können aber durchaus sinnvoll sein.
# install 
# Diese Option benötigt noch einen oder mehrere Paketnamen.
  • Jedes dieser Pakete (der Paketname, also beispielsweise sendmail, reicht hierbei aus) sowie die noch benötigten Pakete (diese werden automatisch ermittelt) werden auf Basis der Informationen in /etc/apt/sources.list geholt und installiert.
  • Wenn Sie hinter den Namen des Pakets ein Minuszeichen (-) setzen, wird das Paket aus dem System entfernt, wenn es bereits installiert ist.
  • Achten Sie darauf, dass das Minuszeichen (ohne ein Leerzeichen dazwischen) unmittelbar nach dem Paketnamen steht.
  • Diese Funktion kann auch bei Konflikten bei der Installation einzelner Pakete sehr nützlich sein: Sie können so Pakete in einem Vorgang löschen und installieren.
  • Die Option „install“ wählt immer die aktuellste verfügbare Version eines Pakets aus.
  • Es kann jedoch sinnvoll sein, auch Zugriff auf ältere Programmversionen zu haben.
  • Hierzu kann ab der Version 0.5.3 von apt folgende Syntax verwendet werden: apt-get install sane/unstable.
  • Durch einen Slash (/) getrennt, kann hinter dem Paketnamen das gewünschte Release eines Pakets angegeben werden.
# Eine weitere Möglichkeit ist es, falls verschiedene Versionen eines Pakets verfügbar sind, direkt die gewünschte Versionsnummer anzugeben.
  • Zunächst sollte man mit apt-cache prüfen, welche Versionen eines Pakets verfügbar sind.
  • Mit apt-get install vim=6.0.093-2 kann dann ganz gezielt die gewünschte Version installiert werden.
# --reinstall 
# Diese Option installiert das gewünschte Paket komplett neu, auch wenn es bereits installiert ist.
  • Beachten Sie, dass hierbei auch die Option install anzugeben ist!
# remove 
# Diese Funktion ist analog zu „install“, nur mit dem Unterschied, dass die Pakete standardmäßig entfernt werden, anstatt sie zu installieren.
  • Analog zu dem eben Beschriebenen können Sie hier ein Pluszeichen (+) verwenden, um Pakete zu installieren.
# check 
# dient lediglich zur Diagnose.
  • Es wird überprüft, ob sich irgendwelche Unstimmigkeiten in den Paketen finden.
# --purge remove 
# Löscht das gewünschte Paket und alle weiteren Pakete, die direkt von diesem Paket abhängig sind.
  • Weiterhin werden alle zu den Paketen gehörenden Konfigurationsdateien gelöscht.
# clean 
# Dies löscht das lokale Verzeichnis, in dem sich die zu installierenden Pakete befinden.
  • Alles, mit Ausnahme der lock-Datei, wird aus /var/cache/apt/archives/ und /var/cache/apt/archives/partial/ gelöscht.

source

# Dieses Kommando holt die notwendigen Dateien zur Erzeugung eines Binärpakets.
  • Es können so angepasste Pakete erzeugt werden oder aber Pakete auf einer anderen Architektur übersetzt werden.
  • Wichtig ist hierbei ein entsprechender „deb-src“-Eintrag in der Datei sources.list.
  • Um alle zu einem Paket gehörenden Dateien von einem Server zu holen, reicht das Kommando apt-get source paketname.
  • Es werden die aktuellen Versionen der Dateien paketname.orig.tar.gz, paketname.dsc und paketname.diff.gz im aktuellen Verzeichnis gespeichert.
# Um aus den Quellen direkt ein Binärpaket zu erzeugen, kann die Option -b angegeben werden.
  • Das komplette Kommando lautet dann apt-get source -b paketname.
  • Wenn die benötigten Source-Pakete bereits vorliegen, kann das Binärpaket auch direkt mit dem Kommando dpkg-buildpackage -rfakeroot -us -uc erzeugt werden.
# build-dep 
# Die meisten Software-Pakete benötigen bei der Übersetzung aus den Quellpaketen weitere Entwicklungspakete wie Libraries und Header-Dateien.
  • Diese werden häufig nicht mitgeliefert und liegen in gesonderten Paketen vor.
  • Das Debian Paketsystem sieht so genannte „build dependencies“ vor, in denen alle Abhängigkeiten zur Erzeugung eines Pakets beschrieben sind.
# Das Kommando apt-get build-dep paketname sorgt dafür, dass alle zur Übersetzung eines Pakets benötigten Dateien auf dem System vorhanden sind.

moo

# Als kleine versteckte Option haben die Entwickler auch noch ein so genanntes „Easter-Egg“ eingebaut:
# fr@sushi:~$ apt-get moo
         (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~
...."Have you mooed today?"...

Soweit zu den Parametern.

  • Sie können noch folgende Optionen benutzen, um apt-get zu steuern:
-h Zeigt die Hilfe zu apt-get an.
-m Ignoriert eventuell fehlende Pakete.
-d Holt die gewünschten Pakete vom Server, ohne diese zu installieren.
-f Behebt die defekten Abhängigkeiten zwischen den Paketen. apt-get -f install versucht, diese automatisch zu reparieren.
-s Simulation, führt keine Aktionen aus.
-u Zeigt auch die zu aktualisierenden Pakete an.
-y Aktualisiert alle Pakete automatisch, indem alle Fragen mit „Yes“ beantwortet werden.

Beispiel aus der Praxis zur Benutzung von APT

Beachten Sie bitte, dass Pakete nur mit Superuser-Rechten (root) installiert werden können.

Zuallererst muss apt die Informationen über die verfügbaren Pakete erhalten; hierzu dient das Kommando apt-get update.

# sushi:/root # apt-get update
Hit ftp://192.168.0.5 potato/main Packages
Hit ftp://192.168.0.5 potato/main Release
Get:1 ftp://192.168.0.5 potato/non-free Packages [78.6kB]
Get:2 ftp://192.168.0.5 potato/non-free Release [99B]
Fetched 68.5kB in 0s (104kB/s)
Reading Package Lists...
  • Done
Building Dependency Tree...
  • Done

Nachdem das System nun über den aktuellen Stand der Pakete informiert ist, können Sie weitere Pakete mittels apt installieren, was hier am Beispiel von sane gezeigt wird:

# sushi:/root# apt-get install sane
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  libgimp1 libsane
The following NEW packages will be installed:
  libgimp1 libsane sane
0 packages upgraded, 3 newly installed, 0 to remove and 3 not upgraded.
Need to get 703kB of archives. After unpacking 1729kB will be used.
Do you want to continue? [Y/n]

Beachten Sie hierbei, dass automatisch die benötigten Pakete libgimp1 und libsane ausgewählt wurden.

  • Insgesamt werden also drei Pakete installiert.
  • Weiter unten erhalten Sie noch Informationen über den später benötigten Festplattenplatz der Pakete sowie über die Größe der Pakete, die ja eventuell via FTP erst übertragen werden müssen.
  • Wenn Sie mit den Angaben so einverstanden sind, bestätigen Sie dies mit der Eingabetaste, oder drücken Sie die Taste n und danach die Eingabetaste, um den Vorgang abzubrechen.

Wenn mehrere Pakete gleichzeitig installiert werden sollen, so können diese einfach hintereinander auf der Kommandozeile angegeben werden.

Download aller installierten Pakete

Manchmal kann es wünschenswert sein, alle bereits installierten Pakete eines Systems erneut auf den Rechner zu kopieren, beispielsweise um eine Sicherungskopie zu haben oder um ein System zu duplizieren.

  • Natürlich können die Pakete auch auf eine CD-ROM/DVD gebrannt oder in einen Spiegel eingefügt werden.
  • Vorteilhaft bei dieser Methode ist es, dass ein in sich konsistentes System entsteht, in dem alle Abhängigkeiten erfüllt sind.

Ein Download der gewünschten Pakete kann mit folgenden Befehlen erzeugt werden:

# COLUMNS=200 dpkg -l | grep '^ii' | awk '{ print $2 }' > /tmp/pkgliste
# cat /tmp/pkgliste | xargs apt-get --download-only --reinstall -y install

Die erste Zeile listet via dpkg alle Pakete auf und filtert mittels grep nur die installierten heraus.

  • Danach wird die zweite Spalte in die Datei /tmp/pkgliste geschrieben.

Die zweite Zeile gibt via cat die Liste der Dateien aus.

  • Mit xargs wird jede Zeile an das Kommando apt-get weitergegeben.
  • Die Kombination der apt-get Optionen --reinstall und --download-only sowie -y führt dazu, dass auch bereits installierte Pakete aus dem Netz geholt werden, aber keine Installation durchgeführt wird.

Die Debian Pakete sind nach dem Download im Verzeichnis /var/cache/apt/archives/ zu finden und können mit apt-move (siehe apt-move ) in eine Verzeichnisstruktur wie auf einem Debian Spiegel verschoben werden. apt-move ist auch in der Lage, die entsprechenden Packages.gz-Dateien zu erzeugen.

apt_preferences

/etc/apt/preferences

Voreingestellte Prioritäten

Ist keine APT-Konfigurationsdatei oder kein Eintrag in der Konfigurationsdatei vorhanden, der auf ein Paket passt, so wird für dieses Paket die voreingestellte Priorität verwendet, welche der Distribution entspricht.

  • Es besteht die Möglichkeit, ein bestimmtes Ziel-Release festzulegen, aus dem die Pakete installiert werden sollen.
  • Diese Distribution wird als „Target Release“ bezeichnet.
  • Das Ziel-Release kann dem Programm apt-get auf der Kommandozeile übergeben werden oder in der Konfigurationsdatei /etc/apt/apt.conf(siehe apt.conf) gesetzt werden.
  • Auf der Kommandozeile wird das Ziel-Release wie folgt angegeben:
# apt-get install -t testing paketname

Wurde ein Ziel-Release angegeben, so nutzt APT den folgenden Algorythmus, um die Prioritäten eines Paketes zu ermitteln.

Priorität 100 Wenn das Paket bereits installiert ist.
Priorität 500 Wenn das Paket nicht installiert ist und auch nicht zum Ziel-Release gehört.
Priorität 990 Wenn das Paket nicht installiert ist und zum Ziel-Release gehört.

Wird das Ziel-Release nicht angegeben, so vergibt APT die Priorität 100 an alle installierten Pakete und die Priorität 500 an alle nicht installierten Pakete.

  • Danach folgt APT den nachfolgend angeführten Regeln, wobei die Regeln in der beschriebenen Reihenfolge abgearbeitet werden. # Ein Paket wird niemals mit einer kleineren Versionsnummer installiert (Downgrade), wenn die Priorität unter 1001 liegt. „Downgrade“ bedeutet, dass eine nicht aktuelle Version eines Paketes installiert wird, obwohl bereits eine aktuelle Version des Paketes installiert ist.
  • Keine voreingestellte Priorität innerhalb von APT übersteigt den Wert 1000, ein solcher Wert kann ausschließlich über die Voreinstellungsdatei (preferences) gesetzt werden.
  • Der Downgrade eines Paketes ist in jedem Fall als problematisch anzusehen und sollte nach Möglichkeit vermieden werden.
  • In vielen Fällen führt ein Downgrade zu einem nicht funktionierenden Paket oder gar zu schweren Problemen mit dem Gesamtsystem.
  1. Das Paket mit der höchsten Priorität wird installiert.
  2. Wenn zwei oder mehrere Versionen eines Paketes die gleiche Priorität haben, so wird die Version mit der höchsten Versionsnummer installiert.
  3. Wenn zwei oder mehr Versionen eines Paketes die gleiche Priorität und Versionnummer haben, aber die Pakete sich in den Metadaten unterscheiden, oder aber die Option --reinstall auf der Kommandozeile angegeben ist, so wird das nicht installierte Paket ausgewählt.

Am häufigsten ist die Situation anzutreffen, dass ein bereits installiertes Paket (Priorität 100) in einer Version installiert ist, die nicht so aktuell (hoch) ist wie ein Paket, welches über eine Quelle in der Datei /etc/apt/sources.list (Priorität 500 oder 990) verfügbar ist.

  • Dieses Paket wird aktualisiert, wenn das Kommando apt-get install paketname oder apt-get upgrade ausgeführt wird.

Seltener tritt der Fall ein, dass ein bereits installiertes Paket in einer aktuelleren Version vorhanden ist und kein Paket aus einer der in der Datei /etc/apt/sources.list genannten Quellen eine höhere Versionsnummer aufweist.

  • In diesem Fall wird kein Downgrade durchgeführt, wenn das Kommando apt-get install paketname oder apt-get upgrade ausgeführt wird.

Manchmal ist die bereits installierte Version eines Paketes aktueller als die zum Ziel-Release gehörende Version, jedoch nicht so aktuell wie ein Paket, welches aus einer anderen Distribution verfügbar ist.

  • In diesem Fall wird das Paket durch das Kommando apt-get install paketname oder apt-get upgrade aktualisiert, da eine der verfügbaren Versionen eine höhere Priorität besitzt als die aktuell installierte Version.

Verwenden von Voreinstellungen

Die APT Konfigurationsdatei /etc/apt/preferences erlaubt dem Administrator, die Zuweisung von Prioritäten detailliert zu steuern.

  • Die Konfigurationsdatei besteht aus Einträgen, die sich über mehrere Zeilen erstrecken und untereinander durch Leerzeilen getrennt sind.
  • Die Einträge beziehen sich auf ein einzelnes Paket (spezifische Form) oder auf eine Anzahl von Paketen (generelle Form). # Die spezifische Form weist einem Paket eine (Pin-)Priorität zu und übergibt dabei eine gewünschte Version oder einen Versionsbereich.
  • Das folgende Beispiel weist allen Versionen des Paketes perl eine hohe Priorität zu, solange die Versionsnummer mit „5.8“ beginnt.
    Package: perlPin: version 5.8*Pin-Priority: 1001
  1. Die generelle Form setzt eine Priorität für die angegebene Distribution oder für alle Pakete von einem bestimmten Server, welcher über den vollen Domainnamen (FQDN) identifiziert wird.
    Diese generelle Form wirkt sich ausschließlich auf Gruppen von Paketen aus.
  • Folgendes Beispiel weist allen Paketversionen auf einem lokalen Repository mit Paketen eine hohe Priorität zu.
    Package: *Pin: origin ""Pin-Priority: 999
    Zu beachten ist hier das Schlüsselwort „origin“.
  • Dieses entspricht nicht dem gleich lautenden Begriff in einer „Release“-Datei! In einer „Release“-Datei wird mit dem Schlüsselwort „origin“ ein Autor oder Hersteller (beispielsweise „Debian“ oder „Ximian“) beschrieben, nicht eine Internetadresse.
    Der folgende Eintrag setzt eine geringe Priorität für alle Paketversionen, die zu einer als „unstable“ bezeichneten Distribution gehören.
    Package: *Pin: release a=unstablePin-Priority: 50
    Das letzte Beispiel zeigt einen Eintrag, der eine hohe Priorität allen Paketen zuweist, die zum Release „stable“ gehören und eine Versionsnummer von „3.0“ aufweisen.
    Package: *Pin: release a=unstable, v=3.0Pin-Priority: 50

Bewertung von Prioritäten

Prioritäten (P), die in der APT-Konfigurationsdatei vergeben werden, müssen positive oder negative Integerzahlen sein.

  • Diese werden wie folgt interpretiert.
P > 1000 Installiert ein Paket, auch wenn dies ein „Downgrade“ des Paketes bewirkt.
990 < P <= 1000 Installiert ein Paket, auch wenn es nicht aus dem „Target“-Release stammt, außer die bereits installierte Version ist aktueller.
500 < P <= 990 Installiert ein Paket, wenn kein Paket passend zum „Target“-Release vorhanden ist oder die bereits installierte Version aktueller ist.
100 < P <= 500 Bewirkt, dass eine Version installiert wird, solange keine andere Version aus irgeneiner anderen Distribution verfügbar ist oder aber die installierte Version aktueller ist.
0 < ? <= 100 Installiert eine Version eines Paketes nur, wenn dieses Paket noch nicht installiert ist.
P < 0 Verhindert, dass diese Version eines Paketes installiert wird.

Die Einträge werden in der aufgeführten Reihenfolge in der Konfigurationsdatei abgearbeitet.

  • Wird ein auf das Paket oder die Paketgruppe passender Eintrag gefunden, so werden die folgenden Einträge ignoriert.

Sind die vorab beschriebenen Einträge in einer Konfigurationsdatei in der beschriebenen Reihenfolge abgelegt, so ergibt sich folgende Konfigurationsdatei:

# Package: perl
Pin: version 5.8*
Pin-Priority: 1001

Package: *
Pin: origin ""
Pin-Priority: 999

Package: *

Pin: release unstable
Pin-Priority: 50

In dieser Zusammenstellung gelten folgende Regeln: # Es wird die aktuellste Version des Paketes „perl“ installiert, solange diese Version mit „5.8“ beginnt.

  • Ist eine Version 5.8 von Perl verfügbar und ist die Version 5.9 bereits installiert, so wird ein „Downgrade“ durchgeführt.
  1. Jedes andere Paket, welches nicht das Paket „perl“ ist und auf dem lokalen System verfügbar ist, bekommt eine höhere Priorität.
  • Dies bewirkt, dass nur wenige, nicht lokal verfügbare Pakete aus dem Netz installiert werden.
  • Dies betrifft auch Versionen des „Target“-Release.
  1. Ein Paket, welches nicht auf dem lokalen System verfügbar ist, aber in einer Quelle in der Datei /etc/apt/sources.list aufgeführt wird und zu einem „unstable“ Release gehört, wird nur installiert, wenn es zur Installation ausgewählt wird und noch keine Version dieses Paketes installiert ist.

Paketversionen und Distributionseigenschaften

Die Paketquellen, welche in der Datei /etc/apt/sources.list aufgeführt werden, enthalten im Idealfall die Dateien Packages (bzw. Packages.gz) und Release, mit denen die an der jeweiligen Quelle verfügbaren Pakete beschrieben werden.

Die Datei Packages befindet sich normalerweise im Pfad .../dists/dist-name/component/arch, also beispielsweise .../dists/stable/main/binary-i386/Packages.

  • Diese Datei besteht aus einem mehrzeiligen Eintrag für jedes Paket, von dem für die APT Prioritäten lediglich die beiden Zeilen Package und Version benötigt werden.

Die Datei Release befindet sich im Pfad .../dists/dist-name, also beispielsweise unter .../dists/stable/Release oder auch .../dists/sarge/Release.

  • Abweichend von der Datei Packages werden fast alle Informationen aus der Release-Datei benötigt.
  • Diese sind:

Archive

# Bezeichnet das Archiv, zu dem alle Pakete dieses Verzeichnisses gehören.
  • Beispielsweise gibt die Zeile Archive: stable an, dass alle Pakete in dem Verzeichnisbaum unterhalb der Datei Release zum „stable“-Release von Debian gehören.
# In der APT Konfigurationsdatei wird dieser Wert wie folgt gesetzt: 
# Pin: release a=stable

Version

# Diese Zeile bezeichnet die Release-Version der Distribution.
  • Der Wert „3.1“ besagt auch, dass alle Pakete im Verzeichnisbaum zur Release 3.1 „Sarge“ von Debian gehören.
  • Für Versionen wie „testing“ und „unstable“ werden keine Versionsnummern vergeben, da diese Versionen noch nicht veröffentlicht sind.
  • Um diesen Wert in der APT-Konfigurationsdatei anzugeben, ist eine der folgenden Zeilen notwendig:
# Pin: release v=3.0
Pin: release a=stable, v=3.0
Pin: release 3.0

Component

# Bezeichnet den Abschnitt der Distribution, aus der die Pakete stammen.
  • Beispielsweise bezeichnet die Zeile Component: main in der Release-Datei, dass alle Pakete unterhalb diese Verzeichnisses zum Abschnitt „main“ gehören.
  • Dies bedeutet auch, dass alle diese Pakete einer Lizenz entsprechen, die in den Debian Free Software Guidelines (siehe auch DFSG) festgelegt ist.
  • Diese Angabe wird wie folgt in der APT-Konfigurationsdatei preferences festgelegt
# Pin: release c=main            

Origin

# Bezeichnet den Ursprung der Pakete, meist ist hier „Debian“ angegeben.
  • In der APT preferences-Datei sieht diese Zeile wie folgt aus:
# Pin: release o=Debian            

Label:

# Eine Bezeichnung für die Pakete in diesem Verzeichnisbaum, dieser Eintrag hat meistens den Wert „Debian“.
  • In der APT preferences-Datei sieht diese Zeile wie folgt aus:
# Pin: release l=Debian

Alle verfügbaren Dateien (Packages und Release), die über Quellen in der Datei /etc/apt/sources.list verfügbar sind, werden im Verzeichnis /var/lib/apt/lists/ abgelegt.

  • Dieses Verzeichnis kann durch die Variable Dir::State::Lists in der Datei apt.conf verändert werden.
  • Die Dateinamen der gespeicherten Packages und Release-Dateien werden mit dem Namen des Servers sowie dem Pfad und der Architektur ergänzt, beispielsweise debiananwenderhandbuch.de_debian_dists_stable_main_binary-i386_Packages.

Weiterhin ist es möglich, eine oder mehrere Zeilen, beginnend mit dem Schlüsselwort Explanation:, mit einer Erklärung dieses Eintrages einzufügen.

Die Zeile Pin-Priority: in jedem Eintrag ist nicht zwingend erforderlich.

  • Wird ein solcher Eintrag nicht gefunden, so wird eine um den Wert 1 reduzierte Priorität gegenüber dem vorhergehenden Eintrag vergeben.

Beispiele

Das erste Beispiel zeigt, wie man allen Paketen der „stable“ Distribution eine Priorität über der vorgegebenen (von 500) zuweist.

  • Bei allen anderen Paketen wird die Priorität um den Wert 10 verringert.
# Explanation: Uninstall or do not install any Debian-originated
Explanation: package versions other than those in the stable distro
Package: *
Pin: release a=stable
Pin-Priority: 900
Package: *
Pin: release o=Debian
Pin-Priority: -10

Die beschriebene Konfiguration führt dazu, dass alle Pakete aus der aktuellen „stable“ Distribution installiert werden bzw.

  • bereits installierte Pakete immer aktuell gehalten werden.
  • Darüber hinaus ist es möglich, einzelne Pakete aus anderen Distributionen zu installieren, hier am Beispiel eines Paketes aus „testing“ gezeigt:
# apt-get install paketname/testing

Das so aus „testing“ installierte Paket wird zu einem späteren Zeitpunkt nicht weiter aktualisiert.

  • Dies muss von Hand durch den erneuten Aufruf des oben beschriebenen Kommandos erfolgen.

Das zweite Beispiel setzt eine hohe Priorität für Pakete aus dem „testing“-Zweig, eine etwas niedrigere Priorität für den „unstable“-Zweig und eine noch geringere Priorität für Pakete aus anderen Bereichen.

# Package: *
Pin: release a=testing
Pin-Priority: 900
Package: *
Pin: release a=unstable
Pin-Priority: 800
Package: *
Pin: release o=Debian
Pin-Priority: -10

Diese Konfiguration bewirkt, dass bevorzugt Pakete aus „testing“ in den jeweils aktuellen Versionen installiert werden.

  • Auch hier ist es möglich, mittels
# apt-get install paketname/unstable

gezielt einzelne Pakete aus dem „unstable“-Bereich zu installieren.

APT Pinning

Apt/Pinning

apt-key

apt-key

apt-extracttemplates

apt-extracttemplates

apt-cache

apt-cache