// Datei: ./werkzeuge/paketoperationen/pakete-aktualisieren.adoc

// Baustelle: Fertig

[[pakete-aktualisieren]]

=== Pakete aktualisieren ===

// Stichworte für den Index
(((Paket, aktualisieren)))
Ein Großteil der verfügbaren Software veraltet häufig in recht kurzer
Zeit. Die Entwickler veröffentlichen neue Softwarepakete, die um Fehler
bereinigt oder bei denen neue Funktionen ergänzt wurden. Das Debian-Team
zur Qualitätssicherung hat daher mehrere Ebenen eingeführt, um
einerseits mit der mitunter recht dynamischen Entwicklung der Software
schrittzuhalten und andererseits sicherzustellen, dass brandneue Software
möglichst keine andere, bereits bestehende und funktionierende Software
in Mitleidenschaft zieht.

Dazu gehören die verschiedenen Veröffentlichungen wie _unstable_,
_testing_ und _stable_ (siehe <<veroeffentlichungen>>) sowie der damit
festgelegte Zyklus, unter welchen Kriterien von einer Veröffentlichung
zur nächsten diffundieren. Mitunter ist das ein recht langer Zeitraum.
Desweiteren zählen die verschiedenen Mechanismen dazu, wie
Softwarepakete aktualisiert werden. Die dabei verwendeten Begriffe
``Update'' und ``Upgrade'' sorgen regelmäßig für Verwirrung.

Im Allgemeinen beschreibt ein _Update_ eine generelle Aktualisierung und
Fehlerbereinigung eines Softwarepakets ohne Änderung der Schnittstelle
und unter Beibehaltung des bereits bestehenden Funktionsumfangs. Ein
_Upgrade_ bezeichnet hingegen eine Aktualisierung eines Softwarepakets
zugunsten einer Funktionserweiterung oder Erneuerung, was auch mit einer
Veränderung der Schnittstelle einhergehen kann.

// Stichworte für den Index
(((apt, update)))
(((apt, safe-upgrade)))
(((apt, full-upgrade)))
(((aptitude, update)))
(((aptitude, safe-upgrade)))
(((aptitude, full-upgrade)))
(((apt-get, update)))
(((apt-get, upgrade)))
(((apt-get, dist-upgrade)))
(((Paketliste, aktualisieren)))
APT und `aptitude` kennen die beiden Unterkommandos `update` und
`upgrade` in verschiedenen Schweregraden und verknüpfen damit wechselnde
Funktionalitäten. Das Team um APT und `aptitude` hat die Bedeutung der
Unterkommandos im Laufe der Entwicklung verändert und zudem auch neue
Schlüsselworte hinzugefügt. Das zielt darauf ab, die Unterscheidung der
Aktionen und deren Benutzung im Alltag zu vereinfachen. Erschwert wird
das dadurch, dass sich bestehende Gewohnheiten i.d.R. nur Schritt für
Schritt ändern und daher ihre Zeit brauchen, um sich durchzusetzen.

Die Paketverwaltung mittels `apt-get`, `apt` (ab APT 1.0) und `aptitude`
kennt jeweils vier Unterkommandos zur Aktualisierung:

* `update`, verwendbar bei `apt-get`, `apt` und `aptitude`,
* `install`, verwendbar bei `apt-get`, `apt` und `aptitude`,
* `upgrade`, bei `apt` und `aptitude` genannt `safe-upgrade`, sowie
* `dist-upgrade`, bei `apt` und `aptitude` genannt `full-upgrade`.

Jedes genannte Unterkommando beinhaltet eine spezifische Aktualisierung
und wirkt sich entweder nur auf die Paketlisten (`update`) oder auf die
Pakete selbst aus (`install`, `upgrade`, `dist-upgrade`, `safe-upgrade`
und `full-upgrade`).

[[pakete-aktualisieren-update]]
==== `update` ====

// Stichworte für den Index
(((apt, update)))
(((aptitude, update)))
(((apt-get, update)))
(((Paketliste, aktualisieren)))
Das Unterkommando `update` steht in identischer Form und Bedeutung bei
den drei Kommandos `apt-get`, `apt` und `aptitude` zur Verfügung. Es
dient dabei nur zur Aktualisierung der Paketlisten, die in der Datei
`/etc/apt/sources.list` hinterlegt sind. Es beinhaltet jedoch
nicht die Erneuerung der Pakete selbst. Auf die Benutzung dieses
Unterkommandos gehen wir ausführlich unter ``Liste der verfügbaren
Pakete aktualisieren'' in <<liste-der-verfuegbaren-pakete-aktualisieren>> 
ein.

[[pakete-aktualisieren-install]]
==== `install` ====

// Stichworte für den Index
(((apt, install)))
(((aptitude, install)))
(((apt-get, install)))
(((Paket, aktualisieren)))
Bisher haben wir Ihnen nur verraten, dass das Unterkommando `install`
Pakete installiert. Es kann jedoch noch etwas mehr -- nämlich das
Aktualisieren einer bestehenden Installation. Beim Aufruf prüfen `apt`,
`apt-get` und `aptitude` zunächst, ob das Paket bereits installiert ist.
Falls nein, lösen Sie den üblichen Installationsvorgang aus. Falls das
Paket jedoch schon da ist, prüfen die genannten Programme, ob eine neue
Version des Paketes in den Paketlisten steht. Ist das der Fall, wird die
bestehende Version entfernt und die neue Version eingespielt. Dabei
werden sich verändernde Abhängigkeiten zu anderen Paketen mit
berücksichtigt.

.Aktualisierung eines Paketes mittels `apt-get install`
----
# apt-get install ruby2.1
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete werden aktualisiert (Upgrade):
  ruby2.1
1 aktualisiert, 0 neu installiert, 0 zu entfernen und 235 nicht aktualisiert.
Es müssen 277 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt.
Holen: 1 http://security.debian.org/ jessie/updates/main ruby2.1 amd64 2.1.5-2+deb8u6 [277 kB]
Es wurden 277 kB in 0 s geholt (354 kB/s).
Laden der Fehlerberichte … Erledigt
»Found/Fixed«-Informationen werden ausgewertet … Erledigt
Lese Changelogs... Fertig
(Lese Datenbank ... 257112 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../ruby2.1_2.1.5-2+deb8u6_amd64.deb ...
Entpacken von ruby2.1 (2.1.5-2+deb8u6) über (2.1.5-2+deb8u5) ...
Trigger für man-db (2.7.0.2-5) werden verarbeitet ...
ruby2.1 (2.1.5-2+deb8u6) wird eingerichtet ...
#
----

Bei diesem Schritt werden die zu installierenden Softwarepakete zunächst 
im Paketcache unter `/var/cache/apt/archives/` abgelegt. `apt` prüft dabei, 
ob für die heruntergeladenen Pakete auch genügend Speicherplatz zur 
Verfügung steht. Ist das nicht der Fall, beschwert es sich bei Ihnen mit 
nachfolgender Ausgabe:

.Fehlender Speicherplatz für den Paketcache
----
1734 aktualisiert, 716 neu installiert, 29 zu entfernen und 0 nicht aktualisiert.
Es müssen 3.292 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 3.195 MB Plattenplatz zusätzlich benutzt.
E: Sie haben nicht genug Platz in /var/cache/apt/archives/.
----

Um die Situation zu bereinigen, räumen Sie vor der Aktualisierung der 
Pakete den Paketcache auf (siehe ``Paketcache aufräumen'' in 
<<paketcache-aufraeumen>>).

[[pakete-aktualisieren-upgrade]]
==== `upgrade` und `safe-upgrade` ====

// Stichworte für den Index
(((apt, safe-upgrade)))
(((aptitude, safe-upgrade)))
(((aptitude, safe-upgrade --no-new-installs)))
(((apt-get, upgrade)))
(((Paket, aktualisieren)))
Dem Unterkommando `upgrade` von `apt-get` entspricht `safe-upgrade` bei
`apt` und `aptitude`. Sie aktualisieren damit alle installierten Pakete
auf die neueste, verfügbare Version. Dabei werden keine potentiell
gefährlichen Aktionen ausgeführt. Was dies genau heißt, unterscheidet
sich dezent bei den drei Werkzeugen:

* `apt-get upgrade` ist am konservativsten und installiert weder neue
Pakete, noch entfernt es ggf. nicht mehr benötigte Pakete. Dies kann
gelegentlich dazu führen, dass nicht alle Sicherheitsaktualisierungen
eingespielt werden, wenn diese beispielsweise zum Beheben eines
Sicherheitsproblemes zusätzliche Pakete nachsichziehen. Eine solche
Situation trat 2008 auf, als eine Sicherheitsaktualisierung für das
Paket 'openssh-server' eine zusätzliche Abhängigkeit vom Paket
'openssh-blacklist' hatte. Letzteres beinhaltet eine schwarze Liste von
öffentlich bekannten privaten SSH-Schlüsseln.

* `apt safe-upgrade` läßt hingegen das Installieren neuer Pakete zu.
Ähnlich wie `apt-get` entfernt es dabei keine Pakete.

* `aptitude safe-upgrade` geht im Gegensatz zu `apt-get` und `apt` noch
einen Schritt weiter und erlaubt auch, dass Pakete entfernt werden. Das
betrifft allerdings ausschließlich solche Pakete, die die Markierung
``automatisch installiert'' tragen (siehe ``Paketflags'' in
<<lokale-paketmarkierungen>>). Über die Option `--no-new-installs`
sorgen Sie dafür, dass auch `aptitude` beim Aktualisieren nur die Pakete
erneuert, die keine weiteren, zusätzlichen Pakete nachsichziehen.

Eine Paketversion wird nicht erneuert und auf dem aktuellen Stand
belassen, wenn eine Paketaktualisierung einen weiteren
Abhängigkeitskonflikt hervorruft. Das betrifft nur den Fall, wenn ein
Paket entfernt werden soll. `aptitude` berücksichtigt dabei nur Pakete,
die nicht automatisch über Abhängigkeiten installiert wurden.

[NOTE]
.Überprüfung der Aktualisierung
====
Aufgrund der eingebauten Rückhaltemechanismen für potentielle
Paketentfernungen werden diese Unterkommandos gerne für
Sicherheitsaktualisierungen verwendet. Bitte überprüfen Sie nach deren
Ausführung, ob auch alle Aktualisierungen tatsächlich eingespielt
wurden. Sollte das nicht der Fall sein, schauen Sie nach, welche Pakete
noch ausstehen und welche aufgetretenen Konflikte deren Aktualisierung
verhindert haben.
====

[NOTE]
.Übersicht zu den aktualisierbaren Paketen erhalten
====
Welche Pakete aktualisiert werden können, teilen Ihnen APT und
`aptitude` mit. Ausführlicher gehen wir darauf unter ``Aktualisierbare
Pakete anzeigen'' in <<aktualisierbare-pakete-anzeigen>> ein.
====

// Stichworte für den Index
(((Security Updates)))
Sichtbar wird die Änderung auch im Paketnamen. Debian handhabt es so,
dass bei Sicherheitsaktualisierungen (genannt 'security updates') dem
Paketnamen eine spezielle Zeichenkette angefügt wird. Die erste 
Fehlerbereinigung für Debian 7 _Wheezy_ ist `~deb7u1`, die zweite
`~deb7u2` (siehe dazu auch ``Bennenung eines Debian-Paketes'' unter
<<benennung-eines-debian-pakets>>). Bei neuen Versionen mit
Funktionserweiterungen wird die Versionsnummer des Pakets erhöht.

[[pakete-aktualisieren-dist-upgrade]]
==== `dist-upgrade` und `full-upgrade` ====

// Stichworte für den Index
(((apt-get, dist-upgrade)))
(((apt, full-upgrade)))
(((aptitude, full-upgrade)))
(((Distribution aktualisieren)))
(((Sicherheitsaktualisierungen)))
(((Veröffentlichung, Versionswechsel)))
Was bei `apt-get` das Unterkommando `dist-upgrade` ist, heißt bei `apt`
und `aptitude` hingegen `full-upgrade`. Beide Unterkommandos sind
ähnlich zu `upgrade` und `safe-upgrade`. 

Sie kommen in zwei Situationen zum Einsatz. Fall eins umfasst das
Einspielen von Sicherheitsaktualisierungen, sodass auch neue
Abhängigkeiten oder Paketkonflikte Beachtung finden, ohne dass dabei auf
die Aktualisierung verzichtet wird. Fall zwei ist der Wechsel von einer
Veröffentlichung einer Distribution zur nachfolgenden, so bspw. von
_stable_ nach _unstable_ oder von Debian 8 _Jessie_ nach Debian 9
_Stretch_ (siehe auch ``Distribution aktualisieren'' in
<<distribution-aktualisieren>>).

Die bisherigen Veröffentlichungen von APT und `aptitude` suggerierten
insbesondere bei dem Begriff `dist-upgrade` inkorrekterweise primär eine
Aktualisierung der genutzten Veröffentlichung. Deshalb wurde diese
Funktionalität zunächst bei `aptitude` und später auch bei APT von
`dist-upgrade` in `full-upgrade` umbenannt. Damit soll klargestellt
werden, dass dieses Unterkommando nicht nur zum Wechsel von einer
Veröffentlichung zur nächsten (vulgo ``Distributions-Upgrade'')
anwendbar ist.

In der Funktionalität bestehen kleine Unterschiede:

* mit beiden Unterkommandos werden auch stets neue Pakete installiert,
um die Paketabhängigkeiten zu erfüllen. Bei `apt-get` werden
gegebenenfalls auch Pakete wieder entfernt, falls ein Paketkonflikt dies
erforderlich macht.

* In der Standardeinstellung von `aptitude` entfernt der Aufruf von
`aptitude full-upgrade` nicht mehr gebrauchte, automatisch installierte
Pakete. Dieses Verhalten können Sie in der Konfiguration von `aptitude`
über das Element `Aptitude::Delete-Unused` abschalten.

[[pakete-aktualisieren-schrittfolge]]
==== Empfohlene Schrittfolge zur Aktualisierung von Paketen ====

// Stichworte für den Index
(((apt, full-upgrade)))
(((apt, update)))
(((apt, upgrade)))
(((aptitude, full-upgrade)))
(((aptitude, safe-upgrade)))
(((aptitude, update)))
(((apt-get, dist-upgrade)))
(((apt-get, update)))
(((apt-get, upgrade)))
(((Paket, aktualisieren)))
Um Ihnen die Aktualisierung Ihrer Softwarezusammenstellung zu
vereinfachen, haben wir nachfolgend eine Schrittfolge zusammengestellt,
die Ihnen als Orientierung dienen kann. Sind Sie auf der *Kommandozeile*
unterwegs, hilft Ihnen diese Abfolge bei den Werkzeugen `apt-get`, `apt`
und `aptitude` weiter:

. Zunächst bringen Sie mittels `apt-get update`, `apt update` oder
`aptitude update` die Paketlisten auf den neuesten Stand.

. Nun aktualisieren Sie mittels `apt-get upgrade`, `apt upgrade` oder
`aptitude safe-upgrade` alle Pakete, die keine potentiell gefährlichen
Paketoperationen zur Folge haben könnten.

. Als letzten Schritt führen Sie mit `apt-get dist-upgrade`, `apt
full-upgrade` oder `aptitude full-upgrade` eine Erneuerung der Pakete
durch, die bisher nicht erneuert wurden. Prüfen Sie bei der Frage "Y/n?"
genau die vorgeschlagenen Paketoperationen.

// Stichworte für den Index
(((aptitude, -u)))

Für das interaktive Arbeiten in der Text-Modus-Oberfläche von
`aptitude` ist folgende Reihenfolge sinnvoll:

. Starten Sie zunächst `aptitude` mit der Option `-u`. Damit
aktualisieren Sie zu Beginn die Paketlisten.

. Mit kbd:["["] öffnen Sie die Äste ``Aktualisierbare Pakete'' und
``Sicherheitsaktualisierungen'', um zu sehen, welche Pakete zur
Aktualisierung anstehen.

. Mit kbd:[U] merken Sie alle aktualisierbaren Pakete vor.

. Eventuelle Konflikte lösen Sie, indem Sie z.B. den ersten
Lösungsvorschlag mit kbd:[!] akzeptieren.

. Mit kbd:[g] sehen Sie die Vorschau der anstehenden Aktionen an.

. Drücken Sie nochmals kbd:[g], um die vorbereiteten Aktionen
auszuführen.

==== Aktualisierung mit Synaptic ====

Über die graphische Oberfläche von Synaptic (siehe <<gui-synaptic>>)
können Sie ebenfalls einzelne oder mehrere Pakete aktualisieren. Welche
Aktualisierungen dabei berücksichtigt werden, legen Sie über die
Einstellungen des Programms fest. Zu Auswahl stehen hier die
Sicherheitsaktualisierungen und neue Paketversionen. Synaptic
unterscheidet dabei nicht wie APT, `apt` und `aptitude` zwischen den
verschiedenen Aktualisierungsstufen. 

Folgende Schritte führen zu neuen Paketen über die graphische
Oberfläche:

. Wählen Sie als erstes den Knopf menu:Status[Installiert (aktualisierbar)] aus.

. Danach selektieren Sie das gewünschte Paket aus der Liste.

. Über den Menüeintrag menu:Paket[Zum Aktualisieren vormerken]
fügen Sie dieses zu ihrer Vorauswahl hinzu.

. Über den Menüpunkt menu:Bearbeiten[Vorgemerkte Änderungen anwenden]
lösen Sie die Aktualisierung aus.

Ein Distributionswechsel ist nur über vorherige Änderung der
Paketquellen möglich. Dabei ergänzen Sie zunächst eine weitere
Paketquelle und beziehen danach die Aktualisierung (`update`).

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