Pacchetti binari e sorgenti: differenze tra le versioni

m
 
(16 versioni intermedie di 6 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
__TOC__


Su debian abbiamo fondamentalmente due tipi di pacchetti: i binari e i  
==Introduzione==
sorgenti. Partiamo dai primi.
Su Debian abbiamo fondamentalmente due tipi di pacchetti: i binari e i sorgenti.<br/>
Il sistema [[APT]] opera su questi 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 necessari (chiamati dipendenze), 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 [[metapacchetto|metapacchetti]].


==Pacchetti binari==
==Pacchetti binari==
Riga 7: Riga 10:
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'la possibilit� anche  
Sotto Debian, i binari hanno il suffisso .deb (c'è la possibilità anche  
di usare rpm, ma questa un'altra storia...).
di usare rpm, ma questa è un'altra storia).
Vediamo cosa contiene un archivio .deb:
Vediamo cosa contiene un archivio .deb:


Riga 26: Riga 29:
2.0</pre>
2.0</pre>


Il file debian-binary stabilisce la versione del formato deb, in questo  
Il file <code>debian-binary</code> stabilisce la versione del formato deb, in questo  
caso la 2.0. Estraiamo gli archivi control.tar.gz e data.tar.gz.
caso la 2.0. Estraiamo gli archivi <code>control.tar.gz</code> e <code>data.tar.gz</code>.


<pre> # tar xvzf control.tar.gz             
<pre> # tar xvzf control.tar.gz             
Riga 66: Riga 69:
...</pre>
...</pre>


L'archivio control.tar.gz contiene le informazioni riguardanti il  
L'archivio <code>control.tar.gz</code> contiene le informazioni riguardanti il  
pacchetto e le sue dipendenze e degli script che vengono lanciati prima  
pacchetto e le sue dipendenze e degli script che vengono lanciati prima  
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 <code>control</code> contiene il nome del pacchetto, la sua versione, la  
sezione, la priorit�, l'architettura per cui stato compilato il  
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.
descrizione. Diamogli un'occhiata.


<pre> # cat control
<pre> # cat control
Riga 105: Riga 108:
information is available at http://www.apache.org/.</pre>
information is available at http://www.apache.org/.</pre>


Un pacchetto pu� avere priorit� required, ossia necessario al funzionamento
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,
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  
distinguono dagli optional.
distinguono dagli optional.
Oltre alle dipendenze vere e proprie(nel caso di sopra le libc, dpkg,  
Oltre alle dipendenze vere e proprie (nel caso di sopra le libc, dpkg,  
debconf, ecc.), abbiamo anche altri pacchetti citati, ossia i suggested  
debconf, ecc.), abbiamo anche altri pacchetti citati, ossia i ''suggested  
packages, quindi quelli che possono funzionare bene assieme al pacchetto  
packages'', quindi quelli che possono funzionare bene assieme al pacchetto  
che si sta installando, i recommended, che comunemente vengono  
che si sta installando, i ''recommended'', che comunemente vengono  
installati assieme a quest'ultimo, i conflicts e i replaced packages,  
installati assieme a quest'ultimo, i ''conflicts'' e i ''replaced packages'',  
rispettivamente i pacchetti con cui va in contrasto e che sostituisce, e  
rispettivamente i pacchetti con cui va in contrasto e che sostituisce, e  
infine i provided services, i servizi che il pacchetto fornisce (in  
infine i ''provided services'', i servizi che il pacchetto fornisce (in  
questo caso, demone http con supporto cgi).
questo caso, demone http con supporto cgi).
Guardiamo ora conffiles:
Guardiamo ora il file <code>conffiles</code>:


<pre> # cat conffiles
<pre> # cat conffiles
Riga 125: Riga 128:
/etc/logrotate.d/apache</pre>
/etc/logrotate.d/apache</pre>


Vengono elencati i file di configurazione che verrano creati.
Vengono elencati i file di configurazione che verranno creati.
Gli scripts di cui parlavo prima sono postinst, postrm, preinst e prerm,  
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  
che si occupano come già detto delle operazione pre e post  
installlazione/rimozione.
installazione/rimozione.


L'archivio data.tar.gz contiene tutti i file che verranno effettivamente  
L'archivio <code>data.tar.gz</code> contiene tutti i file che verranno effettivamente  
disposti nel filesystem.
disposti nel filesystem.
Diamo per esempio un'occhiata alla directory usr:
Diamo per esempio un'occhiata alla directory <code>usr</code>:


<pre> # ls
<pre> # ls
Riga 144: Riga 147:
apache  apacheconfig  apachectl</pre>
apache  apacheconfig  apachectl</pre>


==Pacchetti sorgenti==
== Pacchetti sorgente ==
I pacchetti sorgente possono essere di due tipi:
;pacchetti nativi: sorgenti la cui struttura e contenuto aderisce alla [[Debian Policy]]. A partire da questi pacchetti è possibile costruire un file .deb .
;pacchetti non nativi: sorgenti non pensati specificamente per Debian e che, pertanto, necessitano di modifiche da parte dei [[Maintainer|Debian Maintainers]] o dei [[Debian Developer|Debian Developers]] per poter costituire la base per la creazione di un pacchetto binario .deb .


I pacchetti sorgenti sono costituiti da due archivi e un file di testo:
=== Pacchetti non nativi ===
un file .dsc che descrive il pacchetto, un archivio .orig.tar.gz che
I pacchetti sorgente non nativi costituiscono la stragrande maggioranza dei file sorgente e, prima di poter entrare a far parte di un [[repository]] Debian, devono essere modificati per poter aderire alla Debian Policy. La modifica più importante a questi sorgenti è la creazione della directory "debian".<br/>
contiene i sorgenti originali del software, e un .diff.gz contenente le
patch applicate da debian al pacchetto.


<pre> # apt-get source irssi-text
Questi sorgenti sono costituiti da due archivi e un file di testo:
Reading Package Lists... Done
* un file <code>.dsc</code> che descrive il pacchetto
Building Dependency Tree... Done
* un archivio compresso <code>.orig.tar.gz</code> che contiene i sorgenti originali del software
Need to get 1168kB of source archives.
* un <code>.diff.gz</code> (o con nome simile) contenente le [[patch]] applicate da Debian al pacchetto.
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
<pre>
-----BEGIN PGP SIGNED MESSAGE-----
# apt-get source irssi-text
Hash: SHA1
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>


Format: 1.0
Il file <code>.dsc</code> contiene la versione del software, l'[[architettura]] per cui è stato scritto, la [[dipendenze]] da soddisfare, il checksum [[SHA]] dei due archivi per verificarne l'integrità e la firma [[GPG]] per accertarsi che i pacchetti provengano da una fonte sicura.
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-----
<pre>
Version: GnuPG v1.2.5 (GNU/Linux)
# cat irssi-text_0.8.9-3.dsc
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


iD8DBQFCQU0ffDt5cIjHwfcRAoApAKCL5BUc7i9X3iQIQyapUJboWF9IPACgrWPd
Format: 1.0
/t+qP8OkRmh1e6mUH8wz+ic=
Source: irssi-text
=TYfB
Version: 0.8.9-3
-----END PGP SIGNATURE-----</pre>
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


I file di control gi� visti nei pacchetti binari sono anche qui,
-----BEGIN PGP SIGNATURE-----
contenuti nella cartella debian dell'archivio.
Version: GnuPG v1.2.5 (GNU/Linux)


<pre> # ls irssi-text-0.8.9
iD8DBQFCQU0ffDt5cIjHwfcRAoApAKCL5BUc7i9X3iQIQyapUJboWF9IPACgrWPd/t+qP8OkRmh1e6mUH8wz+ic==TYfB
AUTHORS      README.cygwin    config.sub      findsyntax.pl      ltmain.sh
-----END PGP SIGNATURE-----
COPYING      TODO            configure      install-sh          missing
</pre>
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 ./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-buildbackage e apt-build (per
cui rimando alle pagine di man) per avere i vantaggi della compilazione
senza 'sporcare' il sistema.


==Metapacchetti==
I file di control già visti nei pacchetti binari sono anche qui, contenuti nella cartella "debian" dell'archivio.


Esiste un tipo particolare di pacchetto detto metapacchetto. Questo � un
<pre>
pacchetto che in realt� non contiene alcun eseguibile o sorgente. Serve
# ls irssi-text-0.8.9
semplicemente per installare tutto l'insieme di pacchetti (a volte a
AUTHORS      README.cygwin    config.sub      findsyntax.pl      ltmain.sh
loro volta metapacchetti) che lo costituisce.
COPYING      TODO            configure      install-sh          missing
Un esempio � kde:
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


<pre> # ls -l
# ls irssi-text-0.8.9/debian
total 6348
botti.1    conffiles  copyright irssi-text.postinst prerm undocumented
-rw-r--r--  1 root root 6486276 Jan 26 17:32 kdebase_2.2.2-14.9_i386.deb</pre>
changelog control    dirs      menu                rules
 
</pre>
Gi� le dimensioni lasciano presagire qualcosa: come pu� un pacchetto
come kdebase occupare solo poco pi� di 6 Mb? Spacchettiamolo:
Nel caso si stia installando un pacchetto sorgente, è bene <u>non</u> 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 distribuzione.<br/>
 
È 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.
<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 data.tar.gz contiene solo documentazione e delle librerie.
Diamo un'occhiata al control:
 
<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.


== Metapacchetti ==
Leggere la guida: [[Gestione dei metapacchetti]]


{{Autori
|Autore=[[User:sync|sync]]
}}


---- [[User:sync|sync]]
[[Categoria:Apt]]
[[Categoria:Creare e modificare pacchetti]]
[[Categoria:Gestione dei Pacchetti]]
3 581

contributi