ubuntu更新后弹出交互窗口
使用脚本对ubuntu系统进行更新,已设置让系统以非交互式的模式运行:
export DEBIAN_FRONTEND=noninteractive
ubuntu系统为22.04时,更新后会卡在交互窗口
Package configuration ┌────┤ Daemons using outdated libraries ├─────┐ ││ ││ │ Which services should be restarted?│ ││ │ [] atd.service↑ │ │ [] chrony.service▮ │ │ [] cron.service▒ │ │ [ ] dbus.service▒ │ │ [ ] getty@tty1.service▒ │ │ [ ] ModemManager.service▒ │ │ [] multipathd.service▒ │ │ [ ] networkd-dispatcher.service▒ │ │ [] packagekit.service▒ │ │ [] polkit.service↓ │ ││ ││ ││ ││ └─────────────────────────────────────────────┘
经搜索,发现ubuntu22.04默认安装了needrestart
。
needrestart
是一个在基于Debian和Ubuntu的Linux系统中广泛使用的工具,主要用于在系统更新(如软件包升级)后,识别并提示需要重启的服务和系统。在进行软件包升级时,有些服务使用的库文件可能会被更新,`needrestart会检测这些变化,并找出那些由于库文件更新而需要重启以应用新库的服务。
needrestart
提供交互式界面,允许用户选择是否重启服务。在更新过程中,它会弹出一个对话框,列出需要重启的服务,并让用户决定是自动重启(a
选项)、手动选择重启(i
选项)还是不重启(n
选项)。
解决方法如下:
[ -f /etc/needrestart/needrestart.conf ] && sed -i "s/#\$nrconf{restart} = 'i';/\$nrconf{restart} = 'a';/" /etc/needrestart/needrestart.conf
ubuntu系统为20.04时,近期更新后会卡在交互窗口
Package configuration┌──────────────────────┤ Configuring openssh-server ├──────────────────────┐│ A new version (/tmp/file02Bs1V) of configuration file││ /etc/ssh/sshd_config is available, but the version installed currently ││ has been locally modified.││││ What do you want to do about modified configuration file sshd_config? ││││install the package maintainer's version││keep the local version currently installed ││show the differences between the versions││show a side-by-side difference between the versions││show a 3-way difference between available versions││do a 3-way merge between available versions││start a new shell to examine the situation│││││││││└──────────────────────────────────────────────────────────────────────────┘
经排查,dpkg
在升级软件包时检测到/etc/ssh/sshd_config
被本地修改过,而新版本的配置文件有差异时触发的。这种交互式提示是dpkg
的机制,与sshd
的运行无关。
如果不想更新openssh-server
,解决方法如下:
apt-mark hold openssh-server
apt-mark hold
用于锁定某个软件包的版本,防止它在运行apt-get upgrade
时被自动更新。