-->

Il sistema Debian 'alternatives', un modo elegante per impostare i valori predefiniti per il sistema.

Supponete che su un sistema siano installate molte applicazioni di uno stesso tipo, ad esempio tanti browser, tanti editor di testo o anche tante diverse versioni della macchina virtuale Java. Dal punto di vista dell’utente non ci sono problemi ad invocare l’applicazione desiderata, ma per il sistema potrebbe essere importante sapere quale browser o quale editor di testo avviare in caso di necessità, ad esempio durante l’esecuzione di uno script di installazione o configurazione.

Per l’autore dello script potrebbe essere estremamente scomodo dover inserire delle parti di codice per verificare la disponibilità sul sistema di un particolare editor, di un particolare browser o altre applicazioni da invocare. Per questo c’è il sistema delle debian-alternatives, un sistema che assegna un nome generico (genname) a ciascuna classe di applicazioni, in modo che con quel nome si possa avviare l’applicazione idonea.

Esempio pratico
Sul vostro sistema ci sono diversi editor di testo, ad esempio jed, vim, nano e pico. Uno script che dovesse avere bisogno di invocare un editor di testo, invece di invocarne esplicitamente uno attraverso il comando diretto, invocherebbe semplicemente il comando editor. Sarà poi compito di debian-alternatives avviare un editor effettivamente disponibile sul sistema, in particolare quello deciso da voi oppure quello cui è stata assegnata la maggiore priorità.

Quindi sul sistema potrete trovare un generico comando x-www-browser che avvia un browser nell’ambiente grafico, un generico javac che invoca il compilatore Java (ad esempio gcj, oppure quello della SUN, ecc.), e così via. Una cosa analoga avviene anche per le pagine di manuale, ovvero pagine di manuale generiche che fanno riferimento alla manpage dell’opportuna applicazione.
Vediamo ora più nel dettaglio come funzionano queste debian-alternatives.

Significato dei termini usati.
Genname: è il nome generico assegnato ad una classe di applicazioni, ed è il nome del file sul filesystem che verrà usato in luogo dell’applicazione particolare. Esempi: /usr/bin/editor, /usr/bin/x-www-browser, ecc.

Symlink: è il nome del link simbolico nella directory /etc/alternatives. Esempi: x-www-browser, editor, ecc.

/etc/alternatives: è la directory che contiene, salvo diversa impostazione, tutti i symlink delle applicazioni, vale a dire quei link simbolici che hanno come nome il nome generico del gruppo e che puntano all’applicazione predefinita del gruppo.

Alternativa: il nome di uno specifico file nel filesystem, che sarà acceduto/invocato attraverso un nome generico.

Link group: insieme di symlink correlati, che si vuole trattare in maniera coordinata.
Master link: il link all’interno di un link group che stabilisce come gli altri link ad esso collegati devono essere configurati.

Slave link: link subordinato ad un master link, e che viene modificato in caso di modifica del master link. Per intenderci, è quello che avviene con le man-pages.

Priorità: è un valore intero che serve a specificare quale applicazione di un gruppo deve essere quella di default, a meno di una ridefinizione manuale dell’utente. E’ anche il parametro che viene preso in considerazione quando si reimposta l’alternativa allo stato automatico.

Comandi ed esempi
Il comando principale con cui si interagisce col sistema delle alternative è update-alternatives, e va eseguito sempre con i privilegi di amministratore di sistema. Le opzioni più importanti sono le seguenti:
  • --display: mostra le impostazioni attuali di un’alternativa;
  • --list: mostra le possibili scelte per un’alternativa;
  • --config: configura un’alternativa;
  • --auto: reimposta lo stato automatico per un’alternativa, cioè la riassegna all’applicazione con priorità maggiore;
  • --install: installa una nuova alternativa all’interno di un gruppo. Se il gruppo non esiste, lo crea.
  • --remove: rimuove un’alternativa all’interno di un gruppo, con tutti i suoi slave;
  • --remove-all: rimuove un intero gruppo di alternative.
Esempio 1: opzione --list
update-alternatives --list x-www-browser
Output:
/usr/bin/iceweasel
/usr/bin/konqueror
/usr/bin/firefox-2.0
Questo vuol dire che per x-www-browser ci sono tre diverse alternative (Iceweasel, Konqueror e Firefox-2.0).

Esempio 2: opzione --display
update-alternatives --display x-www-browser
Output:
x-www-browser - lo status è auto.
il link attualmente punta a /usr/bin/konqueror
/usr/bin/iceweasel - priorità 70
slave x-www-browser.1.gz: /usr/share/man/man1/iceweasel.1.gz
/usr/bin/konqueror - priorità 100
slave x-www-browser.1.gz: /usr/share/man/man1/konqueror.1.gz
/usr/bin/firefox-2.0 - priorità 20
slave x-www-browser.1.gz: /usr/share/man/man1/firefox.1.gz
La `migliore' versione attualmente è /usr/bin/konqueror.
Questo significa che nel gruppo x-www-browser (browser nell’ambiente grafico) sono presenti tre distinte applicazioni: Konqueror, Iceweasel e Firefox-2.0. La dicitura status auto segnala che l’applicazione da associare a x-www-browser è scelta automaticamente in base alla priorità; essendo Konqueror l’applicazione cui è assegnata la priorità più alta, invocando il comando x-www-browser verrà avviato Konqueror.

Esempio 3: opzione --config
update-alternatives --config x-www-browser
Output:
Ci sono 3 alternative che forniscono `x-www-browser'.
Selezione Alternativa
-----------------------------------------------
1 /usr/bin/iceweasel
*+ 2 /usr/bin/konqueror
3 /usr/bin/firefox-2.0

Premi invio per mantenere il default[*], o inserisci il numero da selezionare:
Il carattere * indica la configurazione corrente, mentre il + indica l’applicazione a maggiore priorità. Inserendo 1, 2 o 3 sceglierete quale applicazione associare a x-www-browser; premendo semplicemente invio, invece, manterrete tutto inalterato.
Esempio 4: opzione --auto
update-alternatives --auto x-www-browser
Viene reimpostato per x-www-browser il link a priorità maggiore (Konqueror).

Esempio 5: opzione --install
update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/bin/opera 40 --slave /usr/share/man/man1/x-www-browser.1.gz x-www-browser.1.gz /usr/share/man/man1/opera.1.gz
Attenzione: il precedente comando va scritto su un’unica riga, senza andare a capo!
Analizziamo il comando pezzo per pezzo:
l’opzione --install serve per aggiungere un’applicazione ad un gruppo o, se il gruppo non esiste ancora, per crearlo.
La parte del master link include i seguenti frammenti:
  • /usr/bin/x-www-browser: è il file che rappresenta l’applicazione generica (genname)
  • x-www-browser: è il nome del gruppo, ovvero del symlink nella directory /etc/alternatives
  • /usr/bin/opera: è il file che rappresenta l’applicazione da associare al gruppo
  • 40: è la priorità da assegnare a questa applicazione
La parte dello slave link, che inizia con l’opzione --slave, include:
  • /usr/share/man/man1/x-www-browser.1.gz: il nome del file che rappresenta lo slave link (ovvero il genname dello slave)
  • x-www-browser.1.gz: il nome dello slave
  • /usr/share/man/man1/opera.1.gz: il file da associare a questo slave link
Le opzioni --remove e --remove-all sono banali, per cui vi invito a leggere la man-page del comando update-alternatives, in cui troverete ulteriori dettagli.

Capita che, dopo l'installazione o rimozione o aggiornamento del software, le alternatives si riconfigurino, sovrascrivendo la precedente configurazione.

Gli amanti del terminale possono usufruire di questo comando:
# update-alternatives --config [alternativa]
Chi invece non ha molta dimestichezza con la riga di comando può ricorrere a due software grafici: galternatives oppure kalternatives, rispettivamente per Gnome e per KDE.

Installazione.
Per installare, è sufficiente dare uno dei due comandi, in base a quale dei due programmi si vuole installare:
# apt-get install galternatives
# apt-get install kalternatives

Ora è possibile amministrare graficamente le alternatives, senza scervellarsi col terminale.
Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:
reeder

Nessun commento:

Posta un commento

Random Posts

I miei preferiti in Instagram

Archivio