Présentation de pacman
pacman est le gestionnaire de paquets d'Archlinux. Il combine un ensemble d'outils binaires avec un système
relativement simple pour construire des paquets. (cf makepkg et ABS). Le but étant de facilement gérer les paquets,
qu'ils proviennent des dépôts officiels ou qu'ils soient compilés par l'utilisateur.
pacman permet de garder votre système à jour en synchronisant la liste des paquets depuis un serveur puis de
télécharger/installer les nouveaux paquets, ainsi que leur dépendances, avec une simple commande.
Configuration
pacman se configure à l'aide du fichier /etc/[Link] (cf. man 5 [Link]).
Options globales
Ces options se configurent sous la section [options], quelques exemples :
Architecture : si elle est définie, pacman n'installera que les paquets de cette architecture. Elle peut prendre la
valeur auto (l'architecture sera définie par un appel à uname -m ). Elle permet aussi l'utilisation de la
variable $arch dans l'URI d'un dépôt.
IgnorePkg : indique à pacman les paquets à ne pas mettre à jour.
IgnoreGroup : indique à pacman les groupes à ne pas mettre à jour.
UseDelta : cette option ne prend pas de paramètre et permet d'indiquer à pacman de télécharger les deltas de
paquets s'ils sont disponibles. (cf. Utilisation des deltas)
SigLevel : Indique à pacman comment gérer les signatures : pacman-key
Color : la sortie de pacman en console sera colorisée.
NoExtract : Indique à pacman de ne pas extraire certains fichiers (ex. Empêcher l'installation de locales)
Dépôts
La syntaxe est simple :
[nom_du_depôt]
Server=miroir1_du_depôt
Server=miroir2_du_depôt
Note : En ce qui concerne l'url indiquée, pacman remplace automatiquement $repo par le nom du dépôt
et $arch par l'architecture configurée.
Note : La directive Include permet d'inclure un autre fichier à la configuration, en pratique, le contenu du fichier
cible remplace la ligne de la directive.
cf. Détails des dépôts.
Utilisation
Note : Étant donné qu'Archlinux est un rolling release, la mise à jour du système peut nécessiter une action
manuelle contrairement aux distributions à release régulières, il est donc important de suivre certaines règles de
bases :
lire les nouvelles sur la page d'accueil, les mises à jour nécessitant une action particulière font généralement l'objet
d'un article.
lire la sortie de pacman (qui est gardée dans le log, /var/log/[Link])
traiter les fichiers de configuration (.pacnew, .pacsave, .pacorig) lorsque nécessaire
savoir reconnaître les paquets critiques et selon les compétences, attendre peut-être un minimum de temps avant de
faire la mise à jour de ces paquets. (Le temps que d'autres s'y cassent les dents :p)
Pour une description complète, merci de vous référer à la page man : pacman(8). Certaines options sont à prendre
avec beaucoup de précaution, consultez ces quelques conseils pour utiliser pacman au mieux.
Voici quelques exemples d'opérations :
Synchronisation de la base de paquets
Cette opération met à jour la liste des paquets disponibles sur les miroirs :
pacman -Sy
Installation de paquets
Installation d'une liste de paquets :
pacman -S paquet_1 paquet_2
Si le paquet existe sous plusieurs dépôts, on peut éventuellement en préciser un :
pacman -S extra/paquet
Si vous avez l'archive d'un paquet sur votre disque :
pacman -U archive_du_paquet.[Link]
Ou même si vous avez le lien de l'archive, par exemple :
pacman -U [Link]
Pour l'installation d'une liste de paquets depuis un fichier texte (un paquet par ligne) :
pacman -S - < [Link]
Il est possible aussi de faire ainsi si le nombre de paquets n'est pas trop grand :
pacman -S $(cat [Link])
Mise à jour des paquets
Mise à jour suite à une synchronisation faite précédemment :
pacman -Su
Synchronisation puis, mise à jour :
pacman -Syu
Pour installer un nouveau paquet tout en mettant à jour le système :
pacman -Syu paquet_1
Suppression de paquets
pacman -R paquet_1
Pour garder un système propre, il faut aussi supprimer les dépendances qui ne sont plus requises par aucun paquet :
pacman -Rs paquet_1
Par défaut, les fichiers de configuration modifiés sont sauvegardés avec l'extension .pacsave. Pour ne pas les
conserver :
pacman -Rsn paquet_1
Note : pacman ne touche pas aux répertoires personnels, c'est à l'utilisateur de s'occuper de tout fichier de
configuration qui s'y trouverait.
Recherche
Pour avoir une aide rapide :
pacman -Q --help
pacman -S --help
pacman -R --help
Recherche d'un paquet parmi ceux installés :
pacman -Qs paquet
Recherche d'un paquet dans les dépôts :
pacman -Ss paquet
pacman peut effectuer une recherche avec des expressions régulières :
$ pacman -Ss [Link] win.*manager
extra/mutter [Link]-1 (gnome)
A window manager for GNOME
community/metacity 3.14.1-1
Legacy GNOME window manager
Informations complètes sur un paquet installé (par exemple pour vérifier si certaines des dépendances optionnelles
peuvent vous apporter des fonctionnalités supplémentaires):
pacman -Qi paquet
ou non:
pacman -Si paquet
Astuce : avec -Qii, vous pouvez connaître les éventuels fichiers de sauvegarde d'un paquet et leur état.
avec -Qii|grep ^MODIFIED, vous pouvez connaître tous fichiers de sauvegarde modifiés par rapport à ceux
d'origine.
Liste des fichiers d'un paquet installé :
pacman -Ql paquet_1
Savoir à quel paquet appartient l'un des fichiers du système:
pacman -Qo /chemin/vers/le/fichier
Astuce : pkgfile permet de rechercher un fichier dans les paquets non installés, ou de lister les fichiers d'un
paquet non installé avec l'option -l.
Liste des paquets n'appartenant à aucun dépôt configuré dans [Link] :
pacman -Qm
Liste des paquets (dépendances) n'étant plus requis par le système (le paquet qui a causé leur installation n'est plus
présent) :
pacman -Qdt
Attention : -Qdt liste les paquets non installés explicitement et dont aucun autre paquet ne dépend, mais cela ne
veut pas forcément dire que vous ne les utilisez pas. Un exemple, vous installez un paquet qui dépend de zip, ce
dernier s'installe, un jour, il n'en dépend plus, zip deviendra non requis par le système, mais vous l'utilisez peut-être
quand même. (cf Modification de la base de données ci-dessous)
Rétrograder des paquets
Il est parfois nécessaire de revenir temporairement à la version précédente d'un paquet (régression, bug), différents
moyens existent: Downgrade.
Nettoyer le cache des paquets
pacman stocke les paquets téléchargés ici /var/cache/pacman/pkg/ et n'enlève pas automatiquement les versions
anciennes ou désinstallées. Il faut donc vider régulièrement ce dossier pour éviter qu'il ne prenne une taille
démesurée.
La commande suivante de pacman supprime tous les paquets non-installés du cache (anciennes versions ou non
installées sur le système) :
pacman -Sc
Attention :
Ne lancez cette commande que si vous êtes certain que les paquets installés sont stables sur votre système et
qu’un downgrade ne sera pas nécessaire. Cela va supprimer toutes les anciennes versions des paquets en ne
laissant que les dernières versions installées. Il peut être utile de conserver les anciennes versions des paquets au
cas où une mise à jour rendrait le système instable ou inopérant. La loi de Murphy s’appliquant toujours dans ce
cas, c’est juste après un vidage complet du cache que cela arrivera. Si tous les anciens paquets ont été supprimés du
cache, la seule façon de les récupérer est de passer par un dépôt alternatif comme Arch Rollback Machine.
Il est aussi possible de vider complètement le cache par la commande pacman -Scc. Cela empêche toute
réinstallation de paquets depuis le cache et impose donc de les télécharger à nouveau, ce qui n'est pas un problème
grâce à Arch Rollback Machine. Donc assez utile afin de récupérer de l’espace disque.
À cause de toutes les restrictions énoncées avant, il est recommandé d’utiliser un script dédié au nettoyage du cache
de pacman, afin de contrôler plus finement les paquets à supprimer :
La commande paccache, fourni avec le paquet pacman-contrib, supprime par défaut tous les paquets du cache sauf
les trois dernières versions les plus récentes :
paccache -r
Cependant, paccache ne vérifiera pas si les paquets sont encore installés sur le système et laissera donc les paquets
non-installés dans le cache. Pour supprimer du cache toutes les versions des paquets non-installés, vous devez lancer
la commande suivante dans un second temps :
paccache -ruk0
Voir paccache -h pour plus d’options.
Vous pouvez également installer et utiliser les scripts alternatifs : pkgcacheclean (écrit en C)... :
pkgcacheclean
...ou pacleaner (écrit en python) depuis AUR :
Pour vérifier les paquets à supprimer sauf les trois plus récents :
pacleaner -m
Pour vérifier les paquets non-installés :
pacleaner -u
Utilisez l’option --delete pour supprimer les paquets :
pacleaner -m --delete
pacleaner -u --delete
Les options par défaut peuvent être modifiées dans un fichier de configuration (nombre de paquets à conserver,
chemin d’accès vers le cache...)
Modification de la base de données
Vous pouvez modifier certains éléments de la base de données des paquets installés, notamment la raison
d'installation d'un paquet (installés en tant que dépendances ou explicitement) :
pacman -D --asexplicit paquet_1 paquet_2
pacman -D --asdeps paquet_1 paquet_2
En vrac
Téléchargement des paquets seulement:
pacman -Sw paquet_1 paquet_2
Vérifier qu'il ne manque pas de fichiers installés sur l'ensemble des paquets:
pacman -Qqk
Une astuce totalement inutile et (peut-être) indispensable…
Il existe une petite astuce avec Pacman que — j'en suis sûr — vous allez vous empresser de tester. Éditez le fichier
"/etc/[Link]" et ajoutez l'option "ILoveCandy" dans la rubrique en dessous de "[options]" :
[options]
ILoveCandy
Vous obtiendrez par la suite une sortie de Pacman similaire au jeu du même nom lorsque vous mettrez votre système
à jour.
Empêcher l'installation de locales
L'option NoExtract du fichier [Link] est très utile si certaines parties de paquets vous sont inutiles. Les
locales sont un cas typique de ce genre de fichiers dont on pourrait vouloir se passer.
Aucun des fichiers listés dans les règles de l'option NoExtract n'est extrait lors de l'installation d'un paquet. Le
motif * est autorisé pour désigner un ensemble de fichier (comme on le ferait dans un shell). Par
exemple usr/lib/systemd/system/* désigne tous les fichiers dans le dossier /usr/lib/systemd/system/ ainsi
que dans ses sous-dossiers. Il est possible d'inverser le comportement d'une règle en la préfixant d'un !. Cela annule
les règles précedentes sur les fichiers correspondant.
Donc, si on veut se passer de toutes les locales sauf celles francofrançaises, on obtient les règles suivantes à ajouter
dans la section [options] de [Link].
Fichier: /etc/[Link]
NoExtract = usr/share/locale/[a-z]*/*
NoExtract = !usr/share/locale/fr/*
NoExtract = !usr/share/locale/fr_FR/*
Les règles peuvent aussi être indiquées sur une seul ligne NoExtract...
Note : Ajouter ces lignes ne fait pas disparaître les fichiers avant que les paquets qui les contiennent soient mis à
jour.
Il est cependant possible de les supprimer directement avec par exemple la commande suivante : find
/usr/share/locale/* -maxdepth 0 -type d \! -name fr \! -name fr_FR -print0 |xargs -0 rm -r
Récupérer les sources d'un paquet
Note : Valable pour tous les paquets se trouvant à cette adresse [1]
( [Link] )
git clone --branch packages/nom_du_paquet --single-branch
[Link] nom_du_paquet
Seul nom_du_paquet est à fournir. Cela permet d'obtenir le Pkgbuild après nous pouvons entrer la commande
suivante pour récupérer les sources :
makepkg -S
Problèmes
Crash de pacman durant une mise à jour
Dans le cas où pacman crashe durant une mise à jour, une suppression de paquet ou encore une réinstallation d'un
paquet, il faudra faire ces différentes étapes :
Démarrer sur un iso d'installation ArchLinux
Monter votre système de fichier racine (/, /boot, /var, etc., s'ils existent)
Mettre à jour votre base de données pacman ainsi que mettre à jour vos paquets via la commande pacman -r
/chemin/vers/racine -Syyu
Réinstaller le(s) paquet(s) cassé(s) via la commande pacman -r /chemin/vers/racine -S paquet
Un paquet a été mis à jour mais pacman dit que le système est à jour
Les miroirs de pacman ne sont pas directement synchronisé. Il faut compter environ 24 heures avant de pouvoir
recevoir la mise à jour tant désirée.
"Le paquet est introuvable"
Premièrement, assurez vous que le paquet que vous tentez d'installer existe réellement. Si ce paquet existe vraiment,
vérifiez que l'orthographe est correcte. Il se peut aussi que le paquet existe et que l'orthographe est correcte mais que
la liste de vos paquets est obsolète. Dans ce cas, un simple pacman -Syyu fera amplement l'affaire.
Un même paquet se met à jour continuellement
Ce problème est du a des entrées dupliquées dans /var/lib/pacman/local/ comme s'il y avait deux instances de linux.
La commande pacman -Qi donne la bonne version et la commande pacman -Qu reconnait la plus vieille
version ET essaye de la mettre à jour. La solution est donc d'effacer la mauvaise entrée dans /var/lib/pacman/local/
Équivalences entre Pacman et les autres gestionnaires de
paquets
Si vous avez l'habitude d'utiliser Arch, Red Hat/Fedora, Debian/Ubuntu, SUSE/openSUSE ou encore Gentoo, et que
vous rencontrez des difficultés à prendre en main le gestionnaire de paquets mais que vous êtes à l'aise avec un
autre, vous pouvez consulter la page Pacman Rosetta (en), qui donne les commandes équivalentes entre chacun des
gestionnaires de paquets.
Si vous êtes très à l'aise avec Pacman mais que vous n'arrivez pas à prendre d'autres gestionnaires de paquets en
main, pacapt est une solution.