Debian: empêcher un fichier particulier d'être écrasé pendant la mise à niveau du paquet

9

Je comprends qu'un package a deux composants: configet des datafichiers. Pendant la mise à niveau du package (c'est-à-dire la mise à niveau de sécurité), les datafichiers peuvent être remplacés, mais les configfichiers doivent toujours rester les mêmes. De plus, les configfichiers sont généralement entrés /etcet datasortis /usr. Parfois, cependant, la distinction est floue.

Dans mon cas, j'ai modifié le fichier icône pour Icedove(Thunderbird):

/usr/share/applications/icedove.desktop

Maintenant, chaque fois qu'il y a une Icedovemise à jour (Thunderbird), mes modifications sont remplacées par le fichier par défaut (même s'il n'a pas changé entre les mises à jour).

Existe-t-il un moyen d'empêcher ce fichier particulier d'être écrasé?

Le paramétrer sur immuable avec chattr +i icedove.desktopn'est pas une bonne idée, car cela produit une erreur lors de la mise à niveau du package.

Martin Vegter
la source
2
@don_crissti Techniquement, l'emplacement correct est $XDG_DATA_HOME/applications/icedove.desktop, bien que ce soit par défaut le chemin de recherche que vous mentionnez. La spécification de répertoire de base XDG fournit également un chemin de recherche $XDG_DATA_DIRSpour les remplacements à l'échelle du système. Une explication plus détaillée de la façon dont les répertoires de base XDG s'appliquent dans ce cas se trouve dans ma réponse .
Thomas Nyman

Réponses:

7

Bien que la réponse de Wurtel réponde à la question telle qu'elle est formulée, le contexte de la question révèle qu'il s'agit d'un autre cas de problème XY .

Dans ce cas particulier, /usr/share/applications/icedove.desktopne doit pas être modifié en premier lieu, mais un fichier de configuration local qui remplace la configuration par défaut doit être placé dans un emplacement approprié. Les systèmes conformes à freedesktop.org sont conformes à la spécification de répertoire de base XDG , dont le but est précisément d'éliminer la nécessité de modifier les fichiers de configuration qui sont écrasés lors des mises à niveau des packages.

Si la configuration est destinée à l'ensemble du système, le local icedove.desktopdoit être placé dans le applicationssous - répertoire pour un chemin de recherche précédant /usr/sharedans $XDG_DATA_DIRS. La valeur par défaut de cette variable d'environnement est /usr/local/share/:/usr/share/, mais la valeur réelle varie entre les distributions. Parce que dans ce cas, la configuration est destinée à être locale, l'emplacement correct est /usr/local/share/applications/icedove.desktop, bien que gardez à l'esprit qu'il peut y avoir des remplacements spécifiques à la distribution en place qui pourraient avoir la préférence sur les configurations sous usr/local/share.

D'un autre côté, si la configuration est en retrait pour être spécifique à l'utilisateur, le local icedove.desktopdoit être placé sous applicationsà l'emplacement indiqué par $XDG_DATA_HOME. Il s'agit généralement $HOME/.local/share, par exemple, de l'emplacement du fichier de configuration $HOME/.local/share/applications/icedove.desktop.

Thomas Nyman
la source
10

Vous voulez l' dpkg-divertutilitaire.

dpkg-divert --divert /usr/share/applications/icedove.desktop.packaged --rename /usr/share/applications/icedove.desktop
Wurtel
la source
1
Cela pourrait aider les autres: "N'essayez pas de détourner un fichier qui est d'une importance vitale pour le fonctionnement du système - lorsque vous utilisez dpkg-divert, il y a un temps, après qu'il a été détourné mais avant que dpkg n'installe la nouvelle version, lorsque le fichier n'existe pas. "de debian.org/doc/debian-policy/ap-pkg-diversions.html
2rs2ts