pacman (Français)/Tips and tricks (Français)
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
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:
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é
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)
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-
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.
-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
).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
- Divers paquets peuvent être ajoutés à cette dernière commande. Voir Installation guide (Français)#Installation des paquets essentiels.
- Ceci va également supprimer le chargeur d'amorçage. Le système devrait toujours démarrer normalement, mais il ne sera plus possible de changer les paramètres de démarrage sans.
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.
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.
- Voir #Lister tout fichier modifié des paquets pour lister tous les fichiers modifiés connus de pacman, et pas seulement les fichiers de sauvegarde.
- Voir #Recherche des fichiers n'appartenant à aucun paquet pour lister tous les fichiers du système qui ne sont pas suivis par pacman.
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
/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
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
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/
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 ...
/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.
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
/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.
- 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.
/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 ...
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
- 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))
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.
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.
--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.
!
".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/*
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.
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
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.
- pacutils — Bibliothèque d'assistance pour les programmes basés sur libalpm.
- pkgfile — Outil pour retrouver à quel paquet appartient un fichier - et aussi donner la liste des fichiers que le paquet installe.
- pkgtools — Collection de scripts pour paquets Arch Linux.
- pkgtop — Gestionnaire de paquets interactif et moniteur de ressources conçu pour GNU/Linux.
- 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.
- repoctl — Outil d'aide à la gestion des dépôts locaux.
- repose — Outil de construction d'un dépôt Arch Linux.
- snap-pac — Permet à pacman d'utiliser automatiquement snapper pour créer des snapshots pré/post comme YaST d'openSUSE.
- vrms-arch — Un Richard M. Stallman virtuel pour vous dire quels paquets non-libres sont installés.
Graphique
- 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 .
- Discover — Gestionnaire d'application Qt 5 utilisant PackageKit écrit en C++/QML. Prends en charge les metadata AppStream , Flatpak and Fwupd.
- GNOME PackageKit — Gestionnaire d'application GTK+ 3 utilisant PackageKit écrit en C.
- GNOME Software — Gestionnaire d'application GTK+ 3 utilisant PackageKit écrit en C. Prends en charge les metadata AppStream , Flatpak and Fwupd.
- pcurses — Habillage pacman Curses TUI écrit en C++.
- tkPacman — Habillage pacman Tk écrit en Tcl.