// Datei: ./werkzeuge/paketoperationen/pakete-erneut-installieren.adoc

// Baustelle: Fertig

[[pakete-erneut-installieren]]

=== Pakete erneut installieren ===

// Stichworte für den Index
(((Paket, erneut installieren)))
Manchmal gehen Dateien kaputt oder werden unbeabsichtigt gelöscht. Sei
es bei einer Reparatur des Dateisystems, durch Bit-Dreher auf dem
Speichermedium oder durch ``Unfälle'' beim Drag-and-Drop. Auf der
Kommandozeile passieren mitunter auch Tippfehler, die im Nachhinein
nicht mehr reparabel sind.

In anderen Fällen möchten Sie eine Software temporär deinstallieren, um
diese später wieder zu installieren. Es ist dabei nicht unüblich, dass
bestehende, selbst angepasste Konfigurationsdateien später
wiederverwendet werden. Auch das Ersetzen von bereits veränderten
Konfigurationsdateien durch ihre Originale aus dem Paket wird oft durch
eine Wiederinstallation versucht – nur leider hat dies nur selten den
erwünschten Effekt. Warum das nicht immer so funktioniert wie erhofft,
erklären wir gleich.

Alle diese Fälle haben gemeinsam, dass ein Paket erneut installiert wird.
Dabei unterscheiden wir hier drei verschiedene Ausgangszustände:

* Das Paket wurde mitsamt Konfigurationsdateien entfernt, d.h.
  vollständig gelöscht ('purged').
* Das Paket wurde entfernt, die Konfigurationsdateien sind aber noch
  da.
* Das Paket ist bereits/noch installiert.

Jeder dieser Fälle hat dabei seine Eigenheiten. In den ersten beiden
Fällen können Sie das Paket ganz einfach auf den üblichen Wegen
installieren. Welche Besonderheiten Sie dabei dennoch beachten sollten,
lesen Sie in den folgenden Abschnitten.

// Stichworte für den Index
(((apt, --reinstall)))
(((aptitude, reinstall)))
(((cupt, reinstall)))
Im letztgenannten Fall teilen Ihnen die meisten Programme, die auf APT
basieren, mit, dass besagtes Paket bereits installiert ist. Deswegen
braucht es dort den expliziten Hinweis, dass das Paket nochmals
installiert werden soll. Zum Einsatz kommt dabei meist die Option
`--reinstall` (APT) oder das Unterkommando `reinstall` (`aptitude`,
`cupt`).

==== Wiederinstallieren vollständig entfernter Pakete ====

// Stichworte für den Index
(((Debianpaket, debconf)))
(((Debianpaket, dpkg)))
Wurden Pakete mit der Option `--purge` vollständig entfernt (siehe
dazu <<pakete-deinstallieren>>), so ist dieser Fall in vielen Fällen
trivial und ohne jegliche Besonderheiten.

Die einzige Ausnahme davon bilden Pakete, die Teile ihrer
Konfiguration über `debconf` erfragen. Das Kommando `dpkg --purge`
entfernt alle Bestandteile außer den in der Debconf-Datenbank
gespeicherten Antworten des zu entfernenden Pakets. Dies kann dazu
führen, dass Ihnen die `debconf`-Fragen zur Konfiguration des Pakets
nicht wieder gestellt werden. Im Endeffekt wird die gleiche
Konfiguration wie bei der vorherigen Installation des Pakets generiert.

// Stichworte für den Index
(((Debianpaket, dpkg)))
(((dpkg-reconfigure)))
In diesem Fall hilft Ihnen der Aufruf von `dpkg-reconfigure` mit dem
Paketnamen als Parameter. In manchen Fällen reicht dies alleine schon
aus, um eine verkorkste Konfiguration wieder hinzubiegen. Mitunter
kommen Sie damit um ein gänzliches Entfernen und Wiederinstallieren des
Pakets herum. Ausführlich gehen wir dazu unter ``Pakete konfigurieren''
in <<pakete-konfigurieren>> ein.

==== Wiederinstallieren von Paketen mit vorhandenen Konfigurationsdateien ====

// Stichworte für den Index
(((Debianpaket, dpkg)))
(((Paket, erneut installieren und Konfiguration beibehalten)))
Auch dieser Fall funktioniert meist ganz unspektakulär und so wie Sie es
erwarten. Neben den bereits oben erwähnten Stolperstellen kommt jedoch
in diesem Fall noch hinzu, dass `dpkg` vorherige Änderungen an den noch
vorhandenen Konfigurationsdateien beachtet. Falls sich diese Dateien in
der aktuell zu installierenden Paketversion nicht gegenüber denen in der
vorher installierten Variante geändert haben, fragt `dpkg` gar nicht
nach, ob es diese mit den Varianten aus dem Paket ersetzen soll. Dies gilt
auch analog für Konfigurationsdateien, die von Ihnen als Administrator
gelöscht wurden. `dpkg` sieht dies als Absicht an, respektiert daher
Ihre Entscheidung und installiert die entsprechende Konfigurationsdatei
aus dem neuen Paket ebenfalls nicht wieder.

// Stichworte für den Index
(((apt-get, purge)))
(((aptitude, purge)))
(((dpkg, --purge)))
Wurde eine Wiederherstellung erwartet, so muss das Paket vorher von Ihnen
mit `purge` (`dpkg --purge`, `apt-get purge` oder `aptitude purge`)
entfernt werden. Damit installiert `dpkg` die Konfigurationsdateien aus
dem Paket erneut.

==== Wiederinstallieren bereits installierter Pakete ====

Der dritte Fall unterscheidet sich von den ersten beiden dahingehend,
dass er einerseits erzwungen werden muss und andererseits, dass die gleiche
Version wie die bereits vorhandene wieder installiert wird. Andernfalls
würde es sich ja um eine Paketaktualisierung handeln.

Diese Vorgehensweise wird meist dann verwendet, wenn – wie zu Beginn
dieses Abschnitts erwähnt – eine oder mehrere Dateien eines
installierten Pakets kaputt gegangen sind und diese wiederhergestellt
werden sollen. Oft ist dies sogar einfacher und schneller, als das
Backup zu bemühen.

// Stichworte für den Index
(((apt-get, install --reinstall)))
(((aptitude, reinstall)))
(((cupt, reinstall)))
(((dpkg, -i)))
(((Paketcache, /var/cache/apt/archives/)))
Ist die entsprechende Paketdatei noch in `/var/cache/apt/archives/`
vorhanden, so reicht zum Wiederinstallieren ein simples `dpkg -i` mit
der richtigen Datei als Parameter. Da das Paket bereits installiert war,
müssen auch alle Abhängigkeiten bereits vorliegen, und es ist nicht
notwendig, Abhängigkeiten nochmals aufzulösen.

Muss die Paketdatei neu heruntergeladen werden, so nutzen Sie besser
einen der Aufrufe `apt-get install --reinstall`, `aptitude reinstall`
oder auch `cupt reinstall`. Zusätzlich benötigen Sie im Aufruf den
entsprechenden Paketnamen als Parameter.

Ist das Paket in der aktuell installierten Version jedoch in keinem der
dem System bekannten APT-Repositories mehr verfügbar, wird der Vorgang
mit einer Fehlermeldung abgebrochen. Desweiteren gelten auch in diesem
Fall die gleichen Verhaltensweisen bzgl. geänderter
Konfigurationsdateien und `debconf`-Fragen wie in den beiden
vorgenannten Fällen.

==== Typische Stolperfallen bei Wiederinstallieren mehrerer Pakete ====

Die vermutlich häufigste Stolperfalle beim Wiederinstallieren von
Paketen ist, dass Sie das falsche Paket erwischen. Dies passiert
im Alltag leider häufiger, als Sie das erwarten würden.

Sind Dateien kaputtgegangen, bei denen Sie sowieso nicht genau wissen,
aus welchem Paket diese stammen, so nehmen Sie flink `dpkg -S` zu Hilfe
(siehe <<paket-zu-datei-finden>>). Damit ermitteln damit das dazugehörige
Paket im Handumdrehen. 

Wissen Sie den Paketnamen jedoch nur ungefähr, wird oft bereits der
erste Versuch, das Paket mit dem Namen der Software zu Reinstallieren,
ein Fehlschlag. Gerade die größeren Software-Suiten bestehen häufig aus
mehreren Paketen und das Paket mit dem Namen der Suite ist meist nur ein
Metapaket ohne eigentlichen Inhalt. Zu bedenken ist außerdem, dass eine
Wiederinstallation eines bereits installierten Pakets dessen
Abhängigkeiten unangetastet lässt.

// Stichworte für den Index
(((dpkg, -S)))
(((Debianpaket, samba-common)))
Ein schönes Beispiel für einen solchen Fall ist die Server-Software
namens 'Samba'. Haben Sie z.B. die Datei `/etc/pam.d/samba`
zerschossen, ist die Versuchung groß, einfach das Paket namens 'samba'
mit `dpkg --purge` zu deinstallieren und gleich danach wieder zu
installieren. Leider wird die Datei danach unverändert sein, da sie
nicht zum Paket 'samba' gehört, sondern zu dessen Abhängigkeit
'samba-common'. Deswegen hilft es Ihnen, im Zweifelsfall doch lieber
erst `dpkg -S` zu bemühen und nachzuschauen, in welchem Paket eine Datei
wirklich enthalten ist, bevor Sie zu Fluchen anfangen.

// Datei (Ende): ./werkzeuge/paketoperationen/pakete-erneut-installieren.adoc
