停止包升级时删除符号链接的dpkg

我有一个debian软件包,它将文件安装到/usr/local/java/jre/lib/ext ,其中/usr/local/java是实际安装jvm的符号链接,在本例中为/usr/lib/jvm/java-6-sun

这个软件包的新版本在别处安装了jar。 问题是安装新版本会导致dpkg自己尝试整理,最后删除/usr/local/java符号链接。

这是一个非常不受欢迎的状态,即使是暂时的。

我一直无法finddpkg标志,说服它离开符号链接,并且似乎不可能在符号链接上设置不可变的位。

以下是对debian包assembly置的更改:

 diff --git a/debian/dirs b/debian/dirs --- a/debian/dirs +++ b/debian/dirs @@ -1 +1 @@ -usr/local/java/jre/lib/ext +usr/share/java diff --git a/debian/rules b/debian/rules --- a/debian/rules +++ b/debian/rules @@ -30,7 +30,7 @@ install: build # Add here commands to install the package into debian/tmp. # $(MAKE) pure_install - cp thejar.jar $(TMP)/usr/local/java/jre/lib/ext + cp thejar.jar $(TMP)/usr/share/java # Build architecture-independent files here. binary-indep: build install 

我想象一下,在dirs中留下usr/local/java/jre/lib/ext会产生所需的效果,但是这只是简单地解决了这个问题 – 我宁愿这个包不负责维护符号链接。

那么:我有什么select?

符号链接只是包安装的文件,所以正常行为适用。 这些是我能想到的选项:

  • 将符号链接标记为configuration文件。 我不知道这是否被支持,但如果是这样的话,只有在清除了包的情况下才能删除符号链接。
  • 不要将符号链接作为文件安装,而是在postinst脚本中创build。
  • 只需手动创build符号链接,而不是作为包的一部分。

请注意,无论卸载旧版本时符号链接将被删除,所以我不明白这是如何使它更好。

我明白你的问题,因为我在Arch Linux上遇到了与pacman软件包pipe理器类似的问题。

如果您有dpkg> /etc/dpkg/dpkg.cfg.d/excludes ,请尝试使用以下命令填充/etc/dpkg/dpkg.cfg.d/excludes

 path-exclude=/usr/local/java/jre/lib/ext 

来源: 通过使用dpkg |排除无用文件来节省磁盘空间 RaphaëlHertzog 。

对于Arch用户,请在/etc/pacman.conf中使用NoExtract =,并从path中排除前导(root)斜线。 请参阅ArchWiki或man pacman.conf