我的服务器运行 Java 应用程序,需要我用自己下载的 Java 库文件替换一些 Java 库文件。这与 JCE 安全扩展有关,与我的问题无关。
我发现当 apt 稍后更新我的 java 包时,这些库文件往往会被 apt 覆盖。
是否有一种适合 apt 的方法来屏蔽这些特定文件,以便 apt 不会触碰它们?
潜在解决方案
我正在考虑从文件中删除写入标志,但我预计当它稍后尝试覆盖它们时,这会导致 apt 将其内容喷得到处都是?
也许有一个我不知道的 java 自定义库目录,我可以将我的文件停放在那里,然后它们将被加载而不是包的默认值?
我正在考虑的最后一个选择是编写一个 cron 作业,定期用我的版本替换文件。我讨厌这个选择。
答案1
有一种优雅的方式,dpkg-divert
命令 (覆盖包中的文件版本,参见此答案)。
dpkg-divert --divert /full_path/file_to_preserve.packaged --rename /full_path/file_to_preserve
请考虑将给定包的不同版本的文件放在一起可能会有风险......
答案2
谢谢巴勃罗·比安奇,我解决了用软件包覆盖 ath10k QCA6174 固件的问题linux-firmware
(新固件不支持休眠)。但是建议的命令不起作用,因为sudo apt upgrade
会抛出错误:dpkg-divert: error: rename involves overwriting '...' with different file '...', not allowed
并退出。但在我修改此命令后,一切正常:
dpkg-divert --no-rename --add /lib/firmware/ath10k/QCA6174/hw2.1/board.bin
dpkg-divert --no-rename --add /lib/firmware/ath10k/QCA6174/hw2.1/firmware-5.bin
现在linux-firmware
已经正常更新,新的固件文件写入同一目录,但带有后缀.distrib
,例如firmware-5.bin.distrib
。