Pacchetti binari e sorgenti: differenze tra le versioni
m (→Metapacchetti) |
m (→Pacchetti sorgenti: typo in dpkg-buildpackage) |
||
Riga 7: | Riga 7: | ||
I pacchetti binari sono archivi contenenti eseguibili, file di | I pacchetti binari sono archivi contenenti eseguibili, file di | ||
configurazione e documentazione che assieme formano un'applicazione. | configurazione e documentazione che assieme formano un'applicazione. | ||
Sotto debian, i binari hanno il suffisso .deb (c' | Sotto debian, i binari hanno il suffisso .deb (c'è la possibilità anche | ||
di usare rpm, ma questa | di usare rpm, ma questa è un'altra storia...). | ||
Vediamo cosa contiene un archivio .deb: | Vediamo cosa contiene un archivio .deb: | ||
Riga 70: | Riga 70: | ||
e dopo l'installazione o la rimozione. | e dopo l'installazione o la rimozione. | ||
Il file control contiene il nome del pacchetto, la sua versione, la | Il file control contiene il nome del pacchetto, la sua versione, la | ||
sezione, la | sezione, la priorità, l'architettura per cui è stato compilato il | ||
pacchetto, le dipendenze, il maintainer del pacchetto e la sua | pacchetto, le dipendenze, il maintainer del pacchetto e la sua | ||
descizione. Diamogli un'occhiata. | descizione. Diamogli un'occhiata. | ||
Riga 105: | Riga 105: | ||
information is available at http://www.apache.org/.</pre> | information is available at http://www.apache.org/.</pre> | ||
Un pacchetto | Un pacchetto può avere priorità required, ossia è necessario al funzionamento | ||
del sistema, important, quindi costituisce la base del sistema, standard, | 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 | i pacchetti totalmente opzionali, quindi X11, Emacs, e via dicendo, e infine | ||
extra, che contiene pacchetti aventi caratteristiche particolari che li | extra, che contiene pacchetti aventi caratteristiche particolari che li | ||
Riga 127: | Riga 127: | ||
Vengono elencati i file di configurazione che verrano creati. | Vengono elencati i file di configurazione che verrano creati. | ||
Gli scripts di cui parlavo prima sono postinst, postrm, preinst e prerm, | Gli scripts di cui parlavo prima sono postinst, postrm, preinst e prerm, | ||
che si occupano come | che si occupano come già detto delle operazione pre e post | ||
installlazione/rimozione. | installlazione/rimozione. | ||
Riga 167: | Riga 167: | ||
irssi-text_0.8.9-3.diff.gz irssi-text_0.8.9.orig.tar.gz</pre | irssi-text_0.8.9-3.diff.gz irssi-text_0.8.9.orig.tar.gz</pre | ||
Il file .dsc contiene la versione del software, l'architettura per cui | Il file .dsc contiene la versione del software, l'architettura per cui è | ||
stato scritto, la dipendenze da soddisfare e gli hash dei due archivi | stato scritto, la dipendenze da soddisfare e gli hash dei due archivi | ||
per verificarne l' | per verificarne l'integrità. | ||
<pre> # cat irssi-text_0.8.9-3.dsc | <pre> # cat irssi-text_0.8.9-3.dsc | ||
Riga 197: | Riga 197: | ||
-----END PGP SIGNATURE-----</pre> | -----END PGP SIGNATURE-----</pre> | ||
I file di control | I file di control già visti nei pacchetti binari sono anche qui, | ||
contenuti nella cartella debian dell'archivio. | contenuti nella cartella debian dell'archivio. | ||
Riga 213: | Riga 213: | ||
changelog control dirs menu rules</pre> | changelog control dirs menu rules</pre> | ||
Nel caso si stia installando un pacchetto sorgente, | Nel caso si stia installando un pacchetto sorgente, è bene non seguire | ||
la procedura ./configure;make;make install; | la procedura ./configure;make;make install; perchè il pacchetto non | ||
verrà tracciato, non si potrà prenderne informazioni tramite dpkg-query | |||
e per la rimozione | e per la rimozione bisognerà procedere manualmente, con il rischio di | ||
'sporcare' la distro. | 'sporcare' la distro. | ||
E' meglio usare strumenti quali dpkg- | E' meglio usare strumenti quali dpkg-buildpackage e apt-build (per | ||
cui rimando alle pagine di man) per avere i vantaggi della compilazione | cui rimando alle pagine di man) per avere i vantaggi della compilazione | ||
senza 'sporcare' il sistema. | senza 'sporcare' il sistema. | ||
Riga 224: | Riga 224: | ||
==Metapacchetti== | ==Metapacchetti== | ||
Esiste un tipo particolare di pacchetto detto metapacchetto. Questo | Esiste un tipo particolare di pacchetto detto metapacchetto. Questo è un | ||
pacchetto che in | pacchetto che in realtà non contiene alcun eseguibile o sorgente. Serve | ||
semplicemente per installare tutto l'insieme di pacchetti (a volte a | semplicemente per installare tutto l'insieme di pacchetti (a volte a | ||
loro volta metapacchetti) che lo costituisce. | loro volta metapacchetti) che lo costituisce. | ||
Un esempio | Un esempio è kde: | ||
<pre> # ls -l | <pre> # ls -l | ||
Riga 234: | Riga 234: | ||
-rw-r--r-- 1 root root 6486276 Jan 26 17:32 kdebase_2.2.2-14.9_i386.deb</pre> | -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 | come kdebase occupare solo poco più di 6 Mb? Spacchettiamolo: | ||
<pre> # ar -x kdebase_2.2.2-14.9_i386.deb | <pre> # ar -x kdebase_2.2.2-14.9_i386.deb | ||
Riga 301: | Riga 301: | ||
Includes: kicker, kwin, kdesktop and others...</pre> | Includes: kicker, kwin, kdesktop and others...</pre> | ||
In | In realtà, vediamo che a costituire il cuore di kde sono le sue | ||
dipendenze. Senza i metapacchetti bisognerebbe installare uno per uno i | dipendenze. Senza i metapacchetti bisognerebbe installare uno per uno i | ||
pacchetti che costituiscono kde. | pacchetti che costituiscono kde. |
Versione delle 08:39, 14 giu 2005
Su debian abbiamo fondamentalmente due tipi di pacchetti: i binari e i sorgenti. Partiamo dai primi.
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:
# 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
Abbiamo un file e due tarball. Procediamo estraendo questi ultimi.
# 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
Il file debian-binary stabilisce la versione del formato deb, in questo caso la 2.0. Estraiamo gli archivi control.tar.gz e data.tar.gz.
# 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/ ...
L'archivio control.tar.gz 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 control 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 descizione. Diamogli un'occhiata.
# 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/.
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 conffiles:
# cat conffiles /etc/init.d/apache /etc/logrotate.d/apache
Vengono elencati i file di configurazione che verrano creati. Gli scripts di cui parlavo prima sono postinst, postrm, preinst e prerm, che si occupano come già detto delle operazione pre e post installlazione/rimozione.
L'archivio data.tar.gz contiene tutti i file che verranno effettivamente disposti nel filesystem. Diamo per esempio un'occhiata alla directory usr:
# 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
Pacchetti sorgenti
I pacchetti sorgenti sono costituiti da due archivi e un file di testo: un file .dsc che descrive il pacchetto, un archivio .orig.tar.gz che contiene i sorgenti originali del software, e un .diff.gz contenente le patch applicate da debian al pacchetto.
# 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 .dsc 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-----
I file di control già visti nei pacchetti binari sono anche qui, contenuti nella cartella debian dell'archivio.
# 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
Nel caso si stia installando un pacchetto sorgente, è bene non seguire la procedura ./configure;make;make install; perchè il pacchetto non verrà tracciato, non si potrà prenderne informazioni tramite dpkg-query e per la rimozione bisognerà procedere manualmente, con il rischio di 'sporcare' la distro. E' meglio usare strumenti quali dpkg-buildpackage e apt-build (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 è kde:
# 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/ ./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/ ...
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.