pacman (Français)
pacman, le gestionnaire de paquets, est l'une des principales caractéristiques distinctives d'Arch Linux. Il combine un format de paquet binaire simple avec un système de construction de paquets facile à utiliser. Le but de pacman est de permettre de gérer facilement les paquets, qu'ils proviennent des dépôts officiels ou des propres constructions de l'utilisateur.
Pacman maintient le système à jour en synchronisant les listes de paquets avec le serveur maître. Ce modèle serveur/client permet également à l'utilisateur de télécharger/installer des paquets par une simple commande, avec toutes les dépendances requises.
Pacman est écrit en langage de programmation C et utilise le programme bsdtar(1) pour l'empaquetage en archives tar.
pacman -Ql pacman pacman-contrib | grep -E 'bin/.+'
pour consulter la liste complète.Utilisation
Ce qui suit n'est qu'un petit échantillon des opérations que pacman peut effectuer. Pour lire plus d'exemples, reportez-vous à pacman(8).
Installation de paquets
Un paquet est une archive contenant :
- tous les fichiers (compilés) d'une application
- des métadonnées sur l'application, telles que le nom de l'application, la version, les dépendances, etc.
- des fichiers d'installation et des directives pour pacman.
- (optionnellement) des fichiers supplémentaires pour vous faciliter la vie, comme un script de démarrage/arrêt.
Le gestionnaire de paquets d'Arch, pacman, peut installer, mettre à jour et supprimer ces paquets. L'utilisation de paquets au lieu de compiler et d'installer les programmes vous-même présente plusieurs avantages :
- mise à jour facile : pacman mettra à jour les paquets existants dès que des mises à jour seront disponibles.
- vérification des dépendances : pacman gère les dépendances pour vous, vous n'avez qu'à spécifier le programme et pacman l'installe avec tous les autres programmes dont il a besoin.
- suppression propre : pacman possède une liste de tous les fichiers d'un paquet ; de cette façon, aucun fichier n'est oublié par inadvertance lorsque vous décidez de supprimer un paquet.
- Les paquets ont souvent des dépendances optionnelles qui sont des paquets qui fournissent des fonctionnalités supplémentaires à l'application mais qui ne sont pas strictement nécessaires à son fonctionnement. Lors de l'installation d'un paquet, pacman listera les dépendances optionnelles d'un paquet, mais elles ne seront pas trouvées dans
pacman.log
. Utilisez la commande présentée dans #Interrogation de la base de données des paquets pour afficher les dépendances optionnelles d'un paquet. - Lors de l'installation d'un paquet dont vous avez besoin uniquement comme dépendance (facultative) d'un autre paquet (c'est-à-dire que vous n'en avez pas besoin explicitement), il est recommandé d'utiliser l'option
--asdeps
. Pour plus de détails, consultez la section #Motif d'installation.
pacman -Sy nom_du_paquet
au lieu de pacman -Syu nom_du_paquet
, car cela pourrait entraîner des problèmes de dépendance. Consultez System maintenance (Français)#Les mises à jour partielles ne sont pas prises en charge et BBS#89328.Installation de paquets spécifiques
Pour installer un seul paquet ou une liste de paquets, y compris les dépendances, exécutez la commande suivante :
# pacman -S nom_du_paquet1 nom_du_paquet2 ...
Pour installer une liste de paquets avec expression régulière ("regex") (consultez cette discussion dans le forum international) :
# pacman -S $(pacman -Ssq package_regex)
Parfois, il existe plusieurs versions d'un paquet dans différents dépôts (par exemple, extra et testing). Pour installer la version du dépôt extra dans cet exemple, le dépôt doit être défini devant le nom du paquet :
# pacman -S extra/nom_du_paquet.
Pour installer un certain nombre de paquets partageant des motifs similaires dans leurs noms, on peut utiliser l'expansion par accolades. Par exemple :
# pacman -S plasma-{desktop,mediacenter,nm}
Ceci peut être étendu à autant de niveaux que nécessaire :
# pacman -S plasma-{workspace{,-wallpapers},pa}
Paquets virtuels
Un paquet virtuel est un paquet spécial qui n'existe pas par lui-même, mais qui est fourni par un ou plusieurs autres paquets. Les paquets virtuels permettent aux autres paquets de ne pas nommer un paquet spécifique comme dépendance, dans le cas où il y a plusieurs candidats. Les paquets virtuels ne peuvent pas être installés par leur nom, mais ils sont installés sur votre système lorsque vous avez installé un paquet fournissant le paquet virtuel.
Installation de groupes de paquets
Certains paquets appartiennent à un groupe de paquets qui peuvent tous être installés simultanément. Par exemple, en lançant la commande :
# pacman -S gnome
vous demandera de sélectionner les paquets du groupe gnome que vous souhaitez installer.
Parfois, un groupe de paquets contient un grand nombre de paquets, et il se peut qu'il n'y en ait que quelques-uns que vous voulez ou ne voulez pas installer. Au lieu de devoir entrer tous les numéros sauf ceux que vous ne voulez pas, il est parfois plus pratique de sélectionner ou d'exclure des paquets ou des plages de paquets avec la syntaxe suivante :
Entrez une sélection (par défaut=tous) : 1-10 15
qui sélectionnera les paquets 1 à 10 et 15 pour l'installation, ou :
Entrez une sélection (par défaut=tous) : ^5-8 ^2
qui sélectionnera tous les paquets sauf 5 à 8 et 2 pour l'installation.
Pour consulter les paquets appartenant au groupe gnome, exécutez :
# pacman -Sg gnome
Consultez également https://archlinux.org/groups/ pour voir quels groupes de paquets sont disponibles.
--needed
. Suppression de paquets
Pour supprimer un seul paquet, en laissant toutes ses dépendances installées :
# pacman -R nom_du_paquet
Pour supprimer un paquet et ses dépendances qui ne sont pas requises par un autre paquet installé :
# pacman -Rs nom_du_paquet
La commande ci-dessus peut parfois refuser de s'exécuter lors de la suppression d'un groupe qui contient des paquets nécessaires. Dans ce cas, essayez :
# pacman -Rsu nom_du_paquet
Pour supprimer un paquet, ses dépendances et tous les paquets qui dépendent du paquet cible :
# pacman -Rsc nom_du_paquet
Pour supprimer un paquet, qui est requis par un autre paquet, sans supprimer le paquet dépendant :
# pacman -Rdd nom_du_paquet
Pacman sauvegarde des fichiers de configuration importants lors de la suppression de certaines applications et les nomme avec l'extension : .pacsave. Pour empêcher la création de ces fichiers de sauvegarde, utilisez l'option -n
:
# pacman -Rn nom_du_paquet
Mise à jour des paquets
- Les utilisateurs doivent suivre les conseils de la section System maintenance (Français)#Mises à Jour du Système pour mettre à jour leur système régulièrement et ne pas exécuter aveuglément la commande suivante.
- Arch ne prend en charge que les mises à niveau complètes du système. Consultez les sections System maintenance (Français)#Les mises à jour partielles ne sont pas prises en charge et #Installation de paquets pour plus de détails.
Pacman peut mettre à jour tous les paquets du système avec une seule commande. Cela peut prendre un certain temps selon le degré de «fraîcheur» du système. La commande suivante synchronise les bases de données des dépôts et met à jour les paquets du système, en excluant les paquets "locaux" qui ne sont pas dans les dépôts configurés :
# pacman -Syu
Interrogation de la base de données des paquets
Pacman interroge la base de données des paquets locaux avec l'option -Q
, la base de données de synchronisation avec l'option -S
et la base de données des fichiers avec l'option -F
. Consultez pacman -Q --help
, pacman -S --help
et pacman -F --help
pour les sous-options respectives de chaque paramètre.
Pacman peut rechercher des paquets dans la base de données, en cherchant à la fois dans les noms et les descriptions des paquets :
$ pacman -Ss string1 string2 ...
Parfois, l'ERE (Expressions Régulières Étendues) intégrée de -s
peut causer beaucoup de résultats indésirables, elle doit donc être limitée pour ne correspondre qu'au nom du paquet, et non à sa description ou à tout autre champ :
$ pacman -Ss '^vim-'
Pour rechercher des paquets déjà installés :
$ pacman -Qs string1 string2 ...
Pour rechercher les noms de fichiers de paquets dans les paquets distants :
$ pacman -F string1 string2 ...
Pour afficher des informations détaillées sur un paquet donné :
$ pacman -Si nom_du_paquet.
Pour les paquets installés localement :
$ pacman -Qi nom_du_paquet.
Si vous passez deux options -i
, vous afficherez également la liste des fichiers de sauvegarde et leur état de modification :
$ pacman -Qii nom_du_paquet.
Pour récupérer la liste des fichiers installés par un paquet :
$ pacman -Ql nom_du_paquet.
Pour récupérer la liste des fichiers installés par un paquet distant :
$ pacman -Fl nom_du_paquet.
Pour vérifier la présence des fichiers installés par un paquet :
$ pacman -Qk nom_du_paquet.
Passer deux fois l'option k
permet d'effectuer une vérification plus approfondie.
Pour interroger la base de données afin de savoir à quel paquet appartient un fichier dans le système de fichiers :
$ pacman -Qo /path/to/file_name.
Pour interroger la base de données afin de savoir à quel paquet distant appartient un fichier :
$ pacman -F /path/to/file_name.
Pour lister tous les paquets qui ne sont plus nécessaires comme dépendances (orphelins) :
$ pacman -Qdt
Exec
dans votre hook : /usr/bin/bash -c "/usr/bin/pacman -Qtd || /usr/bin/echo '=> None found.'"
Pour lister tous les paquets explicitement installés et non requis comme dépendances :
$ pacman -Qet
Consultez Pacman/Tips and tricks pour plus d'exemples.
Pactree
Pour afficher l'arbre de dépendance d'un paquet :
$ pactree nom_du_paquet
Pour afficher l'arbre des dépendances d'un paquet, passez l'option inverse -r
à pactree, ou utilisez whoneeds de pkgtoolsAUR.
Structure de la base de données
Les bases de données de pacman sont normalement situées dans /var/lib/pacman/sync
. Pour chaque dépôt spécifié dans /etc/pacman.conf
, il y aura un fichier de base de données correspondant situé à cet endroit. Les fichiers de base de données sont des archives tar gzippées contenant un répertoire pour chaque paquet, par exemple pour le paquet which :
$ tree which-2.21-5
which-2.21-5 |-- desc
Le fichier desc
contient des méta-données telles que la description du paquet, les dépendances, la taille du fichier et le hachage MD5.
Nettoyage du cache des paquets
Pacman stocke ses paquets téléchargés dans /var/cache/pacman/pkg/
et ne supprime pas automatiquement les anciennes versions ou les versions désinstallées. Cela présente quelques avantages :
- Il permet de rétrograder un paquet sans avoir besoin de récupérer la version précédente par d'autres moyens, tels que l'Arch Linux Archive.
- Un paquet qui a été désinstallé peut facilement être réinstallé directement depuis le dossier de cache, sans nécessiter un nouveau téléchargement depuis le dépôt.
Cependant, il est nécessaire de nettoyer délibérément le cache périodiquement pour éviter que le dossier ne grossisse indéfiniment en taille.
Le script paccache(8), fourni dans le paquet pacman-contrib, supprime par défaut toutes les versions en cache des paquets installés et désinstallés, à l'exception des trois plus récents :
# paccache -r
Activez et démarrez paccache.timer
pour éliminer les paquets inutilisés chaque semaine.
Vous pouvez également définir le nombre de versions récentes que vous souhaitez conserver. Pour ne conserver qu'une seule version antérieure, utilisez :
# paccache -rk1
Ajoutez le paramètre -u
/--uninstalled
pour limiter l'action de paccache aux paquets désinstallés. Par exemple, pour supprimer toutes les versions mises en cache des paquets non installés, utilisez ce qui suit :
# paccache -ruk0
Consultez paccache -h
pour plus d'options.
Pacman a également des options intégrées pour nettoyer le cache et les fichiers de base de données restants des dépôts qui ne sont plus listés dans le fichier de configuration /etc/pacman.conf
. Cependant, pacman n'offre pas la possibilité de conserver un certain nombre d'anciennes versions et est donc plus agressif que les options par défaut de paccache.
Pour supprimer tous les paquets mis en cache qui ne sont pas actuellement installés, ainsi que la base de données de synchronisation non utilisée, exécutez :
# pacman -Sc
Pour supprimer tous les fichiers du cache, utilisez deux fois l'option clean, c'est l'approche la plus agressive et elle ne laissera rien dans le dossier du cache :
# pacman -Scc
pkgcachecleanAUR et pacleanerAUR sont deux autres alternatives pour nettoyer le cache.
Commandes supplémentaires
Télécharger un paquet sans l'installer :
# pacman -Sw nom_du_paquet
Installer un paquet "local" qui ne provient pas d'un dépôt distant (par exemple, le paquet provient de l'AUR) :
# pacman -U /path/to/package/package_name-version.pkg.tar.zst.
Pour conserver une copie du paquet local dans le cache de pacman, utilisez :
# pacman -U file:///path/to/package/package_name-version.pkg.tar.zst
Installer un paquet 'distant' (ne provenant pas d'un dépôt indiqué dans les fichiers de configuration de pacman) :
# pacman -U http://www.example.com/repo/example.pkg.tar.zst.
Pour inhiber les actions -S
, -U
et -R
, on peut utiliser -p
.
Pacman liste toujours les paquets à installer ou à supprimer et demande la permission avant d'agir.
Motif d'installation
La base de données pacman organise les paquets installés en deux groupes, selon le motif d'installation :
-
explicitly-installed : paquets qui ont été littéralement passés à une commande générique pacman
-S
ou-U
; - dependencies : paquets qui, bien que n'ayant jamais (en général) été passés à une commande d'installation pacman, ont été implicitement installés parce qu'ils étaient nécessaire aux paquets explicitement installés.
Lors de l'installation d'un paquet, il est possible de forcer son motif d'installation en tant que dépendance avec :
# pacman -S --asdeps nom_du_paquet.
Cette commande est normalement utilisée car les paquets explicitement installés peuvent proposer des dépendances optionnelles, généralement pour des fonctionnalités non essentielles pour lesquelles l'utilisateur a toute latitude.
--asdeps
garantira que, si vous supprimez les paquets orphelins, pacman supprimera également les paquets optionnels définis de cette manière.Cependant, lors de la réinstallation d'un paquet, le motif de l'installation actuelle est préservée par défaut.
La liste des paquets explicitement installés peut être affichée avec pacman -Qe
, tandis que la liste complémentaire des dépendances peut être affichée avec pacman -Qd
.
Pour changer le motif de l'installation d'un paquet déjà installé, exécutez :
# pacman -D --asdeps nom_du_paquet.
Utilisez --asexplicit
pour effectuer l'opération inverse.
--asdeps
et --asexplicit
lors de la mise à jour, comme avec pacman -Syu nom_du_paquet --asdeps
, est déconseillée. Cela modifierait le motif de l'installation non seulement du paquet en cours d'installation, mais aussi des paquets mis à jour.Ce qui se passe pendant l'installation/mise à jour/suppression d'un paquet
En cas de succès, le déroulement d'une transaction suit cinq étapes de haut niveau plus des «hooks» pré/post transaction :
- Initialiser la transaction s'il n'y a pas de verrou sur la base de données.
- Choisir les paquets qui seront ajoutés ou supprimés dans la transaction.
- Préparer la transaction, selon les paramètres, en effectuant des contrôles d'intégrité sur les bases de données de synchronisation, des paquets et de leurs dépendances.
- Effectuer la transaction :
- Le cas échéant, télécharger les paquets (
_alpm_sync_load
) - Si des «hooks» pré-existants de pacman
PreTransaction
s'appliquent, ils sont exécutés. - Les paquets qui doivent être remplacés, qui sont en conflit ou qui sont explicitement ciblés pour être supprimés sont supprimés.
- S'il y a des paquets à ajouter, alors chaque paquet est validé.
- Si le paquet a un script d'installation, sa fonction
pre_install
est exécutée (oupre_upgrade
oupre_remove
dans le cas d'un paquet mis à jour ou supprimé). - Pacman supprime tous les fichiers d'une version préexistante du paquet (dans le cas d'un paquet mis à jour ou supprimé). Cependant, les fichiers qui étaient marqués comme fichiers de configuration dans le paquet sont conservés (consultez /Pacnew and Pacsave (Français)).
- Pacman désarchive le paquet et transfère ses fichiers dans le système de fichiers (dans le cas d'un paquet installé ou mis à jour). Les fichiers qui écraseraient les fichiers de configuration conservés et modifiés manuellement (consultez l'étape précédente) sont stockés sous un nouveau nom (.pacnew).
- Si le paquet a un script d'installation, sa fonction
post_install
est exécutée (oupost_upgrade
oupost_remove
dans le cas d'un paquet mis à jour ou supprimé).
- Si les crochets
PostTransaction
de pacman qui existent à la fin de la transaction s'appliquent, ils sont exécutés.
- Le cas échéant, télécharger les paquets (
- Libérer la transaction et la ressource de la transaction (c'est-à-dire le verrou de la base de données).
Configuration
Les paramètres de Pacman sont situés dans /etc/pacman.conf
: c'est l'endroit où l'utilisateur configure le programme pour qu'il fonctionne de la manière souhaitée. Des informations détaillées sur le fichier de configuration peuvent être trouvées dans pacman.conf(5).
Options générales
Les options générales se trouvent dans la section [options]
. Lisez pacman.conf(5) ou regardez dans le fichier pacman.conf
par défaut pour obtenir des informations sur ce qui peut être fait ici.
Comparer les versions avant de mettre à jour
Pour consulter les anciennes et nouvelles versions des paquets disponibles, décommentez la ligne "VerbosePkgLists" dans /etc/pacman.conf
. La sortie de pacman -Syu
sera la suivante :
Package (6) Ancienne version Nouvelle version Changement net Taille du téléchargement extra/libmariadbclient 10.1.9-4 10.1.10-1 0.03 MiB 4.35 MiB extra/libpng 1.6.19-1 1.6.20-1 0.00 MiB 0.23 MiB extra/mariadb 10.1.9-4 10.1.10-1 0.26 MiB 13.80 MiB
Activation des téléchargements parallèles
Pacman 6.0 a introduit l'option permettant de télécharger des paquets en parallèle. ParallelDownloads
sous [options]
doit être défini comme un nombre entier positif dans /etc/pacman.conf
pour utiliser cette fonctionnalité (par exemple, 5
). Les paquets seront autrement téléchargés séquentiellement si cette option n'est pas définie.
Ignorer la mise à jour d'un paquet
Pour qu'un paquet spécifique soit ignoré lors de la mise à jour du système, ajoutez cette ligne dans la section [options]
:
IgnorePkg=linux
Pour plusieurs paquets, utilisez une liste séparée par des espaces, ou utilisez des lignes IgnorePkg
supplémentaires. Les motifs glob peuvent également être utilisés. Si vous voulez ignorer des paquets une seule fois, vous pouvez également utiliser l'option --ignore
sur la ligne de commande - cette fois avec une liste séparée par des virgules.
Il sera toujours possible de mettre à jour les paquets ignorés en utilisant pacman -S
: dans ce cas, pacman vous rappellera que les paquets ont été inclus dans une déclaration IgnorePkg
.
Ignorer la mise à jour d'un groupe de paquets
Comme pour les paquets, il est également possible d'ignorer un groupe de paquets entier :
IgnoreGroup=gnome
Ignorer la mise à jour d'un fichier
Tous les fichiers listés avec une directive NoUpgrade
ne seront jamais touchés lors de l'installation ou de la mise à jour d'un paquet, et les nouveaux fichiers seront installés avec une extension .pacnew.
NoUpgrade=chemin/vers/fichier
Plusieurs fichiers peuvent être spécifiés comme ceci :
NoUpgrade=path/to/file1 path/to/file2
Ignorer l'installation de fichiers sur le système
Pour toujours ignorer l'installation de répertoires spécifiques, listez-les sous NoExtract
. Par exemple, pour éviter l'installation des unités systemd, utilisez ceci :
NoExtract=usr/lib/systemd/system/*
Les règles ultérieures remplacent les précédentes, et vous pouvez annuler une règle en la faisant précéder de !
.
CheckSpace
dans pacman.conf
, vous supprimez ces avertissements, mais tenez compte du fait que la fonctionnalité de vérification des espaces sera désactivée pour tous les paquets.Maintenir plusieurs fichiers de configuration
Si vous avez plusieurs fichiers de configuration (par exemple, la configuration principale et la configuration avec le dépôt testing activé) et que vous devez partager des options entre les configurations, vous pouvez utiliser l'option Include
déclarée dans les fichiers de configuration, par exemple :
Include = /path/to/common/settings.
où le fichier /path/to/common/settings
contient les mêmes options pour les deux configurations.
Hooks
Pacman peut exécuter des hooks pré- et post-transactions à partir du répertoire /usr/share/libalpm/hooks/
; d'autres répertoires peuvent être spécifiés avec l'option HookDir
dans pacman.conf
, qui est par défaut /etc/pacman.d/hooks
. Les noms de fichiers de hooks doivent être suffixés par .hook. Les hooks de Pacman ne sont pas interactifs.
Les hooks Pacman sont utilisés, par exemple, en combinaison avec systemd-sysusers
et systemd-tmpfiles
pour créer automatiquement des utilisateurs et des fichiers système lors de l'installation de paquets. Par exemple, tomcat8 spécifie qu'il veut un utilisateur système appelé tomcat8
et certains répertoires appartenant à cet utilisateur. Les hooks pacman systemd-sysusers.hook
et systemd-tmpfiles.hook
invoquent systemd-sysusers
et systemd-tmpfiles
lorsque pacman détermine que tomcat8 contient des fichiers spécifiant des utilisateurs et des fichiers tmp.
Pour plus d'informations sur les hooks alpm, consultez alpm-hooks(5).
Dépôts et miroirs
Outre la section spéciale [options], chaque autre [section]
de pacman.conf
définit un dépôt de paquets à utiliser. Un dépôt est une collection logique de paquets, qui sont stockés physiquement sur un ou plusieurs serveurs : pour cette raison, chaque serveur est appelé miroir du dépôt.
Les dépôts se distinguent entre les officiels et les non officiels. L'ordre des dépôts dans le fichier de configuration est important ; les dépôts listés en premier seront prioritaires sur ceux listés plus loin dans le fichier lorsque des paquets dans deux dépôts ont des noms identiques, indépendamment du numéro de version. Afin d'utiliser un dépôt après l'avoir ajouté, vous devrez d'abord mettre à jour l'ensemble du système.
Chaque section de dépôt permet de définir la liste de ses miroirs directement ou dans un fichier externe dédié via la directive Include
; par exemple, les miroirs des dépôts officiels sont inclus dans /etc/pacman.d/mirrorlist
. Consultez l'article Miroir pour la configuration des miroirs.
Sécurité des paquets
Pacman supporte les signatures de paquets, qui ajoutent une couche supplémentaire de sécurité aux paquets. La configuration par défaut, SigLevel = Required DatabaseOptional
, active la vérification des signatures pour tous les paquets au niveau global. Elle peut être remplacée par des lignes SigLevel
par dépôt. Pour plus de détails sur la signature des paquets et la vérification des signatures, jetez un œil à pacman-key.
Dépannage
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/