pacman (Italiano)

Translation Status:
This article is a localized version of
pacman
. Last translation date: 2024-01-22. You can help to synchronize the translation, if there were
changes
in the English version.
Articoli correlati
Creating packages
Downgrading packages
pacman/Package signing (Italiano)
pacman/Pacnew and Pacsave
pacman/Restore local database
pacman/Rosetta
pacman/Tips and tricks
FAQ (Italiano)#Gestione pacchetti
System maintenance
Arch Build System
Official repositories
Arch User Repository (Italiano)
pacman
è il
sistema di gestione dei pacchetti
di Arch Linux e, in quanto tale, una delle funzioni più notevoli della distribuzione.
Pacman
combina un semplice formato di pacchetti binari e un
sistema di compilazione ed imballaggio
facile da usare. Lo scopo di pacman è di rendere facilmente possibile la gestione dei pacchetti sia ufficiali che creati dall'utente stesso.
Pacman si incarica di tenere aggiornato il sistema. Questo compito è realizzato mantenendo una propria lista di pacchetti, e sincronizzando quest'ultima con il server principale. Questo modello
server/client
permette di scaricare o installare pacchetti con un semplice comando, includendo tutte le dipendenze necessarie.
Pacman è scritto nel linguaggio di programmazione
C
e utilizza il formato di imballaggio
bsdtar(1)
tar
.
Suggerimento
Il pacchetto
pacman
contiene diversi strumenti, ad esempio
makepkg
e
vercmp(8)
. Altri strumenti utili tipo
pactree
e
checkupdates
sono reperibili nel pacchetto
pacman-contrib
(precedentemente parte di
pacman
). Si dia
pacman -Ql pacman pacman-contrib | grep -E 'bin/.+'
per vedere una lista completa.
Utilizzo
Nella seguente sezione viene elencata una breve serie di operazioni che
pacman
può eseguire. Per leggere più esempi si consiglia di consultare
pacman(8)
.
Suggerimento
A coloro che hanno usato un'altra distribuzione Linux può essere utile l'articolo
Pacman Rosetta
.
Installazione di pacchetti
Un pacchetto consiste di un archivio al cui interno si trovano:
tutti i file (compilati) di un applicazione
metadati riguardanti l'applicazione, ad esempio il suo nome, la sua versione, le dipendenze, ecc.
file e istruzioni di installazione per
pacman
una lista (opzionale) di file aggiuntivi che possono rendere più facile la vita all'utente, per esempio script per lanciare o fermare l'applicazione
Il sistema di gestione dei pacchetti
pacman
può dunque installare, aggiornare e rimuovere tali pacchetti. L'utilizzo di pacchetti porta diversi vantaggi da non sottovalutare rispetto alla compilazione e installazione manuale di pacchetti:
aggiornamenti:
pacman
aggiornerà qualsiasi pacchetto non appena emerge una nuova versione.
verifica delle dipendenze:
pacman
si incarica delle dipendenze, così basta specificare il nome di un programma e pacman lo installa insieme ad ogni altro pacchetto necessario.
rimozione pulita:
pacman
è al corrente di tutti i file parte di un pacchetto; in questo modo, nessun file rimane inavvertitamente sul proprio sistema quando si decide di rimuovere un pacchetto.
Note
I pacchetti spesso hanno
dipendenze facoltative
, ovvero pacchetti che portano funzioni aggiuntive ad un'applicazione, ma che non sono strettamente necessarie per utilizzare quest'ultima. Quando si installa un pacchetto,
pacman
elenca tutte le dipendenze facoltative, nonostante queste non appaiano in
pacman.log
. Si utilizzi il comando descritto in
#Interazione con il database dei pacchetti
per vedere le dipendenze facoltative di qualsiasi pacchetto.
Quando si  installa un pacchetto che si richiede come dipendenza facoltativa di un altro pacchetto, si consiglia di usare l'opzione
--asdeps
. Vedi la sezione
#Ragione di installazione
per dettagli.
Attenzione
Quando si installa un pacchetto su Arch, si eviti di ricaricare la lista di pacchetti senza effettuare un
aggiornamento di sistema
. In pratica non va mai eseguito il comando
pacman -Sy
nome_pacchetto
invece di
pacman -Sy
u
nome_pacchetto
, perché così facendo si può riscontrare problemi con le dipendenze. Vedi
System maintenance#Partial upgrades are unsupported
e
BBS#89328
per altre informazioni a riguardo.
Installare uno specifico pacchetto
Per installare un singolo pacchetto oppure una serie di pacchetti, incluse dipendenze, si dia il seguente comando:
# pacman -S
nome_pacchetto_1
nome_pacchetto_2
...
Per installare una serie di pacchetti con regex (vedi
questa conversazione sul forum
):
# pacman -S $(pacman -Ssq
regex_pacchetti
)
Talvolta ci sono diverse versioni di un pacchetto in diversi repositori (per esempio
extra
e
testing
). Per installare una versione nel repositore
extra
si può specificarlo prima del nome del pacchetto:
# pacman -S extra/
package_name
Per installare più pacchetti con nomi simili o parti comuni si possono impiegare le parentesi graffe:
# pacman -S plasma-{desktop,mediacenter,nm}
Si possono utilizzare diversi livelli:
# pacman -S plasma-{workspace{,-wallpapers},pa}
Pacchetti virtuali
Un pacchetto virtuale consiste di un pacchetto speciale che non esiste da solo, ma è
incluso
in uno o più pacchetti. I pacchetti virtuali permettono ad altri pacchetti di non elencare un certo pacchetto come dipendenza nel caso in cui ci fossero diversi candidati. I pacchetti virtuali non possono essere installati per nome; essi vengono installati automaticamente quando si installa un pacchetto che li include.
Suggerimento
Quando ci sono diversi candidati, la lista di opzioni viene data in ordine
repositore
(nell'ordini in cui questi appaiono nel file
pacman.conf
) e poi in ordine alfabetico quando ci sono diversi risultati nello stesso repositore.
Installare gruppi di pacchetti
Alcuni pacchetti fanno parte di un
gruppo di pacchetti
in modo che possano essere installati tutti insieme. Per esempio, il comando
# pacman -S gnome
elencherà una serie di pacchetti da selezionare provenienti dal gruppo
gnome
. A volte un gruppo di pacchetti contiene un numero elevato di pacchetti, di cui si desidera installare o non installare soltanto un paio. Invece di elencare tutti i pacchetti eccetto quelli non desiderati, può essere più conveniente specificare quelli da escludere:
Enter a selection (default=all): 1-10 15
Così si selezionano i pacchetti da 1 a 10 e 15, oppure:
Enter a selection (default=all): ^5-8 ^2
così si scelgono tutti i pacchetti, con l'eccezione dei pacchetti dal 5 all'8 ed il pacchetto 2.
Per vedere quali pacchetti fanno parte del gruppo gnome, si dia:
$ pacman -Sg gnome
Si può anche visitare la pagina
https://archlinux.org/groups/
per controllare quali gruppi di pacchetti esistono.
Nota
Se un pacchetto in una lista è già installato, verrà installato nuovamente sostituendo la versione già presente, anche se quest'ultima è quella più recente. Si può evitare di reinstallare i pacchetti dando l'opzione
--needed
.
Rimozione di pacchetti
Per rimuovere un singolo pacchetto senza toccare le sue dipendenze, si dia:
# pacman -R
nome_pacchetto
Per rimuovere un pacchetto e tutte le sue dipendenze, purché non siano richieste da altri pacchetti installati:
# pacman -Rs
nome_pacchetto
Attenzione
Quando si rimuove un gruppo, per esempio
gnome
, questa procedura ignora il motivo per cui pacchetti all'interno di questo gruppo sono stati istallati. Il motivo di installazione delle dipendenze è tuttavia rispettato.
Il comando precedente può non funzionare quando si rimuove un gruppo che contiene pacchetti richiesti da altri pacchetti. In questo caso, si dia:
# pacman -Rsu
nome_pacchetto
Per rimuovere un pacchetto e tutte le sue dipendenze, includendo anche tutti i pacchetti che dipendono dal pacchetto che si vuole rimuovere, si dia:
# pacman -Rsc
nome_pacchetto
Attenzione
Quest'operazione è ricorsiva e va usata con cautela perché potrebbe rimuovere molti pacchetti necessari.
Per rimuovere un pacchetto richiesto da un altro pacchetto senza rimuovere quest'ultimo si dia:
# pacman -Rdd
nome_pacchetto
Attenzione
Quest'ultima operazione può provocare danni al sistema e andrebbe evitata. Vedi
System maintenance#Avoid certain pacman commands
.
Pacman salva file di configurazione importanti quando rimuove certe applicazioni e li rinomina, aggiungendo l'estensione
.pacsave
. Per evitare l'istituzione di questi file di backup si può impiegare l'opzione
# pacman -Rn
nome_pacchetto
Nota
Pacman non rimuoverà configurazioni create dall'applicazione stessa (ad esempio i cosiddetti "dotfiles" nella directory home.
Aggiornamento dei pacchetti
Attenzione
Ci si aspetta che gli utenti seguano le linee di guida elencate nella sezione
System maintenance#Upgrading the system
, che consigliano di aggiornare regolarmente il proprio sistema e di non dare il seguente comando alla cieca.
Arch appoggia soltanto aggiornamenti completi di tutto il sistema. Vedi
System maintenance#Partial upgrades are unsupported
e
#Installazione di pacchetti
per più dettagli.
Pacman può aggiornare tutti i pacchetti sul sistema con un solo comando. Questo processo potrebbe richiedere del tempo a secondo di quanto tempo fa fu eseguito l'ultimo aggiornamento. Il seguente comando dunque sincronizza i database dei repositori
e
aggiorna i pacchetti di sistema, escludendo i pacchetti "locali", ovvero quelli installati manualmente, che non sono parte dei repositori impostati:
# pacman -Syu
Interazione con il database dei pacchetti
Pacman ottiene informazioni dal database locale dei pacchetti tramite l'opzione
-Q
, dal database del server centrale con
-S
e dal database dei file tramite
-F
. Si consulti
pacman -Q --help
,
pacman -S --help
e
pacman -F --help
per ottenere opzioni di ricerca aggiuntive.
Pacman può cercare pacchetti nel database sia per nome che per descrizione:
$ pacman -Ss
string1
string2
...
Talvolta, la funzionalità di ricerca ERE (Espressioni regolari estese), accessibile tramite
-s
, può produrre una serie di risultati indesiderati, per cui va limitata alla ricerca per nome (senza descrizione):
$ pacman -Ss '^vim-'
Per cercare tra i pacchetti già installati:
$ pacman -Qs
string1
string2
...
Per cercare un file per nome tra tutti i pacchetti, installati o meno, si dia il comando:
$ pacman -F
string1
string2
...
Per fare mostrare delle informazioni dettagliate riguardo ad un pacchetto, si dia:
$ pacman -Si
nome_pacchetto
Per fare la stessa cosa, ma limitandosi ai pacchetti installati:
$ pacman -Qi
nome_pacchetto
Dando due volte l'opzione
-i
si ottiene anche la lista di file di backup insieme al rispettivo stato di modificazione:
$ pacman -Qii
nome_pacchetto
Per ottenere la lista di file installati da parte di un pacchetto:
$ pacman -Ql
nome_pacchetto
Per ottenere la stessa lista, ma per un pacchetto non ancora installato:
$ pacman -Fl
nome_pacchetto
Per verificare la presenza di file installati da un pacchetto:
$ pacman -Qk
nome_pacchetto
Se si da l'opzione
k
si ottiene una ricerca più rigorosa.
Per scoprire a che pacchetto appartiene un certo file, si dia:
$ pacman -Qo
/path/to/file_name
La stessa ricerca può essere effettuata per tutti i pacchetti, inclusi quelli non installati, dando:
$ pacman -F
/path/to/file_name
Per ottenere una lista di pacchetti orfani, ovvero pacchetti installati come dipendenze di un pacchetto non più presente sul proprio sistema, si dia:
$ pacman -Qdt
Per elencare tutti i pacchetti installati esplicitamente, cioè non come dipendenze, si dia:
$ pacman -Qet
Vedi
pacman/Tips and tricks
per altri esempi.
Pactree
Nota
pactree(8)
non è più parte  del pacchetto
pacman
. Può essere invece reperito in
pacman-contrib
.
Per vedere il grafico di dipendenza di un pacchetto, si dia:
$ pactree
nome_pacchetto
Per vedere il grafico di pacchetti che dipendono da un certo pacchetto, si dia l'opzione di invertimento
-r
a
pactree
, oppure il comando
whoneeds
proveniente da
pkgtools
AUR
[
collegamento interrotto
: package not found]
.
Struttura dei database
I database di
pacman
sono solitamente situati in
/var/lib/pacman/sync
. Per ogni ripositore specificato in
/etc/pacman.conf
vi è un database corrispondente in questa directory. I file database sono archivi tar compressi secondo il formato gzip, i quali contengono a loro volta una directory per ogni pacchetto. Per esempio, nel caso del pacchetto
which
:
$ tree which-2.21-5
which-2.21-5
|-- desc
Il file
desc
contiene solo metadati tipo la descrizione, le dipendenze, le dimensioni del file e l'hash MD5.
Ripulire la cache dei pacchetti
Pacman salva i pacchetti scaricati nella directory
/var/cache/pacman/pkg/
e non rimuove automaticamente versioni più vecchie o di pacchetti disinstallati. Questo comportamento ha dei vantaggi, ad esempio:
Permette di disfare un aggiornamento senza bisogno di riscaricare la versione precedente del pacchetto.
Un pacchetto disinstallato  può essere reinstallato facilmente dalla directory cache, senza che sia necessario riscaricarlo.
Tuttavia, è necessario accertarsi di ripulire la cache regolarmente per evitare che aumenti troppo di dimensioni.
Lo script
paccache(8)
, parte del pacchetto
pacman-contrib
, rimuove dalla cache tutte le versioni di ogni pacchetto qui situato, ad eccezione delle tre più recenti:
# paccache -r
È possibile
abilitare
e
lanciare
paccache.timer
per rimuovere ogni settimana pacchetti non utilizzati.
Suggerimento
Si possono istituire degli
hooks
(cioè "agganci") da eseguire automaticamente ogni volta che
pacman
esegue un'operazione. Si
installi
pacman-cleanup-hook
AUR
e si consultino
altri esempi
a riguardo.
Si può anche specificare quante versioni (a partire da quella piu recente) si desidera tenere. Per tenere soltanto una, si può dare:
# paccache -rk1
L'opzione
-u
/
--uninstalled
limita
paccache
a ripulire soltanto i pacchetti non più installati. Per esempio, il seguente comando rimuove tutte le versioni di pacchetti disinstallati ancora presenti nella cache:
# paccache -ruk0
Si consulti
paccache -h
per altre opzioni e funzionalità.
Pacman offre delle opzioni per ripulire la cache ed i file dei database appartenenti a repositori che furono rimossi dal file di configurazione
/etc/pacman.conf
. Tuttavia,
pacman
non offre la possibilità di tenere un certo numero diversioni passate ed è quindi molto più aggressivo di paccache.
Per rimuovere dalla cache tutti i pacchetti non più presenti e per rimuovere i database non più in utilizzo, si dia:
# pacman -Sc
Per rimuovere tutti i file dalla cache, si dia l'opzione due volte. Questo è il metodo più aggressivo e svuoterà completamente la directory cache:
# pacman -Scc
Attenzione
Andrebbe evitato di rimuovere tutte le versioni scorse dei pacchetti installati e disinstallati dalla cache a meno che non si debba liberare spazio a tutti i costi, dato che così facendo non è più possibile disfare un aggiornamento senza riscaricare i pacchetti.
pkgcacheclean
AUR
e
pacleaner
AUR
sono due sistemi alternativi per ripulire la cache.
Altri comandi
Un pacchetto può essere soltanto scaricato senza essere installato dando il comando:
# pacman -Sw
nome_pacchetto
Si può installare un pacchetto
locale
, ovvero non proveniente da un repositore remoto, dando il comando:
# pacman -U
/path/to/package/package_name-version.pkg.tar.zst
Per tenere una copia del pacchetto locale nella cache di pacman discussa in precedenza, si utilizzi:
# pacman -U file:///
path/to/package/package_name-version.pkg.tar.zst
È anche possibile installare un pacchetto remoto, ma non in un repositore, specificando un URL diretto:
# pacman -U
http://www.example.com/repo/example.pkg.tar.zst
Giro di prova
Pacman elenca sempre tutti i pacchetti da installare o rimuovere e richiede il permesso dell'utente prima di procedere.
Per ottenere un elenco in un formato processabile e per non eseguire le operazioni del tipo
-S
,
-U
e
-R
si dia l'opzione
-p
oppure
--print
.
--print-format
può essere impiegato per specificare il formato della lista in una serie di modi. Per esempio,
--print-format %n
produce una lista di pacchetti senza mostrare le rispettive versioni.
Ragione di installazione
Il database di
pacman
organizza i pacchetti installati in due gruppi, a seconda del motivo per il quale sono stati installati.
explicitly-installed
(it.
installati esplicitamente
): pacchetti che furono installati specificandone il nome ad un comando del tipo
-S
o
-U
;
dependencies
(it.
dipendenze
): pacchetti che furono installati implicitamente in quanto
richiesti
da altri pacchetti presenti sul proprio sistema.
Quando si installa espressamente un pacchetto è possibile dare disposizioni affinché esso risulti installato come dipendenza, dando il comando:
# pacman -S --asdeps
nome_pacchetto
Questo comando è generalmente utilizzato perché pacchetti installati esplicitamente possono includere
dipendenze opzionali
che in genere  portano funzionalità non essenziali, tali che spetta all'utente installarli se così desidera.
Suggerimento
L'installazione di dipendenze opzionali tramite
--asdeps
farà sì che quando si rimuovono
pacchetti orfani
(discussi in precedenza),
pacman
rimuova anche i pacchetti marchiati manualmente come dipendenze.
Quando si
re
installa un pacchetto, la ragione di installazione rimane preservata a meno che non si disponga di altro.
L'elenco di pacchetti esplicitamente installati può essere mostrato dando
pacman -Qe
, mentre l'elenco complementare di dipendenze può essere richiesto con
pacman -Qd
.
Per modificare la ragione di installazione di un pacchetto già presente, si dia
# pacman -D --asdeps
nome_pacchetto
per marchiarlo come dipendenza, oppure l'opzione opposta
--asexplicit
per marchiarlo come pacchetto installato esplicitamente.
Nota
Si sconsiglia di impiegare le opzioni
--asdeps
e
--asexplicit
quando si aggiorna il sistema, ad esempio dando
pacman -Syu
nome_pacchetto
--asdeps
, dato che questo modificherebbe non solo la ragione di installazione del pacchetto che si sta installando, ma di tutti gli altri pacchetti presenti sul sistema che vengono aggiornati contemporaneamente.
Ricerca di pacchetti che contengono un certo file
Prima di tutto si sincronizzi il database dei file:
# pacman -Fy
Si può poi effettuare la ricerca di pacchetti che contengono un file, dando ad esempio:
$ pacman -F pacman
core/pacman 5.2.1-1 (base base-devel) [installed]
    usr/bin/pacman
    usr/share/bash-completion/completions/pacman
extra/xscreensaver 5.43-1
    usr/lib/xscreensaver/pacman
Suggerimento
Si può
lanciare
pacman-filesdb-refresh.timer
(reperibile nel pacchetto
pacman-contrib
) per aggiornare il database pacman dei file ogni settimana.
Per funzionalità più avanzate si installi
pkgfile
, che utilizza un database separato con tutti i file ed i pacchetti con loro associati.
Cosa accade quando si installa/aggiorna/rimuove pacchetti
Quando si svolge correttamente, una cosiddetta
transazione
consiste del seguente processo di cinque passi:
Si inizia la transazione nel caso non ci sia un
database lock
(vedi
wikipedia
).
Si compone l'elenco di pacchetti da aggiungere o rimuovere durante la transazione.
Si prepara la transazione nel modo dettato da eventuali opzioni, verificandone la correttezza con l'aiuto dei database di sincronizzazione, dei pacchetti e delle dipendenze.
Si esegue la transazione:
Se possibile, si scaricano i pacchetti (
_alpm_sync_load
);
Se dovessero esistere hook di
pacman
del tipo
PreTransaction
, questi verrebbero impiegati adesso;
I pacchetti da sostituire, rimuovere o in conflitto vengono rimossi;
Se ci dovessero essere pacchetti da installare, ciò avverrebbe:
Nel caso un pacchetto abbia uno script di installazione, si invocherebbe la funzione
pre_install
(o
pre_upgrade
o
pre_remove
nel caso di un aggiornamente o di una rimozione) potenzialmente definita all'interno di esso;
Pacman estrae i file ci cui consiste il pacchetto dall'archivio tar, e li deposita in un luogo adatto (nel caso di un'installazione o di un aggiornamento). I file che andrebbero a sostituire altri file già presenti vengono messi da parte, affinché la sostituzione possa essere eseguita manualmente se necessario. Per questo scopo vengono salvati con l'estensione
.pacnew
.
Nel caso esista uno script post-installazione, la funzione
post_install
(o
post_upgrade
o
post_remove
nel caso di un aggiornamento o di una rimozione) verrebbe impiegata.
Se esistono hooks di
pacman
del tipo
PostTransaction
, questi verrebbero eseguiti a questo punto.
pacman
rilascia il
database lock
e le risorse relative alla transazione.
Configurazione
È possibile personalizzare pacman modificando i contenuti del file
/etc/pacman.conf
, affinché funzioni nel modo desiderato. Per informazioni più approfondite si consulti
pacman.conf(5)
.
Impostazioni generali
Le impostazioni generali si trovano nella sezione intitolata
[options]
. Informazioni a riguardo sono reperibili in
pacman.conf(5)
oppure nel file di default
pacman.conf
.
Confronto delle versioni prima di un aggiornamento
Per fare mostrare sia la versione "vecchia" che quella "nuova" di un pacchetto, si abiliti la riga che menziona "VerbosePkgLists", rimuovendo il simbolo
#
che si trova al suo inizio. Con questa impostazione il comando
pacman -Syu
fornisce il seguente risultato:
Package (6)             Old Version  New Version  Net Change  Download Size

extra/libmariadbclient  10.1.9-4     10.1.10-1      0.03 MiB       4.35 MiB
extra/libpng            1.6.19-1     1.6.20-1       0.00 MiB       0.23 MiB
extra/mariadb           10.1.9-4     10.1.10-1      0.26 MiB      13.80 MiB
Abilitare download paralleli
Da pacman 6.0 in poi vi è la possibilità di fare scaricare più pacchetti contemporaneamente. Sempre nella sezione
[options]
del file
/etc/pacman.conf
si trova la variabile
ParallelDownloads
, impostabile su di un numero intero positivo. Usando per esempio
5
, si dispone affinché vengano scaricati fino a 5 pacchetti contemporaneamente. La rimozione di questa riga (ad esempio riaggiungendo il prefisso
#
al suo inizio) farà sì che tutti i pacchetti vengano sempre installati in serie.
Saltare l'aggiornamento di un pacchetto
Attenzione
Saltare aggiornamenti va fatto con cautela, dato che
aggiornamenti parziali
non sono appoggiati.
Per disporre affinché un pacchetto venga saltato quando si
aggiorna
il sistema, si aggiunga la seguente istruzione nella sezione
[options]
:
IgnorePkg=
nome_pacchetto
Per specificare più pacchetti si inserisca un elenco di nomi separati da spazi, o si separi i vari pacchetti in multiple istruzioni
IgnorePkg
, una per riga. Si può anche impiegare
glob pattern
. Se si desidera saltare un aggiornamento soltanto una volta, si può impiegare l'opzione
--ignore
nel comando di aggiornamento, stavolta con un elenco di pacchetti separati tramite la virgola.
Sarà comunque possibile aggiornare pacchetti "ignorati" dando
pacman -S
, nel cui caso
pacman
ricorderà all'utente di stare per aggiornare un pacchetto incluso in un'istruzione del tipo
IgnorePkg
.
Saltare l'aggiornamento di un gruppo di pacchetti
Attenzione
Saltare l'aggiornamento di gruppi di pacchetti va fatto con cautela dato che
aggiornamenti parziali
non sono appoggiati.
Come con pacchetti normali, è possibile saltare un intero gruppo di pacchetti:
IgnoreGroup=gnome
Saltare l'aggiornamento di un file
Tutti i file elencati in un'istruzione del tipo
NoUpgrade
non verranno mai toccati durante l'aggiornamento o l'installazione di un pacchetto. Il file che dovrebbe invece sostituire il file in questione verrà invece salvato separatamente con l'estensione
.pacnew
.
NoUpgrade=
path/to/file
Come prima, si può specificare più file elencandoli in questo modo:
NoUpgrade=
path/to/file1 path/to/file2
Nota
Il
percorso
(ing.
path
) del file si riferisce al percorso all'intero dell'archivio del pacchetto. Dunque, il prefisso
/
non va aggiunto.
Impedire l'installazione di certi file sul sistema
Per evitare sempre che vengano installati file in certe directory, si elenchi i loro sentieri in un'istruzione del tipo
NoExtract
. Per esempio, per evitare l'installazione di moduli
systemd
, si utilizzi:
NoExtract=usr/lib/systemd/system/*
Istruzioni specificate dopo possono sostituire quelle che le precedono. Si può negare un'istruzione aggiungendo il prefisso
!
.
Suggerimento
Pacman emette un avvertimento quando aggiorna pacchetti che richiedono un
locale
rimosso tramite
localpurge
o
bleachbit
. È possibile sopprimere tali messaggi di avvertimento disabilitando l'impostazione
CheckSpace
in
pacman.conf
. Si avverte che così facendo si disabilita avvertimenti per tutti i pacchetti.
Possesso di più file di configurazione
Nel caso si dovesse essere in possesso di più file di configurazione, ad esempio un file principale e un altro file con il repositore
testing
attivato), si può condividere le impostazioni comuni ad entrambi i file impiegando l'istruzione
Include
:
Include =
/path/to/common/settings
in cui
/path/to/common/settings
specifica il sentiero del file all'interno del quale si trovano le istruzioni in comune.
Hook
Pacman può eseguire hook per pre e post-transazione, specificati nella directory
/usr/share/libalpm/hooks/
. Si possono aggiungere altre directory nelle quali si intende collocare tali hook specificandone i sentieri nell'istruzione
HookDir
in
pacman.conf
, il cui valore predefinito è
/etc/pacman.d/hooks
. I nomi di file che specificano un hook devono possedere il suffisso
.hook
. Inoltre, gli hook di pacman non sono interattivi.
Gli hook di pacman possono per esempio essere utilizzati insieme a
systemd-sysusers
e
systemd-tmpfiles
per create automaticamente utenti e file di sistema durante l'installazione di pacchetti. Ad esempio, il pacchetto
tomcat8
AUR
richiede un utente di sistema chiamato
tomcat8
ed una serie di directory nel possesso di questo utente. Gli hook
systemd-sysusers.hook
e
systemd-tmpfiles.hook
impiegano
systemd-sysusers
e
systemd-tmpfiles
ogni volta che
pacman
determina che
tomcat8
AUR
contiene dei file che specificano utenti e file temporanei.
Per approfondire gli hook di
alpm
si faccia riferimento a
alpm-hooks(5)
.
Repositori e mirror
Con eccezione della sezione
[options]
, ogni altra
[sezione]
definita in
pacman.conf
specifica un repositore di pacchetti da utilizzare.
Un repositore consiste di un insieme di pacchetti strutturato in una maniera che segue una certa logica, fisicamente situato su di uno o più server. Per questo motivo, ogni server si chiama
mirror
del repositore.
Ci sono repositori
ufficiali
e
inufficial
. L'ordine in cui i repositori sono elencati nel file di configurazione è importante; quando ci sono due pacchetti aventi lo stesso nome, i repositori che appaiono prima avranno la precedenza rispetto a quelli che li succedono. Dopo avere aggiunto un nuovo repositore, si deve
aggiornare
l'intero sistema.
Ogni sezione specifica di un repositore permette di definire la lista di
mirror
associati con esso. Questo si può fare sia direttamente, oppure in un file separato, specificato in un'istruzione del tipo
Include
. Ad esempio, i mirror per i repositori ufficiali sono elencati nel file
/etc/pacman.d/mirrorlist
. Si faccia riferimento all'articolo
Mirrors
per configurare questo aspetto.
Directory della cache dei pacchetti
Pacman salva i file dei pacchetti scaricati nella cache, all'interno di una directory specificata dall'istruzione
CacheDir
all'interno della sezione
[options]
del file
pacman.conf
. Il valore predefinito di quest'impostazione è
/var/cache/pacman/pkg/
.
Con il passare del tempo, la directory di cache può aumentare di dimensioni anche se si fa attenzione a mantenere nella cache soltanto le versioni più recenti dei pacchetti installati.
Se si desidera spostare la directory in un luogo più conveniente, si può fare
una
delle seguenti cose:
Si imposti
CacheDir
in
pacman.conf
sul sentiero della nuova directory.
Si monti una nuova partizione dedicata a questo scopo oppure un
sottovolume Btrfs
in
/var/cache/pacman/pkg/
.
Si monti (
bind mount
) la directory selezionata in
/var/cache/pacman/pkg/
.
Attenzione
Non istituire un symlink
a
/var/cache/pacman/pkg/
da un'altra directory. Farlo
causerà comportamenti indesiderati
da parte di pacman, in particolare quando pacman aggiorna se stesso.
Sicurezza dei pacchetti
Pacman appoggia la firma (ing.
signature
) dei pacchetti, che porta un livello di sicurezza in più. L'impostazione predefinita,
SigLevel = Required DatabaseOptional
, abilita la verifica della firma di tutti i pacchetti a livello globale. Questa regola può essere sostituita per ogni repositore utilizzando l'istruzione
SigLevel
. Per altri dettagli relativi alla firma e alla verifica della firma dei pacchetti si faccia riferimento a
questo articolo
.
Troubleshooting
Errore "Failed to commit transaction (conflicting files)"
Se appare il seguente errore:
[1]
error: could not prepare transaction
error: failed to commit transaction (conflicting files)
package
:
/path/to/file
exists in filesystem
Errors occurred, no packages were upgraded.
Questo accade perché
pacman
ha rilevato un conflitto di file e si rifiuta di sostituire i file al posto dell'utente. Questo comportamento è inteso e non si tratta di una svista.
Il problema in genere è banale da risolvere, tuttavia, per essere sicuri, si dovrebbe cercare di capire come i file in questione siano arrivati lì. Un modo sicuro di procedere è di verificare prima  se ci dovesse essere un altro pacchetto a cui appartiene il file in questione (
pacman -Qo
/path/to/file
). Se questo dovesse essere il caso, si prega di
comunicarlo
. Se il file non risulta essere di proprietà di un altro pacchetto, si rinomini il file presente e si dia di nuovo il comando di aggiornamento. Se tutto va bene, a questo punto il file può essere rimosso.
Se l'utente aveva installato un programma manualmente, ovvero senza utilizzare
pacman
, per esempio tramite
make install
, si deve rimuovere/disinstallare questo programma, inclusi tutti i file associati ad esso. Si consulti anche
Pacman tips#Identify files not owned by any package
.
Ogni pacchetto installato viene con un file
/var/lib/pacman/local/
package-version
/files
nel quale si trovano i metadati del pacchetto. Se questo file dovesse risultare corrotto, vuoto, oppure mancante, si manifesterebbe l'errore
file exists in filesystem
quando si tenterebbe di aggiornare il pacchetto. Errori di questo tipo generalmente si limitano ad un pacchetto. Invece di rinominare manualmente i file appartenenti ad un pacchetto per rimuoverli più tardi, si può dare esplicitamente il comando
pacman -S --overwrite
glob
pacchetto
per obbligare
pacman
a sostituire tutti i pacchetti che corrispondono al
pattern
glob
.
Attenzione
In genere si dovrebbe evitare di usare l'opzione
--overwrite
. Si consulti
System maintenance#Avoid certain pacman commands
.
Errore "Failed to commit transaction (invalid or corrupted package)"
Si identifichi i file
.part
(pacchetti non completamente scaricati) in
/var/cache/pacman/pkg/
e li si rimuova (questo  problema è causato spesso da un comando
XferCommand
personalizzato in
pacman.conf
).
# find /var/cache/pacman/pkg/ -iname "*.part" -delete
Lo stesso errore può apparire nel caso
archlinux-keyring
risulti non-aggiornato. Questo impedirebbe la verifica delle firme da parte di
pacman
. Si consulti See
Pacman/Package signing#Upgrade system regularly
per la correzione e per istruzioni su come evitare il problema in futuro.
Errore "Failed to init transaction (unable to lock database)"
Quando
pacman
sta per modificare il database dei pacchetti, per esempio a causa dell'installazione di un pacchetto, crea un
lock
file in
/var/lib/pacman/db.lck
. Questo impedisce agli utenti di usare
pacman
più volte contemporaneamente, modificando il database dei pacchetti allo stesso tempo.
Se
pacman
dovesse essere interrotto mentre sta modificando il database, il
lock
file potrebbe rimanere. Se si è certi che non ci sia nessun caso di
pacman
ancora in esecuzione, si può rimuovere il
lock
file:
# rm /var/lib/pacman/db.lck
Suggerimento
Si può dare il comando
fuser /var/lib/pacman/db.lck
come
root
per controllare se c'è ancora un processo che sta utilizzando il file.
Un pacchetto che si cerca di installare non può essere reperito
Questo errore si manifesta come
Not found in sync db
,
Target not found
oppure
Failed retrieving file
.
Prima di tutto, ci si accerti che il pacchetto esiste veramente. Se questo dovesse essere il caso, può darsi che il proprio elenco di pacchetti non sia stato aggiornato. Si dia il comando
pacman -Syyu
per obbligare
pacman
a ricostruire l'elenco dei pacchetti e ad effettuare un aggiornamento. Si verifichi anche che i
mirrors
siano aggiornati e
i repositori
siano stati configurati correttamente.
Potrebbe anche essere che il repositore che contiene il pacchetto che si cerca non sia stato abilitato sul proprio sistema. Per esempio potrebbe darsi che si tratti del repositore
multilib
, ma questo non sia abilitato nel file
pacman.conf
.
Si consulti anche il
FAQ
.
Pacman crasha durante un aggiornamento
Se pacman dovesse crashare con un errore del tipo "database write" mentre sta rimuovendo un pacchetto, si provi a rimuovere e reinstallare o aggiornare il pacchetto. Nel caso in cui questo dovesse non riuscire, si segua le seguenti istruzioni:
Si eseguisca il boot con l'ambiente di installazione di Arch (ing.
Arch installation medium
), preferibilmente utilizzando un
medium
recente tale che la versione di pacman al suo interno sia almeno così recente come quella sul proprio sistema.
Si monti il sistema file di root, per esempio dando
mount /dev/sdaX /mnt
, e si verifichi che il sistema montato abbia abbastanza spazio con
df -h
.
Si monti i sistemi
proc
,
sys
e
dev
con
mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
Se i database e le directory utilizzate dapacman si trovano nel luogo predefinito, si può semplicemente aggiornare il database dando il comando
pacman --sysroot /mnt -Syu
in qualità di
root
.
In caso non si possa effettuare l'aggiornamento, ci si riferisca alla sezione
Pacman/Tips and tricks#Reinstalling all packages
.
Dopo l'aggiornamento si può verificare se vi sono pacchetti che non furono aggiornati ed esistono ancora in uno stato guasto, dando il comando
find /mnt/usr/lib -size 0
;
Tali pacchetti possono essere reinstallati dando il comando
pacman --sysroot /mnt -S
package
.
pacman: command not found
Se per caso
/var/cache/pacman/pkg
dovesse essere un
symlink
,
pacman
tenterebbe di creare una directory al suo posto, rimuovendo il symlink in questione durante l'aggiornamento, facendo fallire l'aggiornamento. Per questo motivo, i contenuti del pacchetto
pacman
verrebbero a mancare.
Non va mai istituito un symlink a
/var/cache/pacman/pkg
perché questo sentiero è controllato da
pacman
. Si utilizzi l'opzione
CacheDir
oppure una delle altre soluzioni elencate nella sezione
#Directory della cache dei pacchetti
.
Se si ha riscontrato questo problema in precedenza e il sistema si è guastato, si possono estrarre i contenuti del pacchetto che andrebbero in
/usr
per ripristinare
pacman
e poi reinstallarlo correttamente; si faccia riferimento a
FS#73306
e alla
conversazione a riguardo
nel forum.
Reinstallare pacman a mano
Usare pacman-static
pacman-static
AUR
è una versione di
pacman
staticamente compilata, in modo tale da poter essere lanciata perfino quando le librerie di sistema non funzionano. Questo aspetto può essere utile quando è stato eseguito un
aggiornamento parziale
che ha guastato il sistema, per cui la versione di
pacman
installata regolarmente non funziona più.
Il commento riservato ed il PKGBUILD offrono un modo per scaricare direttamente il file binario eseguibile, che può poi essere utilizzato per reinstallare
pacman
oppure per aggiornare l'intero sistema dopo un aggiornamento parziale che ha provocato guasti.
Utilizzare una versione esterna di pacman
Se perfino
pacman-static
non dovesse funzionare, è possibile riprendersi utilizzando
pacman
esternamente. Uno dei metodi più facili per raggiungere questo scopo consiste nell'utilizzo di
archiso
, impiegando le opzioni
--sysroot
o
--root
per specificare il punto di ove montare il sistema. Si faccia riferimento a
Chroot#Using chroot
per istruzioni su come montare i sistemi di file richiesti da
--sysroot
.
Estrazione manuale
Attenzione
Quando si impiega questo metodo è estremamente facile provocare danni o peggio. Si utilizzi questo metodo soltanto come ultima alternativa se il metodo descritto in
#Pacman crasha durante un aggiornamento
non dovesse essere disponibile.
Anche se
pacman
dovesse essere completamente guasto, lo si può aggiustare a mano scaricando il pacchetto più recente ed estraendolo nel posto giusto. I passi da seguire sarebbero i seguenti:
Si identifichi le dipendenze di
pacman
da installare;
Si scarichi ogni pacchetto da un
mirror
a scelta;
Si estragga ogni pacchetto
Si reinstalli ogni pacchetto dando il comando
pacman -S --overwrite
affinché il database dei pacchetti sia aggiornato;
Si esegua un aggiornamento generale del sistema intero.
Se si è in possesso di un sistema Arch che funziona correttamente, si può richiedere l'elenco intero di dipendenze tramite:
$ pacman -Q $(pactree -u pacman)
Tuttavia potrebbe essere necessario aggiornare soltanto alcuni di questi pacchetti, a seconda del problema in questione. Per estrarre un pacchetto scaricato si può dare il comando:
# tar -xvpwf
package.tar.zst
-C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO
Si noti che l'utilizzo dell'opzione
w
per impiegare la modalità interattiva. Lanciare il comando non-interattivamente è molto rischioso perché si potrebbe finire per sostituire un file importante. È anche importante estrarre i pacchetti nell'ordine corretto, iniziando con le dipendenze.
Questo post sul forum
contiene un esempio di questo processo, in cui sono guaste soltanto un paio di dipendenze di
pacman
.
Errore "Unable to find root device" dopo un
reboot
Probabilmente si è corrotto l'
initramfs
durante un aggiornamento del
kernel
, potenzialmente causato da un uso improprio dell'opzione
--overwrite
di
pacman
. Ci sono due opzioni: per primo, si impieghi l'elemento denominato
Fallback
.
Suggerimento
In caso l'elemento
Fallback
sia stato rimosso, si può sempre premere il tasto
Tab
(per Syslinux) o
e
(per GRUB o systemd-boot) quando ci si trova nel menu del
boot loader
. Si rinomini in
initramfs-linux-fallback.img
e si prema
Enter
o
b
(a seconda del
boot loader
impiegato) per lanciare il sistema con i nuovi parametri.
Una volta che il sistema parte, se si utilizza il kernel
linux
regolare, si dia il seguente comando da un terminale per ricompilare l'immagine initramfs:
# mkinitcpio -p linux
Se non dovesse funzionare, ci si procuri una versione Arch contemporanea (su di un CD/DVD oppure USB stick), si
monti
la directory root e la partizione di boot su
/mnt
e
/mnt/boot
, rispettivamente. Poi si istituisca un ambiente
chroot
utilizzando
arch-chroot
:
# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd linux
Nota
Se non si dovesse avere accesso ad una versione contemporanea di Arch oppure se si dovesse essere soltanto in possesso di altre distribuzioni "live" di Linux, si utilizzi
chroot
nel modo standard. Ovviamente ci sarebbero più comandi rispetto alla semplice esecuzione dello script
arch-chroot
.
Se
pacman
dovesse fallire con l'errore
Could not resolve host
, si prega di
verificare il collegamento internet
.
Se non si dovesse essere in grado di accedere all'ambiente
arch-chroot
oppure
chroot
normale, si potrebbe usare
pacman --sysroot /mnt -Syu foo bar
per impiegare
pacman
nella partizione root.
Si reinstalli il kernel (pacchetto
linux
) per rigenerare l'immagine initramfs con
mkinitcpio -p linux
. Non vi è bisogno di compiere questa azione separatamente.
Dopodiché si consiglia di dare il comando
exit
,
umount /mnt/{boot,}
e
reboot
per lasciare alle spalle l'ambiente chroot e fare ripartire il sistema.
Errore "Warning: current locale is invalid; using default "C" locale"
Come dice l'errore, il proprio locale non è configurato correttamente. Si faccia riferimento a
Locale
.
Pacman non rispetta le impostazioni di proxy
Si verifichi che le variabili ambientali (
$http_proxy
,
$ftp_proxy
ecc.) siano impostate correttamente. Se si usa
pacman
con
sudo
, bisogna configurare sudo affinché esso
inoltri le variabili a pacman
. Ci si accerti anche che la configurazione di
dirmngr
contenga
honor-http-proxy
in
/etc/pacman.d/gnupg/dirmngr.conf
in modo tale da rispettare le impostazioni sui proxy quando si riscarica le chiavi criptografiche.
Come reinstallo tuti i pacchetti presenti, mantenendo la rispettiva ragione di installazione?
Per reinstallare tutti i pacchetti natii si dia il comando
pacman -Qnq | pacman -S -
oppure
pacman -S $(pacman -Qnq)
(l'opzione
-S
mantiene la ragione di installazione).
Poi si dovrà reinstallare tutti i pacchetti stranieri in una maniera simile, sostituendo
-Qnq
con
-Qmq
.
Errore "Cannot open shared object file"
Sembrerebbe che la precedente transazione
pacman
abbia rimosso o corrotto delle librerie
condivise
(ing.
shared
), richieste da
pacman
stesso.
Per sistemare questa situazione c'è bisogno di estrarre le librerie necessarie direttamente dal sistema di file (ing.
file system
). Prima di tutto si identifichi il pacchetto che mette a disposizione la libreria mancante e lo si trovi nella cache di
pacman
(
/var/cache/pacman/pkg/
). Si estragga la libreria e la si collochi nel posto dove si deve trovare. A quel punto si dovrebbe essere in grado di lanciare
pacman
.
Ora si deve
reinstallare
il pacchetto guasto. Si noti che bisogna specificare
--overwrite
dato che si ha appena estratto file di sistema di cui
pacman
non è al corrente. Così
pacman
potrà sostituire la libreria correttamente con quella proveniente dal pacchetto.
Questo è tutto. Adesso tocca solo aggiornare il resto del sistema.
Blocco del
download
dei pacchetti
Alcuni utenti hanno riferito problemi di rete che impediscono a
pacman
di sincronizzare o aggiornare pacchetti da repositori.
[2]
[3]
Quando si installa Arch Linux nativamente, questi errori dovrebbero essere risolti sostituendo il
downloader
di file di
pacman
predefinito con un'alternativa (vedi
Improve pacman performance
per più dettagli). Quando si installa Arch Linux come sistema operativo ospite in
VirtualBox
questo problema può essere risolto utilizzando
Host interface
invece di
NAT
nelle impostazioni della macchina virtuale.
Errore "Failed retrieving file 'core.db' from mirror"
Se si manifesta questo errore, si verifichi che i
mirrors
siano corretti e, nel caso che lo fossero, si provi un
name server
diverso.
"error: 'local-package.pkg.tar': permission denied"
Se si desidera installare un pacchetto su di un ambiente
sshfs
con
pacman -U
e si riceve questo errore, si sposti il pacchetto in una directory locale e si riprovi.
"error: could not determine cachedir mount point /var/cache/pacman/pkg"
Quando si da un comando, per esempio
pacman -Syu
, all'interno di un ambiente
chroot
si può ottenere un errore del tipo:
error: could not determine cachedir mount point /var/cache/pacman/pkg
error: failed to commit transaction (not enough free disk space)
Spesso questo è provocato dal fatto che la directory del
chroot
non sia il punto di montaggio (ing.
mount point
) quando si entra nell'ambiente chroot. Si faccia riferimento alla nota in
Install Arch Linux from existing Linux#Downloading basic tools
per una soluzione e si consulti
arch-chroot(8)
per ottenere una spiegazione ed un esempio su come usare
bind mounting
per rendere
mount point
la directory
chroot
.
"error: GPGME error: No data"
Se mentre si cerca di aggiornare pacchetti si dovesse manifestare questo errore, si provi
rm -r /var/lib/pacman/sync/
prima di tentare un aggiornamento.
Se la rimozione dei file di sincronizzazione non dovesse bastare, si verifichi che i file di sincronizzazione siano del tipo
gzip compressed data
dando il comando
file /var/lib/pacman/sync/*
. Può darsi che un router oppure un proxy abbia corrotto un download.
Se i file di sincronizzazione appaiono essere del tipo corretto, potrebbe esserci un problema con il server mirror. Si verifichi i server mirror dando i comandi
pacman-conf -r core
e
pacman-conf -r extra
. Si incolli il primo link in un browser e si controlli che appaia un elenco di file. Nel caso ciò non dovesse essere il caso, ad esempio perché il server risponde con un errore, si commenti il server in questione aggiungendo il prefisso
#
alle rispettive righe in
/etc/pacman.d/mirrorlist
.