update-alternatives – unterschiedliche Programmversionen zu Linkgruppen hinzufügen

Hin und wieder ist es gewünscht (oder erforderlich) mehrere Programmversionen einer Anwendung installiert zu haben. Kommen sich die Versionen nicht durch irgendwelche korrelierenden Datenbank-Einträge oder gleichnamige Ordner in die Quere, stellt eine parallele Nutzung auch kein Problem dar wenn sie über den vollen Programmpfad aufgerufen werden. Noch einfacher ist es, sich einer Anwendung zu bedienen die sich ‚update-alternatives‘ nennt.

$PATH-Variable

Bevor es mit der Vorstellung weitergeht, möchte ich eine weitere Möglichkeit vorweg nehmen eine Anwendung in der Shell verfügbar zu machen, ohne den kompletten Pfad einzugeben:

export PATH=$PATH:/Pfad/zum/Programm_mit_dem_Programm

Der ‚export‘-Befehl würde in diesem Beispiel den Pfad /Pfad/zum/Programm_mit_dem_Programm zur sogenannten PATH-Variable hinzufügen. Mit dieser Methode könnte man, sofern sich die Namen der unterschiedlichen Programmversionen unterscheiden, ebenfalls Programme direkt aufrufbar machen.
Kurze Erklärung was die PATH-Variable macht: Sie ist eine standardmäßig gesetzte Umgebungsvariable, in der mehrere Ordner angegeben sind, die bei einem Befehlsaufruf durchsucht werden. Befindet sich innerhalb dieser durchsuchten Ordner eine ausführbare Datei mit dem eingegebenen Namen, wird dieser ausgeführt.
Diese Variante zu wählen birgt allerdings die Gefahr, dass bei mehreren gleichnamigen Elementen, diejenige zuerst aufgerufen wird, die auch zuerst gefunden wurde. Somit verliert man schnell die Kontrolle.

update-alternatives

Eine Alternative stellt ‚update-alternatives‘ dar, standardmäßig in der Distribution installiert und direkt bereit zum Einsatz. Innerhalb dieser Anwendung lassen sich mehrere Programmpfade zu einer Gruppe zusammenfassen. Möchte man nachschauen, ob es bereits einen Eintrag für ein bestimmtes Programm gibt, lässt sich dies folgendermaßen bewerkstelligen:

sudo update-alternatives --config svn

Sollte die Meldung lauten …

sudo update-alternatives: error: no alternatives for svn

… existiert noch kein entsprechender Eintrag für Subversion.
Eine Auflistung aller Link Gruppen lässt sich folgendermaßen abfragen:

sudo update-alternatives --get-selections

Sollte für das gewünschte Programm noch keine Link-Gruppe erstellt worden sein, können wir dies nachholen …

sudo update-alternatives --install /usr/bin/svn_link_group subversion /usr/bin/svn 20

… und eine neue Link-Gruppe mit dem Namen subversion erstellen. Dieser Gruppe wurde der bereits vorhandene Eintrag einer bestehenden Installation /usr/bin/svn hinzufügefügt. Außerdem ist der neue symbolische Link /usr/bin/svn_link_group für diese Link-Gruppe subversion erstellt worden, über die zukünftig sämtliche Einträge von update-alternatives referenziert werden. svn_link_group wäre hinterher dann auch der Befehl, über den wir auf unsere gesetzten Einträge zugreifen. Die Zahl 50 am Ende der Zeile ist die zugewiesene Priorität für diesen Eintrag kann beliebig gewählt werden. Soll nämlich diese Link-Gruppe automatisch einen Eintrag auswählen, gewinnt der Eintrag mit der höchsten Priorität.
Soll nun ein weiterer Eintrag zu dieser Gruppe mit dem Pfad /opt/subversion/svn_alternative_version und einer höheren Priorität hinzugefügt werden, sieht der Befehl folgendermaßen aus:

sudo update-alternatives --install /usr/bin/svn_link_group subversion /opt/subversion/svn_version_1_14_2 100

Die hinzugefügten Einträgen wählen wir aus mit:

sudo update-alternatives --config subversion

Als Eingabe wird eine der Zahlen erwartet, die sich unterhalb der Spalte Auswahl befindet.
Die 0 setzt den automatischen Modus und wie weiter oben bereits erwähnt, würde dann automatisch der Eintrag mit der höheren Priorität gewählt werden. Ansonsten lässt sich für den manuellen Modus auch ein beliebiger Eintrag auswählen.
Eine weitere Abfrage mit Hilfe von …

sudo update-alternatives --get-selections

… offenbart, dass nicht nur der neu hinzugefügte Pfad, sondern auch noch der manuelle Modus übernommen wurde.

Und so lassen sich beliebig viele weitere Pfade zu den Link-Gruppen hinzufügen.
Nun ließe sich über den ursprünglich gesetzten Namen der Link-Gruppe arbeiten:

svn_link_group --version

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen