// Datei: ./werkzeuge/paketcache/paketcache-aufraeumen.adoc

// Baustelle: Fertig

[[paketcache-aufraeumen]]

=== Paketcache aufräumen ===

==== Weshalb aufräumen? ====

// Stichworte für den Index
(((Paketcache, aufräumen)))
(((Paketcache, /var/cache/apt/archives)))
(((Paketcache, /var/cache/apt/archives/partial)))
Während APT Softwarepakete von der hinterlegten Paketquelle bezieht --
in der Regel von einem Paketmirror -- behält APT die Pakete im
Verzeichnis `/var/cache/apt/archives/partial`. Ist der Download
abgeschlossen, werden diese in das Verzeichnis `/var/cache/apt/archives`
verschoben, anschließend ausgepackt und installiert. 

Die bezogenen Pakete verbleiben im Cache. Werden die Pakete zu einem
späteren Zeitpunkt nochmals benötigt und die Paketversion ist (noch)
identisch, schaut APT zuerst im Paketcache nach und entnimmt diese von
dort, bevor es die Pakete erneut von der Quelle bezieht. Das geht meist
schneller, als diese erneut herunterzuladen.

Nachteil ist, dass diese Pakete Speicherplatz auf dem Datenträger ihres
Debian-Systems belegen. Wird es damit knapp, raten wir Ihnen daher,
diesen Speicherplatz regelmäßig aufzuräumen. Mittlerweile ist die
Bezugszeit der Pakete über das Internet vielfach so gering, dass sich
ein längerfristiges Vorhalten im Paketcache eigentlich erübrigt. Es ist
in diesem Fall Abwägungssache und hängt davon ab, wie häufig Sie Pakete
entfernen und später wieder einspielen.

Den Paketcache finden Sie im Verzeichnis `/var`. Je nach Partitionierung
ihres Datenträgers ist der Bereich nicht separat und möglicherweise
Bestandteil der `/`-Partition. Ist diese vollständig mit Daten gefüllt,
funktioniert vieles auf ihrem Linuxsystem nicht mehr.

Bei ausgefeilteren Installationen bestehen häufig separate Partitionen
für `/var` oder `/var/cache`. Läuft einer dieser Bereiche voll, können
im einfachsten Fall keine weiteren Pakete zwischengespeichert und auch
nicht temporär entpackt werden. Falls der Bereich `/var` vollständig
belegt ist, können auch keine Logdateien mehr angelegt oder weitere
Informationen daran angehängt werden.

Einen Ausweg aus diesem Dilemma gelingt Ihnen mit dem Anlegen einer
separaten Partition für `/var/cache/apt/archives`. Wie Sie diese
einrichten und mit welchen Vor- und Nachteilen dieser Schritt verbunden
ist, zeigen wir Ihnen unter ``Cache-Verzeichnis auf separater
Partition'' in <<cache-verzeichnis-auf-separater-partition>>.

==== Paketverwaltung passend konfigurieren ====

// Stichworte für den Index
(((Paketcache, aptitude::AutoClean-After-Update)))
Die Programme `dpkg`, `apt-get`, `aptitude` und Synaptic räumen den
Paketcache in der Standardeinstellung nicht eigenständig auf und
belassen die Pakete nach der Installation oder Aktualisierung im
Paketcache. Ob überhaupt, wann und insbesondere wie aufgeräumt wird,
entscheiden Sie als Systembetreuer selbst und müssen dazu das von ihnen
verwendete Werkzeug entsprechend konfigurieren. 

Aus unserer Sicht sind die einzelnen Werkzeuge in Debian GNU/Linux wie
folgt konfiguriert:

bei `dpkg` :: Es belässt sowohl die `.deb`-Datei im Verzeichnis, als
rührt auch den Paketcache nicht an.

bei `apt-get` :: Die Pakete verbleiben im Paketcache und werden nicht
daraus entfernt.

bei `aptitude` :: Die Pakete verbleiben im Paketcache und werden nicht
daraus entfernt. Dieses Verhalten steuern Sie über den Eintrag
`aptitude::AutoClean-After-Update` in der Konfigurationsdatei
`~/.aptitude/config`. Der Default-Wert ist `false`, d.h. das Paket
verbleibt im Paketcache. Mit der Angabe `true` aktivieren Sie das
Aufräumen. Alternativ setzen Sie die Option über den Menüpunkt
``Einstellungen'' aus dem Menü ``Optionen'' (siehe
<<fig.aptitude-alte-pakete-entfernen>>):
+
.Alte Pakete aus dem Paketcache mittels Aptitude entfernen
image::werkzeuge/paketcache/aptitude-alte-pakete-entfernen.png[id="fig.aptitude-alte-pakete-entfernen", width="50%"]

bei `apt` :: Laden Sie ein oder mehrere Pakete mittels `apt install`
oder `apt upgrade` herunter und installieren diese erfolgreich, entfernt
`apt` diese Pakete danach aus dem Paketcache. Dieses Verhalten wird über
den Eintrag `Clean-Installed` in `apt.conf` gesteuert, der Default-Wert
dafür ist `on` und steht für das Aufräumen.

==== Kommandos zum Aufräumen ====

// Stichworte für den Index
(((apt-get, autoclean)))
(((aptitude, autoclean)))
Grundsätzlich gibt es mehrere, unterschiedlich radikale Ansätze zum
Aufräumen des Paketcaches. Die *Variante eins* umfasst das Löschen von
Paketen aus dem Cache, die in keinem der verwendeten APT-Repositories
mehr verfügbar sind. Die beiden Aufrufe `apt-get autoclean` und
`aptitude autoclean` implementieren diesen Ansatz. Bei Synaptic nutzen
Sie dazu den Menüpunkt menu:Einstellungen[Dateien] und selektieren
im Dialogfenster den Eintrag ``Nur Pakete löschen, die nicht länger
verfügbar sind'' (siehe <<fig.synaptic-paketcache-leeren>>). In der
Standardeinstellung erleichtern diese Kommandos den Cache auch um
Pakete, die Sie in der vorliegenden Version nicht mehr vom Spiegelserver
beziehen können, die aber noch auf ihrem Linuxsystem installiert sind.

Um hingegen lediglich die Pakete aus dem Cache zu löschen, die auch
nicht, oder nicht mehr installiert sind, hilft Ihnen die
Konfigurationsoption `APT::Clean-Installed=off` in der Konfiguration von
APT. Alternativ teilen Sie das `apt-get` mit diesem Aufruf explizit mit:

.Aufruf von `apt-get` mit ausdrücklicher Konfiguration
----
# apt-get -o APT::Clean-Installed=off autoclean
...
#
----

Allerdings besteht keine Möglichkeit mehr, diese Pakete mittels APT zu
einem späteren Zeitpunkt wieder zu installieren, da sie ja in keiner
Paketliste mehr vorkommen. Benötigen Sie eines der Pakete später doch
wieder, hilft Ihnen nur der Rückgriff auf `dpkg` in Kombination mit dem
dazugehörigen `deb`-Paket weiter. Dazu benutzen Sie den Aufruf `dpkg -i
Paketname`. `Paketname` bezeichnet den Namen und Pfad der lokalen Datei
für das benötigte `deb`-Paket (siehe <<pakete-installieren>>).

// Stichworte für den Index
(((apt-get, clean)))
(((aptitude, clean)))
*Variante zwei* umfasst das Löschen sämtlicher Pakete aus dem Paketcache
-- damit schaffen Sie radikal Platz. Die passenden Kommandos dazu lauten
`apt-get clean` und `aptitude clean`. Übrig bleiben danach nur die
beiden Verzeichniseinträge für die Sperrdatei `lock` und das
Unterverzeichnis `partial`, in dem die Fragmente für Pakete
landen, die nur teilweise bezogen wurden.

.Aufräumen mittels `apt-get clean`
----
# apt-get clean
# ls /var/cache/apt/archives/
lock  partial
#
----

Bei Synaptic bildet zunächst der Eintrag menu:Einstellungen[Dateien]
den Ausgangspunkt. Über den Knopf ``Alle Paketdateien im
Zwischenspeicher löschen'' lösen Sie die Aufräumaktion aus (siehe
<<fig.synaptic-paketcache-leeren>>).

.Großreinemachen mit Hilfe von Synaptic
image::werkzeuge/paketcache/synaptic-paketcache-leeren.png[id="fig.synaptic-paketcache-leeren", width="50%"]

Selbstverständlich können Sie auch als *Administrator* agieren und dabei
gezielt nur ausgewählte oder auch alle vorliegenden `deb`-Dateien
manuell aus dem Verzeichnis `/var/cache/apt/archives/` mittels
`rm Paketdatei` löschen. Gerade bei den Paketen, die Daten für Spiele
beinhalten -- z.B. '0ad-data' mit ca. 530 MB Paketdateigröße -- , reicht
es oft aus, diese einzelnen Dateien aus dem Paketcache zu entfernen, um
dort wieder ausreichend Platz zu haben.

// Stichworte für den Index
(((Paketcache, /var/cache/apt/archives/partial/)))
Alle derzeit von Debian unterstützten Versionen von APT klagen nicht,
wenn Sie das gesamte Verzeichnis `/var/cache/apt/archives/partial/`
klammheimlich hinter dem Rücken der beiden Programme einfach komplett
entsorgen. APT und `aptitude` legen es bei einem späteren Bedarf einfach
von selbst wieder an. Anders sieht es hingegen bei älteren
Veröffentlichungen wie z.B. Debian 4.0 'Etch' oder Debian 5.0 'Lenny',
Ubuntu 10.04 LTS 'Lucid Lynx' sowie Debian-Derivaten aus der Zeit vor
Mitte 2010 aus. Beachten Sie bitte, dass APT vor Version 0.8 beim
Löschen eines der beiden Verzeichnisse
`/var/cache/apt/archives/partial/` oder `/var/lib/apt/lists/partial/`
dann einfach den Dienst verweigert. Sie beheben das Problem flink, indem
Sie die genannten Verzeichnisse manuell wieder anlegen. Haben Sie
`/var/cache/` als `tmpfs`-Dateisystem eingehängt (siehe
<<cache-verzeichnis-auf-separater-partition>>), so können Sie mit dem
Aufruf `mkdir -p /var/cache/apt/archives/partial` als Eintrag in der
Datei `/etc/rc.local` dauerhaft Abhilfe schaffen.

==== Empfehlungen zum Zeitpunkt des Aufräumens ====

// Stichpunkte für den Index
(((aptitude, Paketcache automatisch aufräumen)))
Wann Sie am besten aufräumen, hängt etwas von der Nutzung und dem
verfügbaren Plattenplatz ab. In den meisten Fällen ist _nach_ dem
Installieren und Aktualisieren der Pakete ein guter Zeitpunkt.
`aptitude` bietet dies sogar über die Option
`Aptitude::Autoclean-After-Update` an (siehe unten).

Ist jedoch der Plattenplatz recht knapp, so kann auch es auch helfen,
den Cache bereits _vor_ dem Installieren und Aktualisieren aufzuräumen.
Das ist insbesondere dann sinnvoll, wenn Sie dies selbst nicht
regelmäßig machen und diese Aktion stattdessen per Cron-Job oder über
die Konfiguration der Paketverwaltung ausführen lassen. Es macht jedoch
keinen Sinn, wenn Sie beispielsweise gleichzeitig die APT-Option 
`APT::Periodic::Download-Upgradeable-Packages` eingeschaltet haben und
damit nachts automatisch alle aktualisierbaren Pakete herunterladen
lassen. Leeren Sie den Paketcache danach mit `apt-get clean` komplett, hat
das zur Folge, dass die frisch bezogenen Pakete wieder gelöscht werden
und ein nachfolgendes `apt-get upgrade` diese erneut herunterladen muss.

==== Automatisch und regelmäßig Aufräumen ====

Das manuelle Aufrufen der o.g. Kommandos kostet Zeit. Daher bieten APT
und `aptitude` unterschiedliche Möglichkeiten, um diese Vorgänge zu
automatisieren.

// Stichpunkte für den Index
(((apt, Paketcache automatisch aufräumen)))
(((apt, Paketcache regelmäßig aufräumen)))
Das Paket 'apt' bringt mit dem Skript `/etc/cron.daily/apt`
einen Cron-Job mit, der diverse Aufgaben einmal pro Tag ausführen kann.
Konfiguriert wird das Skript ebenfalls über die Datei
`/etc/apt/apt.conf`. Den Paketcache betreffen die beiden
Einstellungen `APT::Periodic::Download-Upgradeable-Packages` und
`APT::Periodic::AutocleanInterval`.

Einstellung `APT::Periodic::Download-Upgradeable-Packages`::
Damit legen Sie die Regelmäßigkeit der Aktualisierung fest. Setzen Sie
den Wert auf `1`, so füllt der Cron-Job den Paketcache einmal pro Tag,
falls Paketaktualisierungen verfügbar sind. Setzen Sie den Wert hingegen
auf `7`, so lädt er verfügbare Paketaktualisierungen nur einmal die
Woche herunter. Der Wert `0` (Null) ist die Standardeinstellung und
deaktiviert die Funktionalität vollständig.

Einstellung `APT::Periodic::AutocleanInterval`::
Damit regeln Sie die Häufigkeit, mit der das Kommando `apt-get
autoclean` ausgeführt wird. Auch hier steht der Wert für den Abstand in
Tagen zwischen zwei Ausführungen. Der Wert `0` (Null) schaltet das
nächtliche Aufräumen ganz ab und ist auch die Standardvorgabe.

Die Dokumentation zu diesem Skript finden Sie in den Kommentarzeilen am
Anfang der Datei `/etc/cron.daily/apt`. Dort finden sich noch
weitere und feinere Einstellmöglichkeiten zum automatischen Aufräumen
des Paketcaches, z.B. anhand des Alters der Pakete.

// Stichworte für den Index
(((aptitude, --autoclean-on-startup)))
(((aptitude, --clean-on-startup)))
(((aptitude, autoclean)))
(((aptitude, clean)))

`aptitude` dagegen bietet eine Zeitsteuerung über Schalter und Optionen
an. Damit erfolgt das Aufräumen via `autoclean` oder `clean` vor oder
nach der Installation von Paketen automatisch:

Schalter `--clean-on-startup`::
entspricht dem Aufruf `aptitude clean`

Schalter `--autoclean-on-startup`::
entspricht dem Aufruf `aptitude autoclean`

Ähnliches ermöglicht Ihnen `aptitude` auch über die
Text-Modus-Bedienoberfläche. Setzen Sie in den Einstellungen unter
``Veraltete Paketdateien nach dem Laden von neuen Paketlisten löschen''
ein Häkchen, entspricht das der Konfigurationsoption
`Aptitude::AutoClean-After-Update`. Damit löscht Aptitude nach jeder
Aktualisierung der Paketlisten (durch `aptitude`) alle Paketdateien aus
dem Paketcache, die nicht mehr von einem in
`/etc/apt/sources.list` aufgeführten Paketmirror heruntergeladen
werden können.

// Datei (Ende): ./werkzeuge/paketcache/paketcache-aufraeumen.adoc
