如何在 Ubuntu 12 中 apt-get 升级期间自动更改配置文件

如何在 Ubuntu 12 中 apt-get 升级期间自动更改配置文件

我喜欢使用“knife cloudstack server create ...”来构建新的虚拟机。我的引导模板以“apt-get update”和“apt-get -y upgrade”开始。

然后升级会暂停:

10.190.113.11 Configuration file `/etc/nscd.conf'
10.190.113.11  ==> Modified (by you or by a script) since installation.
10.190.113.11  ==> Package distributor has shipped an updated version.
10.190.113.11    What would you like to do about it ?  Your options are:
10.190.113.11     Y or I  : install the package maintainer's version
10.190.113.11     N or O  : keep your currently-installed version
10.190.113.11       D     : show the differences between the versions
10.190.113.11       Z     : start a shell to examine the situation
10.190.113.11  The default action is to keep your current version.
10.190.113.11 *** nscd.conf (Y/I/N/O/D/Z) [default=N] ?

因此实际上存在两个问题:

首先,我可以让 apt-get 默认执行某些操作吗?显然没有办法提供答案。

其次,我甚至不知道这个问题的正确答案应该是什么。它替换的配置文件来自一个模板。我还没有查过“nscd”到底是干什么的。(大概“Y”是正确的答案,但提出这个问题时所涉及的研究令人望而生畏。)

答案1

您可以传递参数以避免收到提示。这对我来说很有效;

apt-get update
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

--force-confold(我的选择)将使这些“您想对修改后的配置文件做什么”问题默认为N(保留当前安装的版本)

--force-confold: do not modify the current configuration file, the new version is installed with a .dpkg-dist suffix. With this option alone, even configuration files that you have not modified are left untouched. You need to combine it with --force-confdef to let dpkg overwrite configuration files that you have not modified.
--force-confnew: always install the new version of the configuration file, the current version is kept in a file with the .dpkg-old suffix.
--force-confdef: ask dpkg to decide alone when it can and prompt otherwise. This is the default behavior of dpkg and this option is mainly useful in combination with --force-confold.
--force-confmiss: ask dpkg to install the configuration file if it’s currently missing (for example because you have removed the file by mistake).

警告- 如果保留某些修改后的配置文件且该文件与更新的软件包版本不兼容,则可能会破坏您的系统。请测试一下在部署自动化解决方案之前。

答案2

如果您确实不想回答任何交互式问题,那么请将DEBIAN_FRONTEND前端变量设置为noninteractive

这可以像一样简单DEBIAN_FRONTEND=noninteractive apt-get upgrade

您不会收到任何消息,系统将选择默认值。在大多数情况下,这意味着您的配置文件不会被更改,并且*.dpkg-new配置文件未更改的所有位置将保留名为的文件。然后,您可以手动解决更改,或者使用配置管理系统或其他任何系统将本地配置推送到系统。

其次,我甚至不知道这个问题的正确答案应该是什么

击中键将显示差异,然后您可以检查。如果您确定从未手动更改过该文件,请选择更换它可能是安全的(你已经验证了你的备份升级正确的!!)选择只保留旧文件,95% 的时间也是安全的,除非软件包有重大更改,这些更改通常在您在运行 upgrade/dist-upgrade 命令之前已经阅读过的变更日志/发行说明中涵盖。

除此之外,只需先在测试环境中尝试该命令即可。看看是否不起作用。如果您真的不确定,请获取 diff,并阅读软件包的文档并进行研究。

相关内容