pacman (Français)/Pacnew and Pacsave (Français)

From ArchWiki

État de la traduction: Cet article est la version francophone de pacman/Pacnew and Pacsave. Date de la dernière traduction: 2023-02-07. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

Quand pacman supprime un paquet qui a un fichier de configuration, il crée normalement une copie de sauvegarde de ce fichier de configuration et ajoute .pacsave au nom du fichier. De même, lorsque pacman met à jour un paquet qui inclut un nouveau fichier de configuration créé par le mainteneur, différent du fichier actuellement installé, il enregistre un fichier .pacnew avec la nouvelle configuration. pacman fournit une notification lorsque ces fichiers sont écrits.

Pourquoi ces fichiers sont créés

Un fichier .pacnew peut être créé lors d'une mise à jour de paquet (pacman -Syu, pacman -Su ou pacman -U) pour éviter d'écraser un fichier qui existe déjà et qui a été précédemment modifié par l'utilisateur. Lorsque cela se produit, un message comme le suivant apparaîtra dans la sortie de pacman :

warning: /etc/pam.d/usermod installed as /etc/pam.d/usermod.pacnew

Un fichier .pacsave peut être créé lors de la suppression d'un paquet (pacman -R), ou par une mise à jour d'un paquet (le paquet doit d'abord être supprimé). Lorsque la base de données de pacman a un enregistrement indiquant qu'un certain fichier appartenant au paquet doit être sauvegardé, elle crée un fichier .pacsave. Lorsque cela se produit, pacman affiche un message comme le suivant :

warning: /etc/pam.d/usermod saved as /etc/pam.d/usermod.pacsave

Ces fichiers nécessitent une intervention manuelle de l'utilisateur et il est bon de les traiter juste après chaque mise à jour ou suppression de paquet. Si elles ne sont pas gérées, les configurations incorrectes peuvent entraîner un mauvais fonctionnement du logiciel ou l'impossibilité totale de le faire fonctionner.

Fichiers de sauvegarde des paquets

Le fichier PKGBUILD d'un paquet spécifie quels fichiers doivent être préservés ou sauvegardés lorsque le paquet est mis à jour ou supprimé. Par exemple, le PKGBUILD de pulseaudio contient la ligne suivante :

backup=(etc/pulse/{daemon.conf,default.pa,system.pa})

Après l'installation, cette liste peut être interrogée à partir de la base de données pacman en utilisant pacman -Qii package_name.

Pour empêcher un paquet d'écraser un certain fichier, consultez Pacman (Français)#Ignorer la mise à jour d'un fichier.

Types expliqués

.pacnew

Pour chacun des #Fichiers de sauvegarde des paquets mis à jour, pacman effectue une comparaison croisée de trois md5sums générés à partir du contenu du fichier : une somme pour la version installée à l'origine par le paquet, une pour la version actuellement dans le système de fichiers, et une pour la version dans le nouveau paquet. Si la version du fichier actuellement dans le système de fichiers a été modifiée par rapport à la version initialement installée par le paquet, pacman ne peut pas savoir comment fusionner ces changements avec la nouvelle version du fichier. Par conséquent, au lieu d'écraser le fichier modifié lors de la mise à jour, pacman enregistre la nouvelle version avec une extension .pacnew et laisse la version modifiée intacte.

Pour aller plus loin dans le détail, la comparaison de la somme MD5 à 3 voies aboutit à l'un des résultats suivants :

original = X, actuel = X, nouveau = X
Les trois versions du fichier ont un contenu identique, l'écrasement ne pose donc pas de problème. Écraser la version actuelle avec la nouvelle version et ne pas en informer l'utilisateur (bien que le contenu du fichier soit le même, cet écrasement mettra à jour les informations du système de fichiers concernant les heures d'installation, de modification et d'accès au fichier, et s'assurera que tout changement de permission du fichier est appliqué).
original = X, actuel = X, nouveau = Y
Le contenu de la version actuelle est identique à celui de l'original, mais la nouvelle version est différente. Puisque l'utilisateur n'a pas modifié la version courante et que la nouvelle version peut contenir des améliorations ou des corrections de bogues, écrasez la version courante avec la nouvelle version et ne prévenez pas l'utilisateur. C'est la seule fusion automatique des nouvelles modifications que pacman est capable d'effectuer.
original = X, current = Y, new = X
Le paquet original et le nouveau paquet contiennent tous deux exactement la même version du fichier, mais la version actuellement dans le système de fichiers a été modifiée. Laissez la version actuelle en place et jetez la nouvelle version sans en informer l'utilisateur.
original = X, actuel = Y, nouveau = Y
La nouvelle version est identique à la version actuelle. Écraser la version actuelle avec la nouvelle version et ne pas en informer l'utilisateur (bien que le contenu du fichier soit le même, cet écrasement mettra à jour les informations du système de fichiers concernant les heures d'installation, de modification et d'accès du fichier, et s'assurera que tout changement de permission du fichier est appliqué).
original = X, actuel = Y, nouveau = Z
les trois versions sont différentes, laissez donc la version actuelle en place, installez la nouvelle version avec une extension .pacnew et prévenez l'utilisateur de la nouvelle version. L'utilisateur devra fusionner manuellement tous les changements nécessaires de la nouvelle version dans la version actuelle.

Rarement, lorsqu'un paquet mis à jour inclut un fichier de sauvegarde que la version précédente n'avait pas, la situation est correctement gérée comme X/Y/Y ou X/Y/Z, X étant une valeur inexistante.

.pacsave

Si l'utilisateur a modifié l'un des fichiers spécifiés dans backup, ce fichier sera renommé avec une extension .pacsave et restera dans le système de fichiers après la suppression du reste du paquet.

Note: L'utilisation de l'option -n avec pacman -R entraînera la suppression complète de tous les fichiers du paquet spécifié, donc aucun fichier pacsave ne sera créé.

Localiser les fichiers .pac*

Pacman ne gère pas les fichiers .pacnew automatiquement : vous devez les maintenir vous-même. Quelques outils sont présentés dans la section suivante. Pour faire cela manuellement, vous aurez d'abord besoin de les localiser. Lors de la mise à jour ou de la suppression d'un grand nombre de paquets, les fichiers .pac* mis à jour peuvent être manqués. Pour découvrir si des fichiers .pac* ont été installés, utilisez l'une des méthodes suivantes :

  • Pour rechercher dans /etc où sont stockées la plupart des configurations globales :
    $ find /etc -regextype posix-extended -regex ".+\.pac(new|save)" 2> /dev/null
    ou pour effectuer une recherche sur l'ensemble du disque en remplaçant /etc par / dans la commande ci-dessus (auquel cas vous pouvez vouloir sauter sélectivement certains répertoires pour accélérer la recherche).
  • Si elle est installée, locate peut également être utilisée. Réindexez d'abord la base de données :
    # updatedb
    Puis exécutez :
    $ locate --existing --regex "\.pac(new|save)$"
  • Utilisez le journal de pacman pour les trouver :
    $ grep --extended-regexp "\.pac(new|save)" /var/log/pacman.log
    Notez que le journal ne garde pas trace des fichiers actuellement dans le système de fichiers ni de ceux qui ont déjà été supprimés ; la commande ci-dessus listera tous les fichiers .pac* qui ont déjà existé sur votre système. Pour obtenir uniquement les 10 fichiers .pac* les plus récents, envoyez le résultat à tail.

Gestion des fichiers .pac*

Attention: L'installation de paquets va effectuer des changements de fichiers en cas de besoin. Si nécessaire, cela incluera des changements de fichiers appartenant à d'autres paquets. Faites également attention même lorsque vous n'avez pas édité un fichier manuellement et n'écrasez jamais aveuglément un fichier existant par un .pacnew. Fusionnez et utilisez diff manuellement ou auditez les outils automatisés que vous utilisez. Par exemple, consultez FS#77404.

pacdiff

pacman-contrib fournit l'outil simple pacdiff(8) pour gérer les fichiers pac*. Il recherchera tous les fichiers .pacnew et .pacsave et demandera des actions sur eux. Il utilise vimdiff par défaut, mais vous pouvez spécifier un outil différent avec DIFFPROG=your_editor pacdiff. Consultez List of applications/Utilities#Comparison, diff, merge pour d'autres outils de comparaison courants.

Utilitaires tiers

Quelques utilitaires tiers offrant différents niveaux d'automatisation de ces tâches sont disponibles :

  • dotpac — Script interactif de base avec une interface texte basée sur ncurses et un guide pratique. Pas de fonctionnalités de fusion ou de fusion automatique.
https://github.com/AladW/dotpac || dotpacAUR
  • etc-update — Utilitaire de Gentoo, compatible avec d'autres distributions dont Arch. Il fournit une CLI simple pour visualiser, fusionner et modifier interactivement les modifications. Les modifications triviales, comme les commentaires, peuvent être fusionnées automatiquement.
Gentoo:Handbook:Parts/Portage/Tools#etc-update || etc-update
  • p3wm — Fusion à trois voies des fichiers .pacnew. Elle peut fusionner automatiquement les changements triviaux. Si des conflits surviennent, il lancera vimdiff, meld ou kdiff3 pour les résoudre.
https://github.com/5long/p3wm || p3wmAUR
  • pacnews-git — Un script simple visant à trouver tous les fichiers .pacnew, puis à les éditer avec vimdiff.
https://github.com/pbrisbin/scripts/blob/master/pacnews || pacnews-gitAUR
  • pacfiles-mode — Un paquet pour Emacs pour gérer et fusionner les fichiers .pacnew.
https://github.com/UndeadKernel/pacfiles-mode || disponible sur melpa
  • pacdiff-pacman-hook-git — Un hook Pacman pour lancer pacdiff automatiquement.
https://github.com/desbma/pacman-hooks || pacdiff-pacman-hook-gitAUR

Voir aussi