[ArchLinux] Nettoyage du cache pacman

J’ai constaté très récemment que la partition contenant mon système ArchLinux disposait de moins d’une dizaine de Go libre. N’ayant pas installé de jeux, ou de logiciels gourmands en espace disque, je me suis donc immédiatement intéressé à la taille du cache de pacman.

# du -sh /var/cache/pacman/pkg/
75G /var/cache/pacman/pkg/

La commande ci-dessus m’informe donc que le cache de pacman occupe un total de 75 giga. Je procède donc au nettoyage des anciennes versions des paquets, pour descendre à une taille plus raisonnable de 3,3 giga.

# sudo pacman -Sc
Paquets à conserver :
  Tous les paquets installés
Répertoire du cache : /var/cache/pacman/pkg/
:: Voulez-vous supprimer tous les autres paquets du cache ? [O/n] o
suppression des paquets obsolètes du cache…
Répertoire des dépôts : /var/lib/pacman/
:: Voulez-vous supprimer les dépôts non utilisés ? [O/n] o
suppression des dépôts synchronisés inutilisés…
# du -sh /var/cache/pacman/pkg/
3,3G /var/cache/pacman/pkg/

Pour réaliser ce nettoyage, on peut également utiliser le programme paccache :

# sudo pacman -S pacman-contrib
# sudo paccache -r
==> no candidate packages found for pruning

Une action à réaliser périodiquement pour éviter de se retrouver avec un cache gigantesque.

[ArchLinux] Downgrade d’un package

Il est possible d’installer une ancienne version d’un package en utilisant le cache de pacman, si celui-ci n’a pas été nettoyé depuis la mise à jour précédente. Par exemple, pour revenir à la version 5.6.0-1 de npm, on utilisera la commande:

pacman -U /var/cache/pacman/pkg/npm-5.6.0-1-any.pkg.tar.xz

Et on attendra la correction du bug 19989 pour réinstaller une version 5.7.x.

[ArchLinux] Paquet invalide ou corrompu : réparer Pacman

Dernièrement, j’ai rencontré un problème à la mise à jour d’un ordinateur sous Arch. L’erreur indiquait: « la préparation de la transaction a échoué (paquet invalide ou corrompu) ».

$ sudo pacman -Syu
 :: Synchronisation des bases de données de paquets...
 core est à jour
 extra est à jour
 community est à jour
 :: Début de la mise à jour complète du système...
 erreur : l’ouverture du fichier /var/lib/pacman/local/blender-17:2.78-1/desc a échoué : Aucun fichier ou dossier de ce type
 résolution des dépendances...
 recherche des conflits entre paquets...
 avertissement : les métadonnées pour le paquet blender-17:2.78-1 n’ont pas pu être totalement chargées.
 erreur : la préparation de la transaction a échoué (paquet invalide ou corrompu)

La première étape pour que Pacman accepte d’effectuer la mise à jour du système consiste à retirer le paquet posant problème, ici blender.

sudo pacman -R blender

Une fois le paquet retiré, on peut procéder à la mise à jour.

sudo pacman -Syu

Ou pas, puisque j’obtiens cette fois des erreurs de conflits de fichiers :

erreur : la validation de la transaction a échoué (conflit de fichiers)
 ttf-dejavu : /etc/fonts/conf.d/20-unhint-small-dejavu-sans-mono.conf est déjà présent dans le système de fichiers
 ttf-dejavu : /etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf est déjà présent dans le système de fichiers
 ttf-dejavu : /etc/fonts/conf.d/20-unhint-small-dejavu-serif.conf est déjà présent dans le système de fichiers
 ttf-dejavu : /etc/fonts/conf.d/57-dejavu-sans-mono.conf est déjà présent dans le système de fichiers
 ttf-dejavu : /etc/fonts/conf.d/57-dejavu-sans.conf est déjà présent dans le système de fichiers
 ttf-dejavu : /etc/fonts/conf.d/57-dejavu-serif.conf est déjà présent dans le système de fichiers
 Des erreurs se sont produites, aucun paquet n’a été mis à jour.

Dans ce cas précis, la procédure à suivre consiste à vérifier pour chaque fichier, si celui-ci est utilisé par l’un des paquets du système.

$ sudo pacman -Qo /etc/fonts/conf.d/20-unhint-small-dejavu-sans-mono.conf
 erreur : aucun paquet ne contient /etc/fonts/conf.d/20-unhint-small-dejavu-sans-mono.conf

Une fois assuré que le fichier est inutilisé, on le renomme pour en conserver un exemplaire, au cas où. D’après la documentation, celui-ci sera nettoyer lors de la mise à jour.

$ sudo mv /etc/fonts/conf.d/20-unhint-small-dejavu-sans-mono.conf /etc/fonts/conf.d/20-unhint-small-dejavu-sans-mono.conf.save

Une fois ces opérations effectuées pour chacun des fichiers posant problème, on peux relancer à nouveau le processus de mise à jour.

sudo pacman -Syu

Cette fois, les paquets sont mis à jour correctement, tant mieux! En me basant sur ce que j’ai lu, il semble que l’erreur « paquet invalide ou corrompu » apparaisse dans différents cas de figure. Si l’erreur devait réapparaître, il n’est donc pas exclu de devoir trouver une autre solution pour la résoudre.

Vider le cache de pacman

En premier lieu, on utilise :

paccache -r

Cette commande a pour effet de supprimer toutes les versions d’un paquet, sauf la plus récente. Néanmoins, les paquets désinstallés resteront dans le cache, pour s’en débarrasser, on exécute donc:

paccache -ruk0

Toutes les versions des paquets désinstallés seront ainsi supprimées.

D’après pacman – ArchWiki.