Gestione dei metapacchetti: differenze tra le versioni
S3v (discussione | contributi) m (+ template "Autori") |
S3v (discussione | contributi) ("introduzione all'APT System": spostati qui i capitoli riguardanti i metapacchetti) |
||
Riga 1: | Riga 1: | ||
{{Versioni compatibili}} | {{Versioni compatibili}} | ||
== | == 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 (a volte a loro volta metapacchetti) che lo costituisce. | |||
Un esempio è il pacchetto kdebase: | |||
<pre> # ls -l | |||
total 6348 | |||
-rw-r--r-- 1 root root 6486276 Jan 26 17:32 kdebase_2.2.2-14.9_i386.deb</pre> | |||
Già le dimensioni lasciano presagire qualcosa: come può un pacchetto | |||
come kdebase occupare solo poco più di 6 Mb? Spacchettiamolo: | |||
<pre> # ar -x kdebase_2.2.2-14.9_i386.deb | |||
# ls | |||
control.tar.gz data.tar.gz debian-binary kdebase_2.2.2-14.9_i386.deb | |||
# tar xvzf data.tar.gz | |||
./ | |||
./usr/ | |||
./usr/share/ | |||
./usr/share/doc/ | |||
./usr/share/doc/kdebase/ | |||
./usr/share/doc/kdebase/README.pam | |||
./usr/share/doc/kdebase/README.Debian | |||
./usr/share/doc/kdebase/copyright | |||
./usr/share/doc/kdebase/README.gz | |||
./usr/share/doc/kdebase/changelog.Debian.gz | |||
./usr/share/doc/kde/ | |||
./usr/share/doc/kde/HTML/ | |||
./usr/share/doc/kde/HTML/en/ | |||
./usr/share/doc/kde/HTML/en/kcontrol/ | |||
./usr/share/doc/kde/HTML/en/kdebugdialog/ | |||
./usr/share/doc/kde/HTML/en/kdesu/ | |||
... | |||
</pre> | |||
L'archivio <code>data.tar.gz</code> contiene solo documentazione e delle librerie. | |||
Diamo un'occhiata al <code>control</code>: | |||
<pre> station:/opt# tar xvzf control.tar.gz | |||
./ | |||
./shlibs | |||
./postinst | |||
./preinst | |||
./prerm | |||
./postrm | |||
./conffiles | |||
./md5sums | |||
./control | |||
station:/opt# cat control | |||
Package: kdebase | |||
Version: 4:2.2.2-14.9 | |||
Section: x11 | |||
Priority: optional | |||
Architecture: i386 | |||
Depends: kdelibs3 (>= 4:2.2.2-1), libc6 (>= 2.2.4-4), libfam0, | |||
libjpeg62, libkonq3 (>= 4:2.2.2-14.9), libpng2(>=1.0.12), libqt2 (>= | |||
3:2.3.1-1), libstdc++2.10-glibc2.2 (>= 1:2.95.4-0.010810), xlibs (>> | |||
4.1.0), zlib1g (>= 1:1.1.4), debianutils (>= 1.6), xfree86-common, | |||
libpam-modules, kdewallpapers, kdebase-libs (= 4:2.2.2-14.9) | |||
Recommends: kdebase-doc, konqueror, konsole, kate | kedit | kword, | |||
libarts | libarts-alsa, kdebase-audiolibs | kdebase3-audiolibs, kscreensaver | |||
Suggests: menu (>=1.5-5), kdm | x-display-manager, kde-i18n, | |||
libpam-cracklib, xscreensaver, xscreensaver-gl, xearth, xplanet, usbutils | |||
Provides: x-session-manager | |||
Installed-Size: 16280 | |||
Maintainer: Christopher L Cheney <ccheney@debian.org> | |||
Description: KDE core applications | |||
This is a suite of all kde core applications : | |||
Includes: kicker, kwin, kdesktop and others...</pre> | |||
In realtà, vediamo che a costituire il cuore di KDE sono le sue dipendenze. Senza i metapacchetti bisognerebbe installare uno per uno i pacchetti che costituiscono KDE. | |||
== Lista dei metapacchetti == | |||
Si può ottenere una lista completa dei metapacchetti semplicemente elencando i pacchetti che contengono la parola ''metapackage'' nei tag o nelle descrizioni: | |||
<pre> | |||
$ aptitude search '(~Gmetapackage|~dmetapackage)' | less | |||
</pre> | |||
Se si vuole avere invece una lista dei metapacchetti installati sul sistema: | |||
<pre> | |||
$ aptitude search '~i(~Gmetapackage|~dmetapackage)' | |||
</pre> | |||
A questi si aggiungono le eccezioni comprendenti i metapacchetti che riguardano l'installazione del kernel; questi sono nella forma: <code>linux-image-*</code> | |||
<pre> | |||
$ aptitude search ~nlinux-image-* | |||
</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. | |||
== Installazione/Rimozione == | |||
Capito cosa sono i metapacchetti, ci accorgeremo subito di un problema: se per l'installazione di una ''suite'', come ad esempio ''GNOME'', l'installazione di un solo metapacchetto ci permette l'installazione di tutti i pacchetti necessari, essendo quest'ultimi tutte dipendenze del metapacchetto, se si andrà a rimuovere un pacchetto della ''suite'' in questione, il metapacchetto precedentemente installato avrà una dipendenza non soddisfatta. Questo farà sì che ad esempio [[Aptitude]] rimuoverà tutti i pacchetti della ''suite'' in quanto risultanti come dipendenze di un pacchetto che non è più installato (il metapacchetto appunto); altri comandi, come ad esempio: | |||
<pre># apt-get autoremove</pre> | |||
porteranno allo stesso risultato, sempre per via di dipendenze installate per un pacchetto che non esiste più.<br /><br /> | |||
{{Box|NOTA BENE:|questo comportamento dei pacchetti è in realtà un sistema molto ben architettato per "pulire" il sistema da pacchetti "inutili" (o meglio, per meglio dire, non più utili). Ad esempio: se ho installato il pacchetto Y per soddisfare una dipendenza del pacchetto X, eliminato X il pacchetto Y non mi servirà più, essendo stato installato unicamente per far funzionare X. Immaginando di aver appena eliminato il pacchetto X, ''Aptitude'' andrà automaticamente ad eliminare il pacchetto Y "ricordandosi" di averlo installato come dipendenza del pacchetto X. <code>apt-get autoremove</code> "vedrà" il pacchetto Y come installato da ''dipendenza'' e lo eliminerà portando allo stesso risultato.}} | |||
=== Installare un metapacchetto === | |||
In questo caso non occorre nessuna attenzione particolare: installeremo il metapacchetto come qualsiasi altro pacchetto con il nostro gestore preferito (aptitude, apt-get, synaptic,etc.), il quale si "porterà dietro" tutti i pacchetti del caso (come sue dipendenze). | |||
=== Rimuovere un metapacchetto === | |||
Il problema di quest'azione è riassunto all'inizio di questo capitolo. | |||
=== 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 | |||
<pre># apt-get purge nomemetapacchetto</pre> | |||
dovremo dare ancora: | |||
<pre># apt-get autoremove</pre> | |||
proprio per rimuovere le dipendenze installate per il metapacchetto. | |||
=== Rimuovere uno o più pacchetti della ''suite'' === | |||
In questo caso, come già detto in precedenza, la rimozione di uno o più pacchetti della suite, porterà alla rimozione del metapacchetto principale (essendo esso stesso senza una o più dipendenze soddisfatte). A questo punto, senza il metapacchetto che faceva da "scheletro" alla ''suite'', i pacchetti di quest'ultima verranno eliminati da ''aptitude'' o da ''apt-get autoremove''.<br /> | |||
Per eliminare dunque dei pacchetti da una ''suite'' utilizzeremo ''apt-get'' e ''aptitude'' in modo combinato. Facciamo un esempio: | |||
* come ''suite'' prenderemo ''GNOME''. I metapacchetti che la installano sono ''gnome'' e ''gnome-desktop-environment'' | |||
* andremo ad eliminare il pacchetto ''evolution'' della ''suite'', senza eliminare quest'ultima. | |||
Inizieremo dunque con ''apt-get'': | |||
<pre># apt-get purge evolution</pre> | |||
Lanciato il comando andremo ad eliminare 5 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: | |||
<pre># aptitude keep-all</pre> | |||
che andrà ad eliminare la loro eliminazione (scusate il gioco di parole). L'opzione ''keep-all'' di ''aptitude'' cancella tutte le azioni impostate per ogni pacchetto; qualsiasi azione d'installazione, rimozione o aggiornamento verrà rimossa dallo stato di tutti i pacchetti interessati.<br /><br /> | |||
A questo punto, avremo la nostra ''suite'' perfettamente funzionante con le "modifiche" apportate. | |||
==Creare un metapacchetto== | ==Creare un metapacchetto== |
Versione delle 11:09, 17 mar 2013
Versioni Compatibili Tutte le versioni supportate di Debian |
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 (a volte a loro volta metapacchetti) che lo costituisce. Un esempio è il pacchetto kdebase:
# ls -l total 6348 -rw-r--r-- 1 root root 6486276 Jan 26 17:32 kdebase_2.2.2-14.9_i386.deb
Già le dimensioni lasciano presagire qualcosa: come può un pacchetto come kdebase occupare solo poco più di 6 Mb? Spacchettiamolo:
# ar -x kdebase_2.2.2-14.9_i386.deb # ls control.tar.gz data.tar.gz debian-binary kdebase_2.2.2-14.9_i386.deb # tar xvzf data.tar.gz ./ ./usr/ ./usr/share/ ./usr/share/doc/ ./usr/share/doc/kdebase/ ./usr/share/doc/kdebase/README.pam ./usr/share/doc/kdebase/README.Debian ./usr/share/doc/kdebase/copyright ./usr/share/doc/kdebase/README.gz ./usr/share/doc/kdebase/changelog.Debian.gz ./usr/share/doc/kde/ ./usr/share/doc/kde/HTML/ ./usr/share/doc/kde/HTML/en/ ./usr/share/doc/kde/HTML/en/kcontrol/ ./usr/share/doc/kde/HTML/en/kdebugdialog/ ./usr/share/doc/kde/HTML/en/kdesu/ ...
L'archivio data.tar.gz
contiene solo documentazione e delle librerie.
Diamo un'occhiata al control
:
station:/opt# tar xvzf control.tar.gz ./ ./shlibs ./postinst ./preinst ./prerm ./postrm ./conffiles ./md5sums ./control station:/opt# cat control Package: kdebase Version: 4:2.2.2-14.9 Section: x11 Priority: optional Architecture: i386 Depends: kdelibs3 (>= 4:2.2.2-1), libc6 (>= 2.2.4-4), libfam0, libjpeg62, libkonq3 (>= 4:2.2.2-14.9), libpng2(>=1.0.12), libqt2 (>= 3:2.3.1-1), libstdc++2.10-glibc2.2 (>= 1:2.95.4-0.010810), xlibs (>> 4.1.0), zlib1g (>= 1:1.1.4), debianutils (>= 1.6), xfree86-common, libpam-modules, kdewallpapers, kdebase-libs (= 4:2.2.2-14.9) Recommends: kdebase-doc, konqueror, konsole, kate | kedit | kword, libarts | libarts-alsa, kdebase-audiolibs | kdebase3-audiolibs, kscreensaver Suggests: menu (>=1.5-5), kdm | x-display-manager, kde-i18n, libpam-cracklib, xscreensaver, xscreensaver-gl, xearth, xplanet, usbutils Provides: x-session-manager Installed-Size: 16280 Maintainer: Christopher L Cheney <ccheney@debian.org> Description: KDE core applications This is a suite of all kde core applications : Includes: kicker, kwin, kdesktop and others...
In realtà, vediamo che a costituire il cuore di KDE sono le sue dipendenze. Senza i metapacchetti bisognerebbe installare uno per uno i pacchetti che costituiscono KDE.
Lista dei metapacchetti
Si può ottenere una lista completa dei metapacchetti semplicemente elencando i pacchetti che contengono la parola metapackage nei tag o nelle descrizioni:
$ aptitude search '(~Gmetapackage|~dmetapackage)' | less
Se si vuole avere invece una lista dei metapacchetti installati sul sistema:
$ aptitude search '~i(~Gmetapackage|~dmetapackage)'
A questi si aggiungono le eccezioni comprendenti i metapacchetti che riguardano l'installazione del kernel; questi sono nella forma: linux-image-*
$ aptitude search ~nlinux-image-*
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.
Installazione/Rimozione
Capito cosa sono i metapacchetti, ci accorgeremo subito di un problema: se per l'installazione di una suite, come ad esempio GNOME, l'installazione di un solo metapacchetto ci permette l'installazione di tutti i pacchetti necessari, essendo quest'ultimi tutte dipendenze del metapacchetto, se si andrà a rimuovere un pacchetto della suite in questione, il metapacchetto precedentemente installato avrà una dipendenza non soddisfatta. Questo farà sì che ad esempio Aptitude rimuoverà tutti i pacchetti della suite in quanto risultanti come dipendenze di un pacchetto che non è più installato (il metapacchetto appunto); altri comandi, come ad esempio:
# apt-get autoremove
porteranno allo stesso risultato, sempre per via di dipendenze installate per un pacchetto che non esiste più.
Installare un metapacchetto
In questo caso non occorre nessuna attenzione particolare: installeremo il metapacchetto come qualsiasi altro pacchetto con il nostro gestore preferito (aptitude, apt-get, synaptic,etc.), il quale si "porterà dietro" tutti i pacchetti del caso (come sue dipendenze).
Rimuovere un metapacchetto
Il problema di quest'azione è riassunto all'inizio di questo capitolo.
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
# apt-get purge nomemetapacchetto
dovremo dare ancora:
# apt-get autoremove
proprio per rimuovere le dipendenze installate per il metapacchetto.
Rimuovere uno o più pacchetti della suite
In questo caso, come già detto in precedenza, la rimozione di uno o più pacchetti della suite, porterà alla rimozione del metapacchetto principale (essendo esso stesso senza una o più dipendenze soddisfatte). A questo punto, senza il metapacchetto che faceva da "scheletro" alla suite, i pacchetti di quest'ultima verranno eliminati da aptitude o da apt-get autoremove.
Per eliminare dunque dei pacchetti da una suite utilizzeremo apt-get e aptitude in modo combinato. Facciamo un esempio:
- come suite prenderemo GNOME. I metapacchetti che la installano sono gnome e gnome-desktop-environment
- andremo ad eliminare il pacchetto evolution della suite, senza eliminare quest'ultima.
Inizieremo dunque con apt-get:
# apt-get purge evolution
Lanciato il comando andremo ad eliminare 5 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:
# aptitude keep-all
che andrà ad eliminare la loro eliminazione (scusate il gioco di parole). L'opzione keep-all di aptitude cancella tutte le azioni impostate per ogni pacchetto; qualsiasi azione d'installazione, rimozione o aggiornamento verrà rimossa dallo stato di tutti i pacchetti interessati.
A questo punto, avremo la nostra suite perfettamente funzionante con le "modifiche" apportate.
Creare un metapacchetto
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:
# aptitude install equivs
A questo punto lanceremo il comando:
$ equivs-control controller
il quale creerà un file controller
per il nostro metapacchetto (il nome è arbitrario, potete scegliere quello che volete). Il suo aspetto è il seguente (dopo averlo aperto in un editor qualsiasi):
### Commented entries have reasonable defaults. ### Uncomment to edit them. Section: misc Priority: optional Standards-Version: 3.6.2 Package: <package name; defaults to equivs-dummy> # Version: <enter version here; defaults to 1.0> # Maintainer: Your Name <yourname@example.com> # Pre-Depends: <comma-separated list of packages> # Depends: <comma-separated list of packages> # Recommends: <comma-separated list of packages> # Suggests: <comma-separated list of packages> # Provides: <comma-separated list of packages> # Replaces: <comma-separated list of packages> # Architecture: all # Copyright: <copyright file; defaults to GPL2> # Changelog: <changelog file; defaults to a generic changelog> # Readme: <README.Debian file; defaults to a generic one> # Extra-Files: <comma-separated list of additional files for the doc directory> Description: <short description; defaults to some wise words> long description and info . second paragraph
Andremo poi ad inserire i campi illustrati dopo aver decommentato le righe che vogliamo definire. Il campo più importante è sicuramente Depends, che ha il ruolo fondamentale del metapacchetto, senza dimenticarci di dare il nome al metapacchetto. Gli altri campi sono più o meno facoltativi (inserire la versione, il mantenitore e una piccola descrizione sarebbe comunque auspicato).
Infine daremo il comando:
$ equivs-build controller
che creerà il metapacchetto .deb
che potremo poi installare come qualsiasi pacchetto
Esempio pratico
Prendiamo ad esempio questa guida: Installare_e_configurare_i_codec_per_DVD_e_Mp3. Sarebbe ora interessante creare un metapacchetto che installi i pacchetti necessari con un solo comando. Iniziamo dunque a creare un controller:
$ equivs-control controller
Editiamo poi il file controller
nel modo seguente (sulla base della guida citata):
### Commented entries have reasonable defaults. ### Uncomment to edit them. Section: misc Priority: optional Standards-Version: 3.6.2 Package: codec-dvd-mp3 Version: 0.1 Maintainer: Debianizzati <info@debianizzati.org> # Pre-Depends: <comma-separated list of packages> Depends: libfaad2-0,libmp4-0,libfaac0,alsamixergui,toolame,lame,libmp3lame0,libdvdnav4,libdvdread3,libdvdcss2,w32codecs,ffmpeg Recommends: debian-multimedia-keyring # Suggests: <comma-separated list of packages> # Provides: <comma-separated list of packages> # Replaces: <comma-separated list of packages> # Architecture: all # Copyright: <copyright file; defaults to GPL2> # Changelog: <changelog file; defaults to a generic changelog> # Readme: <README.Debian file; defaults to a generic one> # Extra-Files: <comma-separated list of additional files for the doc directory> Description: installa codec per DVD e mp3 Questo metapacchetto installa le librerie per la riproduzione di DVD e mp3. Ricordiamo di aggiungere i repository debian-multimedia (deb http://www.debian-multimedia.org lenny main) all'interno del proprio /etc/apt/sources.list
Creiamo il pacchetto debian:
$ equivs-build controller
Se tutto sarà andato a buon fine (occhio alla sintassi!) otterremo il pacchetto codec-dvd-mp3_0.1_all.deb
nella directory da dove abbiamo lanciato i comandi. Per dare un'ennesima verifica al pacchetto, daremo il comando:
$ dpkg --info codec-dvd-mp3_0.1_all.deb
ottenendo il seguente output:
Package: codec-dvd-mp3 Version: 0.1 Architecture: all Maintainer: Debianizzati <info@debianizzati.org> Installed-Size: 36 Depends: libfaad2-0, libmp4-0, libfaac0, alsamixergui, toolame, lame, libmp3lame0, libdvdnav4, libdvdread3, libdvdcss2, w32codecs, ffmpeg Recommends: debian-multimedia-keyring Section: misc Priority: optional Description: installa codec per DVD e mp3 Questo metapacchetto installa le librerie per la riproduzione di DVD e mp3. Ricordiamo di aggiungere i repository debian-multimedia (deb http://www.debian-multimedia.org lenny main) all'interno del proprio /etc/apt/sources.list
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 --force-depends
da aggiungere al classico dpkg -i
) e installare le dipendenze manualmente con un manager come aptitude.
Guida scritta da: Brunitika 16:49, 8 apr 2009 (CEST) | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |