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


9

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

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

/usr/share/applications/icedove.desktop

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

有什么方法可以防止该特定文件被覆盖?

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


2
@don_crissti从技术上讲,正确的位置是$XDG_DATA_HOME/applications/icedove.desktop,尽管该位置通常默认为您提到的搜索路径。所述XDG基本目录规范还提供了在搜索路径$XDG_DATA_DIRS为系统宽覆盖。我的回答是有关XDG基本目录在这种情况下如何应用的更详细的解释。
Thomas Nyman 2014年

Answers:


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


10

您需要dpkg-divert实用程序。

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

1
这可能会对其他人有所帮助:“请勿尝试转移对系统操作至关重要的文件-使用dpkg-divert时,在转移之后但在dpkg安装新版本之前,有一段时间不存在。“来自debian.org/doc/debian-policy/ap-pkg-diversions.html
2rs2ts '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.