13.1.4 Risoluzione automatica delle dipendenze - yum
Il problema che affligge il sistema dei pacchetti è quello delle dipendenze: l’installazione di un
pacchetto può richiedere che sul sistema sia già installalto un altro pacchetto che a sua volta
può richiedere che sia già installato un altro pacchetto e così via. Questo meccanismo può
arrivare a generare una catena di dipendenze piuttosto lunga e difficile da gestire
manualmente. Per effettuare la verifica e l’installazione automatica dei pacchetti necessari per
l’utilizzo di un determinato software, sarebbe auspicabile avere a disposizione un programma
che si preoccupi di tutto ciò.
Uno dei meccanismi più utilizzati per la gestione automatica dei pacchetti rpm è yum
(Yellowdog
Updater, Modified)
(man page yum(8)). Si tratta di un insieme di script (scritti in liguaggio python) che, dato il
nome di un pacchetto rpm, permettono di effettuarne l’installazione automatica, risolvendo
tutte le eventuali dipendenze da altri pacchetti (tutti i pacchetti da cui esso dipende vengono
reperiti ed installati sul sistema).
____________________________________________________________________
Comando: yum
Path: /usr/bin/yum
SINTASSI
# yum [option] [command] [package ...]
DESCRIZIONE
-
option indica la modalità di funzionamento di yum. Può assumere i seguenti valori:
-
-h | --help
visualizza un aiuto sommario di yum;
-
-y indica di assumere “sì” come risposta a qualsiasi eventuale richiesta;
-
-c config_file
specifica il file di configurazione (supporta sia i percorsi locali che
http e ftp);
-
-d value
imposta il livello di verbosità di debug (da 0, meno verboso, a 10,
più verboso);
-
-e value
imposta il livello di verbosità di errore (da 0, meno verboso, a 10,
più verboso);
-
-t indica a yum di essere tollerante nei confronti degli errori relativi alla
riga di comando;
-
-R minutes
indica il numero massimo di minuti che yum attenderà nell’esecuzione
di un comando;
-
-C indica a yum di eseguire le operazioni considerando soltanto la cache;
-
--version
visualizza la versione di yum;
-
--installroot=rootdir
specifica il path (rootdir) da utilizzare come root per l’installazione
dei pacchetti (default /);
-
--enablerepo=repoid
abilita uno specifico repository (repoid) che risulta disabilitato dal
file di configurazione;
-
--disablerepo=repoid
disabilita uno specifico repository (repoid) che risulta abilitato dal
file di configurazione;
-
--obsoletes
(solo per update) abilita la logica di funzionamento obsoleta di yum;
-
--rss-filename=filename
redirige l’output per il comando generate-rss nel file filename;
-
--exclude=package
indica a yum di escludere la gestione del/i pacchetto/i package;
-
command indica l’operazione da far compiere a yum. Può assumere i seguenti
valori:
-
install
indica di installare la versione più recente di uno o più pacchetti;
-
update indica di aggiornare il pacchetto (o i pacchetti) specificato. Se
non viene specificato nessun pacchetto, vengono aggiornati tutti i
pacchetti installati sul sistema;
-
check-update
indica di controllare se è disponibile un aggiornamento per ogni
pacchetto installato nel sistema;
-
upgrade
(deprecato) come update ma include anche i pacchetti obsoleti;
-
remove indica di rimuovere uno o più pacchetti installati sul sistema;
-
list indica di visualizzare un elenco dei pacchetti disponibili nei
repository. Può essere seguito da un’opzione
-
yum list installed [pkgs]
elenca i pacchetti installati sul sistema;
-
yum list available [pkgs]
elenca i pacchetti disponibili nei repository;
-
yum list updates [pkgs]
elenca i pacchetti di cui sono disponibili degli aggiornamenti
nei repository;
-
yum list extras [pkgs]
elenca i pacchetti installati sul sistema che non sono
disponibili in nessun repository;
-
yum list obsoletes [pkgs]
elenca i pacchetti installati che risultano obsoleti;
-
provides
indica di elencare i pacchetti che forniscono determinate caratteristiche o
contengono certi file;
-
search indica di elencare i pacchetti che contengono una determinata
stringa nella descrizione, nelle caratteristiche o nel nome del
pacchetto;
-
info indica di elencare le informazioni relative ai pacchetti disponibili;
-
clean indica di ripulire la cache di yum. Può essere seguito da un’opzione
-
yum clean packages
elimina i pacchetti dalla cache (la cache non viene cancellata
automaticamente dopo il reperimento dei pacchetti);
-
yum clean headers
elimina gli header - i file per mezzo dei quali yum determina
la disponibilità dei pacchetti nei repository - dalla cache (la
prossima volta che viene avviato, yum scaricherà nuovamente
tutti gli header);
-
yum clean all
elimina dalla cache i pacchetti e gli header;
-
generate-rss
indica di creare un file rss per tenere traccia delle installazioni/aggiornamenti
dei vari pacchetti;
____________________________________________________________________
Un repository è un albero di directory contenente un insieme di file *.rpm opportunamente
preparato per essere acceduto attraverso yum, per poter così fornire i pacchetti a chi ne faccia
richiesta.
Un file *.rpm racchiude, oltre all’insieme dei file che costituiscono il pacchetto software,
una firma (signature) ed un header contenente l’elenco dei file da cui è composto il
pacchetto, la data di realizzazione dello stesso, la sua versione, la sua descrizione,
le sue caratterisitche, l’elenco dei pacchetti richiesti per il suo funzionamento (le
dipendenze), ... yum ottiene l’header dal repository (che contiene le informazioni relative ai
pacchetti da esso reperibili) e quindi utilizza le informazioni in esso contenute per
verificare quali sono gli eventuali pacchetti disponibili nel repository così da poterli
installare o aggiornare. Quindi utilizza rpm per installare o aggiornare i pacchetti sul
sistema.
Un repository quindi, oltre ai file *.rpm, contiene degli appositi file memorizzati nella
directory repodata che i client che si collegano scaricano memorizzandoli in una propria cache
(in genere nella directory /var/cache/yum), in modo tale da poter in seguito effettuare più
velocemente i controlli relativi ai pacchetti disponibili.
Per il proprio funzionamento yum si basa sui file di configurazione /etc/yum.conf (man
page yum.conf(5)) e *.repo eventualmente contenuti nelle directory /etc/yum.repos.d e
/etc/yum/repos.d. Questi sono dei file di testo che possono contenere varie sezioni.
Ogni sezione è identificata da un nome univoco racchiuso tra parentesi quadre (es.
[pippo]), il repositoryid, che ne determina l’inizio, mentre la fine è determinata
dall’inizio della sezione successiva. Per ogni sezione possono essere specificate delle
direttive.
La sezione main è una sezione particolare (ne può esistere soltanto una) che contiene le
direttive globali, che possono essere le seguenti
-
cachedir=cache_path
specifica il percorso in cui vengono copiati i pacchetti ottenuti;
-
reposdir=repos_path
specifica un elenco di directory nelle quali yum cerca i file di configurazione
*.repo (per default vengono cercati nelle directory /etc/yum.repos.d e
/etc/yum/repos.d);
-
debuglevel=value
indica il livello di verbosità del debug da 0 a 10 (per default level è 2);
-
errorlevel=value
indica il livello di verbosità degli errori da 0 a 10 (per default value è 2);
-
logfile=logfile_path
specifica il percorso in cui viene memorizzato il file di log;
-
gpgcheck=value
indica se yum deve effettuare (1) o meno (0) la verifica delle firme dei pacchetti
con GPG (per default value è 0);
-
assumeyes=value
indica se yum deve richiedere (1) o meno (0) all’utente le conferme per le varie
operazioni critiche (per default value è 0);
-
alwaysprompt=value
indica se yum deve richiedere (1) o meno (0) all’utente le conferme per la
rimozione di pacchetti o per l’installazione dei pacchetti dai quali dipende quello
richiesto (per default è 1);
-
tolerant=value
indica se yum deve essere (1) o meno (0) tollerante nei confronti degli errori
relativi ai pacchetti (per default value è 0);
-
exclude=pkgs
indica di escludere da aggiornamenti o installazioni i pacchetti elencati come
pkgs (un elenco di nomi di file separati da spazi);
-
exactarch=value
indica a yum di considerare (1) o meno (0) per l’aggiornamento soltanto i
pacchetti per la stessa identica piattaforma di quelli installati (es. i386, i686,
...);
-
installonlypkgs=pkgs
specifica l’elenco dei soli pacchetti da installare, ma da non aggiornare (il kernel
ricade in questa categoria);
-
kernelpkgnames=pkgs
specifica l’elenco dei pacchetti che costituiscono il kernel;
-
showdupesfromrepos=value
indica se devono essere visualizzati tutti i pacchetti con lo stesso nome presenti
nei vari repository (1) o soltanto quelli più recenti (0). Il default è 0;
-
obsoletes
(solo per update) indica a yum di applicare la logica di elaborazione obsoleta;
-
overwrite_groups=value
indica a yum quale gruppo utilizzare per i pacchetti da considerare nel caso in cui
essi siano presenti in più repository: 1 indica di considerare il gruppo del’ultimo
repository in cui il pacchetto è presente, mentre 0 indica di effettuare un merge
tra i gruppi di tutti i repository.
-
installroot=rootdir
specifica la root directory nella quale installare i pacchetti;
-
rss-filename=filename
specifica il file nel quale inserire l’output del comando generate-rss;
-
distroverpkg=pkg
specifica il nome del pacchetto da utilizzare per determinare la versione della
distribuzione (un pacchetto installato). Per default è redhat-release;
-
diskspacecheck=value
indica di abilitare (1) o meno (0) il controllo dello spazio sufficiente sul disco
prima di installare i pacchetti (per default value è 1);
-
tsflags=flags
specifica l’elenco dei flag (separato da virgole o da spazi) da passare a rpm (es.
noscripts, notriggers, nodocs, test);
-
recent=days
specifica il numero di giorni entro i quali considerare recenti i pacchetti (usato
per i comandi list recent e generate-rss). Per default è 7;
-
retries=times
specifica il numero di tentativi da effettuare per reperire un pacchetto prima di
dare errore (per default times è 6 - 0 indica di riprovare indefinitamente);
-
keepalive=value
indica se utilizzare il keepalive HTTP (1) o meno (0), che potrebbe migliorare
le prestazioni nell’utilizzo di una sola connessione per lo scarico di file da più
repository. Per default è 1 ;
-
throttle=bandwidth
specifica la banda da utilizzare per lo scarico dei pacchetti. La banda può essere
espressa in byte/s oppure con un valore seguito dal suffisso ‘k’ (kilo), ‘M’ (mega)
o ‘G’ (giga). Eventualmente può essere espressa con un valore numerico seguito
da ‘%’, come percentuale della banda massima. 0 indica l’utilizzo della banda
massima (default);
-
bandwidth=max_bandwidth
specifica la banda massima in byte/s;
-
commands=cmd_list
specifica un elenco di comandi di default nel caso in cui sulla riga di comando di
yum non ne venga specificato alcuno (non sono accettate le opzioni -y, -e, -d);
-
proxy=svr
specifica il proxy server da utilizzare per le connessioni;
-
proxy_username=usr
specifica l’utente di accesso al proxy server;
-
proxy_password=pwd
specifica la password per l’accesso al proxy server;
Ognuna delle altre sezioni si riferisce ad uno specifico repositoryid (un identificatore
univoco per ogni repository), e le possibili direttive sono le seguenti (le impostazioni non
specificate per uno specifico repositoryid vengono ereditate da quelle della sezione
main)
-
name=descr
specifica la descrizione del repository;
-
baseurl=url
specifica l’URL in cui è presente la directory repodata (può essere http://,
ftp:// o file://). Possono essere specificati più di un URL separati tra loro da
un LF o CR + LF (non si deve inserire più di una direttiva baseurl);
-
mirrorlist=file
specifica il file in cui è indicato l’elenco degli URL da considerare come baseurl.
Da usare al posto di baseurl;
-
enabled=value
indica se il repository deve essere considerato (1) o meno (0);
-
gpgcheck=value
indica a yum di effettuare (1) o meno (0) il controllo della firma gpg relativa al
pacchetto acquisito dal repository;
-
gpgkey=url
specifica il path del file relativo alla chiave GPG (ASCII-armoured) del
repository;
-
exclude=pkgs
v. exclude della sezione main ma viene considerato solo per il repository corrente;
-
includepkgs=pkgs
specifica l’elenco dei soli pacchetti da prendere in considerazione nel repository;
-
enablegroups=value
indica di permettere (1) o meno (0) la gruppizzazione dei pacchetti. Per default
è 1;
-
failovermethod=value
indica la politica di selezione dell’URL relativo al repository: priority specifica di
iniziare dal primo URL andando eventualmente in successione sugli altri quando
viene riscontrato un errore, mentre roundrobin (default) indica di selezionare
l’URL a caso tra quelli impostati;
-
keepalive=value
v. keepalive della sezione main ma viene considerato solo per il repository
corrente;
-
retries=value
v. retries della sezione main ma viene considerato solo per il repository corrente;
-
throttle=value
v. throttle della sezione main ma viene considerato solo per il repository
corrente;
-
bandwidth=value
v. bandwidth della sezione main ma viene considerato solo per il repository
corrente;
-
proxy=url
specifica l’URL del proxy server per il repository corrente. Se url è impostato a
_none_, non viene considerata alcuna impostazione del proxy per il repository
corrente;
-
proxy_username=usr
specifica il nome dell’utente per il collegamento al proxy per il repository
corrente;
-
proxy_password=pwd
specifica la password per il collegamento al proxy per il repository corrente;
I file di configurazione di yum possono contenere anche dei riferimenti alle seguenti variabili
di ambiente (all’interno delle varie direttive), come
-
$releasever
che rappresenta la versione del pacchetto elencato in distroverpkg;
-
$arch che rappresenta l’architettura del sistema locale;
-
$basearch
che rappresenta l’architettura di base del sistema locale;
-
$YUM0 ... $YUM9
che sono variabili di ambiente impostabili dall’utente;
Un esempio del contenuto del file /etc/yum.conf è riportato di seguito
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=fedora-release
gpgcheck=1
tolerant=1
exactarch=1
[core]
name=Fedora Linux $releasever - $basearch - core
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/core
[updates]
name=Fedora Linux $releasever - $basearch - updates
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/updates
[freshrpms]
name=Fedora Linux $releasever - $basearch - freshrpms
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms
Il primo avvio di yum può richiedere un po’ di tempo, poiché esso si connette
ai vari repository (secondo quanto specificato nel file di configurazione) e scarica
sia il file header.info che gli header relativi ai pacchetti installati sul sistema.
|
[da completare ...]
Ad esempio, il comando
yum list
visualizza un elenco dei pacchetti disponibili nei vari repository ed il comando
yum install package_name
installa il pacchetto (o i pacchetti) specificato da package_name, mentre il comando
yum remove package_name
rimuove il pacchetto (o i pacchetti) specificato da package_name.
Il comando
yum info package_name
visualizza le informazioni di base relative al pacchetto package_name, mentre il
comando
yum search word
ricerca tra i pacchetti quelli che hanno a che fare con word.
Il comando
yum check-update
oppure
yum list updates
visualizza se sono disponibili pacchetti aggiornati ed il comando
yum update
effettua l’aggiornamento di tutti i pacchetti installati sul sistema con le versioni disponibili
più recenti.
È possibile realizzare un proprio repository per mezzo del comando createrepo (man
page createrepo(8)) che creerà la directory repodata e gli appositi file filelists.xml.gz,
other.xml.gz, primary.xml.gz e repomd.xml.
____________________________________________________________________
Comando: createrepo
Path: /usr/bin/createrepo
SINTASSI
# createrepo [option] directory
DESCRIZIONE
-
option indica la modalità di funzionamento di createrepo. Può assumere i seguenti
valori:
-
-u url specifica l’URL di base per i files;
-
-x files
specifica i file da escludere;
-
-q indica di fornire un output più silente;
-
-g file specifica un file XML dal quale reperire le informazioni sui gruppi;
-
-v indica di fornire un output più verboso;
-
-s chsum
specifica il tipo di chesksum da utilizzare: md5 o sha (default);
-
-p indica di ??;
-
-V visualizza la versione di createrepo;
-
-h visualizza un aiuto sommario di createrepo;
-
directory specifica il path che contiene i file *.rpm;
_________________________________
[da completare ...]