Debian:防止特定文件在软件包升级期间被覆盖

Mar*_*ter 9 dpkg package-management

我知道一个包有两个组成部分:configdata文件。在软件包升级(即安全升级)期间,data文件可以被覆盖,但config文件应始终保持不变。同时config文件通常/etcdata/usr。然而,有时,这种区别是模糊的。

就我而言,我修改了Icedove(Thunderbird)的图标文件:

/usr/share/applications/icedove.desktop
Run Code Online (Sandbox Code Playgroud)

现在,每次有Icedove(Thunderbird) 更新时,我的更改都会被默认文件覆盖(即使它在更新之间没有更改)。

有什么办法可以防止这个特定的文件被覆盖?

将其设置为不可变chattr +i icedove.desktop的并不是一个好主意,因为它会在包升级期间产生错误。

wur*_*tel 10

你想要这个dpkg-divert实用程序。

dpkg-divert --divert /usr/share/applications/icedove.desktop.packaged --rename /usr/share/applications/icedove.desktop
Run Code Online (Sandbox Code Playgroud)


Tho*_*man 7

虽然wurtel 的回答按措辞回答了这个问题,但考虑到问题的背景,这表明这是XY 问题的另一个案例。

在这种特殊情况下,/usr/share/applications/icedove.desktop不应首先修改,而应将覆盖默认配置的本地配置文件放置在合适的位置。与 freedesktop.org 兼容的系统符合XDG 基本目录规范,其目的正是为了消除修改包升级期间覆盖的配置文件的需要。

如果配置旨在是全系统的,局部icedove.desktop应放置在applications子目录之前的搜索路径/usr/share$XDG_DATA_DIRS。此环境变量的值默认为/usr/local/share/:/usr/share/,但实际值因发行版而异。因为在这种情况下,配置是本地的,正确的位置是/usr/local/share/applications/icedove.desktop,但请记住,它们可能是特定于分布的覆盖,可能优先于usr/local/share.

另一方面,如果配置缩进为用户特定,则本地icedove.desktop应放置applications在由 指示的位置$XDG_DATA_HOME。这通常默认为$HOME/.local/share,即配置文件的位置应该是$HOME/.local/share/applications/icedove.desktop