Mehanizam update-alternatives

Debianovci su praktični ljudi. Ukoliko je nešto potrebno napraviti više od nekoliko puta, napisat će skriptu.  Ukoliko je ta skripta korisna i za druge, objavit će je. Ukoliko postoji više sličnih skripti, napravit će paket, i tako dalje.  U sličnom stilu su postupili i u osmišljavanju načina da na sustavu postoji više različitih programa koji obavljaju istu ili vrlo sličnu funkciju.

Da bi riješili problem postojanja više programa koji obavljaju istu funkciju, Debianovci su osmislili mehanizam "Alternatives". Pomoću nekoliko simboličkih linkova omogućava da na sustavu postoji više verzija programa koji obavljaju istu funkciju. Uzmimo, na primjer, zsh.

Ova popularna i moćna alternativa bashu ima dva kandidata:

# update-alternatives --list zsh
/bin/zsh-beta
/bin/zsh4

Malo više informacija možemo dobiti s opcijom --query:

# update-alternatives --query zsh
Link: zsh
Status: auto
Best: /bin/zsh4
Value: /bin/zsh4

Alternative: /bin/zsh-beta
Priority: 15
Slaves:
zsh-usrbin /bin/zsh-beta

Alternative: /bin/zsh4
Priority: 50
Slaves:
zsh-usrbin /bin/zsh4

Popularni editor vi u linuxu ima nekoliko kandidata, a ovdje imamo dva:

# update-alternatives --list vi
/usr/bin/nvi
/usr/bin/vim.basic

No, zanimljivija je činjenica da se alternative mogu napraviti i nad virtualnim paketima, te metanaredbama. U ovom slučaju, radi se o paketu/naredbi "editor".

# update-alternatives --list editor
/bin/ed
/bin/nano
/usr/bin/emacs23
/usr/bin/jmacs
/usr/bin/joe
/usr/bin/jpico
/usr/bin/jstar
/usr/bin/mcedit
/usr/bin/nvi
/usr/bin/rjoe
/usr/bin/vim.basic

Editor je u ovom slučaju posebna, meta-naredba, odnosno naredbu editor mogu u svojim skriptama i programima koristiti svi (developeri, administratori, vi...), a koji žele omogućiti korisnicima da i dalje koriste svoj omiljeni editor. Ona će uvijek pokazivati na neki drugi editor, pa će korisnici VI-ja dobiti otvoreni VI, a korisnici joe-a - otvoreni joe.

Dakle, naredba editor, ali i bilo koja druga alternativna naredba, je zapravo simbolički link na jedan poseban direktorij, /etc/alternatives:

# ls -l `which editor`
lrwxrwxrwx 1 root root 24 Aug  2  2006 /usr/bin/editor -> /etc/alternatives/editor

# ls -l /etc/alternatives/editor
lrwxrwxrwx 1 root root 12 Jan 27  2011 /etc/alternatives/editor -> /usr/bin/joe

Vidimo da je naredba /usr/bin/editor zapravo samo simbolički link na datoteku /etc/alternatives/editor. Tek tu se odvija prava akcija, jer je taj simbolički link povezan na pravu, konkretnu naredbu, u ovom slučaju je to /usr/bin/joe. Ukoliko promijenimo naš defaultni editor na nešto drugo, to će se reflektirati i na linkovima:

# ls -l /etc/alternatives/editor
lrwxrwxrwx 1 root root 18 Mar 25 16:00 /etc/alternatives/editor -> /usr/bin/vim.basic

Promjena defaultnog programa, u ovom slučaju editora, možemo napraviti preko opcije "--config":

# update-alternatives --config editor
There are 11 choices for the alternative editor (providing /usr/bin/editor).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/joe 70 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
3 /usr/bin/emacs23 0 manual mode
4 /usr/bin/jmacs 50 manual mode
5 /usr/bin/joe 70 manual mode
6 /usr/bin/jpico 50 manual mode
7 /usr/bin/jstar 50 manual mode
8 /usr/bin/mcedit 25 manual mode
9 /usr/bin/nvi 19 manual mode
10 /usr/bin/rjoe 25 manual mode
11 /usr/bin/vim.basic 30 manual mode

Press enter to keep the current choice[*], or type selection number: 11
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor
(editor) in manual mode.

U ovom slučaju mi smo odabrali broj, odnosno opciju 11.

Ukoliko ste primijetili stupac "Priority", možda ste se upitali čemu to zapravo služi. Prioritet se veže uz pojedini editor (točnije grupu linkova, link group), i određuje koji će editor postati defaultni, ali samo u automatskom načinu rada. U automatskom načinu rada se nalaze sve alternative koje su tek instalirane na sustav.

U grupi linkova postoje master i slave linkovi. Master je, da se i dalje poslužimo našim primjerom, link:

lrwxrwxrwx 1 root root 18 Feb  1  2011 /etc/alternatives/vi -> /usr/bin/vim.basic
lrwxrwxrwx 1 root root 28 Feb  1  2011 /etc/alternatives/vi.1.gz -> /usr/share/man/man1/vim.1.gz

Drugi link je "slave" link, a njih može biti nekoliko. Funkcija je očita, lakše je na ovaj način baratati pripadajućim datotekama (u primjeru je to man stranica), nego preusmjeravati nekoliko linkova (linkova za man stranice programa vi ima, zahvaljujući prijevodima, 14).

Osim automatskog, postoji i ručni način, koji omogućava administratoru potpunu kontrolu koji će se linkovi i u kojim uvjetima promijeniti.

Bazu alternativa, ukoliko vam ikada zatreba, možete pronaći u direktoriju /var/lib/dpkg/alternatives.

Sustav alternativa je za krajnjeg korisnika varljivo jednostavan. U suštini je on predviđen za developere, te se u tom kontekstu koristi uglavnom u instalacijskim skriptama postinst i drugima.

Naravno, svaki sistem-inženjer bi trebao biti upoznat s mehanizmom alternativa, kako bi ga u pravo vrijeme mogao moći koristiti. Priručnik naravno postoji i poziva se, kao i uvijek, s "man update-alternatives".

Kuharice: 
Kategorije: 
Vote: 
5
Vaša ocjena: Nema Average: 5 (2 votes)