Debian:防止特定文件在软件包升级过程中被覆盖

Debian:防止特定文件在软件包升级过程中被覆盖

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

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

/usr/share/applications/icedove.desktop

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

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

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

答案1

你想要dpkg-divert实用程序。

dpkg-divert --divert /usr/share/applications/icedove.desktop.packaged --rename /usr/share/applications/icedove.desktop

答案2

尽管乌特尔的回答回答问题的措辞,考虑到问题的背景表明,这是另一个案例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

相关内容