Introduzione all'APT System: differenze tra le versioni
Wtf (discussione | contributi) |
Wtf (discussione | contributi) |
||
Riga 358: | Riga 358: | ||
==Approfondimenti== | ==Approfondimenti== | ||
=== Manpages === | |||
<code>man apt-get</code><br/> | |||
<code>man apt.conf</code> | |||
===Sitografia=== | ===Sitografia=== | ||
* [http://www.debian.org/doc/manuals/apt-howto/index.it.html#contents Apt HowTo], panoramica completa sulle funzionalità e sull'utilizzo del sistema APT | * [http://www.debian.org/doc/manuals/apt-howto/index.it.html#contents Apt HowTo], panoramica completa sulle funzionalità e sull'utilizzo del sistema APT |
Versione delle 21:05, 18 lug 2013
Versioni Compatibili Tutte le versioni supportate di Debian |
Introduzione
Il sistema APT (Advanced Packaging Tool) è, semplificando, un insieme di strumenti atti a permettere l'installazione e la successiva gestione di moltissimi programmi. Volendo essere più precisi l'apt-system creato dagli sviluppatori di Debian è un insieme di script che si appoggiano al comando dpkg
allo scopo di snellire/agevolare la gestione di pacchetti e dipendenze nei sistemi Debian GNU/Linux. Notoriamente chi prende confidenza con Debian difficilmente sarà tentato di cambiare distribuzione, e questo anche grazie a questo splendido set di tool.
Esistono due strade per installare un programma sul proprio computer:
- tramite APT;
- scaricando e compilando manualmente i sorgenti dei vari programmi.
La prima soluzione è infinitamente più comoda e rapida, mentre la seconda in genere viene intrapresa solo se si hanno particolari necessità o se un certo programma non è disponibile tramite APT. Come anticipato esistono diversi strumenti per gestire il sistema APT:
- Apt-Get e dpkg, strumenti a riga di comando brevemente descritti nella sezione successiva.
- Aptitude, è il più potente strumento grafico a caratteri per la gestione dei pacchetti
- Synaptic, disponibile in ambienti grafici come GNOME, KDE, ecc. è tra gli strumenti più semplice da usare, consigliato a tutti ed in particolar modo agli utenti alle prime armi.
- Wajig
Apt-get e altri strumenti
Lungi dall'essere completa, questa brevissima panoramica ha lo scopo di fornire un piccolo vademecum per mantenere in forma il nostro sistema operativo senza far ricorso a tool grafici che, nella maggior parte dei casi, non hanno la necessaria "precisione". Vediamo brevemente i principali comandi (ovviamente dovete essere root):
Installazione, Rimozione, Aggiornamento
dpkg -i nome-pacchetto.deb
- installa un pacchetto Debian già scaricato e presente nella directory corrente;
apt-get install [pacchetto1, pacchetto2, pacchettoN, ...]
- il comando scarica e installa/aggiorna i pacchetti indicati, risolvendo le dipendenze;
apt-get remove [pacchetto1, pacchetto2, pacchettoN, ...]
- è l'esatto opposto del comando precedente, rimuove i pacchetti indicati;
aptitude purge [pacchetto1, pacchetto2, pacchettoN, ...]
- rimuove i pacchetti indicati ed elimina anche i file di configurazione;
apt-get update
- aggiorna la lista dei pacchetti e le relative informazioni (versione disponibile, descrizione, ecc.);
apt-get upgrade
- aggiorna i pacchetti installati sul nostro sistema (se sono disponibili versione più recenti). Non installa nuovi pacchetti;
apt-get dist-upgrade
- è simile al precedente, ma aggiorna tutti i pacchetti anche a costo di installare nuovi pacchetti e rimuoverne di presenti, per soddisfare le dipendenze;
apt-get install [pacchetto] -s
- simula (stampando l'output) il processo di installazione di un pacchetto. Utili per controllare se il pacchetto che stiamo installando/aggiornando modificherà altri pacchetti da noi installati.
Vedere anche la Guida ad Aptitude.
Ricerca e Informazioni sui pacchetti
apt-cache search [stringa da cercare]
- usando questo comando possiamo cercare pacchetti in base al nome, alla descrizione, ecc.;
apt-cache show [nome pacchetto]
- questo comando visualizza una breve descrizione del pacchetto da noi richiesto, fornendo versione, uso, dipendenze e altre utili informazioni;
apt-file search nome-file
- cerca in quali pacchetti è presente il file
nome-file
. Vedere anche: Apt-file: ricerca all'interno dei pacchetti.
Gestione delle fonti (o repository)
apt-setup
- serve per aggiungere/aggiornare le fonti (o repository) da cui scaricare i pacchetti;
apt-cdrom
- aggiunge alle fonti per i pacchetti il contenuto di un CD Debian.
Pacchetti sorgenti e compilazione
apt-get source [pacchetto]
- questo è il comando da utilizzare nel caso volessimo installare i sorgenti di un pacchetto. NOTA BENE: i sorgenti così scaricati, una volta compilati, daranno origine ad un pacchetto .deb che andrà a sua volta installato! I sorgenti vengono scaricati nella directory da cui si è lanciato il comando.
apt-get build-dep [pacchetto]
- questo è un pacchetto fondamentale, specie se si lavora molto con i sorgenti. Si preoccupa di soddisfare le dipendenze del pacchetto che andremo a compilare dopo aver eseguito
apt-get source
.
apt-get source [pacchetto] --compile
- è il passo finale per la compilazione di un pacchetto deb. Lanciatelo dalla stessa directory in cui avete scaricato i sorgenti da compilare.
Altro
apt-get autoclean
- i pacchetti scaricati vengono memorizzati in
/var/cache/apt/archive/
che col passare del tempo tende a gonfiarsi notevolmente. Con questo comando è possibile dire all'apt-system di cancellare questi pacchetti. Notare che, se fatta a mano, questa operazione causerà un certo "disorientamento" da parte di apt convinto di avere una copia di eventuali pacchetti in locale.
apt-get clean
- elimina tutti i pacchetti dalla cache.
apt-get moo
- Have you mooed today ?
- E per concludere con le easter-eggs
aptitude mooo
aptitude -v moo
aptitude -vv moo
aptitude -vvvvvvvvv moo
apt.conf e apt.conf.d/
È possibile definire le opzioni per gli strumenti a riga di comando apt-get e aptitude sia creando il file /etc/apt/apt.conf
sia creando più file, dal nome arbitrario, in /etc/apt/apt.conf.d/
. Si noti che in realtà esistono anche altre soluzioni per definire le opzioni dei suddetti strumenti, per esempio aptitude permette di definire le opzioni anche in ~/.aptitude/config
.
Che si tratti del file apt.conf
o di file posti in apt.conf.d/
è possibile usare in entrambi i casi due tipi di sintassi, ad esempio:
APT { Default-Release "testing"; Cache-Limit 24000000; Get { AllowUnauthenticated 1; AutomaticRemove "true"; Fix-Broken "true"; Purge "true"; Show-Upgraded "true"; } } Acquire::http::Proxy "http://indirizzo_proxy:3142/"; Aptitude { Autoclean-After-Update "true"; Auto-Fix-Broken "true"; Purge-Unused "true"; }
APT::Default-Release "testing"; APT::Cache-Limit 24000000; APT::Get::AllowUnauthenticated 1; APT::Get::AutomaticRemove "true"; APT::Get::Fix-Broken "true"; Apt::Get::Purge "true"; APT::Get::Show-Upgraded "true"; Acquire::http::Proxy "http://indirizzo_proxy:3142/"; Aptitude::Autoclean-After-Update "true"; Aptitude::Auto-Fix-Broken "true"; Aptitude::Purge-Unused "true";
Questa configurazione definisce quanto segue:
- La target relase è testing. Questo significa che tutti i pacchetti appartenenti a tale rilascio hanno priorità 990 (si veda la pagina dedicata al pinning per maggiori informazioni su come APT decide la priorità dei pacchetti da installare).
- La massima dimensione in byte per memorizzare le informazioni dei pacchetti disponibili nei vari sorgenti; maggiore il numero di repository specificato in
source.list
maggiore sarà lo spazio occupato (questo parametro NON definisce lo spazio riservato alla memorizzazione dei pacchetti installati e/o scaricati). - Le opzioni figlie di Get sono utilizzate da apt-get e basta, salvo alcune eccezioni come AllowUnauthenticated che viene riconosciuto anche da aptitude (è considerato un sinonimo di
Aptitude::CmdLine::Ignore-Trust-Violations
).- Permette l'installazione di pacchetti da repository di cui non si è installata la chiave di autenticazione.
- Rimuove i pacchetti che sono stati installati automaticamente per soddisfare delle dipendenze per altri pacchetti e che non sono più necessari.
- Corregge se possibile le dipendenze non soddisfatte.
- Quando un pacchetto viene rimosso questo viene completamente eliminato, come se si fosse usato il comando
apt-get purge
. - Mostra i pacchetti aggiornati; stampa un elenco di tutti i pacchetti che devono essere aggiornati.
- Da specificare SOLO e soltanto se si è installato e configurato correttamente un proxy per la gestione dei pacchetti, come
apt-cacher
per esempio. - Le opzioni figlie di Aptitude influenzano evidentemente solo il comportamento di Aptitude
- Ogni volta che viene aggiornato l'elenco dei pacchetti disponibili, ad esempio tramite
aptitude update
vengono anche rimossi tutti i pacchetti divenuti inutili, come nel caso di autoremove per apt-get. - Simile a Fix-Broken per apt-get.
- Quando un pacchetto viene rimosso questo viene completamente eliminato, come se si fosse usato il comando
aptitude purge
.
- Ogni volta che viene aggiornato l'elenco dei pacchetti disponibili, ad esempio tramite
Naturalmente se un utente itende usare solo apt-get
o aptitude
può benissimo eliminare le righe relative allo strumento che non utilizza.
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 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 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:
# 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
descrizione. 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 il file conffiles
:
# cat conffiles /etc/init.d/apache /etc/logrotate.d/apache
Vengono elencati i file di configurazione che verranno creati.
Gli scripts di cui parlavo prima sono postinst
, postrm
, preinst
e prerm
,
che si occupano come già detto delle operazione pre e post
installazione/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
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à.
# 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.
È 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
Vedere la guida: Gestione dei metapacchetti
Approfondimenti
Manpages
man apt-get
man apt.conf
Sitografia
- Apt HowTo, panoramica completa sulle funzionalità e sull'utilizzo del sistema APT
Guida scritta da: Keltik | Debianized 40% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |