如何在Ubuntu 12中的apt-get升级过程中自动执行更改的配置文件


13

我喜欢使用“ knife cloudstack server create ...”来构建新的VM。我的引导程序模板以“ apt-get更新”和“ apt-get -y升级”开始。

然后,升级将因以下原因而停止:

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”是正确的答案,但提出问题时涉及的研究令人生畏。)

Answers:


15

您可以传递参数以避免得到提示。这对我有用;

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).

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


5

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

这可以很容易DEBIAN_FRONTEND=noninteractive apt-get upgrade

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

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

击中d键就会显示差异,然后你就可以检查。如果确定您从未手动更改过该文件,则选择Y替换它可能是安全的(您已经验证了升级RIGHT !!的备份)。选择N只是保留了95%的时间也是安全的旧文件,除非软件包进行了重大更改,通常您在运行upgrade / dist-upgrade命令之前也已阅读了changelog / release注释中对此进行了介绍。

除此之外,只需在测试环境中首先尝试该命令。看看是否有问题。如果您真的不确定要获取差异,请阅读该软件包和研究的文档。


您建议DEBIAN_FRONTEND =通过--force-yes非交互吗?听起来好像默认为NO,在这种情况下,“ yes”更有可能是正确的。(因为没有标准输入,所以我无法按下任何键。)
Mojo 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.