3 155
contributi
Wtf (discussione | contributi) m (→Cos'è) |
Wtf (discussione | contributi) Nessun oggetto della modifica |
||
Riga 16: | Riga 16: | ||
Il sistema APT (Advanced Packaging Tool) '''permette di installare qualsiasi programma''' gestendo in maniera automatica le [[dipendenze]]. Ma è anche in grado di fornire una lista di pacchetti consigliati, e di pacchetti suggeriti. Può rimuovere un programma conservandone i file di configurazione, oppure eliminandolo totalmente. Può mostrare la descrizione di ogni pacchetto o ricercare quale pacchetto contiene una certa parola chiave nella descrizione. Può aggiornare in blocco l'intero sistema usando varie politiche di aggiornamento. Può installare i sorgenti di un pacchetto e gestire le dipendenze necessarie alla compilazione. E molto altro ancora. Nonostante la sua complessità usare l'APT è molto semplice e intuitivo una volta imparati i comandi basilari. | Il sistema APT (Advanced Packaging Tool) '''permette di installare qualsiasi programma''' gestendo in maniera automatica le [[dipendenze]]. Ma è anche in grado di fornire una lista di pacchetti consigliati, e di pacchetti suggeriti. Può rimuovere un programma conservandone i file di configurazione, oppure eliminandolo totalmente. Può mostrare la descrizione di ogni pacchetto o ricercare quale pacchetto contiene una certa parola chiave nella descrizione. Può aggiornare in blocco l'intero sistema usando varie politiche di aggiornamento. Può installare i sorgenti di un pacchetto e gestire le dipendenze necessarie alla compilazione. E molto altro ancora. Nonostante la sua complessità usare l'APT è molto semplice e intuitivo una volta imparati i comandi basilari. | ||
==I Pacchetti== | |||
Nel primo paragrafo si è generalmente parlato di ''programmi'' per usare un termine piuttosto noto, ma sfortunatamente improprio in questo contesto. Il sistema APT mette a disposizione dei '''pacchetti''', che non necessariamente coincidono col significato generico di ''programma'', infatti ci sono pacchetti che forniscono solo librerie necessarie a uno o più applicativi, ma di per se non direttamente utilizzabili dall'utente. | |||
Si ha dunque una struttura estremamente complessa dove un pacchetto dipende da altri pacchetti e a sua volta può essere un requisito per altri applicativi. | |||
Fortunatamente la gestione del sistema è fortemente automatizzata, gli strumenti precedentemente citati sono tutti in grado di fornire una lista di pacchetti consigliati e di pacchetti suggeriti, inoltre possono rimuovere un programma conservandone i file di configurazione, oppure eliminarlo totalmente; possono anche mostrare la descrizione di ogni pacchetto o ricercare quale pacchetto contiene una certa parola chiave nella descrizione, possono aggiornare in blocco l'intero sistema usando varie politiche di aggiornamento, possono installare i sorgenti di un pacchetto e gestire le dipendenze necessarie alla compilazione, possono infine molto altro ancora. | |||
Premesso questo è bene sapere che esistono fondamentalmente tre tipi di pacchetti, i binari, i sorgenti e i metapacchetti. | |||
===Pacchetti binari=== | |||
I pacchetti binari sono archivi contenenti eseguibili, file di | |||
configurazione e documentazione che assieme formano un'applicazione. | |||
Sotto Debian, i binari hanno il suffisso .deb (c'è la possibilità anche | |||
di usare rpm, ma questa è un'altra storia). | |||
Vediamo cosa contiene un archivio .deb: | |||
<pre> # ls | |||
apache_1.3.33-6_i386.deb | |||
# ar -tv apache_1.3.33-6_i386.deb | |||
rw-r--r-- 0/0 4 May 11 11:34 2005 debian-binary | |||
rw-r--r-- 0/0 13852 May 11 11:34 2005 control.tar.gz | |||
rw-r--r-- 0/0 369530 May 11 11:34 2005 data.tar.gz</pre> | |||
Abbiamo un file e due tarball. Procediamo estraendo questi ultimi. | |||
<pre> # ar -x apache_1.3.33-6_i386.deb | |||
# ls | |||
apache_1.3.33-6_i386.deb control.tar.gz data.tar.gz debian-binary | |||
# cat debian-binary | |||
2.0</pre> | |||
Il file <code>debian-binary</code> stabilisce la versione del formato deb, in questo | |||
caso la 2.0. Estraiamo gli archivi <code>control.tar.gz</code> e <code>data.tar.gz</code>. | |||
<pre> # tar xvzf control.tar.gz | |||
./ | |||
./config | |||
./templates | |||
./postinst | |||
./preinst | |||
./prerm | |||
./postrm | |||
./conffiles | |||
./control | |||
./md5sums | |||
# tar xvzf data.tar.gz | |||
./ | |||
./etc/ | |||
./etc/apache/ | |||
./etc/apache/conf.d/ | |||
./etc/init.d/ | |||
./etc/init.d/apache | |||
./etc/logrotate.d/ | |||
./etc/logrotate.d/apache | |||
./usr/ | |||
./usr/lib/ | |||
./usr/lib/apache/ | |||
./usr/lib/apache/suexec.disabled | |||
./usr/lib/cgi-bin/ | |||
./usr/sbin/ | |||
./usr/sbin/apache | |||
./usr/sbin/apachectl | |||
./usr/share/ | |||
./usr/share/bug/ | |||
./usr/share/bug/apache/ | |||
./usr/share/bug/apache/presubj | |||
./usr/share/doc/ | |||
./usr/share/doc/apache/ | |||
./usr/share/doc/apache/examples/ | |||
...</pre> | |||
L'archivio <code>control.tar.gz</code> contiene le informazioni riguardanti il | |||
pacchetto e le sue dipendenze e degli script che vengono lanciati prima | |||
e dopo l'installazione o la rimozione. | |||
Il file <code>control</code> contiene il nome del pacchetto, la sua versione, la | |||
sezione, la priorità, l'architettura per cui è stato compilato il | |||
pacchetto, le dipendenze, il maintainer del pacchetto e la sua | |||
descrizione. Diamogli un'occhiata. | |||
<pre> # cat control | |||
Package: apache | |||
Version: 1.3.33-6 | |||
Section: web | |||
Priority: optional | |||
Architecture: i386 | |||
Depends: libc6 (>= 2.3.2.ds1-21), libdb4.2, libexpat1 (>= 1.95.8), | |||
mime-support, apache-common (>= 1.3.33-6), apache-common (<< 1.3.34-0), | |||
perl (>= 5.8.4-2), logrotate (>= 3.5.4-1), dpkg (>> 1.9.0), libmagic1, | |||
debconf | |||
Suggests: apache-doc | |||
Conflicts: apache-modules, libapache-mod-perl (<= 1.17-1), jserv (<= | |||
1.1-3) | |||
Replaces: apache-modules | |||
Provides: httpd-cgi, httpd | |||
Installed-Size: 700 | |||
Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org> | |||
Description: versatile, high-performance HTTP server | |||
The most popular server in the world, Apache features a modular | |||
design and supports dynamic selection of extension modules at runtime. | |||
Some of its strong points are its range of possible customization, | |||
dynamic adjustment of the number of server processes, and a whole | |||
range of available modules including many authentication mechanisms, | |||
server-parsed HTML, server-side includes, access control, CERN httpd | |||
metafiles emulation, proxy caching, etc. Apache also supports multiple | |||
virtual homing. | |||
. | |||
Separate Debian packages are available for PHP, mod_perl, Java | |||
Servlet support, Apache-SSL, and other common extensions. More | |||
information is available at http://www.apache.org/.</pre> | |||
Un pacchetto può avere priorità ''required'', ossia è necessario al funzionamento | |||
del sistema, ''important'', quindi costituisce la base del sistema, ''standard'', | |||
cioè i pacchetti comuni presenti su sistemi non troppo minimali, ''optional'', | |||
i pacchetti totalmente opzionali, quindi X11, Emacs, e via dicendo, e infine | |||
''extra'', che contiene pacchetti aventi caratteristiche particolari che li | |||
distinguono dagli optional. | |||
Oltre alle dipendenze vere e proprie (nel caso di sopra le libc, dpkg, | |||
debconf, ecc.), abbiamo anche altri pacchetti citati, ossia i ''suggested | |||
packages'', quindi quelli che possono funzionare bene assieme al pacchetto | |||
che si sta installando, i ''recommended'', che comunemente vengono | |||
installati assieme a quest'ultimo, i ''conflicts'' e i ''replaced packages'', | |||
rispettivamente i pacchetti con cui va in contrasto e che sostituisce, e | |||
infine i ''provided services'', i servizi che il pacchetto fornisce (in | |||
questo caso, demone http con supporto cgi). | |||
Guardiamo ora il file <code>conffiles</code>: | |||
<pre> # cat conffiles | |||
/etc/init.d/apache | |||
/etc/logrotate.d/apache</pre> | |||
Vengono elencati i file di configurazione che verranno creati. | |||
Gli scripts di cui parlavo prima sono <code>postinst</code>, <code>postrm</code>, <code>preinst</code> e <code>prerm</code>, | |||
che si occupano come già detto delle operazione pre e post | |||
installazione/rimozione. | |||
L'archivio <code>data.tar.gz</code> contiene tutti i file che verranno effettivamente | |||
disposti nel filesystem. | |||
Diamo per esempio un'occhiata alla directory <code>usr</code>: | |||
<pre> # ls | |||
apache_1.3.33-6_i386.deb control.tar.gz md5sums prerm | |||
conffiles data.tar.gz postinst templates | |||
config debian-binary postrm usr | |||
control etc preinst var | |||
# ls usr | |||
lib sbin share | |||
# ls usr/sbin | |||
apache apacheconfig apachectl</pre> | |||
===Pacchetti sorgenti=== | |||
I pacchetti sorgenti sono costituiti da due archivi e un file di testo: | |||
un file <code>.dsc</code> che descrive il pacchetto, un archivio <code>.orig.tar.gz</code> che | |||
contiene i sorgenti originali del software, e un <code>.diff.gz</code> contenente le | |||
patch applicate da Debian al pacchetto. | |||
<pre> # apt-get source irssi-text | |||
Reading Package Lists... Done | |||
Building Dependency Tree... Done | |||
Need to get 1168kB of source archives. | |||
Get:1 http://ftp.de.debian.org unstable/main irssi-text 0.8.9-3 (dsc) | |||
[691B] | |||
Get:2 http://ftp.de.debian.org unstable/main irssi-text 0.8.9-3 (tar) | |||
[1154kB] | |||
Get:3 http://ftp.de.debian.org unstable/main irssi-text 0.8.9-3 (diff) | |||
[13.9kB] | |||
Fetched 1168kB in 11s (103kB/s) | |||
dpkg-source: extracting irssi-text in irssi-text-0.8.9 | |||
# ls | |||
irssi-text-0.8.9 irssi-text_0.8.9-3.dsc | |||
irssi-text_0.8.9-3.diff.gz irssi-text_0.8.9.orig.tar.gz</pre> | |||
Il file <code>.dsc</code> contiene la versione del software, l'architettura per cui è | |||
stato scritto, la dipendenze da soddisfare e gli hash dei due archivi | |||
per verificarne l'integrità. | |||
<pre> # cat irssi-text_0.8.9-3.dsc | |||
-----BEGIN PGP SIGNED MESSAGE----- | |||
Hash: SHA1 | |||
Format: 1.0 | |||
Source: irssi-text | |||
Version: 0.8.9-3 | |||
Binary: irssi-text | |||
Maintainer: David Pashley <david@davidpashley.com> | |||
Architecture: any | |||
Standards-Version: 3.6.1 | |||
Build-Depends: libglib2.0-dev, perl (>= 5.8.1), libperl-dev (>= 5.8.1), | |||
libncurses5-dev, debhelper (>= 3.0.18), libssl-dev, openssl, | |||
autotools-dev | |||
Files: | |||
1df516a770656ff0bec0ab62f9096bf6 1153560 irssi-text_0.8.9.orig.tar.gz | |||
37f128f0dafa596c006090a1036ec9b2 13944 irssi-text_0.8.9-3.diff.gz | |||
-----BEGIN PGP SIGNATURE----- | |||
Version: GnuPG v1.2.5 (GNU/Linux) | |||
iD8DBQFCQU0ffDt5cIjHwfcRAoApAKCL5BUc7i9X3iQIQyapUJboWF9IPACgrWPd | |||
/t+qP8OkRmh1e6mUH8wz+ic= | |||
=TYfB | |||
-----END PGP SIGNATURE-----</pre> | |||
I file di control già visti nei pacchetti binari sono anche qui, | |||
contenuti nella cartella debian dell'archivio. | |||
<pre> # ls irssi-text-0.8.9 | |||
AUTHORS README.cygwin config.sub findsyntax.pl ltmain.sh | |||
COPYING TODO configure install-sh missing | |||
ChangeLog acconfig.h configure.in irssi-config.in mkinstalldirs | |||
INSTALL aclocal.m4 curses.m4 irssi-icon.png scripts | |||
Makefile.am autogen.sh debian irssi-version.h.in src | |||
Makefile.in colorless.theme default.theme irssi.conf stamp-h.in | |||
NEWS config.guess docs irssi.spec stamp.h.in | |||
README config.h.in file2header.sh irssi.spec.in syntax.pl | |||
# ls irssi-text-0.8.9/debian | |||
botti.1 conffiles copyright irssi-text.postinst prerm undocumented | |||
changelog control dirs menu rules</pre> | |||
Nel caso si stia installando un pacchetto sorgente, è bene non seguire | |||
la procedura <code>./configure;make;make install</code>; perchè il pacchetto non | |||
verrà tracciato, non si potrà prenderne informazioni tramite <code>dpkg-query</code> | |||
e per la rimozione bisognerà procedere manualmente, con il rischio di | |||
'sporcare' la distro. | |||
È meglio usare strumenti quali <code>dpkg-buildpackage</code> e <code>apt-build</code> (per | |||
cui rimando alle pagine di man) per avere i vantaggi della compilazione | |||
senza 'sporcare' il sistema. | |||
===Metapacchetti=== | |||
Esiste un tipo particolare di pacchetto detto metapacchetto. Questo è un | |||
pacchetto che in realtà non contiene alcun eseguibile o sorgente. 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/ | |||
./usr/share/doc/kde/HTML/en/kdm/ | |||
./usr/share/doc/kde/HTML/en/khelpcenter/ | |||
./usr/share/doc/kde/HTML/en/khelpcenter/faq/ | |||
./usr/share/doc/kde/HTML/en/khelpcenter/glossary/ | |||
./usr/share/doc/kde/HTML/en/khelpcenter/quickstart/ | |||
./usr/share/doc/kde/HTML/en/khelpcenter/userguide/ | |||
./usr/share/doc/kde/HTML/en/khelpcenter/visualdict/ | |||
...</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. | |||
==Elenco comandi principali== | ==Elenco comandi principali== |
contributi