I comandi Linux: i Package Management System | ALTRI capitoli | ||||
I Package Management System sono programmi ( package ) che installano e rimuovono package nel e dal sistema, che conservano le informazioni sui package esistenti, sui package installati, sui package da installare e che contattano alcuni server esterni per mantenere aggiornate le loro informazioni. Un Package Management System è il cuore di un sistema operativo GNU, che altro non è che un insieme di package. Ogni distribuzione Linux ha il suo ( o i suoi ) Package Management System. APT ( Advanced Packaging Tool ), è il Package Management System usato dai sistemi Debian e Debian-based, quali Ubuntu, Knoppix, Linspire, Mepis; RPM ( Red Hat Package Manager ) e YUM ( Yellowdog Update Manager ), sono i Package Management System usati dai sistemi Fedora, Red Hat, CentOS, BLAG e distribuzioni correlate. Ci sono Package Management System che installano singoli package ( senza curarsi delle dipendenze ), altri che installano le dipendenze, prima di installare il package principale, altri ancora che, oltre ad installare tutte le dipendenze, prima di installare il package principale, verificano le dipendenze esistenti anche in fase di eliminazione di un package, eliminando le dipendenze non più necessarie al sistema, le dipendenze, cioè, che non sono usate da alcun altro package. In questa pagina, esamineremo i Package Management System dei sistemi Debian-based, sia perchè i sistemi Debian e Debian-based sono molto diffusi, sia perchè i Package Management System dei sistemi Debian-based sono molto noti, proprio per la loro efficienza, e sono in continua evoluzione, tanto è vero che, ad oggi, esistono più Package Management System, in un sistema Debian o Debian-based, ciascuno dei quali è l'evoluzione del precedente:
E questi sono i Package Management System di shell: esistono anche Package Management System per le interfacce grafiche ( desktop ), naturalmente, come Synaptic, che, però, non eguagliano la potenza dei programmi di shell, pur appoggiandosi, completamente, ai Package Management System di shell. Inoltre, il principale Package Management System di Debian, APT, è supportato da molte altre distribuzioni: Conectiva, Libranet, Mandrake, PLD, Vine, APT4RPM, Alt Linux, Red Hat, Sun Solaris, SuSE, Yellow Dog Linux. Tutti i Package Management System di Debian sono fondati sullo stesso meccanismo di gestione delle informazioni: un database, distribuito, contenente l'elenco di tutti i package disponibili, per la release del sistema operativo corrente, e tutti i package già installati nel sistema corrente. Per quanto riguarda i package installati nel sistema, il database è composto dai file:
di cui:
E' estremamente importante che questo database non venga perduto: è, pertanto, necessario effettuare un backup periodico di questi quattro file. Vediamo, ora, la parte del database che conserva e aggiorna le informazioni ( metadati ) relative a tutti i package disponibili, per la release corrente. Queste informazioni, naturalmente, devono risiedere su un qualche server esterno: il nostro sistema dovrà, quindi, andarle a recuperare, per poi salvarle in un qualche recesso del disco fisso locale. Per mantenere aggiornato il database locale, quindi, un Package Management System si connette ai server dei cosiddetti "Repository" ( depositi, archivi ) ufficiali della release corrente. Così come i sistemi Windows si connettono ai server Microsoft, per verificare l'esistenza di eventuali aggiornamenti software disponibili, allo stesso modo, le varie distribuzioni Linux Debian distribuiscono i package disponibili, e le informazioni relative ai package disponibili, su vari server. Per il Package Management System APT, quindi, è sufficiente connettersi periodicamente a questi Repository, per mantenere aggiornata la propria banca dati. Questa è l'operazione che viene eseguita ogni volta in cui viene lanciato un comando
grazie al quale, il Package Management System effettua il download dei metadati, salvandoli nella cartella:
Per comprendere la struttura della directory Dove trova, APT, la lista dei server Repository? Nel file:
nel quale APT trova una riga per ciascun Repository:
Il file
Quindi, la prima riga del file
E' possibile aggiungere, all'elenco "ufficiale", presente nel file
Ovviamente, sarà bene verificare attentamente l'autorevolezza dei repository di terze parti aggiunti. Una volta aggiunti, infatti, i repository verranno contattati ad ogni aggiornamento del sistema, eseguito dal vostro Package Management System. E' anche possibile che, quando decideste di installare un package proveniente da uno di questi repository esterni, il vostro Package Management System vi sottoponga un avvertimento del genere: "ATTENZIONE: verranno installate versioni non sicure dei seguenti pacchetti. Pacchetti non sicuri potrebbero compromettere la sicurezza del sistema. Si dovrebbe procedere con l'installazione solo se si è sicuri di quello che si sta facendo". Prima di procedere all'installazione, quindi, decidete se siete certi della fonte utilizzata. Per aggiungere un repository, è possibile, anche, utilizzare il comando:
Quando il repository da aggiungere è un repository PPA, è necessario importare anche il suo certificato digitale. Un repository PPA è un repository creato e gestito da un singolo utente oppure da uno staff di programmatori, che se ne servono per distribuire ed aggiornare automaticamente il software da loro creato. Launchpad è una piattaforma open source che permette a chiunque di partecipare direttamente ad uno o più progetti software, lavorando insieme ad altri progettisti. Una volta creato il proprio software, il team può inviarlo alla piattaforma Launchpad che, eventualmente, creerà i file binari, pronti per gli utenti, conservandoli in un repository personale. All'interno della sezione PPA Launchpad dedicata al singolo team ( PPA ), viene pubblicato il certificato PGP da importare ( signing key ). Per importare un certificato digitale, contenente una chiave pubblica, all'interno del keyring di
Il comando
oppure, l'insieme dei file contenuti nella directory:
Altri file di keyring utilizzati da
contenenti, rispettivamente, tutte le chiavi considerate TRUSTED da Ubuntu e tutte le chiavi TRUSTED rimosse da Ubuntu. Per ogni comando inviato a
I comandi disponibili sono:
per ottenere l'elenco delle chiavi pubbliche salvate.
per ottenere le impronte digitali ( fingerprint ) delle chiavi pubbliche salvate.
per stampare a video il certificato digitale con ID keyid.
per stampare a video il certificato digitale di tutte le chiavi pubbliche salvate.
per eliminare un certificato digitale dal proprio file keyring.
per aggiungere un certificato digitale, salvato nel file filename, al proprio file keyring. Se filename è rappresentato da un trattino (
Se tutto è andato bene, dovreste ricevere una risposta lapidaria:
Questo significa che è stato correttamente importato il certificato dell'azienda "Seiko Epson Corporation", a sua volta esportato dal file keyring di
Il comando Invece di aggiungere manualmente un repository nel file
Questo comando, specifico per Ubuntu, è, in realtà, uno script che aggiunge o rimuove un repository PPA, preoccupandosi, anche, di importare la sua chiave pubblica GPG. Attenzione: per aggiungere un repository non PPA, è necessario indicare l'intera riga da aggiungere al file
Le opzioni disponibili sono:
per mostrare la guida alle opzioni.
per rimuovere un repository dalla lista contenuta nel file
per rispondere si a tutte le domande fatte in fase di creazione del repository.
per utilizzare un keyserver particolare. == Fine della sezione
A questo punto, siamo in grado di comprendere la struttura della cartella
vengono salvati due file:
che contengono informazioni sull'archivio e sulla sua integrità ( firma compresa ). Per ciascuna area di ciascun archivio
invece, vengono salvati due file:
che contengono informazioni sui singoli package e che vengono generati dai due file di indice di archivio:
Il primo archivio binario contiene le informazioni scaricate da internet e salvate nella directory
Questa intricata mappa delle relazioni esistenti tra i file del database dei package del sistema APT e i diversi Package Management System di Debian (
e quelle contenute in uno dei file salvati nella cartella
Per cercare un package particolare, utilizzeremo il comando
Per poter eseguire il comando
Lo stesso dato può essere dedotto dal numero dei file
Nei file della directory "Lists" troviamo le informazioni su tutti i package ( non solo quelli già installati ) disponibili per la nostra release. L'unico problema è che, in questo caso, le informazioni sono distribuite in più di un file. Come abbiamo già visto, i file contenenti le informazioni sui package, hanno un nome che termina sempre con la stringa di testo "_Packages". Quindi, per esempio, per trovare le informazioni su un package chiamato "xutils", dovrò eseguire un
Eseguendo questo comando, per un package qualsiasi, potreste accorgervi che un singolo package può essere presente in più di un file, anche se il file
Il Package Management System
Le informazioni comprendono l'elenco delle eventuali dipendenze:
La prima nostra preoccupazione, quindi, dovrà essere quella di verificare se le dipendenze siano già presenti nel sistema:
Come vedremo tra qualche riga, l'opzione
Nel primo caso, il package
Per installare, invece, un package Debian:
Se tutti i package necessari ( dipendenze ) sono già installati nel sistema e se il nuovo package non entra in conflitto con i package già installati nel sistema, allora
Questa prima opzione rimuove il package, lasciando intatti i suoi file di configurazione ( per una eventuale reinstallazione futura ).
Questa seconda opzione rimuove completamente il package dal sistema, compresi i suoi file di configurazione. Il processo di installazione, come abbiamo già visto, è suddiviso in due fasi:
Il comando
Le due forme sono equivalenti. Sempre in fase di installazione, è possibile installare o scompattare tutti i package contenuti in una directory, in modo recursivo ( comprese le sottodirectory ), aggiungendo l'opzione
Il Package Management System
stampa a video le informazioni disponibili sul package "package". Se, oltre alle informazioni sul package, si desidera conoscere anche lo stato del package, usare:
Il comando:
cerca un package il cui nome contenga "package_pattern":
Ciascuno di questi tre comandi, contiene un pattern differente dall'altro: cerca "apache", cerca un nome che inizi con "apache", cerca un nome che contenga "apache". Se non viene fornito alcun pattern, il comando restituisce la lista dei file installati:
Per avere la lista di tutti i package ( installati e non installati ):
Per avere la lista dei package non installati:
Attenzione: la lista dei package non installati potrebbe essere incompleta, soprattutto se
L'output dell'opzione
Prima del nome del package, della versione del package e della descrizione del package, ci sono 3 campi, che contengono una lettera ciascuno, dove ciascuna lettera indica: la prossima operazione prevista per il package ( Desired=Unknown/Install/Remove/Purge/Hold ), lo stato attuale ( Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend ) e lo stato di errore ( Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ). Quindi, nel nostro esempio, il package
Il pattern "
L'opzione
L'operazione inversa, trovare il package che ha generato un file, partendo dal nome del file, viene eseguita con il comando:
Per sapere quali file contiene un archivio
Il file di configurazione di
In questo file, è riportato anche il file di log di
I sistemi Debian e Debian-based si stanno ormai convertendo ad un Package Management System, chiamato
In questa modalità,
Se ripetuta, la sequenza di tasti: CTRL + t chiude il menù. La prima schermata restituita da
Virtual Packages: spesso, alcuni package offrono, più o meno, le stesse funzionalità. Il Virtual Package descrive la funzionalità, comune a più package. Quando un package richiede ( dipende da ) una qualche funzionalità, può richiedere un Virtual Package, senza dover specificare quale package fisico installare. Dei Virtual Package, viene mantenuta una lista ufficiale, alla pagina: Authoritative list of virtual package names. Tasks: un task ( compito, lavoro ) è un insieme di package individuali, che, insieme, contribuiscono allo svolgimento di un determinato compito. Dall'elenco che troviamo nella pagina di apertura di E' sufficiente posizionarsi sul nome di una sezione ( package installati, per esempio ) e premere INVIO, per espandere la sezione. Per aprire un campo di ricerca, digitare:
per poi immettere nel campo di ricerca il nome del package da ricercare. Per tornare alla pagina iniziale, con l'elenco di tutti i pacchetti, aprire il menù "Viste" e selezionare il sottomenù "Nuova vista dei pacchetti". Naturalmente, tutte le funzioni a disposizione in ambiente grafico, sono eseguibili anche da linea di comando. La linea di comando, ovviamente, è meno intuitiva: ecco perchè preferisco concentrarmi su questa. I comandi ( le funzionalità ) sono molti: partiamo, quindi, dai più comuni:
per aggiornare l'elenco dei package ( richiede i permessi di root ). L'aggiornamento viene eseguito, da
oppure nei file contenuti, eventualmente, nella sottodirectory:
solitamente riservata ai Repository non ufficiali. Il Package Management System
Quindi, se utilizzate
per aggiornare i package installati nel sistema ( richiede i permessi di root ), senza eliminare alcun package ( dipendenze ). Se fosse necessario eliminare qualche package, per eseguire l'upgrade, l'upgrade verrebbe interrotto. Per usare una strategia più aggressiva e chiedere di eliminare i package ritenuti non più necessari, usare una delle due opzioni:
La seconda forma del comando è mantenuta per motivi di compatibilità, ma potrebbe generare un equivoco:
per installare, reinstallare ( alla versione attualmente installata ), rimuovere, "purgare", bloccare o sbloccare uno o più package, dove "purge" significa: eliminare un package e tutti i suoi file di configurazione e "hold" ( bloccare ) significa: prevenire l'aggiornamento automatico di un package ( "unhold", ovviamente, è l'operazione inversa: sbloccare un package ). Con tutti i comandi di installazione, aggiornamento ed eliminazione, è possibile simulare l'azione, senza che essa venga realmente eseguita, semplicemente aggiungendo l'opzione
Le operazioni che dovrebbero essere effettuate con frequenza regolare, quindi, sono:
Per quanto riguarda la consultazione del database, il programma
Il comando
Il comando
Il comando
Nel nostro caso, la sola flag restituita è la prima ( current state ):
La seconda flag, quando attiva, indica l'azione che verrà eseguita non appena possibile. Nel nostro esempio, il campo è vuoto. I valori possibili sono:
Il terzo carattere indica se il package è stato installato automaticamente:
Il quarto carattere indica se il package è affidabile. Il meccanismo della verifica dell'affidabilità del software, implementato da APT, sul quale
Un esempio di package, con le quattro flag del primo campo impostate:
che significa: il package non è, attualmente, installato (
cercherà tutti i package che contengano o il termine
Nel primo caso,
Occorre tenere a mente che il comando
cerca i package il cui nome inizi con la sequenza "ald", mentre:
cerca i package il cui nome inizi con la stringa "assembl", seguita da un carattere che sia o "y", oppure "e". I metacaratteri riconosciuti da
che, quindi, dovranno essere preceduti da un carattere di escape, quando faranno parte della stringa letterale da cercare. Per trovare i package il cui nome contenga C++, quindi, dovremo usare una delle due formule seguenti ( che sono assolutamente equivalenti ):
Quando dobbiamo trattare i metacaratteri di
cerca una descrizione in cui ci sia la sequenza "sviluppo)". Se, invece, il carattere è un metacarattere sia per il motore delle espressioni regolari, sia per
In questi due esempi, equivalenti, stiamo cercando una descrizione contenente la sequenza "(versione". Qualsiasi spazio bianco viene interpretato, da
oppure, lo spazio bianco non sia preceduto da una tilde ( carattere di escape per
A questo punto, prima di provare alcune forme più complesse di interrogazione del database dei package, vediamo alcuni esempi che estraggono le informazioni che prima o poi chiunque vorrà richiedere. Per output molto lunghi, ricordate di inviare l'output di
Vuoi sapere quanti sono i package attualmente installati nel tuo sistema? Invia l'output di
Allo stesso modo, vuoi sapere quanti e quali sono i package attualmente non installati nel tuo sistema?
Se verifichi l'elenco dei package, vi troverai anche i package virtuali, che, in realtà, non sono singoli package reali. Vuoi sapere quanti e quali sono i nuovi package attualmente disponibili?
Vuoi sapere quanti e quali package sono stati installati automaticamente ( essendo, probabilmente, dipendenze per altri package )?
Vuoi sapere quanti e quali package hanno dipendenze non risolte?
e così via.
Il Package Management System
aggiorna i file dei singoli package, quelli contenuti nella cartella:
Il comando
installa le nuove versioni di tutti i package attualmente installati nel sistema, così come il comando
che installa le nuove versioni di tutti i package attualmente installati nel sistema, gestendo, però, anche tutte le dipendenze, se necessario. Se il comando
installa o aggiorna, se il package è già installato nel sistema, il package indicato. Possono essere indicati più package. Ciascun package deve essere indicato con il suo nome:
non con il nome del file:
Tutti i package necessari all'installazione del package indicato ( dipendenze ) verranno installati. Se il package indicato è già presente nel sistema ( è già installato ),
il nome del package verrà interpretato come espressione regolare POSIX. Come si comporta, il comando
è impostato a 1, tutti i package suggeriti verranno installati, al pari delle dipendenze. In caso contrario, con il parametro impostato a zero, tutti i package suggeriti non verranno installati, a meno che non si utilizzi l'opzione:
Anche i package raccomandati verranno considerati dipendenze, solo se il parametro di configurazione:
è impostato a 1. Per modificare questo comportamento, è possibile impostare il parametro a zero, nel file di configurazione di
Se desiderate effettuare il semplice download dei file
L'opzione
Se il processo di installazione richiede precise direttive di configurazione, altrettanto possiamo dire per il processo inverso: la disinstallazione di un package:
dove:
Quindi, per una rimozione completa di un package, il comando completo potrebbe essere:
Se, poi, si desidera evitare di rispondere a tutte le domande poste dal sistema in fase di eliminazione di un package, aggiungere l'opzione -y:
Con tutti questi comandi, è possibile utilizzare una delle varianti dell'opzione
Quindi, se desiderate sapere se, nel vostro sistema, sono presenti package orfani, simulate un'operazione di pulizia:
Se, invece, desiderate liberare spazio su disco, eliminando i package non più utilizzati, eseguite, di tanto in tanto:
Se desiderate, infine, verificare l'esistenza, nel vostro sistema, di package con dipendenze non soddisfatte, utilizzate:
che tenta di risolvere le eventuali dipendenze non soddisfatte. Questo comando potrebbe rivelarsi necessario quando si esegue APT per la prima volta. E' possibile che il sistema abbia così tante dipendenze mancanti, da richiedere un intervento manuale, per rimuovere i package che creano problemi ( Per le operazioni di consultazione del database dei package,
dove
Il comando
E' possibile verificare, per uno o più package, le dipendenze ed i package con cui entra(no) in conflitto:
Per avere una lista di tutti i package disponibili ( installati e non ):
Per avere qualche dato statistico sulla cache di APT:
che restituisce:
Il Package Management System
Il comando
Le configurazioni di APT vengono memorizzate nei file di configurazione, che si trovano nelle cartelle:
Una spiegazione di questi parametri di configurazione può essere reperita nel file di shell:
dove troviamo anche le funzioni eseguite quotidianamente, in modo automatico, da
Il comando
In questo caso, il nome del parametro APT rivela la sorgente dell'informazione, il file:
dove:
Con questo primo check, lo script di
dove MaxAge e MinAge sono espressi in giorni. Nel nostro esempio, vengono citate coppie di parametri, poichè:
Da questi pochi esempi, è chiaro che per modificare le impostazioni di APT, è sufficiente modificare i valori inseriti in uno dei file di configurazione e letti dal cron di APT.
|
|||||
I comandi Linux: i Package Management System | Le guide di .bit: contenuto originale |