我正在通过以下方式进行无人值守/非交互式软件包安装
DEBIAN_FRONTEND=noninteractive apt-get install -y my_package
这在大多数情况下都可以正常工作,但如果存在配置文件冲突,仍然会给我一个交互式提示,例如:
Configuration file '/etc/foo'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
我知道我可以通过将合适的dpkg
选项传递给apt-get
via-o
来选择这个问题的答案,例如
DEBIAN_FRONTEND=noninteractive apt-get -o DPkg::Options::=--force-confdef install -y my_package
但是,提供的相应选项dpkg
似乎不包括在发生冲突时中止安装的方法,而这正是我所需要的。
apt-get
如果遇到配置冲突,如何以非交互方式安装软件包并失败?
我也可以接受以下内容:
- 调用前非交互检查
apt-get
是否会发生冲突 - 将配置文件的版本保留在磁盘上(如
--confold
),但随后以非零退出代码退出或使用其他方法来检测此情况。
我没有在您的场景中检查过这一点,但
dpkg
如果它需要询问信息并且无法从其标准输入中读取,则应该中止;所以如果存在配置文件冲突,应该中止并出现错误。
如果这不起作用,您可以随时查找冲突中的剩余内容:根据您的
--conf
选择,dpkg
要么保留带有后缀的旧版本.dpkg-old
,要么保留带有后缀的新版本.dpkg-new
。因此,您可以在尝试安装后查找新.dpkg-*
文件/etc
以确定是否存在任何冲突。