jwo*_*der 6 package-management dpkg
我最近的任务是维护和移植到 Trusty 一个内部 .deb 包,该包覆盖(使用--force-overwrite
)来自具有自定义版本的其他包的配置文件,之后apt-get install -f -y
运行以安装一堆列为依赖项的相关包,其中一些他们是这些配置文件的合法所有者(保留你的讽刺评论和对自己的恐惧尖叫)。请注意,此包将配置文件标记为配置文件而不是常规文件。
在尝试清理东西的过程中,我发现如果apt-get
通过-o Dpkg::Options::="--force-confold"
,那么我们自定义包中的配置文件将被依赖项的版本覆盖,而如果-o Dpkg::Options::="--force-confnew"
使用,我们包的文件将保留在最后。
然而,该dpkg
手册页指出:
confnew
: 如果 conffile 已被修改并且包中的版本确实发生了变化,则始终安装新版本而不提示,除非--force-confdef
也指定了,在这种情况下,首选默认操作。
confold
: 如果一个 conffile 已经被修改并且包中的版本确实发生了变化,那么总是保持旧版本而不提示,除非--force-confdef
也指定了,在这种情况下,默认操作是首选的。
因为安装了“新版本”而保留了“旧版本” ,这似乎意味着“新版本”始终是当时正在安装的包中的那个,因此传递-o Dpkg::Options::="--force-confnew"
给apt-get
应该会导致依赖项的配置文件以覆盖我们的软件包之前安装的文件。为什么不是这样?“新版本”的实际含义是否实际上基于时间戳(这只会引发更多问题)?这是文档和/或实现中的错误dpkg
吗?这是否只是一个毛茸茸的边缘案例,由两个包声称拥有相同的配置文件,dpkg
开发人员认为没有人会疯狂到偶然发现?什么?
我相信我已经弄清楚发生了什么:因为dpkg -i
运行时未安装自定义包的依赖项,所以该包已在包系统中注册,并且当时既没有安装它也没有安装它的配置文件。运行时apt-get install -f
,将安装依赖项,然后安装包本身,此时配置文件已安装并且--force-conf*
传递的策略apt-get
生效。因此,当--force-confnew
使用dpkg
.
归档时间: |
|
查看次数: |
8009 次 |
最近记录: |