我明白,是否应该执行自动和无人值守的系统升级的问题是极具争议的,但让我们假设我到目前为止从未对这一概念有过任何问题。
设置如下:精简的Debian
基础服务器系统,例如运行Apache
和SSH
服务器,通过非常严格的iptables
规则和硬件进行适当保护firewall
。有一项日常cron
工作要做以下事情:
apt-get update &&
apt-get upgrade -y &&
apt-get dist-upgrade -y &&
apt-get autoremove -y &&
service apache restart &&
service ssh restart
其背后的想法是:如果软件有更新,而该更新是外界唯一的攻击面,则安装并重新启动该软件。(即使 Apache 和 SSH 未升级,也会重新启动,此时服务停机时间不到一秒)。
Apache
现在,我的问题是,当和有更新时SSH
,dpkg
会询问是否应保留原始配置或将其替换为通用默认配置。不幸的是,这是一个基于菜单的提示,无法使用简单的管道来yes
选择正确的答案。有什么想法可以编写脚本吗?
答案1
您可以尝试“-qq -y”,但这是不是受到推崇的。
-q, --quiet 安静。生成适合日志记录的输出,省略进度指示器。q 越多,安静程度就越高,最多为 2。您还可以使用 -q=# 来设置安静级别,覆盖配置文件。请注意,安静级别 2 意味着 -y,您永远不应该在没有无操作修饰符(如 -d、--print-uris 或 -s)的情况下使用 -qq,因为 APT 可能会决定做一些您意想不到的事情。
我想最好先模拟升级,然后再决定是否'安全的'是否强制升级,取决于是否需要强制升级。
模拟:
# apt-get -qq -s upgrade
强制升级:
# apt-get -qq -y upgrade
参考;
答案2
根据Debian 手册您可以通过添加以下行来避免配置文件问题:
DPkg::options { "--force-confdef"; "--force-confold"; }
到您的/etc/apt/apt.conf.d/local
文件(local
之前创建的文件)
或者在命令中包含上述选项apt
:
apt -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" full-upgrade
进一步发展避免配置文件问题
dpkg
处理配置文件更新,但在执行此操作时,会定期中断其工作以请求管理员的输入。这让那些希望以非交互方式运行更新的人感到不快。这就是为什么该程序提供允许系统根据相同逻辑自动响应的选项:--force-confold
保留文件的旧版本;--force-confnew
将使用文件的新版本(即使文件未被管理员更改,也会尊重这些选择,但这很少会产生预期的效果)。添加选项--force-confdef
告诉dpkg
在可能的情况下自行决定(换句话说,当原始配置文件未被触及时),并且仅在其他情况下使用--force-confnew
或。--force-confold