Introduzione all'APT System: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(task di Revisione Wiki #63 - sandbox)
 
(54 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Repository
|precedente=Gestione di un repository con debarchiver
}}
{{Template:APT}}
{{Versioni compatibili}}
{{Versioni compatibili}}
 
== Introduzione ==
==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 strumenti che si interfacciano con il programma [[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.<br>
Il sistema APT (Advanced Package Manager) è, 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 <code>dpkg</code> 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.<br>
Esistono due strade per installare un programma sul proprio computer:
Esistono due strade per installare un programma sul proprio computer:
* tramite APT;
* tramite APT;
* scaricando e compilando manualmente i sorgenti dei vari programmi.
* 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.
La prima soluzione è infinitamente più comoda e rapida, nonché l'unica sicura, in quanto ogni [[pacchetto]] scaricato dai [[repository]] da APT è autenticato, ha un'origine controllata e verrà poi aggiornato dal sistema in automatico assieme a tutti gli altri programmi, in base alla policy adottata dalla propria [[release]] riguardo gli aggiornamenti. La seconda invece viene intrapresa solo se si hanno particolari necessità o se un certo programma non è disponibile tramite APT, ma chiaramente tutte le responsabilità di aggiornamento e verifica dell'autenticità sono a carico dell'amministratore, motivo per cui è sconsigliata in tutti gli altri casi.
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==
== 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".
Esistono diversi strumenti per gestire il sistema APT, e di seguito sono presentati i principali, partendo da quelli presenti in ogni installazione di Debian:
Vediamo brevemente i principali comandi (ovviamente dovete essere root):


=== Installazione, Rimozione, Aggiornamento ===
* [[apt-get]], [[apt-cache]] e [[apt-mark]] sono i tre principali comandi contenuti nel pacchetto '''apt''', e insieme costituiscono il modo più basilare e diffuso di gestione dei pacchetti tramite linea di comando. Sono presenti in ogni installazione di Debian.
* [[apt]], introdotto con Debian 8 ([[Jessie]]) nel pacchetto omonimo assieme ai tre precedenti comandi, per svolgere in modo più semplice e intuitivo le funzioni più basilari di APT con la supervisione dell'utente.
* [[aptitude]], è lo strumento più avanzato per la gestione dei pacchetti, disponibile sia con interfaccia grafica a caratteri sia con interfaccia a linea di comando. Storico programma presente in ogni installazione standard di Debian dalla sua introduzione fino a [[Jessie]], a partire da Debian 9 ([[Stretch]]) va installato esplicitamente.
* [[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.
e molti altri.


;<code>dpkg -i ''nome-pacchetto.deb''</code>: installa un pacchetto Debian già scaricato e presente nella directory corrente;
== Breve sommario delle operazioni base di APT ==
In questa sezione si mostra brevemente come installare, aggiornare e rimuovere i programmi con APT tramite i comandi contenuti nel pacchetto '''apt''', gli unici sempre disponibili in un sistema Debian.


;<code>apt-get install [pacchetto1, pacchetto2, pacchettoN, ...]</code>: il comando scarica e installa/aggiorna i pacchetti indicati, risolvendo le [[dipendenze]];
Per maggiori informazioni si rimanda invece a: [[Guida ai comandi da terminale - Gestione di repository e pacchetti]].


;<code>apt-get remove [pacchetto1, pacchetto2, pacchettoN, ...]</code>: è l'esatto opposto del comando precedente, rimuove i pacchetti indicati;
=== Aggiorna informazioni ===
Aggiorna la lista dei pacchetti disponibili, recuperando le informazioni più aggiornate dai [[repository]]:
<pre># apt update</pre>
Sono richiesti [[privilegi di amministrazione]].


;<code>aptitude purge [pacchetto1, pacchetto2, pacchettoN, ...]</code>: rimuove i pacchetti indicati ed elimina anche i file di configurazione;
L'operazione va sempre effettuata:
* prima dell'aggiornamento dei pacchetti;
* dopo ogni modifica dei repository, per renderla effettiva;
* prima dell'installazione di nuovi pacchetti, se non si è già effettuata di recente.


;<code>apt-get update</code>: aggiorna la lista dei pacchetti e le relative informazioni (versione disponibile, descrizione, ecc.);
=== Aggiornamento del sistema ===
Aggiorna il sistema (da effettuarsi periodicamente), eseguendo con [[privilegi di amministrazione]]:
<pre>
# apt update
# apt upgrade
</pre>
Come già visto il primo comando recupera le informazioni più recenti dai [[repository]], mentre il secondo installa le versioni più aggiornate dei pacchetti già installati, installandone di nuovi eventualmente ma senza rimuovere quelli non più necessari.


;<code>apt-get upgrade</code>: aggiorna i pacchetti installati sul nostro sistema (se sono disponibili versione più recenti). Non installa nuovi pacchetti;
Per forzare un aggiornamento completo, se il comando precedente non funziona, sempre dopo aver ottenuto i [[privilegi di amministrazione]]:
<pre>
# apt full-upgrade
</pre>
Per una Debian [[stable]] non è in genere necessario, se non per effettuare il passaggio di versione alla successiva quando una nuova stable è rilasciata, preferibilmente dopo aver concluso l'aggiornamento con il metodo precedente. Questa operazione è chiaramente meno conservativa, pertanto va effettuata prestando maggiore attenzione ai pacchetti che saranno rimossi.


;<code>apt-get dist-upgrade</code>: è simile al precedente, ma aggiorna tutti i pacchetti anche a costo di installare nuovi pacchetti e rimuoverne di presenti, per soddisfare le dipendenze;
=== Installazione e disinstallazione ===
Per installare un pacchetto e le sue dipendenze tramite APT, se la lista dei pacchetti è aggiornata:
<pre># apt install nomepacchetto</pre>


;<code>apt-get install [pacchetto] -s</code>: 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.
Per rimuovere un pacchetto precedentemente installato:
<pre># apt remove nomepacchetto</pre>
E per rimuovere le sue dipendenze, se non richieste da altri pacchetti (e se non si è impostato un <code>AutomaticRemove</code>; si veda la sezione successiva):
<pre># apt autoremove</pre>


''Vedere anche la [[Aptitude|Guida ad Aptitude]].''
Tutte queste operazioni richiedono [[privilegi di amministrazione]].


==Configurazione==
Il principale file di configurazione, per tutti i principali strumenti di '''APT''' (<code>apt</code>, <code>apt-get</code>, <code>aptitude</code>, ecc...), è <code>/etc/apt/apt.conf</code>, eventualmente da creare per le proprie impostazioni personalizzate. <br/>
Le impostazioni di default generate in fase di installazione e quelle create da altri programmi installati sono invece contenute nei file presenti nella directory <code>/etc/apt/apt.conf.d</code>, in modo da non sovrapporsi, e non è generalmente necessario modificarle.


=== Ricerca e Informazioni sui pacchetti ===
Per modificare il file principale, o crearlo se non esiste, basta utilizzare un editor di testo (per esempio [[nano]]) con [[privilegi di amministrazione]]:
 
<pre>
;<code>apt-cache search [stringa da cercare]</code>: usando questo comando possiamo cercare pacchetti in base al nome, alla descrizione, ecc.;
# nano /etc/apt/apt.conf
 
;<code>apt-cache show [nome pacchetto]</code>: questo comando visualizza una breve descrizione del pacchetto da noi richiesto, fornendo versione, uso, dipendenze e altre utili informazioni;
 
;<code>apt-file search ''nome-file''</code>: cerca in quali pacchetti è presente il file <code>''nome-file''</code>. Vedere anche: [[Apt-file: ricerca all'interno dei pacchetti]].
 
=== Gestione delle fonti (o repository) ===
 
;<code>apt-setup</code>: serve per aggiungere/aggiornare le fonti (o [[repository]]) da cui scaricare i pacchetti;
 
;<code>[[Apt-cdrom | apt-cdrom]]</code>: aggiunge alle fonti per i pacchetti il contenuto di un CD Debian.
 
=== Pacchetti sorgenti e compilazione ===
 
;<code>apt-get source [pacchetto]</code>: 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.
 
;<code>apt-get build-dep [pacchetto]</code>: 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 <code>apt-get source</code>.
 
;<code>apt-get source [pacchetto] --compile</code>: è il passo finale per la compilazione di un pacchetto deb. Lanciatelo dalla stessa directory in cui avete scaricato i sorgenti da compilare.
 
=== Altro ===
 
;<code>apt-get autoclean</code>: i pacchetti scaricati vengono memorizzati in <code>/var/cache/apt/archive/</code> 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.
 
;<code>apt-get clean</code>: elimina tutti i pacchetti dalla cache.
 
;<code>apt-get moo</code>: Have you mooed today ?
 
;E per concludere con le easter-eggs:
*<code>aptitude mooo</code>
*<code>aptitude -v moo</code>
*<code>aptitude -vv moo</code>
*<code>aptitude -vvvvvvvvv moo</code>
 
==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:
 
<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===
 
====Cenni generali====
 
Esiste un tipo particolare di pacchetto detto [[metapacchetto]] che in realtà non contiene alcun eseguibile o sorgente, ma 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/
...
</pre>
</pre>
(dopo aver apportato le modifiche, premere <code>Ctrl-o</code> per salvare e <code>Ctrl-x</code> per uscire)


L'archivio <code>data.tar.gz</code> contiene solo documentazione e delle librerie.
=== Esempio di <code>/etc/apt/apt.conf</code> ===
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.
 
==== Lista dei metapacchetti ====
Si può ottenere una lista completa dei metapacchetti semplicemente elencando i pacchetti che contengono la parola ''metapackage'' nei tag o nelle descrizioni:
<pre>
$ aptitude search '(~Gmetapackage|~dmetapackage)' | less
</pre>
Se si vuole avere invece una lista dei metapacchetti installati sul sistema:
<pre>
<pre>
$ aptitude search '~i(~Gmetapackage|~dmetapackage)'
APT::Clean-Installed "true";
APT::Get::AutomaticRemove "true";
APT::Get::Upgrade-Allow-New "true";
</pre>
</pre>
A questi si aggiungono le eccezioni comprendenti i metapacchetti che riguardano l'installazione del kernel; questi sono nella forma: <code>linux-image-*</code>
Il valore '''"true"''' / '''"false"''' (oppure '''1''' / '''0''') abilita/disabilita un'impostazione.
<pre>
$ aptitude search ~nlinux-image-*
</pre>
che sono dei metapacchetti che dipendono sempre dall'ultimo kernel Linux disponibile per la sotto-architettura specificata. In tal modo, installando il pacchetto adatto al proprio sistema, il kernel verrà automaticamente aggiornato non appena sia disponibile una nuova versione (si passerà ad esempio dal 2.6.15 a 2.6.17). Viceversa, se non si installa il metapacchetto, il kernel non verrà mai aggiornato poiché i kernel Debian hanno la versione come parte integrante del nome del pacchetto e quindi una nuova versione viene vista come un nuovo pacchetto e non come un aggiornamento, come giusto che sia.


====Installazione/Rimozione====
Di seguito una breve descrizione:
:; <code>APT::Clean-Installed</code> : elimina i pacchetti .deb non più scaricabili ma ancora conservati nella cache, anche se relativi a pacchetti ancora installati nel sistema;
:; <code>APT::Get::AutomaticRemove</code> : effettua in automatico la rimozione delle dipendenze non più necessarie, in seguito alla rimozione di un pacchetto; è equivalente a eseguire manualmente un <code>apt autoremove</code>;
:; <code>APT::Get::Upgrade-Allow-New</code> : rende l'esecuzione di <code>apt-get upgrade</code> equivalente a <code>apt upgrade</code>, permettendo l'installazione di nuovi pacchetti se richiesti per l'aggiornamento.
Tutte queste impostazioni erano disabilitate di default.


Capito cosa sono i metapacchetti, ci accorgeremo subito di un problema: se per l'installazione di una ''suite'', come ad esempio ''GNOME'', l'installazione di un solo metapacchetto ci permette l'installazione di tutti i pacchetti necessari, essendo quest'ultimi tutte dipendenze del metapacchetto, se si andrà a rimuovere un pacchetto della ''suite'' in questione, il metapacchetto precedentemente installato avrà una dipendenza non soddisfatta. Questo farà sì che ad esempio [[Aptitude]] rimuoverà tutti i pacchetti della ''suite'' in quanto risultanti come dipendenze di un pacchetto che non è più installato (il metapacchetto appunto); altri comandi, come ad esempio:
Altre possibili impostazioni utili:
:; <code>APT::Sandbox::Seccomp</code> : a partire da Debian 10 ([[Buster]]), se abilitata, esegue '''APT''' in una sandbox fornita dal kernel Linux per restringere le chiamate di sistema permesse; non supporta tutti i metodi di '''APT''', ma è già utilizzabile come ulteriore forma di sicurezza se si usano i normali repository (per esempio ''http'', ''https'');
:; <code>APT::Install-Recommends</code> : disabilitarla (di default è abilitata) non installa le dipendenze raccomandate, ma non necessarie, al funzionamento di un pacchetto; disabilitare tale impostazione è '''sconsigliato''' per utenti inesperti, in quanto potrebbe ridurre le funzionalità di altri programmi, e utile soltanto per utenti già esperti e che vogliano mantenere un sistema il più possibile minimale.


<pre># apt-get autoremove</pre>
{{Cautionbox | Si '''sconsiglia''' l'uso di '''<code>Default-Release</code>''', salvo si sappia cosa si sta facendo e si conosca approfonditamente il funzionamento dei [[repository]] di Debian, perché equivalente a impostare un [[pinning]] e potrebbe disabilitare inavvertitamente l'uso di altri repository secondari usati in fase di aggiornamento dei pacchetti.}}
Tutte le configurazioni sono impostabili anche a tempo di esecuzione, per esempio con l'opzione <code>--option</code>/<code>-o</code> di '''<code>apt-get</code>''' o con altre forme ancora più brevi (si rimanda alla [[apt-get|guida]] o alla pagina di manuale).


porteranno allo stesso risultato, sempre per via di dipendenze installate per un pacchetto che non esiste più.<br /><br />
==I pacchetti==
Leggere la guida: [[Pacchetti binari e sorgenti]]


{{Box|NOTA BENE:|questo comportamento dei pacchetti è in realtà un sistema molto ben architettato per "pulire" il sistema da pacchetti "inutili" (o meglio, per meglio dire, non più utili). Ad esempio: se ho installato il pacchetto Y per soddisfare una dipendenza del pacchetto X, eliminato X il pacchetto Y non mi servirà più, essendo stato installato unicamente per far funzionare X. Immaginando di aver appena eliminato il pacchetto X, ''Aptitude'' andrà automaticamente ad eliminare il pacchetto Y "ricordandosi" di averlo installato come dipendenza del pacchetto X. <code>apt-get autoremove</code> "vedrà" il pacchetto Y come installato da ''dipendenza'' e lo eliminerà portando allo stesso risultato.}}
===Metapacchetti===
Vedere la guida: [[Gestione dei metapacchetti]]


=====Installare un metapacchetto=====
==Approfondimenti==


In questo caso non occorre nessuna attenzione particolare: installeremo il metapacchetto come qualsiasi altro pacchetto con il nostro gestore preferito (aptitude, apt-get, synaptic,etc.), il quale si "porterà dietro" tutti i pacchetti del caso (come sue dipendenze).
=== Manpages ===
 
<code>man apt</code><br/>
=====Rimuovere un metapacchetto=====
<code>man apt.conf</code>
 
Il problema di quest'azione è riassunto all'inizio di questo capitolo.
 
=====Rimuovere l'intera ''suite''=====
 
Se vogliamo semplicemente eliminare tutta la ''suite'' del metapacchetto andremo semplicemente a rimuoverlo con il nostro gestore preferito. Nel caso di ''aptitude'', provvederà lui stesso ad eliminare le dipendenze (dunque i pacchetti della ''suite''); nel caso di apt-get, dopo il classico
 
<pre># apt-get purge nomemetapacchetto</pre>
 
dovremo dare ancora:
 
<pre># apt-get autoremove</pre>
 
proprio per rimuovere le dipendenze installate per il metapacchetto.
 
=====Rimuovere uno o più pacchetti della ''suite''=====
 
In questo caso, come già detto in precedenza, la rimozione di uno o più pacchetti della suite, porterà alla rimozione del metapacchetto principale (essendo esso stesso senza una o più dipendenze soddisfatte). A questo punto, senza il metapacchetto che faceva da "scheletro" alla ''suite'', i pacchetti di quest'ultima verranno eliminati da ''aptitude'' o da ''apt-get autoremove''.<br />
Per eliminare dunque dei pacchetti da una ''suite'' utilizzeremo ''apt-get'' e ''aptitude'' in modo combinato. Facciamo un esempio:
 
* come ''suite'' prenderemo ''GNOME''. I metapacchetti che la installano sono ''gnome'' e ''gnome-desktop-environment''
* andremo ad eliminare il pacchetto ''evolution'' della ''suite'', senza eliminare quest'ultima.
 
Inizieremo dunque con ''apt-get'':
 
<pre># apt-get purge evolution</pre>
 
Lanciato il comando andremo ad eliminare 5 pacchetti: ''gnome'', ''gnome-desktop-environment'', ''evolution'',  ''evolution-exchange'', ''evolution-plugins'', tra i quali noteremo i due metapacchetti della ''suite'' in questione. Lo stesso ''apt-get'' ci suggerirà poi di utilizzare ''apt-get autoremove'' per eliminare le dipendenze non soddisfatte (che sono però in questo caso tutti i pacchetti della ''suite''). Per mantenere questi pacchetti daremo il comando:
 
<pre># aptitude keep-all</pre>
 
che andrà ad eliminare la loro eliminazione (scusate il gioco di parole). L'opzione ''keep-all'' di ''aptitude'' cancella tutte le azioni impostate per ogni pacchetto; qualsiasi azione d'installazione, rimozione o aggiornamento verrà rimossa dallo stato di tutti i pacchetti interessati.<br /><br />
 
A questo punto, avremo la nostra ''suite'' perfettamente funzionante con le "modifiche" apportate.
 
==Approfondimenti==


===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
* [https://www.debian.org/releases/buster/amd64/release-notes/ch-whats-new.it.html#apt-sandboxing APT hardening], dalle note di rilascio di Debian 10 (buster)


{{Autori
{{Autori
|Autore = [[Utente:Keltik|Keltik]]
|Autore = [[Utente:Keltik|Keltik]]
|Estesa_da =
: [[Utente:Ferdybassi|Ferdybassi]]
: [[Utente:HAL 9000|HAL 9000]]
|Verificata_da =
: [[Utente:Wtf|Wtf]]
: [[Utente:S3v|S3v]] 12:22, 20 apr 2015 (CEST)
: [[Utente:HAL 9000|HAL 9000]] 21:16, 11 ago 2019 (CEST)
|Numero_revisori = 3
}}
}}


[[Categoria:Apt]]
[[Categoria:Apt]]
[[Categoria:Introduzione a Debian]]
[[Categoria:Introduzione a Debian]]

Versione attuale delle 19:16, 11 ago 2019

I repository
Arrow left.png

Introduzione ai repository

Repository ufficiali di Debian

Repository esterni

Extra



APT

Gestori di pacchetti

Comandi utili

Configurazione del sistema

Altro



Debian-swirl.png 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 strumenti che si interfacciano con il programma 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, nonché l'unica sicura, in quanto ogni pacchetto scaricato dai repository da APT è autenticato, ha un'origine controllata e verrà poi aggiornato dal sistema in automatico assieme a tutti gli altri programmi, in base alla policy adottata dalla propria release riguardo gli aggiornamenti. La seconda invece viene intrapresa solo se si hanno particolari necessità o se un certo programma non è disponibile tramite APT, ma chiaramente tutte le responsabilità di aggiornamento e verifica dell'autenticità sono a carico dell'amministratore, motivo per cui è sconsigliata in tutti gli altri casi.

Strumenti

Esistono diversi strumenti per gestire il sistema APT, e di seguito sono presentati i principali, partendo da quelli presenti in ogni installazione di Debian:

  • apt-get, apt-cache e apt-mark sono i tre principali comandi contenuti nel pacchetto apt, e insieme costituiscono il modo più basilare e diffuso di gestione dei pacchetti tramite linea di comando. Sono presenti in ogni installazione di Debian.
  • apt, introdotto con Debian 8 (Jessie) nel pacchetto omonimo assieme ai tre precedenti comandi, per svolgere in modo più semplice e intuitivo le funzioni più basilari di APT con la supervisione dell'utente.
  • aptitude, è lo strumento più avanzato per la gestione dei pacchetti, disponibile sia con interfaccia grafica a caratteri sia con interfaccia a linea di comando. Storico programma presente in ogni installazione standard di Debian dalla sua introduzione fino a Jessie, a partire da Debian 9 (Stretch) va installato esplicitamente.
  • 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.

e molti altri.

Breve sommario delle operazioni base di APT

In questa sezione si mostra brevemente come installare, aggiornare e rimuovere i programmi con APT tramite i comandi contenuti nel pacchetto apt, gli unici sempre disponibili in un sistema Debian.

Per maggiori informazioni si rimanda invece a: Guida ai comandi da terminale - Gestione di repository e pacchetti.

Aggiorna informazioni

Aggiorna la lista dei pacchetti disponibili, recuperando le informazioni più aggiornate dai repository:

# apt update

Sono richiesti privilegi di amministrazione.

L'operazione va sempre effettuata:

  • prima dell'aggiornamento dei pacchetti;
  • dopo ogni modifica dei repository, per renderla effettiva;
  • prima dell'installazione di nuovi pacchetti, se non si è già effettuata di recente.

Aggiornamento del sistema

Aggiorna il sistema (da effettuarsi periodicamente), eseguendo con privilegi di amministrazione:

# apt update
# apt upgrade

Come già visto il primo comando recupera le informazioni più recenti dai repository, mentre il secondo installa le versioni più aggiornate dei pacchetti già installati, installandone di nuovi eventualmente ma senza rimuovere quelli non più necessari.

Per forzare un aggiornamento completo, se il comando precedente non funziona, sempre dopo aver ottenuto i privilegi di amministrazione:

# apt full-upgrade

Per una Debian stable non è in genere necessario, se non per effettuare il passaggio di versione alla successiva quando una nuova stable è rilasciata, preferibilmente dopo aver concluso l'aggiornamento con il metodo precedente. Questa operazione è chiaramente meno conservativa, pertanto va effettuata prestando maggiore attenzione ai pacchetti che saranno rimossi.

Installazione e disinstallazione

Per installare un pacchetto e le sue dipendenze tramite APT, se la lista dei pacchetti è aggiornata:

# apt install nomepacchetto

Per rimuovere un pacchetto precedentemente installato:

# apt remove nomepacchetto

E per rimuovere le sue dipendenze, se non richieste da altri pacchetti (e se non si è impostato un AutomaticRemove; si veda la sezione successiva):

# apt autoremove

Tutte queste operazioni richiedono privilegi di amministrazione.

Configurazione

Il principale file di configurazione, per tutti i principali strumenti di APT (apt, apt-get, aptitude, ecc...), è /etc/apt/apt.conf, eventualmente da creare per le proprie impostazioni personalizzate.
Le impostazioni di default generate in fase di installazione e quelle create da altri programmi installati sono invece contenute nei file presenti nella directory /etc/apt/apt.conf.d, in modo da non sovrapporsi, e non è generalmente necessario modificarle.

Per modificare il file principale, o crearlo se non esiste, basta utilizzare un editor di testo (per esempio nano) con privilegi di amministrazione:

# nano /etc/apt/apt.conf

(dopo aver apportato le modifiche, premere Ctrl-o per salvare e Ctrl-x per uscire)

Esempio di /etc/apt/apt.conf

APT::Clean-Installed "true";
APT::Get::AutomaticRemove "true";
APT::Get::Upgrade-Allow-New "true";

Il valore "true" / "false" (oppure 1 / 0) abilita/disabilita un'impostazione.

Di seguito una breve descrizione:

APT::Clean-Installed
elimina i pacchetti .deb non più scaricabili ma ancora conservati nella cache, anche se relativi a pacchetti ancora installati nel sistema;
APT::Get::AutomaticRemove
effettua in automatico la rimozione delle dipendenze non più necessarie, in seguito alla rimozione di un pacchetto; è equivalente a eseguire manualmente un apt autoremove;
APT::Get::Upgrade-Allow-New
rende l'esecuzione di apt-get upgrade equivalente a apt upgrade, permettendo l'installazione di nuovi pacchetti se richiesti per l'aggiornamento.

Tutte queste impostazioni erano disabilitate di default.

Altre possibili impostazioni utili:

APT::Sandbox::Seccomp
a partire da Debian 10 (Buster), se abilitata, esegue APT in una sandbox fornita dal kernel Linux per restringere le chiamate di sistema permesse; non supporta tutti i metodi di APT, ma è già utilizzabile come ulteriore forma di sicurezza se si usano i normali repository (per esempio http, https);
APT::Install-Recommends
disabilitarla (di default è abilitata) non installa le dipendenze raccomandate, ma non necessarie, al funzionamento di un pacchetto; disabilitare tale impostazione è sconsigliato per utenti inesperti, in quanto potrebbe ridurre le funzionalità di altri programmi, e utile soltanto per utenti già esperti e che vogliano mantenere un sistema il più possibile minimale.
Attention.png Avvertimento
Si sconsiglia l'uso di Default-Release, salvo si sappia cosa si sta facendo e si conosca approfonditamente il funzionamento dei repository di Debian, perché equivalente a impostare un pinning e potrebbe disabilitare inavvertitamente l'uso di altri repository secondari usati in fase di aggiornamento dei pacchetti.

Tutte le configurazioni sono impostabili anche a tempo di esecuzione, per esempio con l'opzione --option/-o di apt-get o con altre forme ancora più brevi (si rimanda alla guida o alla pagina di manuale).

I pacchetti

Leggere la guida: Pacchetti binari e sorgenti

Metapacchetti

Vedere la guida: Gestione dei metapacchetti

Approfondimenti

Manpages

man apt
man apt.conf

Sitografia

  • Apt HowTo, panoramica completa sulle funzionalità e sull'utilizzo del sistema APT
  • APT hardening, dalle note di rilascio di Debian 10 (buster)




Guida scritta da: Keltik Swirl-auth80.png Debianized 80%
Estesa da:
Ferdybassi
HAL 9000
Verificata da:
Wtf
S3v 12:22, 20 apr 2015 (CEST)
HAL 9000 21:16, 11 ago 2019 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized