[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ successivo ]
Questo capitolo tratta alcuni aspetti dettagliati a basso livello della gestione dei pacchetti di Debian. Se si è principalmente interessati nell'uso degli strumenti relativi, si salti ai capitoli Gli strumenti di gestione dei pacchetti Debian, Capitolo 8 e Mantenere il sistema Debian aggiornato, Capitolo 9.
I pacchetti generalmente contengono tutti quei file necessari a implementare una serie di comandi o funzionalità correlate. Ci sono due tipi di pacchetti Debian:
Binary packages, which contain executables, configuration files,
man/info pages, copyright information, and other documentation. These packages
are distributed in a Debian-specific archive format (see Qual è il formato di un pacchetto binario Debian?,
Sezione 7.2); they are usually characterized by having a '.deb' file
extension. Binary packages can be unpacked using the Debian utility
dpkg (possibly via a frontend like aptitude
); details
are given in its manual page.
Source packages, which consist of a .dsc file describing
the source package (including the names of the following files), a
.orig.tar.gz file that contains the original unmodified source in
gzip-compressed tar format and usually a .diff.gz file that
contains the Debian-specific changes to the original source. The utility
dpkg-source packs and unpacks Debian source archives; details are
provided in its manual page. (The program apt-get
can be used as
a frontend for dpkg-source.)
L'installazione di software attraverso il sistema dei pacchetti usa
"dipendenze" che vengono progettate con cura dai manutentori dei
pacchetti. Queste dipendenze sono documentate nel file control
associato ad ogni pacchetto. Per esempio, il pacchetto contenente il
compilatore C GNU (gcc
) "dipende" dal pacchetto
binutils
che include il linker e l'assemblatore. Se un utente
tenta di installare gcc
senza avere prima installato
binutils
, il sistema di gestione dei pacchetti (dpkg) invia un
messaggio di errore avvertendo che necessita anche di binutils
, e
ferma l'installazione di gcc
. (Questa funzione può essere
tuttavia aggirata dall'utente tenace, si veda dpkg(8)
.) Per
maggiori informazioni, si veda Cosa significa dire che un
pacchetto Dipende da, Raccomanda, Suggerisce, Va
in conflitto con, Sostituisce, Rompe o Fornisce
un altro pacchetto?, Sezione 7.9 più sotto.
Gli strumenti Debian per i pacchetti possono essere usati per:
manipolare e gestire pacchetti o parti di pacchetti,
amministrare le deviazioni locali dei file in un pacchetto,
aiutare gli sviluppatori nella costruzione degli archivi dei pacchetti e
aiutare gli utenti nell'installazione di pacchetti che sono in un sito FTP remoto.
Un "pacchetto" Debian, o un file archivio Debian, contiene i file eseguibili, le librerie e la documentazione associati ad una particolare suite di programmi o ad un particolare gruppo di programmi correlati. Normalmente, un file archivio Debian ha un nome che termina in .deb.
I dettagli di questo formato per i pacchetti binari Debian sono descritti nella
pagina di manuale deb(5)
. Questo formato interno è soggetto a
modifiche (tra diversi rilasci principali di Debian GNU/Linux), quindi usare
sempre dpkg-deb(1)
se si devono effettuare manipolazioni a basso
livello di file .deb.
Il nome dei pacchetti binari Debian segue la seguente convenzione: <pippo>_<NumeroVersione>-<NumeroRevisioneDebian>_<ArchitetturaDebian>.deb
Note that foo is supposed to be the package name. Checking the package name associated with a particular Debian archive file (.deb file) can be done in one of these ways:
Esaminando il file "Packages" nella directory dove era stato archiviato su un archivio FTP Debian. Questo file contiene una sezione che descrive ogni pacchetto; il primo campo in ogni sezione è il nome formale del pacchetto.
Utilizzando il comando dpkg --info pippo_VVV-RRR_AAA.deb (dove VVV, RRR e AAA sono rispettivamente la versione, la revisione e l'architettura del pacchetto in questione). Questo mostra, tra le altre cose, il nome del pacchetto corrispondente al file archivio spacchettato.
La parte VVV è il numero di versione specificato dallo sviluppatore originale. Qui non ci sono standard, per cui il numero di versione può avere formati differenti come "19990513" e "1.3.8pre1".
La parte RRR è il numero di revisione Debian e viene specificata dallo sviluppatore Debian (o il singolo utente se sceglie di crearsi il pacchetto da sé). Questo numero corrisponde al livello di revisione del pacchetto Debian, quindi un nuovo livello di revisione significa solitamente modifiche nel Makefile Debian (debian/rules), nel file di controllo Debian (debian/control), negli script di installazione o rimozione (debian/p*) oppure nei file di configurazione utilizzati con il pacchetto.
The AAA component identifies the processor for which the package
was built. This is commonly amd64, which refers to AMD64, Intel
64 or VIA Nano chips. For other possibilities review Debian's FTP directory
structure at Cosa sono tutte quelle
directory negli archivi FTP Debian?, Sezione 6.7. For details, see the
description of "Debian architecture" in the manual page
dpkg-architecture(1)
.
Le specifiche riguardanti il contenuto di un file di controllo Debian sono fornite nel manuale Debian Policy, sezione 5, si veda Quale altra documentazione esiste su e per un sistema Debian?, Sezione 12.1.
Brevemente, un esempio di file di controllo è mostrato di seguito per il pacchetto Debian hello:
Package: hello Version: 2.9-2+deb8u1 Architecture: amd64 Maintainer: Santiago Vila <sanvila@debian.org> Installed-Size: 145 Depends: libc6 (>= 2.14) Conflicts: hello-traditional Breaks: hello-debhelper (<< 2.9) Replaces: hello-debhelper (<< 2.9), hello-traditional Section: devel Priority: optional Homepage: http://www.gnu.org/software/hello/ Description: example package based on GNU hello The GNU hello program produces a familiar, friendly greeting. It allows non-programmers to use a classic computer science tool which would otherwise be unavailable to them. . Seriously, though: this is an example of how to do a Debian package. It is the Debian version of the GNU Project's `hello world' program (which is itself an example for the GNU Project).
Il campo Package fornisce il nome del pacchetto. Questo è il nome attraverso il quale il pacchetto può essere manipolato con gli strumenti per i pacchetti ed è solitamente simile, ma non necessariamente identico, alla prima parte della stringa del nome del file archivio Debian.
Il campo Version fornisce sia il numero della versione dello sviluppatore originale, sia (nell'ultima parte) il livello di revisione del pacchetto Debian di questo programma, come spiegato in Perché i nomi dei pacchetti Debian sono così lunghi?, Sezione 7.3.
Il campo Architecture specifica il chip per il quale questo particolare binario è stato compilato.
Il campo Depends fornisce una lista di pacchetti che devono essere installati per poter installare questo pacchetto con successo.
Installed-Size indica quanto spazio su disco occuperà il pacchetto installato. È pensato per essere usato dai frontend di installazione in modo da poter mostrare se c'è abbastanza spazio disponibile su disco per installare il programma.
La riga Section fornisce la "sezione" in cui questo pacchetto Debian è archiviato presso i siti FTP Debian.
Priority indica quanto è importante questo pacchetto per l'installazione, così che i software semi-intelligenti come apt o aptitude possano ordinare il pacchetto dentro una categoria di, ad esempio, pacchetti installati in modo opzionale. Si veda Cosa sono i pacchetti Essential, Required, Important, Standard, Optional o Extra?, Sezione 7.7.
Il campo Maintainer fornisce l'indirizzo di posta elettronica della persona che è attualmente responsabile della manutenzione di questo pacchetto.
Il campo Description fornisce un breve riassunto delle funzionalità del pacchetto.
Per ulteriori informazioni riguardo tutti i campi possibili che può avere un pacchetto, si veda il manuale Debian Policy, sezione 5, "Control files and their fields" (vedere Quale altra documentazione esiste su e per un sistema Debian?, Sezione 12.1).
Conffiles è una lista di file di configurazione (solitamente situati in /etc) che il sistema di gestione dei pacchetti non sovrascriverà quando il pacchetto viene aggiornato. Questo assicura che i valori locali per il contenuto di questi file vengano preservati, ed è una caratteristica critica che permette l'aggiornamento in loco di pacchetti su un sistema in esecuzione.
Per determinare esattamente quali file sono preservati durante un aggiornamento, si esegua:
dpkg --status pacchetto
e si guardi alla voce "Conffiles:".
Questi file sono script eseguibili che vengono automaticamente eseguiti prima o dopo l'installazione o la rimozione di un pacchetto. Insieme ad un file chiamato control, tutti questi file sono parte della sezione «control» di un file archivio Debian.
I singoli file sono:
This script is executed before the package it belongs to is unpacked from its Debian archive (".deb") file. Many 'preinst' scripts stop services for packages which are being upgraded until their installation or upgrade is completed (following the successful execution of the 'postinst' script).
This script typically completes any required configuration of the package foo once foo has been unpacked from its Debian archive (".deb") file. Often, 'postinst' scripts ask users for input, and/or warn them that if they accept default values, they should remember to go back and re-configure that package as needed. Many 'postinst' scripts then execute any commands necessary to start or restart a service once a new package has been installed or upgraded.
Questo script tipicamente ferma tutti i demoni associati ad un pacchetto. Viene eseguito prima della rimozione di file associati al pacchetto.
Questo script tipicamente modifica i collegamenti o altri file associati a pippo, o rimuove i file creati da quel pacchetto. (Si veda anche Cos'è un pacchetto virtuale?, Sezione 7.8.)
Currently all of the control files can be found in the directory /var/lib/dpkg/info. The files relevant to package foo begin with the name "foo" and have file extensions of "preinst", "postinst", etc., as appropriate. The file foo.list in that directory lists all of the files that were installed with the package foo. (Note that the location of these files is a dpkg internal; you should not rely on it.)
Ad ogni pacchetto Debian viene assegnata una priorità dai manutentori della distribuzione, come aiuto al sistema di gestione dei pacchetti. Le priorità sono:
Required (Richiesto): pacchetti necessari al corretto funzionamento del sistema.
Comprendono tutti gli strumenti che sono necessari per riparare i difetti di sistema. Questi pacchetti non devono essere rimossi o il proprio sistema potrebbe diventare completamente non funzionante e probabilmente non si riuscirebbe nemmeno ad usare dpkg per rimettere le cose a posto. I sistemi con solo i pacchetti Required sono probabilmente inutilizzabili, ma hanno abbastanza funzionalità per permettere all'amministratore di sistema di avviare ed installare altri programmi.
Important (Importante): pacchetti che si dovrebbero trovare su tutti i sistemi *nix.
Other packages which the system will not run well or be usable without will be here. This does NOT include Emacs or X or TeX or any other large application. These packages only constitute the bare infrastructure.
Standard packages are standard on any Linux system, including a reasonably small but not too limited character-mode system. Tools are included to be able to send e-mail (with mutt) and download files from FTP servers.
This is what will be installed by default if users do not select anything else. It does not include many large applications, but it does include the Python interpreter and some server software like OpenSSH (for remote administration) and Exim (for mail delivery, although it can be configured for local delivery only). It also includes some common generic documentation that most users will find helpful.
Optional packages include all those that you might reasonably want to install if you do not know what they are, or that do not have specialized requirements.
Comprendono X, una distribuzione completa di TeX e molte applicazioni.
Extra: pacchetti che o entrano in conflitto con altri di priorità più alta, probabilmente utili se già si sa a cosa servono, oppure hanno requisiti speciali che li rendono non adatti come "Optional".
Se si fa un'installazione Debian predefinita verranno installati sul sistema tutti i pacchetti di priorità Standard o maggiore. Se si selezionano attività predefinite si otterranno anche pacchetti con priorità più bassa.
In aggiunta, alcuni pacchetti sono marcati come Essential (Essenziali) dato che sono assolutamente necessari per il corretto funzionamento del sistema. Gli strumenti di gestione dei pacchetti si rifiuteranno di rimuoverli.
A virtual package is a generic name that applies to any one of a group of packages, all of which provide similar basic functionality. For example, both the konqueror and firefox-esr programs are web browsers, and should therefore satisfy any dependency of a program that requires a web browser on a system, in order to work or to be useful. They are therefore both said to provide the "virtual package" called www-browser.
Similarly, exim4 and sendmail both provide the functionality of a mail transport agent. They are therefore said to provide the virtual package "mail-transport-agent". If either one is installed, then any program depending on the installation of a mail-transport-agent will be satisfied by the presence of this virtual package.
Debian fornisce un meccanismo in modo che, se più di un pacchetto che fornisce lo stesso pacchetto virtuale è installato su di un sistema, l'amministratore di sistema può allora impostarne uno come pacchetto preferito. Il relativo comando è update-alternatives ed è descritto più in dettaglio in Ad alcuni utenti piace mawk, ad altri gawk; ad alcuni piace vim, ad altri elvis; ad alcuni piace trn, ad altri tin; come supporta Debian le diversità?, Sezione 11.10.
Il sistema dei pacchetti Debian ha una serie di "dipendenze" dei pacchetti che sono pensate per indicare (con un singolo termine) il livello a cui, su un dato sistema, un determinato Programma A può funzionare indipendentemente dall'esistenza di un Programma B.
Il pacchetto A dipende dal Pacchetto B se B deve essere assolutamente installato per eseguire A. In alcuni casi, A dipende non solo da B, ma da una versione di B. In questo caso la dipendenza dalla versione è solitamente un limite inferiore, nel senso che A dipende da qualsiasi versione di B più recente di quella specificata.
Il pacchetto A raccomanda il Pacchetto B se il manutentore del pacchetto giudica che la maggior parte degli utenti non vorrebbe A senza le funzionalità fornite da B.
Il pacchetto A suggerisce il Pacchetto B se B contiene file attinenti alle funzioni di A (e che solitamente le migliorano).
Il pacchetto A va in conflitto con il Pacchetto B quando A non è in grado di funzionare se B è installato sul sistema. Molto spesso i conflitti si hanno quando A contiene dei file che rappresentano dei miglioramenti di quelli in B. Spesso "va in conflitto" è associato a "sostituisce".
Il pacchetto A sostituisce il Pacchetto B quando i file installati da B vengono rimossi e (in alcuni casi) sovrascritti dai file di A.
Il pacchetto A rompe il pacchetto B quando non è possibile configurare simultaneamente entrambi i pacchetti su un sistema. Il sistema di gestione dei pacchetti si rifiuta di installare uno se l'altro è già installato e configurato sul sistema.
Il pacchetto A fornisce il Pacchetto B quando tutti i file e le funzionalità di B sono incorporate in A. Questo meccanismo permette agli utenti con limitato spazio su disco rigido di avere solo la parte del pacchetto A realmente necessaria per loro.
More detailed information on the use of each of these terms can be found in the Debian Policy manual, section 7.2, "Binary Dependencies", see Quale altra documentazione esiste su e per un sistema Debian?, Sezione 12.1.
"Pre-Depends" is a special dependency. In the case of most packages, dpkg will unpack the archive file of a package (i.e., its .deb file) independently of whether or not the files on which it depends exist on the system. Simplistically, unpacking means that dpkg will extract the files from the archive file that were meant to be installed on your file system, and put them in place. If those packages depend on the existence of some other packages on your system, dpkg will refuse to complete the installation (by executing its "configure" action) until the other packages are installed.
Tuttavia, per alcuni pacchetti, dpkg si rifiuta persino di spacchettarli finché certe dipendenze non vengono risolte. Tali pacchetti si dice che "Pre-dipendono" dalla presenza di altri pacchetti. Il progetto Debian aveva fornito questo meccanismo per supportare un aggiornamento sicuro di sistemi dal formato a.out al formato ELF, dove l'ordine in cui i pacchetti venivano spacchettati era critico. Esistono altre situazioni di aggiornamenti estesi in cui questo metodo è utile, per esempio pacchetti con priorità richiesta e la loro dipendenza da libC.
Come sopra, informazioni più dettagliate al riguardo possono essere reperite nel manuale Debian Policy.
Queste etichette dei «desiderata» indicano il volere dell'utente riguardo ad un pacchetto (come indicato direttamente dall'utente nell'esecuzione di dpkg/apt/aptitude).
I loro significati sono:
sconosciuto: l'utente non ha mai indicato se vuole il pacchetto;
installa: l'utente vuole che il pacchetto sia installato o aggiornato;
remove - the user wants the package removed, but does not want to remove any existing configuration file.
elimina: l'utente vuole che il pacchetto sia completamente rimosso, compresi i file di configurazione;
blocca: l'utente non vuole che il pacchetto sia processato, ovvero vuole mantenere la versione attuale con lo stato attuale, qualunque essi siano.
Esistono tre modi per bloccare (hold) pacchetti, con dpkg, apt o aptitude.
Con dpkg, si deve solo esportare la lista delle selezioni dei pacchetti con:
dpkg --get-selections \* > selezione.txt
Poi modificare il file risultante selezione.txt
, cambiando la riga
contenente il pacchetto che si desidera bloccare, per esempio
libc6
, da questo:
libc6 install
a questo:
libc6 hold
Salvare il file e ricaricarlo nel database di dpkg con:
dpkg --set-selections < selezione.txt
Con apt si può bloccare un pacchetto usando
apt-mark hold nome_pacchetto
e rimuovere il blocco con
apt-mark unhold nome_pacchetto
Con aptitude, si può bloccare un pacchetto usando
aptitude hold nome_pacchetto
e rimuovere il blocco con
aptitude unhold nome_pacchetto
I pacchetti sorgente Debian non possono realmente venire "installati", vengono solo spacchettati in qualsiasi directory in cui si vogliano compilare i pacchetti binari che producono.
Source packages are distributed on most of the same mirrors where you can
obtain the binary packages. If you set up your APT's
sources.list(5)
to include the appropriate "deb-src"
lines, you'll be able to easily download any source package by running
apt-get source pippo
To help you in actually building the source package, Debian source packages provide the so-called build-dependencies mechanism. This means that the source package maintainer keeps a list of other packages that are required to build their package. To see how this is useful, run
apt-get build-dep pippo
prima di compilare il sorgente.
Il metodo consigliato è usare vari strumenti wrapper. Verrà mostrato come farlo usando gli strumenti devscripts. Installare questo pacchetto se non è ancora stato fatto.
Ora, come prima cosa recuperare il pacchetto sorgente:
apt-get source pippo
e spostarsi nell'albero dei sorgenti:
cd pippo-*
Poi installare le dipendenze di compilazione necessarie (se ce ne sono):
sudo apt-get build-dep pippo
Creare quindi una versione dedicata della propria compilazione (in modo da non confondersi successivamente quando Debian stessa rilascerà una nuova versione):
dch -l local 'Bla bla bla'
Da ultimo compilare il proprio pacchetto:
debuild -us -uc
Se tutto ha funzionato a dovere, dovrebbe essere ora possibile installare il proprio pacchetto eseguendo
sudo dpkg -i ../*.deb
Se si preferisce fare le cose a mano, e non si vuole usare devscripts, seguire la procedura seguente:
Si avrà bisogno di tutti i file pippo_*.dsc, pippo_*.tar.gz e pippo_*.diff.gz per compilare i sorgenti (nota: non c'è nessun .diff.gz per alcuni pacchetti che sono nativi di Debian).
Una volta che li si ha (Come si installa un pacchetto
sorgente?, Sezione 7.13), e si ha il pacchetto dpkg-dev
installato, il seguente comando
dpkg-source -x pippo_versione-revisione.dsc
estrarrà il pacchetto in una directory chiamata pippo-versione.
If you just want to compile the package, you may cd into the foo-version directory and issue the command
dpkg-buildpackage -rfakeroot -b
per compilare il pacchetto (si noti che questo richiede anche il pacchetto
fakeroot
), e poi
dpkg -i ../pippo_versione-revisione_arch.deb
per installare il pacchetto appena compilato.
For a more detailed description on this, read the New Maintainers' Guide,
available in the maint-guide
package or at http://www.debian.org/doc/devel-manuals#maint-guide
,
or the Guide for Debian Maintainers, available in the debmake-doc
package or at https://www.debian.org/doc/devel-manuals#debmake-doc
.
[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ successivo ]
The Debian GNU/Linux FAQ
versione 8.1-0.rb1, 24 January 2017