pacman (Français)/Tips and tricks (Français)

From ArchWiki

État de la traduction: Cet article est la version francophone de Pacman/Tips and tricks. Date de la dernière traduction: 2023-05-04. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

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

Maintenance

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.

Liste des paquets

Par version

On peut vouloir obtenir la liste des paquets installés et leur version, en cas par exemple de rapport 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 de paquets nommé group: pacman -Sg group
  • 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 base synchronisée): pacman -Qn.
  • Liste des paquets installés explicitement, d'origine (c.-à-d. présents dans la base synchronisée), qui ne sont pas des dépendances directes ni optionnelles: pacman -Qent.
  • Liste des paquets filtrée par expression régulière: pacman -Qs regex.
  • Liste des paquets filtrée par expression régulière avec sortie en format personnalisé: expac -s "%-30n %v" regex (requiert expac).

Par 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:

$ LC_ALL=C pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | LC_ALL=C sort -h
Paquets et leurs dépendances

Pour lister leur taille en incluant les dépendances:

  • Installer expac et lancer expac -H M '%m\t%n' | sort -h.
  • Lancer pacgraphAUR avec l'option -c.

Pour 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

Pour lister les paquets installés explicitement qui ne sont ni dans le méta-paquet base ni dans le groupe de paquet xorg avec taille et description:

$ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <({ pacman -Qqg xorg; expac -l '\n' '%E' base; } | sort -u)) | sort -n

Pour lister les paquets marqués comme nécessitant une mise à jour avec la taille de téléchargement:

$ expac -S -H M '%k\t%n' $(pacman -Qqu) | sort -sh

Pour ne lister que les dépendances optionnelles :

$ expac -S "%o" package

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 l'«epoch» (1970-01-01 UTC):

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

N'appartenant pas à un groupe, dépôt ou méta-paquet spécifié

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 inutilisés (orphelins).

Liste des paquets installés explicitement en-dehors du méta-paquet base:

$ comm -23 <(pacman -Qqe | sort) <(expac -l '\n' '%E' base | sort)

Liste les paquets explicitement installés qui ne sont pas dans le méta-paquet base ou le groupe de paquets xorg :

$ comm -23 <(pacman -Qqe | sort) <({pacman -Qqg xorg ; expac -l '\n' '%E' base ; } | sort -u)

Liste de tous les paquets installés non requis par d'autres paquets et en-dehors du méta-paquet base ou du groupe de paquets xorg:

$ comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg xorg; echo base; } | sort -u)

Comme ci-dessus, mais avec descriptions:

$ expac -H M '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg xorg; echo base; } | sort -u))

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)
Astuce: Vous pouvez aussi utiliser combine (au lieu de comm) du paquet moreutils qui a une syntaxe plus facile à retenir. Consultez combine(1).

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)$'

Dépendances d'un paquet

Pour obtenir la liste des dépendances d'un paquet, la solution la plus simple est de lire la sortie de :

$ pacman -Qi package

Pour l'automatisation, au lieu de la méthode d'analyse de la sortie de pacman, qui est sujette aux erreurs, utilisez expac :

$ expac -S '%D' package

Parcourir les paquets

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

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

Cette commande utilise fzf pour présenter une vue à deux volets listant tous les paquets avec les informations sur les paquets affichées sur la 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 consulter les informations du paquet sous less.

Pour parcourir tous les paquets actuellement connus de pacman (à la fois installés et non encore installés) de manière similaire, en utilisant fzf, utilisez :

$ pacman -Slq | fzf --preview 'pacman -Si {}' --layout=reverse

Les raccourcis clavier de navigation sont les mêmes, bien que la touche Enter ne fonctionne pas de la même manière.

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 fichiers é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 pour installer un logiciel), 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 fichiers "non possédés" parmi d'autres détails.

Une autre est d'isoler tous les fichiers particuliers, et les comparer avec la sortie de pacman:

# find /etc /usr /opt | LC_ALL=C pacman -Qqo - 2>&1 >&- >/dev/null | cut -d ' ' -f 5-
Astuce: Le script lostfiles effectue des étapes proches mais inclura une liste noire élaborée pour ôter les faux positifs 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 pacreport(1) § FILES).

Un exemple (résumé) de configuration ressemblera à :

/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 en root, on affichera une liste 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-gitAUR), permet, par création d'un fichier de configuration le suivi des fichiers modifiés et orphelins.

Suppression des paquets inutilisés (orphelins)

Les orphelins sont des paquets qui ont été installés en tant que dépendance et qui ne sont plus requis par aucun paquet.

Ils peuvent s'accumuler sur votre système au fil du temps en raison de la désinstallation de paquets en utilisant pacman -R package au lieu de pacman -Rs package, de l'installation de paquets en tant que makedepends, ou de paquets supprimant des dépendances dans des versions plus récentes.

Pour supprimer récursivement les orphelins et leurs fichiers de configuration :

# pacman -Qtdq | pacman -Rns -

Si aucun orphelin n'a été trouvé, la sortie est error: argument '-' specified with empty stdin vide. Ceci est attendu car aucun argument n'a été passé à pacman -Rns. L'erreur peut être évitée en préfixant la deuxième commande avec ifne(1) du paquet moreutils.

Note: Les arguments -Qt ne listent que les vrais orphelins. Pour inclure des paquets qui sont optionnellement requis par un autre paquet, passez l'indicateur -t deux fois (i.e., -Qtt).
Astuce: Ajoutez la commande pacman -Qtd à un hook post-transaction de pacman pour être notifié si une transaction a rendu un paquet orphelin. Cela peut être utile pour être notifié lorsqu'un paquet a été supprimé d'un dépôt, puisque tout paquet supprimé sera également orphelin sur une installation locale (sauf s'il a été explicitement installé). Pour éviter toute erreur "failed to execute command" lorsqu'aucun orphelin n'est trouvé, utilisez la commande suivante pour Exec dans votre hook : /usr/bin/bash -c "/usr/bin/pacman -Qtd || /usr/bin/echo '=> None found.'". Le paquet pacman-log-orphans-hookAUR fournit un tel hook avec des instructions plus détaillée.

Détecter d'autres paquets inutiles

Dans certains cas, la méthode ci-dessus ne détectera pas tous les paquets inutiles possibles. Par exemple, les cycles de dépendances (également connues sous le nom de "dépendances circulaires"), les dépendances excessives (remplies plus d'une fois), certaines options non explicites, etc.

Pour détecter de tels paquets :

$ pacman -Qqd | pacman -Rsu --print -

Si vous voulez supprimer tous les paquets de la liste en une seule fois, exécutez la commande sans l'argument --print.

Suppression de tous les paquets non-essentiels

S'il s'avère nécessaire de désinstaller la totalité des programmes en dehors de ceux essentiels, la méthode est de changer le motif d'installation de tous les paquets vers «installé comme dépendance» puis de supprimer toutes les dépendances non nécessaires.

Premièrement, pour tous les paquets «installés explicitement», modifiez leur motif d'installation pour «installé comme dépendance» :

# pacman -D --asdeps $(pacman -Qqe)

Ensuite, changez le motif d’installation vers «installé explicitement», pour les paquets que vous ne voulez pas supprimer, pour éviter de les supprimer :

# pacman -D --asexplicit base linux linux-firmware
Note:

Enfin, suivez les instructions de #Suppression des paquets inutilisés (orphelins) pour supprimer tous les paquets qui sont «installé comme dépendance».

Obtenir la liste de dépendances de plusieurs paquets

Dépendances triées par ordre alphabétique et élimination des doublons.

Note: Pour ne montrer que l'arbre de paquets installés localement, utiliser pacman -Qi.
$ LC_ALL=C pacman -Si packages | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u

Alternativement, avec expac:

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

Lister les fichiers de sauvegarde modifiés

Pour lister les fichiers de configuration suivis par pacman en tant que susceptibles de contenir des modifications de l'utilisateur (c'est-à-dire les fichiers listés dans le tableau «backup» d'un PKGBUILD) et ayant reçu des modifications de l'utilisateur, utilisez la commande suivante :

# pacman -Qii | awk '/^MODIFIED/ {print $2}' (en anglais)

L'exécution de cette commande avec les droits de root garantira que les fichiers lisibles uniquement par root (tels que /etc/sudoers) sont inclus dans la sortie.

Ceci peut être utilisé lors d'une sauvegarde sélective du système ou lors de la réplication d'une configuration système d'une machine à une autre.

Astuce:

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-gitAUR 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 pacologAUR. Cet utilitaire liste les messages de commit récents pour les paquets provenant des dépôts officiels ou de AUR, en utilisant pacolog paquet.

Installation et récupération

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

Installation de paquets depuis un CD/DVD ou clef USB

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 ./*

Pacman, qui par défaut référencera l'installation hôte, ne saura pas correctement résoudre et télécharger les dépendances existantes. Dans le cas où l'on souhaite tous les paquets ainsi que leurs dépendances, il est recommandé de créer une base de données des paquets temporaire vierge et d'y faire référence avec l'option --dbpath de pacman:

# mkdir /tmp/blankdb
# pacman -Syw --cachedir . --dbpath /tmp/blankdb base base-devel grub-bios xorg gimp
# repo-add ./custom.db.tar.gz ./*

Puis vous pouvez graver le répertoire "Packages" sur un disque (e.g. un CD, DVD) ou le transférer sur une clef USB, HDD externe, etc.

Pour installer:

1. Monter le support :

Pour un disque optique :

# mount --mkdir /dev/sr0 /mnt/repo

Pour une clef USB, un disque dur, etc… :

# mount --mkdir /dev/sdxY /mnt/repo

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, tar.zst 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.zst

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 dépôt 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.est
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(8) 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.zst

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 tels que :

==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.zst' 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 une URL file://, ou via HTTP sous la forme http://localhost/path/to/directory.

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

Cache pacman partagé en réseau

Si vous utilisez plusieurs systèmes sous Arch Linux sur votre réseau local, vous pouvez partager les paquets afin de réduire considérablement les temps de téléchargement. Gardez à l'esprit que vous ne devez pas partager entre différentes architectures (i.e. i686 et x86_64) ou vous rencontrerez des problèmes.

Cache en lecture seule

Note: Si pacman ne parvient pas à télécharger 3 paquets depuis le serveur, il utilisera un autre miroir à la place. Consultez https://bbs.archlinux.org/viewtopic.php?id=268066.

Si vous recherchez une solution rapide, vous pouvez simplement lancer un simple serveur web temporaire que les autres ordinateurs peuvent utiliser comme premier miroir.

Tout d'abord, rendez les bases de données pacman disponibles dans le répertoire que vous allez fournir :

# ln -s /var/lib/pacman/sync/*.db /var/cache/pacman/pkg/

Ensuite, commencez à servir ce répertoire. Par exemple, avec Python http.server module :

$ python -m http.server -d /var/cache/pacman/pkg/
Astuce: Par défaut, Python http.server écoute sur le port 8000 de toute interface. Pour utiliser un autre port, ou se lier uniquement à une adresse spécifique, il suffit d'ajouter un paramètre et un argument :
$ python -m http.server -d /var/cache/pacman/pkg/ --bind 127.0.0.1 8080

Puis modifiez /etc/pacman.d/mirrorlist sur chaque machine cliente pour ajouter ce serveur comme première entrée :

/etc/pacman.d/mirrorlist
Server = http://server-ip:port
...
Attention: Ne pas ajouter /repos/$repo/os/$arch à ce serveur personnalisé comme pour les autres entrées, car cette hiérarchie n'existe pas et les requêtes échoueront.

Si vous recherchez une solution plus autonome, darkhttpd offre un serveur web très minimal. Remplacez la commande python précédente par, par exemple :

$ sudo -u http darkhttpd /var/cache/pacman/pkg --no-server-id

Vous pouvez également exécuter darkhttpd en tant que service systemd pour plus de commodité : consultez Systemd (Français)#Écrire des unités.

miniserve, un petit serveur web écrit en Rust, peut également être utilisé :

$ miniserve /var/cache/pacman/pkg

Éditez ensuite /etc/pacman.d/mirrorlist comme ci-dessus avec la première url où miniserve est disponible.

Si vous utilisez déjà un serveur web dans un autre but, vous pouvez le réutiliser comme serveur de dépôt local. Par exemple, si vous servez déjà un site avec nginx, vous pouvez ajouter un bloc serveur nginx écoutant sur le port 8080 :

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

Surtout redémarrez nginx.service après avoir effectué cette modification.

Astuce: Quel que soit le serveur Web que vous utilisez, assurez-vous que la configuration du pare-feu (le cas échéant) permet au port configuré d'être atteint par le trafic souhaité et interdit tout trafic non souhaité. Consultez Security#Network and firewalls.

Montage en overlay d'un cache en lecture seule

Il est possible d'utiliser une machine sur un réseau local comme cache de paquets en lecture seule en montant en overlay son répertoire /var/cache/pacman/pkg. Une telle configuration est avantageuse si ce serveur a installé sur lui une sélection raisonnablement complète de paquets à jour qui sont également utilisés par d'autres machines. Ceci est utile pour la maintenance d'un certain nombre de machines avec une connexion à faible bande passante.

A titre d'exemple, pour utiliser cette méthode :

# mkdir /tmp/remote_pkg /mnt/workdir_pkg /tmp/pacman_pkg.
# sshfs remote_username@remote_pkgcache_addr:/var/cache/pacman/pkg /tmp/remote_pkg -C
# mount -t overlay overlay -o lowerdir=/tmp/remote_pkg,upperdir=/var/cache/pacman/pkg,workdir=/mnt/workdir_pkg /tmp/pacman_pkg
Note: Le répertoire de travail doit être un répertoire vide sur le même périphérique monté que le répertoire supérieur. Consultez Overlay filesystem#Usage.
Astuce: Si l'énumération du répertoire de recouvrement /tmp/pacman_pkg donne des erreurs, par exemple, "Stale file handle", essayez de monter le recouvrement avec les options -o redirect_dir=off -o index=off.

Après cela, lancez pacman en utilisant l'option --cachedir /tmp/pacman_pkg, par exemple :

# pacman -Syu --cachedir /tmp/pacman_pkg

Cache en lecture seule distribué

Il existe des outils spécifiques à Arch pour découvrir automatiquement les autres ordinateurs de votre réseau offrant un cache de paquets. Essayez pacredir, pacserve, pkgdistcacheAUR, ou paclanAUR. pkgdistcache utilise Avahi au lieu du simple UDP ce qui peut mieux fonctionner dans certains réseaux domestiques qui routent au lieu de faire le pont entre WiFi et Ethernet.

Historiquement, il y avait PkgD et multipkg, mais ils 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 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.

Installez tous les paquets de gestion de systèmes de fichiers en réseau: sshfs, curlftpfs, samba ou nfs-utils.

Astuce:
  • Pour utiliser sshfs 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 de l'un de ses parents (par exemple, /var) un lien symbolique. Pacman s'attend à ce qu'il s'agisse de répertoires. Lorsque pacman se réinstalle ou se met à jour, il supprime les liens symboliques et crée des répertoires vides à la place. Cependant, pendant la transaction, pacman s'appuie sur certains fichiers qui y résident, ce qui interrompt le processus de mise à jour. Reportez-vous à FS#50298 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. 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é pour envoyer par proxy les demandes de paquets aux miroirs officiels en amont et mettre les résultats en cache sur le disque local. Toutes les demandes ultérieures pour ce paquet seront servies directement à partir du cache local, ce qui minimise la quantité de trafic Internet nécessaire pour mettre à jour un grand nombre d'ordinateurs.

Dans cet exemple, le serveur de cache sera exécuté à http://cache.domain.example:8080/ et stockera les paquets dans /srv/http/pacman-cache/.

Installez nginx sur l'ordinateur qui va héberger le cache. Créez le répertoire pour le cache et ajustez les permissions pour que nginx puisse y écrire des fichiers :

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

Utilisez la config de cache de pacman pour nginx comme point de départ pour /etc/nginx/nginx.conf. Vérifiez que la directive resolver fonctionne pour vos besoins. Dans les blocs de serveurs en amont, configurez les directives proxy_pass avec les adresses des miroirs officiels, consultez les exemples dans le fichier de configuration sur le format attendu. Une fois que vous êtes satisfait du fichier de configuration démarrez et activez nginx.

Afin d'utiliser le cache, chaque ordinateur Arch Linux (y compris celui qui héberge le cache) doit avoir la ligne suivante en haut du fichier mirrorlist :

/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.

Serveur proxy de cache Pacoloco

Pacoloco est un serveur proxy de cache facile à utiliser pour les dépôts pacman. Il permet également un «prefetching» automatique des paquets mis en cache.

Il peut être installé avec pacoloco. Ouvrez le fichier de configuration et ajoutez les miroirs de pacman :

/etc/pacoloco.yaml
port : 9129
repos :
  mycopy :
    urls :
      - http://mirror.lty.me/archlinux
      - http://mirrors.kernel.org/archlinux

Redémarrez pacoloco.service et le dépôt en proxy sera disponible à http://myserver:9129/repo/mycopy.

Serveur cache proxy Flexo

Flexo est encore un autre serveur proxy de cache pour les dépôts pacman. Flexo est disponible avec flexo-gitAUR. Une fois installé, démarrez l'unité flexo.service.

Flexo fonctionne sur le port 7878 par défaut. Entrez Server = http://myserver:7878/$repo/os/$arch en haut de votre /etc/pacman.d/mirrorlist pour que pacman télécharge les paquets via Flexo.

Synchroniser le cache de pacman avec des programmes de synchronisation

Utiliser Syncthing ou Resilio Sync pour synchroniser les répertoires du cache de pacman (càd. /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 nettoyer le cache afin que seules les archives périmées soient supprimées:

/etc/pacman.conf
[options]
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 fakepkgAUR. 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 ALA 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 étrangers (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 hook de pacman. 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))

Finalement, 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 bacpacAUR, packupAUR, pacmanityAUR, et pugAUR comme exemples.

Lister tout fichier modifié des paquets

Si vous suspectez une corruption des fichiers (par exemple après une défaillance logicielle/matérielle), mais n'êtes pas sûr si des fichiers ont été affectés, vous voudrez comparer la somme de hachage («hashsum») des paquets. Ceci peut-être fait avec 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.

Réinstallation 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 le motif d'installation (explicite, dépendance...) par défaut.

Attention: Pour forcer l'écrasement de tous les paquets, utilisez --overwrite=*, bien que cette commande ne doive être utilisé qu'en dernier recours. Voir Évitez certaines commandes de pacman.

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-250.4-2-x86_64.pkg.tar.zst

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

Les processus déjà en cours d'exécution ne remarquent pas automatiquement les changements causés par les mises à jour. Au lieu de cela, ils continuent à utiliser les anciennes versions des bibliothèques. Cela peut être indésirable, en raison des problèmes potentiels liés aux vulnérabilités de sécurité ou autres bogues, et de l'incompatibilité des versions.

Les processus dépendant des bibliothèques mises à jour peuvent être trouvés en utilisant soit htop, qui met en évidence les noms des programmes affectés, soit avec un extrait basé sur lsof, qui affiche également les noms des bibliothèques :

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

Cette solution ne détectera que les fichiers qui sont normalement maintenus ouverts par les processus en cours d'exécution, ce qui la limite essentiellement aux bibliothèques partagées (fichiers .so). Elle peut manquer certaines dépendances, comme celles des applications Java ou Python.

Installer le contenu uniquement dans les langues requises

De nombreux paquets installent la documentation et les traductions en plusieurs langues. Certains programmes sont conçus pour supprimer ces fichiers inutiles, comme localepurgeAUR, qui s'exécute après l'installation d'un paquet pour supprimer les fichiers locaux inutiles. Une approche plus préventive est fournie par la directive NoExtract dans pacman.conf, qui empêche l'installation de ces fichiers.

Note: Comme expliqué dans Pacman (Français)#Ignorer l'installation de fichiers sur le système, "les règles ultérieures prévalent sur les précédentes, et vous pouvez annuler une règle en la faisant précéder de !".

Pour empêcher l'installation de toutes les traductions des fichiers d'aide, à l'exception de la locale C, ajoutez :

NoExtract = usr/share/help/* !usr/share/help/C/*

Pour empêcher l'installation de toute la documentation HTML dans les applications GTK, ajoutez :

NoExtract = usr/share/gtk-doc/html/*
Attention: Certains utilisateurs ont remarqué que la suppression de toutes les locales a eu des conséquences inattendues avec dmenu, Steam, même sous Xorg. L'exemple suivant est ajusté pour éviter de tels problèmes, en n'installant que les fichiers anglais (US) et les locales C nécessaires.

Pour empêcher l'installation des différentes locales, à l'exception de celles qui sont nécessaires, ajoutez :

NoExtract = usr/share/locale/* usr/share/X11/locale/* usr/share/i18n/locales/* opt/google/chrome/locales/* !usr/share/X11/locale/C/*
NoExtract = !usr/share/X11/locale/compose.dir !usr/share/X11/locale/iso8859-1/*
NoExtract = !*locale*/en*/* !usr/share/*locale*/locale.*
NoExtract = !usr/share/*locales/en_ ?? !usr/share/*locales/i18n* !usr/share/*locales/iso*
NoExtract = usr/share/i18n/charmaps/* !usr/share/i18n/charmaps/UTF-8.gz !usr/share/i18n/charmaps/ANSI_X3.4-1968.gz
NoExtract = !usr/share/*locales/trans*
NoExtract = !usr/share/*locales/C !usr/share/*locales/POSIX

Pour empêcher l'installation des pages de manuel traduites, ajoutez :

NoExtract = usr/share/man/* !usr/share/man/man*

Pour empêcher l'installation des fichiers de langue dans vim-runtime, ajoutez :

NoExtract = usr/share/vim/vim*/lang/*

Pour empêcher l'installation de tout le contenu sauf l'anglais dans les applications Qt, ajoutez : NoExtract = usr/share/vim*/lang/* :

NoExtract = usr/share/*/translations/*.qm usr/share/*/nls/*.qm usr/share/qt/phrasebooks/*.qph usr/share/qt/translations/*.pak !*/en-US.pak

Pour empêcher l'installation de tout le contenu sauf le contenu anglais dans les applications Electron, ajoutez :

NoExtract = usr/share/*/locales/*.pak opt/*/locales/*.pak usr/lib/*/locales/*.pak !*/en-US.pak

Pour empêcher l'installation des fichiers d'aide en anglais dans LibreOffice, ajoutez :

NoExtract = usr/lib/libreoffice/help/en-US/*

Pour empêcher l'installation de tout le contenu de OnlyOffice, à l'exception du contenu en anglais, ajoutez :

NoExtract = opt/onlyoffice/desktopeditors/dictionaries/* !opt/onlyoffice/desktopeditors/dictionaries/en_US/*
NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/locale/* !*/en.json
NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/resources/help/*/* !*/help/en/*
NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/resources/symboltable/* !*/en.json
NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/documenteditor/forms/locale/* !*/en.json
NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/spreadsheeteditor/main/resources/formula-lang/* !*/en.json !*/en_desc.json
NoExtract = opt/onlyoffice/desktopeditors/converter/empty/*/* !opt/onlyoffice/desktopeditors/converter/empty/en-US/*

Pour empêcher l'installation de tous les dictionnaires sauf le dictionnaire anglais iBus pour les emojis, ajoutez :

NoExtract = usr/share/ibus/dicts/emoji-*.dict !usr/share/ibus/dicts/emoji-en.dict

Installation de paquets sur une mauvaise connexion

Lorsque vous essayez d'installer un paquet à partir d'une mauvaise connexion (par exemple, en train avec un téléphone portable), utilisez l'option --disable-download-timeout pour réduire le risque de recevoir des erreurs telles que :

error: failed retrieving file […] Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds

ou

error: failed retrieving file […] Operation timed out after 10014 milliseconds with 0 out of 0 bytes received

Performance

Vitesse de téléchargement

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 Pacman peut également être améliorée par l'activation des téléchargements parallèles ou l'utilisation d'un programme de téléchargement différent de celui 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 une surcouche 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.

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

XferCommand = /usr/bin/wget --passive-ftp --show-progress -c -q -N %u

Au lieu dé-commenter des paramètres 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 XferCommand de pacman 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 aria2c(1) § OPTIONS 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)

Utilitaires

  • Lostfiles — Script pour identifier les fichiers n'appartenant à aucun paquet.
https://github.com/graysky2/lostfiles || lostfiles
  • pacutils — Bibliothèque d'assistance pour les programmes basés sur libalpm.
https://github.com/andrewgregory/pacutils || pacutils
  • pkgfile — Outil pour retrouver à quel paquet appartient un fichier - et aussi donner la liste des fichiers que le paquet installe.
https://github.com/falconindy/pkgfile || pkgfile
  • pkgtools — Collection de scripts pour paquets Arch Linux.
https://github.com/Daenyth/pkgtools. || pkgtoolsAUR
  • pkgtop — Gestionnaire de paquets interactif et moniteur de ressources conçu pour GNU/Linux.
https://github.com/orhun/pkgtop || pkgtop-gitAUR
  • Powerpill — Utilise le téléchargement parallèle et segmenté via Aria2 et Reflector pour tenter d'accélérer la vitesse de téléchargement des paquets pour pacman.
https://xyne.dev/projects/powerpill/ || powerpillAUR
  • repoctl — Outil d'aide à la gestion des dépôts locaux.
https://github.com/cassava/repoctl || repoctlAUR
  • repose — Outil de construction d'un dépôt Arch Linux.
https://github.com/vodik/repose || repose
  • snap-pac — Permet à pacman d'utiliser automatiquement snapper pour créer des snapshots pré/post comme YaST d'openSUSE.
https://github.com/wesbarnett/snap-pac || 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-archAUR

Graphique

Attention: PackageKit ouvre les autorisations système par défaut et n'est pas recommandé pour une utilisation générale. Voir FS#50459 et FS#57943.
  • Apper — Application Qt 5 et gestionnaire de paquets utilisant PackageKit écrit en C++. Prends en charge les metadata AppStream .
https://userbase.kde.org/Apper || apper[broken link: package not found]
  • Deepin App Store — Magasin d'applications tiers pour DDE construit avec DTK, utilisant PackageKit. Prend en charge les metadata AppStream .
https://github.com/dekzi/dde-store || deepin-store
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 || pcursesAUR
  • tkPacman — Habillage pacman Tk écrit en Tcl.
https://sourceforge.net/projects/tkpacman || tkpacmanAUR