Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
documentation.suse.com / SUSE Linux Enterprise Server-Dokumentation / Verwaltungshandbuch / System / update-alternatives: Verwalten mehrerer Befehls- und Dateiversionen
Gilt für SUSE Linux Enterprise Server 15 SP6

22 update-alternatives: Verwalten mehrerer Befehls- und Dateiversionen

Häufig sind gleich mehrere Versionen eines Werkzeugs auf einem System installiert. Mit dem Alternativen-System lassen sich diese Versionen konsistent verwalten. So können die Administratoren eine Auswahl treffen und es ist möglich, verschiedene Versionen nebeneinander zu installieren und zu nutzen.

22.1 Übersicht

Auf SUSE Linux Enterprise Server haben mehrere Programme identische oder ähnliche Aufgaben. Wenn beispielsweise sowohl Java 1.7 als auch Java 1.8 auf einem System installiert sind, wird das Skript des Alternativen-Systems (update-alternatives) aus dem RPM-Paket heraus aufgerufen. Standardmäßig verweist das Alternativen-System auf Version 1.8: Höhere Versionen besitzen auch eine höhere Priorität. Der Administrator kann jedoch die Standardeinstellung ändern, sodass der generische Name auf Version 1.7 verweist.

In diesem Kapitel gilt die folgende Terminologie:

Terminologie
Administrationsverzeichnis

Das Standardverzeichnis /var/lib/rpm/alternatives enthält Informationen zum aktuellen Status der Alternativen.

Alternativ

Name einer bestimmten Datei im Dateisystem. Der Zugriff auf diese Datei erfolgt anhand eines generischen Namens über das Alternativen-System.

Alternativen-Verzeichnis

Standardverzeichnis /etc/alternatives mit symbolischen Links.

Generischer Name

Name (z. B. /usr/bin/edit), der auf eine von mehreren über das Alternativen-System verfügbaren Dateien verweist.

Link-Gruppe

Gruppe zusammengehöriger symbolischer Links, die als Gruppe aktualisiert werden können.

Master-Link

Link in Link-Gruppe, der bestimmt, wie die anderen Links in der Gruppe konfiguriert werden.

Slave-Link

Link in einer Link-Gruppe, der durch den Master-Link gesteuert wird.

Symbolischer Link (Symlink)

Datei, die auf eine andere Datei in demselben Dateisystem verweist. Das Alternativen-System schaltet über symbolische Links im Alternativen-Verzeichnis zwischen den verschiedenen Versionen einer Datei um.

Der Administrator kann die symbolischen Links im Alternativen-Verzeichnis mit dem Befehl update-alternatives bearbeiten.

Mit dem Befehl update-alternatives im Alternativen-System lassen sich symbolische Links erstellen entfernen und pflegen sowie Informationen zu diesen Links abrufen. Diese symbolischen Links verweisen in der Regel auf Befehle, können allerdings auch auf JAR-Archive, man-Seiten und andere Dateien verweisen. Die Beispiele in diesem Kapitel zeigen Befehle und man-Seiten, gelten jedoch auch für andere Dateitypen.

Im Alternativen-Verzeichnis legt das Alternativen-System die Links zu möglichen Alternativen ab. Wenn ein neues Paket mit einer Alternative installiert wird, wird die neue Alternative in das System aufgenommen. Die Entscheidung, ob die Alternative des neuen Pakets als Standard festgelegt werden soll, ist abhängig von der Priorität des Pakets und vom ausgewählten Modus. Pakete mit einer höheren Version haben auch eine höhere Priorität. Das Alternativen-System bietet zwei Modi:

  • Automatischer Modus.  In diesem Modus sorgt das Alternativen-System dafür, dass die Links in der Gruppe auf die geeigneten Alternativen mit der höchsten Priorität für die Gruppe verweisen.

  • Manueller Modus.  In diesem Modus nimmt das Alternativen-System keine Änderungen an den Einstellungen des Systemadministrators vor.

Für den Befehl java gilt beispielsweise die folgende Link-Hierarchie im Alternativen-System:

Beispiel 22.1: Alternativen-System für den Befehl java
/usr/bin/java 1
 -> /etc/alternatives/java 2
     -> /usr/lib64/jvm/jre-10-openjdk/bin/java 3

1

Generischer Name.

2

Symbolischer Link im Alternativen-Verzeichnis.

3

Eine der Alternativen.

22.2 Einsatzbereiche

Standardmäßig wird das Skript update-alternatives aus einem RPM-Paket heraus aufgerufen. Wenn ein Paket installiert oder entfernt wird, bearbeitet das Skript alle zugehörigen symbolischen Links. Sie können das Skript jedoch auch manuell über die Befehlszeile ausführen und so:

  • die aktuellen Alternativen für einen generischen Namen abrufen.

  • die Standardeinstellungen für eine Alternative ändern.

  • eine Gruppe zusammengehöriger Dateien für eine Alternative erstellen.

22.3 Überblick über Alternativen

Die Namen aller konfigurierten Alternativen erhalten Sie mit:

> ls /var/lib/alternatives

Einen Überblick über alle konfigurierten Alternativen und deren Werte erhalten Sie mit

> sudo update-alternatives --get-selections
asadmin                        auto     /usr/bin/asadmin-2.7
awk                            auto     /usr/bin/gawk
chardetect                     auto     /usr/bin/chardetect-3.6
dbus-launch                    auto     /usr/bin/dbus-launch.x11
default-displaymanager         auto     /usr/lib/X11/displaymanagers/gdm
[...]

22.4 Anzeigen von Details zu spezifischen Alternativen

Am einfachsten überprüfen Sie die Alternativen, wenn Sie den symbolischen Links des Befehls folgen. Um beispielsweise herauszufinden, worauf sich der Befehl java bezieht, verwenden Sie den folgenden Befehl:

> readlink --canonicalize /usr/bin/java
/usr/lib64/jvm/jre-10-openjdk/bin/java

Falls jeweils derselbe Pfad angezeigt wird (in diesem Beispiel /usr/bin/java), stehen keine Alternativen für diesen Befehl zur Auswahl.

Mit der Option --display rufen Sie sämtliche Alternativen (mit Slaves) ab:

> sudo update-alternatives --display java
java - auto mode
  link best version is /usr/lib64/jvm/jre-1.8.0-openjdk/bin/java
  link currently points to /usr/lib64/jvm/jre-1.8.0-openjdk/bin/java
  link java is /usr/bin/java
  slave java.1.gz is /usr/share/man/man1/java.1.gz
  slave jre is /usr/lib64/jvm/jre
  slave jre_exports is /usr/lib64/jvm-exports/jre
  slave keytool is /usr/bin/keytool
  slave keytool.1.gz is /usr/share/man/man1/keytool.1.gz
  slave orbd is /usr/bin/orbd
  slave orbd.1.gz is /usr/share/man/man1/orbd.1.gz
[...]

22.5 Festlegen der Standardversion von Alternativen

Standardmäßig verweisen die Befehle unter /usr/bin auf das Alternativen-Verzeichnis mit der höchsten Priorität. Der Befehl java gibt beispielsweise standardmäßig die folgende Versionsnummer zurück:

> java -version
openjdk version "10.0.1" 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-suse-lp150.1.11-x8664)
OpenJDK 64-Bit Server VM (build 10.0.1+10-suse-lp150.1.11-x8664, mixed mode)

Ändern Sie die Standardeinstellung, sodass der Befehl java auf eine frühere Version verweist, mit dem folgenden Befehl:

> sudo update-alternatives --config java
root's password:
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                       Priority   Status
------------------------------------------------------------
* 0            /usr/lib64/jvm/jre-10-openjdk/bin/java      2005      auto mode
  1            /usr/lib64/jvm/jre-1.8.0-openjdk/bin/java   1805      manual mode
  2            /usr/lib64/jvm/jre-10-openjdk/bin/java      2005      manual mode
  3            /usr/lib64/jvm/jre-11-openjdk/bin/java      0         manual mode

Press <enter> to keep the current choice[*], or type selection number:

Die genaue Java-Versionsnummer ist dabei abhängig von Ihrem System und von den installierten Versionen. Wenn Sie 1 ausgewählt haben, zeigt java die folgende Versionsnummer an:

> java -version
java version "1.8.0_171"
OpenJDK Runtime Environment (IcedTea 3.8.0) (build 1.8.0_171-b11 suse-lp150.2.3.1-x86_64)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)

Beachten Sie auch die folgenden Punkte:

  • Wenn Sie im manuellen Modus arbeiten und eine andere Java-Version installieren, behält das Alternativen-System sowohl die Links als auch den generischen Namen unverändert bei.

  • Wenn Sie im automatischen Modus arbeiten und eine andere Java-Version installieren, ändert das Alternativen-System den Java-Master-Link und alle Slave-Links (siehe Abschnitt 22.4, „Anzeigen von Details zu spezifischen Alternativen“). Prüfen Sie die Master-Slave-Beziehungen mit dem folgenden Befehl:

    > sudo update-alternatives --display java

22.6 Installieren von benutzerdefinierten Alternativen

In diesem Abschnitt erfahren Sie, wie Sie benutzerdefinierte Alternativen in einem System einrichten.

Warnung
Warnung: Keine benutzerdefinierten Alternativen für python3

Installieren Sie keine benutzerdefinierten Alternativen für python3. /usr/bin/python3 hat keine Update-Alternativen und verweist immer auf bestimmte getestete Versionen. Das Erstellen einer benutzerdefinierten python3-Alternative, die auf eine andere Version verweist – z. B. python 3.11 – beschädigt abhängige Systemwerkzeuge.

Für das Beispiel gelten die folgenden Annahmen:

  • Es gibt zwei Skripte – foo-2 und foo-3 – mit ähnlicher Funktionalität.

  • Die Skripte sind im Verzeichnis /usr/local/bin gespeichert, sodass keine Konflikte mit den Systemwerkzeugen unter /usr/bin entstehen.

  • Der Master-Link foo verweist entweder auf foo-2 oder auf foo-3.

So richten Sie Alternativen im System ein:

  1. Kopieren Sie die Skripte in das Verzeichnis /usr/local/bin.

  2. Machen Sie die Skripte ausführbar:

    > sudo chmod +x /usr/local/bin/foo-{2,3}
  3. Führen Sie update-alternatives für beide Skripte aus:

    > sudo update-alternatives --install \
       /usr/local/bin/foo 1\
       foo 2\
       /usr/local/bin/foo-2 3\
       200 4
    > sudo update-alternatives --install \
       /usr/local/bin/foo 1\
       foo 2\
       /usr/local/bin/foo-3 3\
       300 4

    Die Optionen nach --install bedeuten:

    1

    Generischer Name. Zur Bedeutung: Dies ist in der Regel der Skriptname ohne Versionsnummern.

    2

    Name des Master-Links. Muss identisch sein.

    3

    Der Pfad zu den ursprünglichen Skripten in /usr/local/bin.

    4

    Die Priorität. foo-2 erhält eine niedrigere Priorität als foo-3. Die Prioritäten sollten nach Möglichkeit deutlich unterschiedliche Zahlen erhalten. Beispiel: Priorität 200 für foo-2 und 300 für foo-3.

  4. Prüfen Sie den Master-Link:

    > sudo update-alternatives --display foo
    foo - auto mode
      link best version is /usr/local/bin/foo-3
      link currently points to /usr/local/bin/foo-3
      link foo is /usr/local/bin/foo
    /usr/local/bin/foo-2 - priority 200
    /usr/local/bin/foo-3 - priority 300

Sobald Sie die angegebenen Schritte erledigt haben, können Sie den Master-Link /usr/local/bin/foo verwenden.

Bei Bedarf können Sie weitere Alternativen installieren. Mit dem folgenden Befehl entfernen Sie eine Alternative:

> sudo update-alternatives --remove foo /usr/local/bin/foo-2

Sobald dieses Skript entfernt wurde, sieht das Alternativen-System für die foo-Gruppe wie folgt aus:

> sudo update-alternatives --display foo
foo - auto mode
  link best version is /usr/local/bin/foo-3
  link currently points to /usr/local/bin/foo-3
  link foo is /usr/local/bin/foo
/usr/local/bin/foo-3 - priority 300

22.7 Definieren von abhängigen Alternativen

Wenn Sie mit Alternativen arbeiten, reicht das Skript allein nicht aus. Die meisten Befehle sind nicht eigenständig, sondern umfassen zusätzliche Dateien wie Erweiterungen, Konfigurationen oder man-Seiten. Mit Slave-Alternativen erstellen Sie Alternativen, die von einem Master-Link abhängig sind.

Angenommen, das Beispiel in Abschnitt 22.6, „Installieren von benutzerdefinierten Alternativen“ soll mit man-Seiten und Konfigurationsdateien erweitert werden:

  • Zwei Manpages – foo-2.1.gz und foo-3.1.gz –, die im Verzeichnis /usr/local/man/man1 gespeichert sind.

  • Zwei Konfigurationsdateien – foo-2.conf und foo-3.conf –, die in /etc gespeichert sind.

So nehmen Sie die zusätzlichen Dateien in Ihre Alternativen auf:

  1. Kopieren Sie die Konfigurationsdateien in /etc:

    > sudo cp foo-{2,3}.conf /etc
  2. Kopieren Sie die man-Seiten in das Verzeichnis /usr/local/man/man1:

    > sudo cp foo-{2,3}.1.gz /usr/local/man/man1/
  3. Tragen Sie die Slave-Links mit der Option --slave in die Hauptskripte ein:

    > sudo update-alternatives --install \
       /usr/local/bin/foo foo /usr/local/bin/foo-2 200 \
       --slave /usr/local/man/man1/foo.1.gz \
       foo.1.gz \
       /usr/local/man/man1/foo-2.1.gz \
       --slave /etc/foo.conf \
       foo.conf \
       /etc/foo-2.conf
    > sudo update-alternatives --install \
       /usr/local/bin/foo foo /usr/local/bin/foo-3 300 \
       --slave /usr/local/man/man1/foo.1.gz \
       foo.1.gz \
       /usr/local/man/man1/foo-3.1.gz \
       --slave /etc/foo.conf \
       foo.conf \
       /etc/foo-3.conf
  4. Prüfen Sie den Master-Link:

    foo - auto mode
      link best version is /usr/local/bin/foo-3
      link currently points to /usr/local/bin/foo-3
      link foo is /usr/local/bin/foo
      slave foo.1.gz is /usr/local/man/man1/foo.1.gz
      slave foo.conf is /etc/foo.conf
    /usr/local/bin/foo-2 - priority 200
      slave foo.1.gz: /usr/local/man/man1/foo-2.1.gz
      slave foo.conf: /etc/foo-2.conf
    /usr/local/bin/foo-3 - priority 300
      slave foo.1.gz: /usr/local/man/man1/foo-3.1.gz
      slave foo.conf: /etc/foo-3.conf

Wenn Sie die Links mit update-alternatives --config foo in foo-2ändern, werden auch alle Slave-Links geändert.