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 Mises à jour partielles 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 à jour complètes du système. Consultez les sections Mises à jour partielles 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 prends en charge 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
Erreur "Failed to commit transaction (conflicting files)"
Si vous rencontrez l'erreur suivante : [1]
error: could not prepare transaction error: failed to commit transaction (conflicting files) package: /path/to/file exists in filesystem Errors occurred, no packages were upgraded.
Cela se produit parce que pacman a détecté un conflit de fichiers, et par conception, il n'écrasera pas les fichiers pour vous. Il s'agit d'une volonté délibérée et non d'un défaut.
Le problème est généralement trivial à résoudre. Une manière sûre est de vérifier d'abord si un autre paquet possède le fichier (pacman -Qo /path/to/file
). Si le fichier appartient à un autre paquet, déposez un rapport de bug. Si le fichier n'appartient pas à un autre paquet, renommez le fichier qui "existe dans le système de fichiers" et relancez la commande de mise à jour. Si tout va bien, le fichier peut alors être supprimé.
Si vous aviez installé un programme manuellement sans utiliser pacman, par exemple via make install
, vous devez supprimer/désinstaller ce programme avec tous ses fichiers. Consultez également Pacman (Français)/Tips and tricks (Français)#Recherche des fichiers n'appartenant à aucun paquet.
Chaque paquet installé fournit un fichier /var/lib/pacman/local/package-version/files
qui contient des métadonnées sur ce paquet. Si ce fichier est corrompu, vide ou manquant, il en résulte des erreurs file exists in filesystem
lors de la tentative de mise à jour du paquet. Une telle erreur ne concerne généralement qu'un seul paquet. Au lieu de renommer manuellement et de supprimer ensuite tous les fichiers qui appartiennent au paquet en question, vous pouvez exécuter explicitement pacman -S --overwrite glob package
pour forcer pacman à écraser les fichiers qui correspondent à glob
.
--overwrite
. Consultez Évitez certaines commandes de pacman.Erreur "Failed to commit transaction (invalid or corrupted package)"
Recherchez les fichiers .part (paquets partiellement téléchargés) dans /var/cache/pacman/pkg/
et supprimez-les (souvent causés par l'utilisation d'une XferCommand
personnalisée dans pacman.conf
).
# find /var/cache/pacman/pkg/ -iname "*.part" -delete
Erreur "Failed to init transaction (unable to lock database)"
Lorsque pacman est sur le point de modifier la base de données des paquets, par exemple pour installer un paquet, il crée un fichier de verrouillage à /var/lib/pacman/db.lck
. Cela empêche une autre instance de pacman d'essayer de modifier la base de données des paquets au même moment.
Si pacman est interrompu alors qu'il modifie la base de données, ce fichier de verrouillage périmé peut rester. Si vous êtes certain qu'aucune instance de pacman n'est en cours d'exécution, supprimez le fichier de verrouillage :
# rm /var/lib/pacman/db.lck
fuser /var/lib/pacman/db.lck
en tant que root pour vérifier si un processus l'utilise encore.Impossible de télécharger les paquets à l'installation
Cette erreur se manifeste avec Not found in sync db
, Target not found
ou Failed retrieving file
.
Tout d'abord, assurez-vous que le paquet existe réellement. Si vous êtes certain que le paquet existe, votre liste de paquets n'est peut-être pas à jour. Essayez d'exécuter pacman -Syu
pour forcer un rafraîchissement de toutes les listes de paquets et effectuer une mise à jour. Vérifiez également que les miroirs sélectionnés sont à jour et que les dépôts sont correctement configurés.
Il se peut également que le dépôt contenant le paquet ne soit pas activé sur votre système, par exemple, le paquet peut être dans le dépôt multilib, mais multilib n'est pas activé dans votre pacman.conf
.
Consultez également Frequently asked questions (Français)#Pourquoi n'y a t il qu'une seule version de chaque bibliothèque dans les dépôts officiels?.
Pacman plante pendant une mise à jour
Dans le cas où pacman se bloque avec une erreur d'écriture dans la base de données lors de la suppression de paquets, et que la réinstallation ou la mise à jour des paquets échoue par la suite, procédez comme suit :
- Démarrez en utilisant le support d'installation d'Arch. Utilisez de préférence un support récent afin que la version de pacman corresponde/soit plus récente que le système.
- Montez le système de fichiers racine du système, par exemple,
mount /dev/sdaX /mnt
en tant que root, et vérifiez que le montage a suffisamment d'espace avecdf -h
. - Montez également les systèmes de fichiers proc, sys et dev :
mount -t proc proc /mnt/proc ; mount --rbind /sys /mnt/sys ; mount --rbind /dev /mnt/dev
- Si le système utilise les emplacements par défaut des bases de données et des répertoires, vous pouvez maintenant mettre à jour la base de données pacman du système et la mettre à jour via
pacman --sysroot /mnt -Syu
en tant que root.- Alternativement, si vous ne pouvez pas mettre à jour, reportez-vous à Pacman (Français)/Tips and tricks (Français)#Réinstallation de tous les paquets.
- Après la mise à jour, une façon de vérifier si des paquets non mis à jour mais encore cassés sont présents :
find /mnt/usr/lib -size 0
- Suivi d'une réinstallation de tout paquet encore cassé via
pacman --sysroot /mnt -S package
.
Réinstallation manuelle de pacman
Utilisation de pacman-static
pacman-staticAUR est une version compilée statiquement de pacman, qui pourra donc fonctionner même si les bibliothèques du système ne fonctionnent pas. Cela peut également s'avérer utile lorsque des mises à jour partielles ont été effectuées et que pacman ne peut plus fonctionner.
Le commentaire épinglé et le PKGBUILD fournissent un moyen de télécharger directement le binaire, qui peut être utilisé pour réinstaller pacman ou pour mettre à jour l'ensemble du système en cas de mise à jour partielle.
Utilisation d'un pacman externe
Si même pacman-static
ne fonctionne pas, il est possible de récupérer en utilisant un pacman externe. L'une des méthodes les plus simples consiste à utiliser Archiso et à utiliser simplement --sysroot
ou --root
pour spécifier le point de montage. Consultez Chroot (Français)#En utilisant chroot pour savoir comment monter les systèmes de fichiers nécessaires requis par --sysroot
.
En extrayant manuellement
Même si pacman est terriblement cassé, vous pouvez le réparer manuellement en téléchargeant les derniers paquets et en les extrayant aux bons endroits. Les étapes approximatives à effectuer sont les suivantes :
- Déterminer les dépendances pacman à installer
- Téléchargez chaque paquet depuis un miroir de votre choix.
- Extrayez chaque paquet à la racine
- Réinstallez ces paquets avec
pacman -S --overwrite
pour mettre à jour la base de données des paquets en conséquence. - Faites une mise à jour complète du système
Si vous avez un système Arch sain sous la main, vous pouvez consulter la liste complète des dépendances avec :
$ pacman -Q $(pactree -u pacman)
Mais vous pouvez n'avoir besoin de mettre à jour que quelques-unes d'entre elles en fonction de votre problème. Un exemple d'extraction d'un paquet est
# tar -xvpwf package.tar.zst -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO
Notez l'utilisation de l'option w
pour le mode interactif. L'exécution en mode non interactif est très risquée car vous pourriez finir par écraser un fichier important. Faites également attention à extraire les paquets dans le bon ordre (c'est-à-dire les dépendances en premier). Ce post du forum contient un exemple de ce processus où seules quelques dépendances de pacman sont cassées.
Erreur "Unable to find root device" après le redémarrage
Il est très probable que l'initramfs ait été corrompu lors d'une mise à jour du noyau (une mauvaise utilisation de l'option --overwrite
de pacman peut être une cause). Il y a deux options : premièrement, essayez l'entrée Fallback.
Tab
lorsque le menu du chargeur d'amorçage s'affiche (pour Syslinux) ou e
. (pour GRUB ou systemd-boot), le renommer initramfs-linux-fallback.img
et appuyer sur Enter
ou b
. (en fonction de votre chargeur d'amorçage) pour démarrer avec les nouveaux paramètres.Une fois le système démarré, exécutez cette commande (pour le noyau linux stock) soit à partir de la console, soit à partir d'un terminal pour reconstruire l'image initramfs :
# mkinitcpio -p linux
Si cela ne fonctionne pas, à partir d'une version courante d'Arch (CD/DVD ou clé USB), montez vos partitions root et boot. Puis chrootez en utilisant arch-chroot :
# arch-chroot /mnt # pacman -Syu mkinitcpio systemd linux
- Si vous n'avez pas de version actuelle ou si vous n'avez qu'une autre distribution Linux «live», vous pouvez utiliser chroot à l'ancienne. Évidemment, il faudra taper davantage que simplement exécuter le script
arch-chroot
. - Si pacman échoue avec
Could not resolve host
, veuillez vérifier votre connexion internet. - Si vous ne pouvez pas entrer dans l'environnement arch-chroot ou chroot mais que vous devez réinstaller des paquets, vous pouvez utiliser la commande
pacman --sysroot /mnt -Syu foo bar
pour utiliser pacman sur votre partition racine.
La réinstallation du noyau (le paquet linux) génère automatiquement l'image initramfs avec mkinitcpio -p linux
. Il n'est pas nécessaire de le faire séparément.
Ensuite, il est recommandé d'exécuter exit
, umount /mnt/{boot,}
et reboot
.
Erreur "Warning : current locale is invalid ; using default "C" locale"
Comme l'indique le message d'erreur, votre locale n'est pas correctement configurée. Consultez la page concernant la Locale.
Pacman ne respecte pas les paramètres du proxy
Assurez-vous que les variables d'environnement pertinentes ($http_proxy
, $ftp_proxy
etc.) sont configurées. Si vous utilisez pacman avec sudo, vous devez configurer sudo pour passer ces variables d'environnement à pacman. Assurez-vous également que la configuration de dirmngr a honor-http-proxy
dans /etc/pacman.d/gnupg/dirmngr.conf
pour honorer le proxy lors du rafraîchissement des clés.
Comment réinstaller tous les paquets, en conservant les informations sur le fait qu'un élément a été explicitement installé ou en tant que dépendance ?
Pour réinstaller tous les paquets natifs : pacman -Qnq | pacman -S -
ou pacman -S $(pacman -Qnq)
(l'option -S
préserve la raison de l'installation par défaut).
Vous devrez alors réinstaller tous les paquets étrangers, qui peuvent être listés avec pacman -Qmq
.
Il semble que la transaction précédente de pacman ait supprimé ou corrompu les bibliothèques partagées nécessaires à pacman lui-même.
Pour sortir de cette situation, vous devez décompresser manuellement les bibliothèques requises sur votre système de fichiers. Trouvez d'abord quel paquet contient la bibliothèque manquante, puis localisez-le dans le cache de pacman (/var/cache/pacman/pkg/
). Décompressez la bibliothèque partagée requise dans le système de fichiers. Cela permettra de lancer pacman.
Maintenant vous devez réinstaller le paquet cassé. Notez que vous devez utiliser l'option --overwrite
car vous venez de décompresser des fichiers système et pacman ne le sait pas. Pacman remplacera correctement notre fichier de bibliothèque partagée par celui du paquet.
C'est tout. Mettez à jour le reste du système.
Gel des téléchargements de paquets
Certains problèmes ont été signalés concernant des problèmes de réseau qui empêchent pacman de mettre à jour/synchroniser les dépôts. [2] [3] Lors de l'installation native d'Arch Linux, ces problèmes ont été résolus en remplaçant le logiciel de téléchargement de fichiers par défaut pacman par une alternative (consultez Améliorer les performances de pacman pour plus de détails). Lors de l'installation d'Arch Linux en tant que système d'exploitation invité dans VirtualBox, ce problème a également été résolu en utilisant Host interface au lieu de NAT dans les propriétés de la machine.
Erreur "Failed retrieving file 'core.db' from mirror"
Si vous recevez ce message d'erreur avec des miroirs corrects, essayez de définir un serveur de noms différent.
Erreur "error : 'local-package.pkg.tar' : permission denied"
Si vous voulez installer un paquet sur un montage sshfs en utilisant pacman -U
et que vous recevez cette erreur, déplacez le paquet dans un répertoire local et réessayez d'installer.
Erreur "error : could not determine cachedir mount point /var/cache/pacman/pkg"
Si vous exécutez, par exemple, pacman -Syu
dans un environnement chroot, vous rencontrez une erreur :
error : could not determine cachedir mount point /var/cache/pacman/pkg error : failed to commit transaction (not enough free disk space)
Ceci est fréquemment causé par le fait que le répertoire chroot n'est pas un point de montage lorsque le chroot est lancé. Consultez la note dans Install Arch Linux from existing Linux#Downloading basic tools pour une solution, et arch-chroot(8) pour une explication et un exemple d'utilisation de bind mounting pour faire du répertoire chroot un point de montage.