Astuces Pacman

De ArchwikiFR

Pacman est un outil simple, mais il peut arriver qu'on ait envie de faire des trucs divers et variés pour améliorer les performances de notre gestionnaire de paquets préféré.

Partager son cache

Problème : j'ai un paquet, mais mon voisin ne l'a pas, comment peut-on faire pour ne pas avoir à le re-télécharger depuis un miroir ?

Machines fixes

Dans cette situation, nous avons plusieurs machines fixes en réseau et un serveurs NFS.

Pour alléger la charge réseau et la charge des miroirs, on peut créer sur le serveur NFS un dossier qui contiendra les paquets de toutes nos machines et sur chaque client, on pourra installer nfs-utils.

Ensuite, c'est simple comme chou, on ajoute une ligne au fstab :

Fichier: /etc/fstab
serveur:/chemin/vers/dossier/cachepacman                        /var/cache/pacman       nfs4    noauto,x-systemd.automount      0       0

On a maintenant un cache pacman monté en réseau. Pour éviter les suppressions maladroites de paquets installés sur une machine X mais pas une machine Y, il faut changer la méthode de conservation de pacman :

Fichier: /etc/pacman.conf
[options]
CleanMethod = KeepCurrent

PC portable

Une autre méthode, plus "plug'n'play" est d'utiliser pacserve qui agit comme une bibliothèque partagée de paquets : si mon voisin a un paquet et moi non, j'irai le prendre chez lui.

Note: À la rédaction de cet article, le rédacteur n'a pas essayé pacserve : il ne sait pas si les paquets disponibles chez les pairs sont copiés localement, aboutissant dans l'hypothèse négative à "une version N installée mais une version N-i dans mon cache".

Vitesse de téléchargement

Aria

aria2 est un logiciel de téléchargement comme wget ou curl, à ceci près qu'il supporte le téléchargement parallèle ou par segments : il fera plusieurs requêtes au serveur pour télécharger des bouts du fichier demandé en parallèle puis les coller ensemble une fois que c'est fini.

Fichier: /etc/pacman.conf
XferCommand = /usr/bin/aria2c --allow-overwrite=true -c --file-allocation=none --log-level=error -m2 -x2 --max-file-not-found=5 -k5M --no-conf -Rtrue --summary-interval=60 -t5 -d / -o %o %u

Et le détail des options :

/usr/bin/aria2c
chemin complet vers aria2 ;
--allow-overwrite=true
Relancer un téléchargement si le fichier de contrôle n'existe pas (Defaut: false) ;
-c, --continue
Continuer un téléchargement si un fichier partiellement téléchargé possède un fichier de contrôle ;
--file-allocation=none
Ne pas pré-allouer d'espace avant le début du téléchargement (Defaut: prealloc)
--log-level=error
Ne donner que les erreurs en sortie (Defaut: debug) ;
-m2, --max-tries=2
2 essais maximum de téléchargement par fichier (Defaut: 5) ;
-x2, --max-connection-per-server=2
2 connections maximum par serveur pour chaque fichier (Defaut: 1) ;
--max-file-not-found=5
forcer le téléchargement à entrer en mode échec si aucun octet n'est reçu après 5 essais (Defaut: 0) ;
-k5M, --min-split-size=5M
Ne couper le fichier que si sa taille est supérieure à 2x5MB = 10MB (Defaut: 20M) ;
--no-conf
Ne pas charger de fichier local de configuration s'il en existe un (Defaut: ~/.aria2/aria2.conf) ;
-Rtrue, --remote-time=true
Appliquer les timestamps distants sur les fichiers locaux (Defaut: false) ;
--summary-interval=60
Donner le statut toutes les 60 secondes (Default: 60)
-t5, --timeout=5
Configurer le timeout à 5 secondes lorsque la connexion a été établie avec le miroir (Defaut: 60) ;
-d, --dir
Le dossier où mettre les fichiers téléchargés, tel que spécifié par pacman ;
-o, --out
Le nom des fichiers téléchargés ;
%o
Variable qui représente le nom de fichier local, telle que spécifiée par pacman ;
%u
Variable qui représente l'URL de téléchargement telle que spécifiée par pacman.

powerpill

powerpill est un "wrapper" de pacman et utilise aria2 pour télécharger les paquets depuis plusieurs différents miroirs simultanément (ceux spécifiés dans /etc/pacman.d/mirrorlist) (ce n'est pas le cas de la technique précédente qui ne demande qu'à un seul miroir).

powerpill s'utilise exactement comme pacman, à grands coups de -S, -Syu, etc.

On peut utiliser powerpill dans yaourt, il suffit pour celà :

Fichier: /etc/yaourtrc
PACMAN="/usr/bin/powerpill"

Nettoyage du cache

Bon, tout ça c'est bien mignon, mais les vieux paquets ça prend de la place, et à un moment, il faut purger le cache.

pacman

pacman -Sc va nettoyer le cache et ne garder --selon votre configuration de CleanMethod-- que les paquets installés ou les paquets encore disponibles sur les miroirs.

Problème : après avoir lancé ça, pas de pacman -U (downgrade en utilisant le cache).

pkgcacheclean

pkgcacheclean est un petit programme qui nettoie le cache pacman mais conserve n versions du paquet dans le cache.

À la main

pkgcacheclean -nv 3

Cette commande va afficher (et seulement afficher, aucun fichier n'est modifié) ce qu'il ferait si vous vouliez conserver 3 versions pour chaque paquet installé. Pour effectuer les changements sur le disque :

pkgcacheclean -v 3

Voilà, un cache pacman plus léger et une solution moins kamikaze que pacman -Sc.

Dans un timer

Il semble que nettoyer son cache une fois par mois est raisonnable, d'où les timer et unit suivants :

Fichier: /etc/systemd/system/timer-pkgcacheclean.timer
[Unit]
Description=Monthly Timer for pkgcacheclean (clean pacman cache)

[Timer]
OnCalendar=monthly
AccuracySec=5d
Persistent=true
Unit=pkgcacheclean.service

[Install]
WantedBy=multi-user.target
Fichier: /etc/systemd/system/pkgcacheclean.service
[Unit]
Description=Clean pacman's cache and keep the 2 previous versions of packages too

[Service]
Nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
Type=oneshot
ExecStart=/usr/bin/pkgcacheclean -v 3