EuroLinux
Alternatives

Alternatives – wygodny system zarządzania dowiązaniami symbolicznymi

DevOps

Alternatives pomaga zarządzać dowiązaniami symbolicznymi wskazującymi na domyślne programy w systemie Linux. W artykule przyjrzymy się zasadzie działania Alternatives i w przykładach pokażemy sposób jego obsługi.

W systemie możemy mieć zainstalowanych kilka wersji jednego programu bądź różne programy dostarczające tę samą funkcjonalność (przykładowo kilka edytorów tekstu). Administrator staje wówczas przed problemem zarządzania domyślnymi wyborami w systemie. Linki symboliczne są wyśmienitym rozwiązaniem, jakie dostarcza nam GNU/Linux, pozwalającym zaradzić temu problemowi. W przypadku dużych systemów i potrzeby zarządzania wielką ilością dowiązań symbolicznych, skłonność do popełniania błędów wzrasta wykładniczo. W rodzinie systemów Enterprise przychodzi nam z pomocą Alternatives – reimplementacja dobrze znanego użytkownikom Debiana narzędzia update-alternatives.

Zasada działania Alternatives

Alternatives zarządza domyślnymi wersjami programów poprzez sieć symlinków. Program, który dodamy do systemu, wskazuje na link w katalogu /etc/alternatives/, który następnie wskazuje na pełną ścieżkę wersji domyślnej. Najlepiej będzie to zobrazować na przykładzie:

[cmd@thinkpad-t430 vagrant]$ which python
/usr/bin/python
[cmd@thinkpad-t430 vagrant]$ ls -l /usr/bin/python
lrwxrwxrwx. 1 root root 24 07-22 16:06 /usr/bin/python -> /etc/alternatives/python
[cmd@thinkpad-t430 vagrant]$ ls -l /etc/alternatives/python
lrwxrwxrwx. 1 root root 16 07-22 16:06 /etc/alternatives/python -> /usr/bin/python2

Po zmianie domyślnej aplikacji dostarczającej daną funkcjonalność, system alternatives podmieni link w katalogu /etc/alternatives tak, aby wskazywał na nowo zadaną ścieżkę.

Listę ustawionych przy użyciu alternatives symlinków uzyskamy przy pomocy następującego polecenia:

[cmd@thinkpad-t430 ~]$ alternatives --list
libnssckbi.so.x86_64    auto    /usr/lib64/pkcs11/p11-kit-trust.so
ld  auto    /usr/bin/ld.bfd
mkisofs auto    /usr/bin/genisoimage
java    auto    /usr/java/jdk-12.0.1/bin/java
jre_openjdk auto
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre
jre_1.8.0   auto
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre
jre_1.8.0_openjdk   auto
/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
xinputrc    auto    /etc/X11/xinit/xinput.d/ibus.conf
print   auto    /usr/bin/lpr.cups
cifs-idmap-plugin   auto    /usr/lib64/cifs-utils/cifs_idmap_sss.so
libjavaplugin.so.x86_64 auto    /usr/lib64/IcedTeaPlugin.so
mta auto    /usr/sbin/sendmail.postfix
cdrecord    auto    /usr/bin/wodim
libwbclient.so.0.14-64  auto    /usr/lib64/samba/wbclient/libwbclient.so.0.14
jaxp_parser_impl    auto    /usr/share/java/xerces-j2.jar
jaxp_transform_impl auto    /usr/share/java/xalan-j2.jar
servlet auto    /usr/share/java/tomcat-servlet-3.0-api.jar
python  manual  /usr/bin/python2

Przełączenie domyślnego programu

Aby ustawić domyślny wybór dla programu, należy skorzystać z opcji alternatives --config NAZWA. Poniżej przykładowy wybór wersji drugiej interpretera Python jako domyślnej wersji w systemie:

[cmd@thinkpad-t430 ~]$ sudo alternatives --config python

Jest 2 programów dostarczających „python”.

  Wybór    Polecenie
-----------------------------------------------
 + 1           /usr/bin/python2
*  2           /usr/bin/python3

Proszę nacisnąć klawisz Enter, aby zachować bieżący wybór[+] lub podać numer wyboru: 1

Dodawanie nowych wpisów

W celu dodania (czy też bardziej poprawnie w nomenklaturze alternatives „zainstalowania”) nowego wpisu, powinniśmy skorzystać z następującej składni:

alternatives --install <dowiązanie> <nazwa> <ścieżka> <priorytet>

Gdzie:

  • dowiązanie – pełna ścieżka symlinka
  • nazwa – identyfikator w systemie alternatives
  • ścieżka – pełna ścieżka programu udostępniającego daną funkcjonalność
  • priorytet – liczba nadająca priorytet programowi ze ścieżki wykorzystywany w przypadku automatycznego zarządzania.

Dodatkowo można stworzyć grupy, które przy użyciu systemu master-slave będą zmieniały cały szereg symlinków.

Znów zobrazuję to za pomocą przykładu. Powiedzmy, że mamy w systemie zainstalowany interpreter języka Python i pip (menadżer zarządzania pakietami Pythona) w dwóch wersjach. Przy zmianie domyślnego wyboru z python2 na python3 chcemy, aby zmieniła się również wersja pip2 na pip3. Możemy osiągnąć to przy pomocy następujących komend:

[cmd@thinkpad-t430 vagrant]$ sudo alternatives --install /usr/bin/python
python /usr/bin/python2 666 --slave /usr/bin/pip pip /usr/bin/pip2
[cmd@thinkpad-t430 vagrant]$ sudo alternatives --install /usr/bin/python
python /usr/bin/python3 333 --slave /usr/bin/pip pip /home/cmd/.local/bin/pip3

Domyślną wersją będzie python2 oraz pip2 ze względu na wyższy priorytet:

[cmd@thinkpad-t430 vagrant]$ alternatives --display python
python — stan: automatycznie.
 dowiązanie obecnie wskazuje na /usr/bin/python2
/usr/bin/python2 - priorytet 666
 podrzędne pip: /usr/bin/pip2
/usr/bin/python3 - priorytet 333
 podrzędne pip: /home/cmd/.local/bin/pip3
Obecnie „najlepszą” wersją jest /usr/bin/python2.
[cmd@thinkpad-t430 vagrant]$ pip --version
pip 8.1.2 from /usr/lib/python2.7/site-packages (python 2.7)

Natomiast po przełączeniu na wersję python3 przy pomocy sudo alternatives --config python, możemy zobaczyć, że zmiana ta pociągnęła za sobą również zmianę domyślnego pip:

[cmd@thinkpad-t430 vagrant]$ sudo alternatives --config python 

Jest 2 programów dostarczających „python”.

  Wybór    Polecenie
-----------------------------------------------
*+ 1           /usr/bin/python2
   2           /usr/bin/python3

Proszę nacisnąć klawisz Enter, aby zachować bieżący wybór[+] lub podać numer wyboru: 2
[cmd@thinkpad-t430 vagrant]$ pip --version
pip 19.1.1 from /home/cmd/.local/lib/python3.6/site-packages/pip (python 3.6)

Podsumowanie

Program alternatives został przeportowany do systemów z rodziny Enterprise. Pomimo pełnej jego funkcjonalności nie jest zintegrowany z systemami operacyjnymi Enterprise w takim stopniu, w jakim znamy go z dystrybucji opartych na Debianie. Z tego też powodu jego konfiguracja w dużej mierze spoczywać będzie na barkach administratora. Ta początkowa niedogodność może jednak zaowocować sporym ułatwieniem pracy w dłuższej perspektywie.

Chcesz być na bieżąco? Obserwuj nasz profil w serwisie LinkedIn.

Zobacz artykuły o podobnej tematyce

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Fill out this field
Fill out this field
Proszę wprowadzić prawidłowy adres email.
You need to agree with the terms to proceed

Menu
+48 22 243 22 33
close slider