|
|
Riga 300: |
Riga 300: |
|
| |
|
| ===Metapacchetti=== | | ===Metapacchetti=== |
| | | Vedere la guida: [[Gestione dei metapacchetti]] |
| ====Cenni generali====
| |
| | |
| 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.
| |
|
| |
|
| ==Approfondimenti== | | ==Approfondimenti== |