Pacman/Trucs et Astuces

De ArchwikiFR

Méthodes générales utilisées pour l'amélioration de la flexibilité des astuces fournies, ou pacman lui-même: voir Core utilities et Bash.


Sommaire

Maintenance

Attention : Page originelle à compléter pour prendre en compte les modifications introduites par les versions de pacman 4.2 Usage= et 5.1 --overwrite
Note : Dans la section ci-dessous, au lieu de la commande comm qui requiert une redirection de la sortie vers un tri par sort, on pourra aussi utiliser grep -Fxf ou grep -Fxvf.

Voir aussi Maintenance Système traduit de maintenance.

Liste des paquets

On peut vouloir obtenir la liste des paquets installés et leur version, en cas par exemple de report de bug ou d'une discussion sur des paquets installés.

  • Liste des paquets installés explicitement: pacman -Qe.
  • Liste des paquets d'un groupe nommé group: pacman -Sg group
  • Liste des paquets installés explicitement, d'origine (c.-à-d. présents dans la base de données /var/lib/pacman/local/), qui ne sont pas des dépendances directes ni optionnelles: pacman -Qent.
  • Liste des paquets "étrangers" (typiquement par téléchargement et installation manuels ou paquets retirés des dépôts): pacman -Qm.
  • Liste des paquets installés d'origine (depuis la(es) base(s) synchronisée(s)): pacman -Qn.
  • Liste des paquets - filtrage par expression régulière: pacman -Qs regex.
  • Liste des paquets - filtrage par expression régulière avec sortie en format personnalisé: expac -s "%-30n %v" regex (needs expac).

Avec leur taille

Il peut être utile de déterminer les paquets les plus volumineux peut être utile s'il était nécessaire de libérer de l'espace sur votre disque dur. Il y a ici deux options: obtenir la taille des paquets individuels, ou obtenir la taille des paquets et leurs dépendances.

Individuellement

Commande pour lister les paquets installés et leur taille individuelle:

$ pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h
Paquets avec leurs dépendances
  • Lister leur taille en incluant les dépendances:

- Installer expac et lancer expac -H M '%m\t%n' | sort -h

- Lancer pacgraph avec l'option -c

  • Lister la taille de téléchargement de plusieurs paquets (laissez packages vide pour lister tous les paquets):
$ expac -S -H M '%k\t%n' packages
  • Lister les paquets installés explicitement qui ne sont ni dans base ni dans base-devel avec taille et description:
$ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <(pacman -Qqg base base-devel | sort)) | sort -n
  • Lister les paquets marqués comme nécessitant une mise à jour avec la taille de téléchargement:
$ pacman -Quq|xargs expac -S -H M '%k\t%n' | sort -sh
Note : Cette commande nécessite une mise à jour préalable de la base :
$ sudo pacman -Sy
de plus, si on est à jour, la sortie de pacman -Qu sera vide et expac ne recevant aucun paquet en argument, listera tous les paquets... La suppression de xargs après le pipe entraine un message d'erreur et semble donc préférable :
$ pacman -Quq| expac -S -H M '%k\t%n' | sort -sh
Note : Si pacman-contrib est installé, la commande
$ checkupdates
donnera une liste simple de paquets à mettre à jour

Par date

Liste des 20 derniers paquets installés avec expac, lancer:

$ expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -n 20

ou, en secondes depuis le moment (1970-01-01 UTC):

$ expac --timefmt=%s '%l\t%n' | sort -n | tail -n 20

N'appartenant pas à un groupe ou dépôt specifié

Note : pour obtenir la liste des paquets installés en tant que dépendances mais n'étant plus requis par aucun paquet, voir #Suppression des paquets inutiles (orphelins).

Liste des paquets installés en-dehors des groupes base ou base-devel:

$ comm -23 <(pacman -Qeq | sort) <(pacman -Qgq base base-devel | sort)

Liste de tous les paquets installés non requis par d'autres paquets et en-dehors des groupes base ou base-devel:

$ comm -23 <(pacman -Qqt | sort) <(pacman -Sqg base base-devel | sort)

Comme ci-dessus, mais avec descriptions:

$ expac -HM '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <(pacman -Qqg base base-devel | sort))

Liste de tous les paquets installés non présents dans le dépôt précisé nom du depot:

$ comm -23 <(pacman -Qq | sort) <(pacman -Slq nom du depot | sort)

Liste de tous les paquets installés qui sont présents dans le dépôt précisé nom du depot:

$ comm -12 <(pacman -Qq | sort) <(pacman -Slq nom du depot | sort)

Liste de tous les paquets de l'ISO Arch Linux et n'appartenant pas au groupe base:

$ comm -23 <(curl https://git.archlinux.org/archiso.git/tree/configs/releng/packages.x86_64) <(pacman -Qqg base | sort)

Paquets de Développement

Pour une liste de tous les paquets de développement/unstable, commande:

$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$'

Parcourir les paquets

Pour parcourir tous les paquets installés avec un aperçu instantané de chaque paquet:

Installer fzf

 $ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'

Le programme fzf présentera une vue à deux volets listant tous les paquets avec les informations sur les paquets affichées à droite.

Entrez des lettres pour filtrer la liste des paquets ; utilisez les touches fléchées (ou Ctrl-j/Ctrl-k) pour naviguer ; appuyez sur Enter pour voir les informations des paquets sous less.

Liste des fichiers fournis par un paquet - avec leur taille

Ceci peut s'avérer utile si vous constatez qu'un paquet spécifique utilise une quantité d'espace considérable et que vous voulez savoir quels fichiers en consomme le plus.

$ pacman -Qlq package | grep -v '/$' | xargs du -h | sort -h

Recherche des Fichiers n'appartenant à aucun paquet

Si des paquets égarés, n'appartenant à aucun paquet, sont présents dans votre système (un cas courant si vous n'avez pas utilisé le gestionnaire de paquets - voir Maintenance Système), vous pouvez vouloir trouver ces fichiers afin de les nettoyer.

Une méthode est d'utiliser la commande # pacreport --unowned-files de pacutils qui listera ces paquets "sans nom" parmi d'autres détails.

Une autre est d'isoler tous les fichiers particuliers, à tester en suite en utilisant pacman:

# find /etc /usr /opt /var | LC_ALL=C pacman -Qqo - 2>&1 > /dev/null | cut -d ' ' -f 5-
Astuce : Le script lostfiles effectue de semblables étapes mais incluera une liste noire détaillée pour ôter les faux positifs (nombreux avec les deux premières commandes) du résultat.

Suivi des fichiers sans propriétaires créés par les paquets

La plupart des systèmes collectent lentement de nombreux fichiers fantômes :"ghost", fichiers d'état, journaux, index, etc. en utilisation normale.

On peut utiliser pacreport de pacutils pour suivre ces fichiers et leurs associations via /etc/pacreport.conf (voir man 1 pacreport).

Exemple (résumé - voir man) de configuration:

/etc/pacreport.conf
[Options]
IgnoreUnowned = usr/share/applications/mimeinfo.cache

[PkgIgnoreUnowned]
alsa-utils = var/lib/alsa/asound.state
bluez = var/lib/bluetooth
ca-certificates = etc/ca-certificates/trust-source/*
dbus = var/lib/dbus/machine-id
glibc = etc/ld.so.cache
grub = boot/grub/*
linux = boot/initramfs-linux.img
pacman = var/lib/pacman/local
update-mime-database = usr/share/mime/magic

Ainsi, en lançant # pacreport --unowned-files, on affichera une liste détaillée et motivée de tous les fichiers sans propriétaire, dont le paquet associé n'est plus installé (ou si de nouveaux fichiers ont été créés).

En sus le script aconfmgr, (aconfmgr-git), permet, par création d'un fichier de configuration (ex ~/.aconfmgr), le suivi des fichiers modifiés et orphelins , voir aconfmgr-readme

Suppression des paquets inutiles (orphelins)

Suppression récursive des paquets orphelins et de leurs fichiers de configuration:

# pacman -Rns $(pacman -Qtdq)

En l'absence d'orphelins la sortie de pacman sera un message d'erreur: error: no targets specified, attendu qu'aucun argument ne sera passé par la commande expansée pacman -Qtdq à la commande pacman -Rns.

Note : 1.Les arguments -Qt listent les vrais orphelins. Pour inclure les paquets installés en tant que dépendances optionnelles n'étant plus requis par aucun autre, doubler l'argument t, ex.: -Qtt}.
Attention : 2.Certains programmes, orphelins parce que sans dépendances, mais fonctionnels et utiles, devront être marqués comme explicitement installés # pacman -D --asexplicit paquet  avant l'utilisation de la commande - radicale - ci-dessus !

Suppression totale, sauf du groupe base

S'il était nécessaire de désinstaller la totalité des programmes en dehors de ceux du groupe base, essayer, en une ligne de commande (avoir installé pacman-contrib):

# pacman -R $(comm -23 <(pacman -Qq | sort) <((for i in $(pacman -Qqg base); do pactree -ul "$i"; done) | sort -u))

Commande issue du forum inter, ce post, et améliorée pour l'article.

Obtenir la liste de dépendances de plusieurs paquets

Dépendances triées par ordre alphabédique et élimination des doubles.

Note : Pour ne montrer que l'arbre de paquets installés localement, utiliser pacman -Qi.
Attention : Commande à modifier - ne fonctionne pas (plus ?) - utiliser expac, ci-dessous
$ pacman -Si packages | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u

Alternativement, avec expac:

$ expac -l '\n' %E -S packages | sort -u

Liste des fichiers de sauvegarde modifiés

Si vous voulez sauvegarder vos fichiers de configuration système, vous pouvez copier tous les fichiers dans /etc/}, mais vous n'êtes généralement intéressé que par les fichiers que vous avez modifiés . Les Package backup files modifés seront trouvés par la commande:

# pacman -Qii | awk '/^MODIFIED/ {print $2}'

Lancer cette commande avec les permssions root vous assurera d'inclure dans la sortie les fichiers en lecture exclusive par root (tels que /etc/sudoers).

Astuce : Voir Listing all changed files from packages pour lister tous les fichiers modifiés connus de pacman, et non les seuls fichiers de sauvegarde.

Sauvegarde de la base de données de pacman

On peut utiliser les commandes suivantes pour une sauvegarde de la base de données de pacman:

$ tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local

Enregistrer ce fichier de sauvegarde de la base sur un ou plusieurs supports physiques, clef-USB, DD externe, CD-R... La base pourra être restaurée par simple copie de ce fichier de sauvegarde pacman_database.tar.bz2 vers le répertoire racine / puis l'exécution de la commande suivante:

# tar -xjvf pacman_database.tar.bz2
Note : En cas de corruption des fichiers de la base de données de pacman, et en l'absence de sauvegarde disponible il restera un espoir de reconstruction. Voir le paragraphe #Restauration de la base de données locale de pacman.
Astuce : Le paquet pakbak-git fournit un script et un service systemd pour automatiser cette tâche. La configuration est possible dans /etc/pakbak.conf.

Vérifier facilement les logs de changements

Lorsque les responsables mettent à jour des paquets, les commits sont souvent commentés de manière utile.

Les utilisateurs peuvent les vérifier rapidement à partir de la ligne de commande en installant pacolog. Cet utilitaire liste les messages de commit récents pour les paquets provenant des dépôts officiels ou de AUR, en utilisant pacolog <package>.

Installation et récupération

Alternatives pour l'installation ou réinstallation de paquets.

Installation de paquets depuis un CD/DVD ou clef USB

 Article ou section candidate à une fusion avec #Custom local repository
Note : : Donner un exemple et éviter une duplication (Discussion dans: Talk:Pacman/Tips and tricks#

Télécharger un paquet ou un groupe de paquets:

# cd ~/Packages
# pacman -Syw base base-devel grub-bios xorg gimp --cachedir .
# repo-add ./custom.db.tar.gz ./*

Puis vous pouvez graver me répertoire "Packages" sur un CD/DVD ou le transférer à une clef USB, HDD externe, etc.

Installer:

1. Monter le support:

# mkdir /mnt/repo
# mount /dev/sr0 /mnt/repo    #Pour un CD/DVD.
# mount /dev/sdxY /mnt/repo   #Pour une clef USB.

2. Editer pacman.conf et ajouter ce dépôt avant les autres (ex. extra, core, etc.).

Ceci est important. Ne pas simplement le dé-commenter à la fin du fichier. Ceci assurera la préséance des fichiers des CD/DVD/USB sur ceux des dépôts standards:

/etc/pacman.conf
[custom]
SigLevel = PackageRequired
Server = file:///mnt/repo/Packages

3. Enfin, synchroniser la base de données de pacman pour qu'elle puisse utiliser ce nouveau dépôt:

# pacman -Syu

Dépôt local personnalisé

Utiliser le script repo-add fourni par pacman pour générer une base de données pour dépôt personnel. Plus de détails sur l'utilisation par repo-add --help.

Un paquet de base de données est un fichier d'archive tar, optionnellement compressé. Les extensions valides extensions sont .db ou .files suivi de l'extension d'archive .tar, .tar.gz, .tar.bz2, .tar.xz, ou .tar.Z. Il n'est pas nécessaire que les fichiers existent mais tous les répertoires parents doivent avoir été créés.

Pour ajouter un nouveau paquet à la base ou mettre à jour une ancienne version existant dans la base, commande:

$ repo-add /path/to/repo.db.tar.gz /path/to/package-1.0-1-x86_64.pkg.tar.xz

La base de données et les paquets n'ont pas besoin d'être dans le même répertoire lorsque vous utilisez repo-add, mais gardez à l'esprit que lorsque vous utilisez pacman avec cette base de données, ils devront être ensemble. Stocker tous les paquets compilés à inclure dans le référentiel dans un seul répertoire permet également d'utiliser l'expansion globale du shell pour ajouter ou mettre à jour plusieurs paquets à la fois :

$ repo-add /path/to/repo.db.tar.gz /path/to/*.pkg.tar.xz
Attention : repo-add ajoute les entrées dans la base de données dans le même ordre que sur la ligne de commande. Si plusieurs versions d'un même paquet sont impliquées, il faut s'assurer que la bonne version est ajoutée en dernier. Notez en particulier que l'ordre lexical utilisé par l'interpréteur de commandes dépend de la locale et diffère de l'ordre de vercmp utilisé par pacman.

Si vous cherchez à prendre en charge plusieurs architectures, des précautions doivent être prises pour éviter les erreurs. Chaque architecture devrait avoir sa propre arborescence de répertoires :

$ tree ~/customrepo/ | sed "s/$(uname -m)/<arch>/g"
/home/archie/customrepo/
└── <arch>
    ├── customrepo.db -> customrepo.db.tar.xz
    ├── customrepo.db.tar.xz
    ├── customrepo.files -> customrepo.files.tar.xz
    ├── customrepo.files.tar.xz
    └── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz

1 directory, 5 files

L'exécutable repo-add vérifie si le paquet est approprié. Si ce n'est pas le cas, vous rencontrerez des messages d'erreur similaires à celui-ci :

==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.

repo-remove supprime tous les paquets de la base de données, sauf si seuls certains noms de paquets sont précisés sur la ligne de la commande.

$ repo-remove /path/to/repo.db.tar.gz pkgname

Une fois la base de données du dépôt local créée, ajoutez le dépôt à pacman.conf pour chaque système qui aura à utiliser le dépôt. Le fichier pacman.conf donne un exemple de dépôt personnalisé. Le nom du dépôt est celui du fichier de la base, extension exclue. Dans l'exemple ci-dessus le nom du dépôt serait simplement repo. Référencer l'emplacement du dépôt en utilisant la syntaxe file://url, ou via FTP sous la forme ftp://localhost/path/to/directory.

Si vous le souhaitez, ajoutez le dépôt personnalisé à la liste des dépôts non officiels "Unofficial user repositories", pour en faire bénéficier la communauté.

Cache pacman partagé en réseau

Si vous utilisez plusieurs systèmes sous Archlinux sur votre réseau local, vous pouvez partager les paquets afin de réduire considérablement les temps de téléchargement. Les systèmes 32b (obsolètes) ne pourront participer au partage avec les architectures x86_64.

Cache en lecture seule

Si vous cherchez une solution rapide lancez simplement un serveur autonome que d'autres ordinateurs pourront utiliser en premier miroir:

# ln -s /var/lib/pacman/sync/*.db /var/cache/pacman/pkg
$ sudo -u http darkhttpd /var/cache/pacman/pkg --no-server-id

Pour plus de commodité vous pourriez également exécuter darkhttpd en tant que service système . Ajoutez simplement ce serveur en haut de votre /etc/pacman.d/mirrorlist} dans les machines clientes avec Server = http://mymirror:8080. Assurez-vous de garder votre miroir à jour.

Si vous faites déjà fonctionner un serveur réseau à d'autres fins vous pourriez aussi souhaiter le réutiliser en serveur local en place de darkhttpd. Par exemple, si vous servez déjà un site avec nginx, vous pouvez ajouter un bloc serveur nginx à l'écoute sur le port 8080:

/etc/nginx/nginx.conf
http {
    # ... other nginx server configs up here

    server {
        listen 8080;
        root /var/cache/pacman/pkg;
        server_name myarchrepo.localdomain;
        try_files $uri $uri/;
    }
}

Rappelez-vous de redémarrer nginx après cette modification.

Quelque soit votre solution de serveur, souvenez-vous d'ouvrir le port 8080 au trafic local (et probablement refuser ce qui n'est pas local), aussi ajouter une règle de ce type à iptables:

/etc/iptables/iptables.rules
-A TCP -s 192.168.0.0/16 -p tcp -m tcp --dport 8080 -j ACCEPT

Rappelez-vous de redémarrer iptables après cette modification.

Cache en lecture seule, distribué

Il existe des outils spécifiques Arch pour la découverte automatique d'autres ordinateurs sur votre réseau offrant un cache de paquets. Essayez pacredir, pacserve, pkgdistcache, ou paclan. pkgdistcache utilise Avahi au lieu du simple UDP qui peut fonctionner mieux dans certains réseaux domestiques pour acheminer en routeur plutôt qu'en passerelle entre WiFi et Ethernet.

Historiquement existaient PkgD et multipkg, qui ne sont plus maintenus.

Cache en lecture/écriture

Pour le partage de paquets entre plusieurs ordinateurs, partagez simplement /var/cache/pacman/ en utilisant n'importe quel protocole de montage réseau. Cette section montre comment utiliser shfs ou Sshfs pour partager un cache de paquets et les répertoires de bibliothèque associés entre plusieurs ordinateurs sur le même réseau local. Gardez à l'esprit qu'un cache partagé en réseau peut être lent selon le choix du système de fichiers, parmi d'autres facteurs.

Astuce :
  • Pour utiliser sshfs or shfs, pensez à consulter Using SSH Keys.
  • Par défaut, smbfs ne sert pas les noms de fichiers qui contiennent des deux-points, ce qui a pour conséquence que le client télécharge à nouveau le paquet en question. Pour éviter cela, utilisez l'option mapchars} mount du client.
  • Puis, pour partager les paquets actuels, montez /var/cache/pacman/pkg du serveur sur /var/cache/pacman/pkg de chaque machine cliente.
Attention : Ne faites pas de /var/cache/pacman/pkg ou d'aucun de ses prédécesseurs (p.ex., /var) un lien symbolique. Pacman attend qu'ils soient des répertoires. Quand pacman se réinstalle ou se met à jour lui-même il les écrasera avec des répertoires vides. Cependant, au cours de la transaction, " pacman " s'appuie sur certains fichiers qui y résident, brisant ainsi le processus de mise à jour. Voir bug50298 pour plus de détails.

Double-sens avec rsync

Autre approche dans un environnement local par rsync. Choisir un serveur pour le cache, et activer le daemon Rsync#rsync daemon. Sur les machines clientes synchronisez ce partage en double-sens (two-way) par un protocole rsync. Les noms de fichiers contenant deux-points : ne posent pas de problème au protocole rsync.

Exemple de projet pour un client, l'utilisation de uname -m dans le nom du partage assure une synchronisation en fonction de l'architecture:

 # rsync rsync://server/share_$(uname -m)/ /var/cache/pacman/pkg/ ...
 # pacman ...
 # paccache ...
 # rsync /var/cache/pacman/pkg/ rsync://server/share_$(uname -m)/  ...

Cache de proxy inverse dynamique utilisant nginx

nginx peut être utilisé en proxy pour les requêtes aux miroirs officiels en amont et mettre en cache les résultats sur le disque local. Toutes les demandes subséquentes pour ce fichier seront servies directement à partir du cache local, minimisant ainsi la quantité de trafic Internet nécessaire pour mettre à jour un grand nombre de serveurs avec un effort minimal.

Attention : Cette méthode a une limite. Vous devez utiliser des miroirs qui utilisent le même chemin relatif pour empaqueter les fichiers et vous devez configurer votre cache pour utiliser ce même chemin.

Dans cet exemple, nous utiliserons des miroirs utilisant le chemin relatif /archlinux/$repo/os/$arch avec le paramètre Server de notre cache dans mirrorlist configuré de même.

Créer le répertoire pour le cache avec les permissions pour que nginx puisse y écrire:

 # mkdir /srv/http/pacman-cache
 # chown http:http /srv/http/pacman-cache

Puis configurer nginx comme dynamic cache (lire les commentaires pour une explication des commandes).

Terminer par la mise à jour de vos autres serveurs Arch Linux pour utiliser ce nouveau cache par l'ajout au fichier mirrorlist de:

/etc/pacman.d/mirrorlist
Server = http://cache.domain.example:8080/archlinux/$repo/os/$arch
...
Note : Vous aurez besoin de créer une méthode de nettoyage des vieux paquets car ce répertoire continuera à croître avec le temps. On peut utiliser paccache, (fourni par pacman-contrib), pour l'automatiser à l'aide des critères de conservation de votre choix. Par exemple, find /srv/http/pacman-cache/ -type d -exec paccache -v -r -k 2 -c {} \; ; gardera les 2 dernières versions des paquets dans votre répertoire cache.

Synchroniser le cache de pacman avec des programmes de synchronisation

Utiliser Syncthing ou Resilio Sync pour synchroniser les répertoires du cache de pacman (ex. /var/cache/pacman/pkg).

Prevention des purges involontaires du cache

Par défaut, pacman -Sc supprime du cache les archives de paquets correspondant aux paquets non installés sur la machine sur laquelle la commande a été émise. Comme pacman ne peut pas prédire quels paquets sont installés sur toutes les machines qui partagent le cache, il finira par supprimer les fichiers qui ne devraient pas l'être.

Pour vider le cache en ne supprimant que les archives de paquets périmés ajouter cette entrée dans la secion [options] de /etc/pacman.conf:

CleanMethod = KeepCurrent

Recréer un paquet depuis le système de fichiers

Pour recréer un paquet dpuis le système de fichiers servez-vous de fakepkg. Les fichiers du système étant pris tels quels, toute modification sera présente dans le paquet assemblé. La distribution du paquet recréé est donc déconseillée; voir ABS et Arch Linux Archive pour des alternatives.

Liste des paquets installés

Il peut être utile de conserver la liste de tous les paquets installés explicitement, par exemple pour sauvegarder un système ou une installation plus rapide sur un nouveau système:

$ pacman -Qqe > pkglist.txt
Note :
  • Avec l'option -t, les paquets déjà requis par d'autres paquets explicitement installés ne seront pas mentionnés. En cas de réinstallation depuis cette liste il seront bien installés, mais seulement en tant que dépendances.
  • Avec l'option -n, les paquets étrengers (ex. de AUR) seraient exclus de la liste.
  • Utiliser comm -13 <(pacman -Qqdt | sort) <(pacman -Qqdtt | sort) > optdeplist.txt pour créer aussi une liste des dépendances optionnelles installées qui pourront être réinstallées avec l'option --asdeps.
  • Utiliser pacman -Qqem > foreignpkglist.txt pour créer la liste des paquets AUR ou autres paquets étrangers, explicitement installés.

Pour garder à jour une liste de paquets installés explicitement (p. ex. en combinaison avec un fichier versionné dans /etc/), vous pouvez mettre en place un pacman-hook. Exemple:

[Trigger]
Operation = Install
Operation = Remove
Type = Package
Target = *

[Action]
When = PostTransaction
Exec = /bin/sh -c '/usr/bin/pacman -Qqe > /etc/pkglist.txt'

Installer des paquets depuis une liste

Pour installer des paquets depuis une sauvegarde antérieure de la liste des paquets, tout en ne réinstallant pas ceux qui sont déjà installés et à jour, lancer:

# pacman -S --needed - < pkglist.txt

Cependant, il est probable que des paquets étrangers, tels ceux de AUR ou installés localement, soient présents dans la liste. Pour filtrer à partir de la liste les paquets étrangers, la ligne de commande précédente peut être enrichie comme suit :

# pacman -S --needed $(comm -12 <(pacman -Slq | sort) <(sort pkglist.txt))

Eventuellement, pour s'assurer que les paquets installés de votre système correspondent à la liste et supprimer tous les paquets qui n'y sont pas mentionnés :

# pacman -Rsu $(comm -23 <(pacman -Qq | sort) <(sort pkglist.txt))
Astuce : Ces tâches peuvent être automatisées. Voir bacpac, packup, pacmanity, et pug comme exemples.

Lister tout fichier modifié des paquets

Si vous suspectez - sans en être sûr - une corruption des fichiers (p.ex. après une défaillance logicielle/matérielle), vous voudrez comparer la somme de hachage hashsum des paquets. Ceci peut-être fait avec la commande issue du paquet pacutils:

# paccheck --md5sum --quiet

Pour la restauration de la base de données de pacman voir #Sauvegarde de la base de données de pacman. Les fichiers mtree peuvent aussi être extraits sous la forme .MTREE depuis leurs paquets respectifs.

Note : Ceci ne doit pas être utilisé tel quel en cas de suspicion de modifications malveillantes ! Dans ce cas, des précautions de sécurité telles que l'utilisation d'un support-live et d'une source indépendante pour les sommes de hachage sont recommandées.

Reinstallation de tous les paquets

Pour réinstaller tous les paquets d'origine, utiliser:

# pacman -Qqn | pacman -S -

Les paquets étrangers (AUR) doivent être réinstallés séparément; les lister par: pacman -Qqm.

Pacman préserve l' installation reason - c.a.d. le motif d'installation (explicite, dépendance...) - par défaut.

Restauration de la base de données locale de pacman

Voir Pacman/Restore local database.

Récupération d'une clé USB à partir d'une installation existante

Si vous avez installé Arch sur une clé USB et l'ayez endommagée (par exemple en la retirant en cours d'écriture), il est possible de réinstaller tous les paquets et, espérons-le, de la remettre en fonction (en admettant que la clé USB soit montée dans /newarch)

# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman

Affichage d'un seul fichier dans un fichier.pkg

Par exemple, si vous voulez voir le contenu de /etc/systemd/logind.conf, fourni par le paquet systemd :

$ bsdtar -xOf /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz etc/systemd/logind.conf

Ou utiliser vim pour parcourir l'archive:

$ vim /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz

Trouver des applications qui utilisent des bibliothèques d'anciens paquets

Même si vous mettez à jour ou installez un paquet, les programmes en cours de longue date (comme les démons et les serveurs) continuent à utiliser le code des anciennes bibliothèques de paquets. Et c'est une mauvaise idée de laisser tourner ces programmes si l'ancienne bibliothèque contient un bogue de sécurité. voici le moyen de retrouver tous les programmes utilisant des codes d'anciens paquets:

# lsof +c 0 | grep -w DEL | awk '1 { print $1 ": " $NF }' | sort -u

qui affichera les programmes en fonction et les bibliothèques supprimées ou remplacées avec un nouveau contenu.

Installer le contenu uniquement dans les langues requises

De nombreux paquets tentent d'installer la documentation et les traductions en plusieurs langues. Certains programmes sont conçus pour supprimer ces fichiers inutiles, comme localepurge, qui s'exécute après l'installation d'un paquet pour supprimer les fichiers locaux inutiles. Une approche plus directe est fournie par la directive NoExtract dans pacman.conf, qui empêche l'installation de ces fichiers. L'exemple ci-dessous installe des fichiers anglais (US), ou aucun :

/etc/pacman.conf
NoExtract = usr/share/help/* !usr/share/help/en*
NoExtract = usr/share/gtk-doc/html/*
NoExtract = usr/share/locale/* usr/share/X11/locale/* usr/share/i18n/* opt/google/chrome/locales/*
NoExtract = !*locale*/en*/* !usr/share/i18n/charmaps/UTF-8.gz !usr/share/*locale*/locale.*
NoExtract = !usr/share/*locales/en_?? !usr/share/*locales/i18n !usr/share/*locales/iso*
NoExtract = !usr/share/*locales/trans*
NoExtract = usr/share/qt4/translations/*
NoExtract = usr/share/man/* !usr/share/man/man*
NoExtract = usr/share/vim/vim*/lang/*
NoExtract = usr/lib/libreoffice/help/en-US/*

Certains utilisateurs ont noté que la suppression de locales a eu des conséquences imprévues.

Performance

Vitesse de téléchargement

Note : Si votre vitesse de téléchargement a été réduite à un minimum, assurez-vous d'utiliser l'un des nombreux miroirs et non ftp.archlinux.org, qui est étranglé depuis mars 2007.

Lors du téléchargement de paquets pacman' utilise les miroirs dans l'ordre dans lequel ils sont /etc/pacman.d/mirrorlist. Le miroir qui se trouve en haut de la liste par défaut n'est peut-être pas le plus rapide pour vous. Pour sélectionner un miroir plus rapide, voir Miroirs. La vitesse de téléchargement des paquets par Pacmanpeut également être améliorée par l'utilisation d'un programme de téléchargement différent du chargeur intégré de pacman.

Dans tous les cas assurez-vous d'avoir la dernière version de pacman avant toute modification, par:

# pacman -Syu

Powerpill

Powerpill est un habillage de pacman qui utilise le téléchargement parallèle et segmenté pour accélérer les téléchargements de pacman.

wget

Il est également très pratique si vous avez besoin de paramètres proxy plus puissants que les capacités intégrées de pacman's.

D'abord Installation du paquet wget, puis modifier /etc/pacman.conf en dé-commentant cette ligne de la section [options]:

XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u

Au lieu des paramètres décommentés de wget dans /etc/pacman.conf, vous pouvez directement modifier ses fichiers de configuration ( à l'échelle du système le fichier est /etc/wgetrc, pour l'utilisateur, $HOME/.wgetrc).

aria2

aria2 est un utilitaire de téléchargement léger prenant en charge les téléchargements HTTP / HTTPS et FTP pouvant être résumés et segmentés. aria2 permet plusieurs connexions simultanées HTTP / HTTPS et FTP à un miroir Arch, ce qui devrait entraîner une augmentation de la vitesse de téléchargement des fichiers et des packages.

Note : L'utilisation d'aria2c dans la pacman's XferCommand n'aura PAS pour résultat le téléchargement de multiples paquets en parallèle. Pacman appelle la commande XferCommand pour le téléchargement d'un seul paquet à la fois puis attend qu'il soit complet avant de l'appeler pour le suivant. Pour télécharger de multiples paquets en parallèle, voir Powerpill.

Installer aria2, puis éditer /etc/pacman.conf en ajoutant la ligne suivante dans la section [options]:

XferCommand = /usr/bin/aria2c --allow-overwrite=true --continue=true --file-allocation=none --log-level=error --max-tries=2 --max-connection-per-server=2 --max-file-not-found=5 --min-split-size=5M --no-conf --remote-time=true --summary-interval=60 --timeout=5 --dir=/ --out %o %u
Astuce : Cette configuration alternative pour l'utilisation de pacman avec aria2 essaie de simplifier la configuration et ajoute plus d'options de configuration options.

Voir OPTIONS dans man|1|aria2c pour les options d'aria2c utilisées.

  • -d, --dir: Le répertoire dans lequel stocker le ou les fichiers téléchargés, comme spécifié par pacman.
  • -o, --out: Le nom du ou des fichiers de sortie du ou des fichiers téléchargés.
  • %o: Variable qui représente le ou les noms de fichiers locaux spécifiés par pacman .
  • %u: Variable représentant l'URL de téléchargement spécifiée par pacman .

Autres applications

Voici les autres applications de téléchargement que vous pouvez utiliser avec pacman , et leurs paramètres de la commande XferCommand associés:

  • snarf: XferCommand = /usr/bin/snarf -N %u
  • lftp: XferCommand = /usr/bin/lftp -c pget %u
  • axel: XferCommand = /usr/bin/axel -n 2 -v -a -o %o %u
  • hget: XferCommand = /usr/bin/hget %u -n 2 -skip-tls false (svp lire la documentation de la page de projet Github pour plus d'infos)

Utilités

  • Lostfiles — Script pour identifier les fichiers n'appartenant à aucun paquet.
https://github.com/graysky2/lostfiles || lostfiles
  • Pacmatic — Habillage de Pacman pour consulter les actualités "Arch News" avant mise à jour, éviter les mises à jour partielles, et être averti des changements dans les fichiers de configuration.
http://kmkeen.com/pacmatic || pacmatic
  • pacutils — Bibliothèque d'assistance pour les programmes basés sur libalpm.
https://github.com/andrewgregory/pacutils || pacutils
  • {{App|[[pkgfile}}|Outil pour retrouver à quel paquet appartient un fichier - et aussi donner la liste des fichiers que le paquet installe.|http://github.com/falconindy/pkgfile%7Cpkgfile}}
  • pkgtools — Collection de scripts pour paquets Arch Linux.
https://github.com/Daenyth/pkgtools || pkgtools
https://github.com/cassava/repoctl || repoctl
  • repose — Outil de construction d'un dépôt Arch Linux.
https://github.com/vodik/repose || repose
Permet à pacman d'utiliser automatiquement snapper pour créer des snapshots pré/post comme YaST d'openSUSE. || https://github.com/wesbarnett/snap-pac
  • vrms-arch — Un Richard M. Stallman virtuel pour vous dire quels paquets non-libres sont installés.
https://github.com/orospakr/vrms-arch || vrms-arch

Graphique

Attention : PackageKit ouvre les autorisations système par défaut et n'est pas recommandé pour une utilisation générale. Voir [https://bugs.archlinux.org/task/50459 Bug
  • Apper — Application Qt 5 et gestionnaire de paquets utilisant PackageKit écrit en C++. Supporte les metadata AppStream .
https://userbase.kde.org/Apper || apper
https://userbase.kde.org/Discover || discover
  • GNOME PackageKit — Gestionnaire d'application GTK+ 3 utilisant PackageKit écrit en C.
https://freedesktop.org/software/PackageKit/ || gnome-packagekit
https://wiki.gnome.org/Apps/Software || gnome-software
  • pcurses — Habillage pacman Curses TUI écrit en C++.
https://github.com/schuay/pcurses || pcurses
  • tkPacman — Habillage pacman Tk écrit en Tcl.
https://sourceforge.net/projects/tkpacman || tkpacman