Gestione dei metapacchetti: differenze tra le versioni

aggiunte, ma ancora da verificare il resto
(aggiunte, ma ancora da verificare il resto)
Riga 2: Riga 2:
== Cosa sono i metapacchetti ==
== Cosa sono i metapacchetti ==
Esiste un tipo particolare di pacchetto detto [[metapacchetto]] che in realtà non contiene alcun eseguibile o sorgente, ma serve semplicemente per installare tutto l'insieme di pacchetti (spesso a loro volta metapacchetti) che lo costituisce.<br/>
Esiste un tipo particolare di pacchetto detto [[metapacchetto]] che in realtà non contiene alcun eseguibile o sorgente, ma serve semplicemente per installare tutto l'insieme di pacchetti (spesso a loro volta metapacchetti) che lo costituisce.<br/>
Un esempio è il [[pacchetto]] "kde-full" che permette di installare l'intero ambiente KDE in un colpo solo. Scarichiamo il pacchetto:
Un esempio è il [[pacchetto]] "kde-full" che permette di installare l'intero ambiente KDE in un colpo solo. Scarichiamo il pacchetto con [[apt-get]]:
<pre>
<pre>
$ apt-get download kde-full
$ apt-get download kde-full
Riga 12: Riga 12:
</pre>
</pre>


Già le dimensioni lasciano presagire qualcosa: come può un pacchetto come "kde-full" occupare solo poco meno di 12 KB? Vediamo cosa contiene:
Già le dimensioni lasciano presagire qualcosa: come può un pacchetto come "kde-full" occupare solo poco meno di 12 KB? Vediamo cosa contiene con [[dpkg]]:


<pre>
<pre>
$ dpkg-deb -c kde-full_77+deb7u1_all.deb  
$ dpkg --contents kde-full_77+deb7u1_all.deb  
drwxr-xr-x root/root        0 2013-04-19 01:18 ./
drwxr-xr-x root/root        0 2013-04-19 01:18 ./
drwxr-xr-x root/root        0 2013-04-19 01:18 ./usr/
drwxr-xr-x root/root        0 2013-04-19 01:18 ./usr/
Riga 29: Riga 29:


<pre>
<pre>
$ dpkg-deb -I kde-full_77+deb7u1_all.deb  
$ dpkg --info kde-full_77+deb7u1_all.deb  
  nuovo pacchetto debian, versione 2.0.
  nuovo pacchetto debian, versione 2.0.
  dimensione 11732 byte: archivio di controllo=888 byte.
  dimensione 11732 byte: archivio di controllo=888 byte.
Riga 61: Riga 61:


== Lista dei metapacchetti ==
== Lista dei metapacchetti ==
Si può ottenere una lista completa dei metapacchetti elencando i pacchetti che contengono la parola ''metapackage'' nei [[tag]], nelle descrizioni oppure che appartengono alla sezione "metapackages"; servirà il pacchetto "debtags":
Si può ottenere una lista completa dei metapacchetti elencando i pacchetti che contengono la parola ''metapackage'' nei [[tag]], nelle descrizioni oppure che appartengono alla sezione "metapackages"; servirà il pacchetto "debtags" e l'uso di [[aptitude]]:
<pre>
<pre>
$ aptitude search '(~Gmetapackage|~dmetapackage|~smetapackages)' | less
$ aptitude search '(~Gmetapackage|~dmetapackage|~smetapackages)' | less
Riga 74: Riga 74:
A questi si aggiungono le eccezioni comprendenti i metapacchetti che riguardano l'installazione del kernel; questi sono nella forma: <code>linux-image-*</code>
A questi si aggiungono le eccezioni comprendenti i metapacchetti che riguardano l'installazione del kernel; questi sono nella forma: <code>linux-image-*</code>
<pre>
<pre>
$ aptitude search ~nlinux-image-*
$ aptitude search '~nlinux-image-*'
</pre>
</pre>
che sono dei metapacchetti che dipendono sempre dall'ultimo kernel Linux disponibile per la sotto-architettura specificata. In tal modo, installando il pacchetto adatto al proprio sistema, il kernel verrà automaticamente aggiornato non appena sia disponibile una nuova versione (si passerà ad esempio dal 2.6.15 a 2.6.17). Viceversa, se non si installa il metapacchetto, il kernel non verrà mai aggiornato poiché i kernel Debian hanno la versione come parte integrante del nome del pacchetto e quindi una nuova versione viene vista come un nuovo pacchetto e non come un aggiornamento, come giusto che sia.
che sono dei metapacchetti che dipendono sempre dall'ultimo kernel Linux disponibile per la sotto-architettura specificata. In tal modo, installando il pacchetto adatto al proprio sistema, il kernel verrà automaticamente aggiornato non appena sia disponibile una nuova versione (si passerà ad esempio dal 2.6.15 a 2.6.17). Viceversa, se non si installa il metapacchetto, il kernel non verrà mai aggiornato poiché i kernel Debian hanno la versione come parte integrante del nome del pacchetto e quindi una nuova versione viene vista come un nuovo pacchetto e non come un aggiornamento, come giusto che sia.
Riga 98: Riga 98:
=== Rimuovere l'intera ''suite'' ===
=== Rimuovere l'intera ''suite'' ===


Se vogliamo semplicemente eliminare tutta la ''suite'' del metapacchetto andremo semplicemente a rimuoverlo con il nostro gestore preferito. Nel caso di ''aptitude'', provvederà lui stesso ad eliminare le dipendenze (dunque i pacchetti della ''suite''); nel caso di apt-get, dopo il classico
Se vogliamo semplicemente eliminare tutta la ''suite'' del metapacchetto andremo semplicemente a rimuoverlo con il nostro gestore preferito. Nel caso di ''aptitude'', provvederà lui stesso ad eliminare le dipendenze (dunque i pacchetti della ''suite''); nel caso di [[apt-get]], dopo il classico


<pre># apt-get purge nomemetapacchetto</pre>
<pre># apt-get remove nomemetapacchetto</pre>


dovremo eseguire ancora:
dovremo eseguire ancora:
Riga 129: Riga 129:
</pre>
</pre>
Quindi rimuoviamo il pacchetto che ci interessa:
Quindi rimuoviamo il pacchetto che ci interessa:
<pre># apt-get purge evolution</pre>
<pre># apt-get remove evolution</pre>


Lanciato il comando, verremo avvertiti che saranno eliminati cinque pacchetti: ''gnome'', ''gnome-desktop-environment'', ''evolution'',  ''evolution-exchange'', ''evolution-plugins'', tra i quali noteremo i due metapacchetti della ''suite'' in questione. Lo stesso ''apt-get'' ci suggerirà poi di utilizzare ''apt-get autoremove'' per eliminare le dipendenze non soddisfatte (che sono però in questo caso tutti i pacchetti della ''suite''). Per mantenere questi pacchetti daremo il comando:
Lanciato il comando, verremo avvertiti che saranno eliminati cinque pacchetti: ''gnome'', ''gnome-desktop-environment'', ''evolution'',  ''evolution-exchange'', ''evolution-plugins'', tra i quali noteremo i due metapacchetti della ''suite'' in questione. Lo stesso ''apt-get'' ci suggerirà poi di utilizzare ''apt-get autoremove'' per eliminare le dipendenze non soddisfatte (che sono però in questo caso tutti i pacchetti della ''suite''). Per mantenere questi pacchetti daremo il comando:
Riga 150: Riga 150:
Come noto i metapacchetti sono molto utili per installare ''suite'' di programmi con un solo comando (installando il metapacchetto appunto). Con il pacchetto '''equivs''' tutto è molto semplice; incominceremo con l'installarlo:
Come noto i metapacchetti sono molto utili per installare ''suite'' di programmi con un solo comando (installando il metapacchetto appunto). Con il pacchetto '''equivs''' tutto è molto semplice; incominceremo con l'installarlo:


<pre># aptitude install equivs</pre>
<pre># apt-get install equivs</pre>


A questo punto lanceremo il comando:
A questo punto lanceremo il comando:
Riga 191: Riga 191:
<pre>$ equivs-build controller</pre>
<pre>$ equivs-build controller</pre>


che creerà il metapacchetto <code>.deb</code> che potremo poi installare come qualsiasi pacchetto
che creerà il metapacchetto <code>.deb</code> che potremo poi installare come qualsiasi pacchetto.
 
{{Warningbox | È possibile anche creare un metapacchetto con il nome e la versione di una dipendenza da soddisfare, ingannando così il sistema, che penserà che una data dipendenza è già soddisfatta e non cercherà quindi di installarla. Questo uso è però pericoloso, se non si è più che certi di quello che si sta facendo, e nel caso peggiore può rendere inusabile tanto il programma quanto l'intero sistema.}}
 


=== Esempio pratico ===
=== Esempio pratico ===
Riga 251: Riga 254:
Ricordiamo di aggiungere i repository debian-multimedia (deb  http://www.debian-multimedia.org lenny main) all'interno del proprio /etc/apt/sources.list</pre>
Ricordiamo di aggiungere i repository debian-multimedia (deb  http://www.debian-multimedia.org lenny main) all'interno del proprio /etc/apt/sources.list</pre>


Sarebbe bello ora installare il nostro pacchetto con [[dpkg]], ma dovremmo sapere che non è possibile. Questo perché ''dpkg'' non sa risolvere le dipendenze come ''apt-get''. Dovremmo allora inserire il nostro pacchetto in un [[repository]] (esistente o creandolo anche in locale -> [[Creare un Repository Debian]]) oppure forzare le dipendenze all'installazione (opzione <code>--force-depends</code> da aggiungere al classico <code>dpkg -i</code>) e installare le dipendenze manualmente con un manager come ''aptitude''.
Si ricordi che <code>dpkg</code> non si occupa di risolvere le dipendenze, quindi installare un pacchetto con dipendenze non soddisfatte ne aggiungerebbe uno con stato ''broken'' al sistema, che andrebbe corretto in seguito (per esempio con <code>apt-get --fix-broken</code>). È però consigliato utilizzare [[gdebi]], che si avvale subito di [[APT]] per cercare di risolvere le dipendenze del pacchetto prima di procedere alla sua installazione, evitando di installare pacchetti ''broken'' sul sistema.


{{Autori
{{Autori
3 581

contributi