我正在运行一个小脚本来更新和升级一些 Debian 机器,但几周以来它总是由于终端显示的一些“新闻”而停止。手动升级时,我看到某些软件显示“全屏”(见下面的屏幕截图),强制按“q”。我不想更改任何软件,所以我想找到一个解决方案,允许在升级时跳过每个交互式屏幕。
通常我很好用:
sudo apt-get update -y
sudo apt-get upgrade -y
在我意识到升级过程被中断而没有任何超时后,我也尝试使用这个解决方案邮政:
sudo DEBIAN_FRONTEND=noninteractive apt-get -y upgrade
但不幸的是,结果相同。有没有人有一个解决方案可以在不中断的情况下升级机器?
更新:
首先我刚刚执行:
DEBIAN_FRONTEND=noninteractive
二次编辑 /etc/dpkg/dpkg.cfg 文件为:
# dpkg configuration file
#
# This file can contain default options for dpkg. All command-line
# options are allowed. Values can be specified by putting them after
# the option, separated by whitespace and/or an `=' sign.
#
# Do not enable debsig-verify by default; since the distribution is not using
# embedded signatures, debsig-verify would reject all packages.
no-debsig
# Log status changes and actions to a file.
log /var/log/dpkg.log
force-confold
force-confdef
最后我执行了:
sudo apt-get upgrade -yq
这完成了关于“按 q 退出”的技巧 -伟大的!
我认为它也正在努力组合执行的命令:
DEBIAN_FRONTEND=noninteractive
sudo apt-get -o Dpkg::Options::="--force-confnew --force-confdef" --force-yes -yq upgrade
不幸的是,现在又出现了另一个类似的问题:
也在尝试编辑/etc/apt/listchanges.conf不幸的是没有成功:
[apt]
frontend=none
email_address=root
confirm=0
save_seen=/var/lib/apt/listchanges.db
which=news
解决方案:
我注意到(抱歉,这对于高级 Linux 用户来说是显而易见的)当您通过脚本执行命令时,bash 的行为与直接在控制台中输入命令时不同。
总而言之,我的脚本解决方案添加以下内容就足够了-yp参数并设置DEBIAN_FRONTEND。为了安全起见,我会编辑/etc/dpkg/dpkg.cfg文件也。
#!/bin/bash
DEBIAN_FRONTEND=noninteractive
export DEBIAN_FRONTEND
apt-get -yq update
apt-get -yq upgrade
答案1
你应该设置DEBIAN_FRONTEND=noninteractive
,这将阻止 debconf 提示出现。
之后,将 force-confold
和添加force-confdef
到您的/etc/dpkg/dpkg.cfg
文件中。然后使用该-y
选项
sudo apt-get -y update && sudo apt-get -y upgrade
或使用此命令
apt-get -o Dpkg::Options::="--force-confnew --force-confdef" --force-yes -y upgrade
如果它不起作用尝试
apt-get -o Dpkg::Options::="--force-confnew" --force-yes -y upgrade
答案2
更新信息由 给出apt-listchanges
。如果您不想看到这些详细信息,则可以完全删除该包。否则,您可以使用/etc/apt/listchanges.conf
;配置它就你而言,
frontend=mail
或者
frontend=none
将避免安装被中断。
(apt-listchanges
在这些情况下应该做正确的事情,因此应该可以通过其他方式修复它,以便它仍然以交互模式显示更新详细信息。特别是您可以尝试添加该-q
选项apt-get
。)
请注意,只需运行
DEBIAN_FRONTEND=noninteractive
不会改变任何东西,您需要确保它最终出现在进程的环境中apt-get
:
export DEBIAN_FRONTEND