pacman (Français)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

État de la traduction: Cet article est la version francophone de pacman. Date de la dernière traduction: 2021-12-24. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

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.

Tip: Le paquet pacman contient des outils tels que makepkg et vercmp(8). D'autres outils utiles tels que pactree et checkupdates se trouvent dans pacman-contrib. (antérieurement inclus avec pacman). Lancez 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).

Astuce: Pour ceux qui ont déjà utilisé d'autres distributions Linux, il existe un article utile : Pacman Rosetta.

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.
Note:
  • 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.
Attention: Lors de l'installation de paquets dans Arch, évitez de rafraîchir la liste des paquets sans mise à jour du système (par exemple, lors d'une #Impossibilité de récupérer les paquets à l'installation dans les dépôts officiels). En pratique, ne lancez pas 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.

Note: Si un paquet de la liste est déjà installé sur le système, il sera réinstallé même s'il est déjà à jour. Ce comportement peut être outrepassé par l'option --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
Attention: Lorsqu'on supprime un groupe, tel que gnome, le motif d'installation des paquets du groupe est ignoré, car on agit comme si chaque paquet du groupe était listé séparément. Le motif d'installation des dépendances est toujours respecté.

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 :

Attention: Cette opération est récursive, et doit être utilisée avec précaution car elle peut supprimer de nombreux paquets potentiellement nécessaires.
# pacman -Rsc nom_du_paquet

Pour supprimer un paquet, qui est requis par un autre paquet, sans supprimer le paquet dépendant :

Attention: L'opération suivante peut casser un système et doit être évitée. Consultez Éviter certaines commandes de pacman.
# 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
Note: Pacman ne supprimera pas les configurations que l'application elle-même crée (par exemple "dotfiles" dans le dossier home).

Mise à jour des paquets

Attention:

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
Astuce: Ajoutez la commande ci-dessus à un hook post-transaction de pacman pour être notifié si une transaction a rendu un paquet orphelin. Cela peut être utile pour être notifié lorsqu'un paquet a été supprimé d'un dépôt, puisque tout paquet supprimé sera également orphelin sur une installation locale (sauf s'il a été explicitement installé). Pour éviter toute erreur "failed to execute command" lorsqu'aucun orphelin n'est trouvé, utilisez la commande suivante pour 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

Note: pactree(8) ne fait plus partie du paquet pacman. Il se trouve maintenant dans pacman-contrib.

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 :

  1. 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.
  2. 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.

Astuce: Vous pouvez créer un hook pour lancer cette opération automatiquement après chaque transaction pacman, consultez ces examples et pacman-cleanup-hookAUR}.

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
Attention: Il faut éviter de supprimer du cache toutes les anciennes versions des paquets installés et tous les paquets désinstallés, sauf si l'on a désespérément besoin de libérer de l'espace disque. Cela empêchera de rétrograder ou de réinstaller des paquets sans les télécharger à nouveau.

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.

Astuce: L'installation de dépendances optionnelles avec --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.

Note: L'utilisation des options --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 :

  1. Initialiser la transaction s'il n'y a pas de verrou sur la base de données.
  2. Choisir les paquets qui seront ajoutés ou supprimés dans la transaction.
  3. 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.
  4. Effectuer la transaction :
    1. Le cas échéant, télécharger les paquets (_alpm_sync_load)
    2. Si des «hooks» pré-existants de pacman PreTransaction s'appliquent, ils sont exécutés.
    3. Les paquets qui doivent être remplacés, qui sont en conflit ou qui sont explicitement ciblés pour être supprimés sont supprimés.
      1. S'il y a des paquets à ajouter, alors chaque paquet est validé.
      2. Si le paquet a un script d'installation, sa fonction pre_install est exécutée (ou pre_upgrade ou pre_remove dans le cas d'un paquet mis à jour ou supprimé).
      3. 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)).
      4. 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).
      5. Si le paquet a un script d'installation, sa fonction post_install est exécutée (ou post_upgrade ou post_remove dans le cas d'un paquet mis à jour ou supprimé).
    4. Si les crochets PostTransaction de pacman qui existent à la fin de la transaction s'appliquent, ils sont exécutés.
  5. 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

Attention: Faites attention en ignorant des paquets, car les mises à jour partielles ne sont pas prises en charge.

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

Attention: Faites attention en ignorant des groupes de paquets, car les mises à jour partielles ne sont pas prises en charge.

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
Note: Le chemin d'accès fait référence aux fichiers de l'archive du paquet. Par conséquent, n'incluez pas le «slash» de départ.

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 !.

Attention: Pacman émet des messages d'avertissement sur les locales manquantes lors de la mise à jour d'un paquet pour lequel les locales ont été effacées par localepurge ou bleachbit. En commentant l'option 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.

Attention: Généralement, évitez d'utiliser la commande --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
Astuce: Vous pouvez exécuter 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 :

  1. 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.
  2. 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 avec df -h.
  3. 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
  4. 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.
  5. 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
  6. 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

Attention: Il est extrêmement facile de détériorer votre système en utilisant cette approche. N'utilisez cette méthode qu'en dernier recours si la méthode de #Pacman plante pendant une mise à jour n'est pas une option.

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 :

  1. Déterminer les dépendances pacman à installer
  2. Téléchargez chaque paquet depuis un miroir de votre choix.
  3. Extrayez chaque paquet à la racine
  4. Réinstallez ces paquets avec pacman -S --overwrite pour mettre à jour la base de données des paquets en conséquence.
  5. 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.

Astuce: Au cas où vous auriez supprimé l'entrée Fallback, vous pouvez toujours appuyer sur la touche 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
Note:
  • 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.

Erreur "Cannot open shared object file"

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.

Voir aussi