如何以非交互方式使用 dpkg 安装 .deb?

How to install .deb with dpkg non-interactively?

我正在尝试安装 .deb 文件...例如: example.deb。 但是该程序已经安装在 Debian 最小服务器上的旧版本中。

这样做 dpkg -i example.deb 就是创建一个对话框,如果我想保留配置... 有什么办法可以做到这一点 none 互动吗?

您可以将 yes 传送到其中:

yes | dpkg -i package.deb

man yes

您似乎在寻找

dpkg --force-confold -i package.deb

指定 dpkg 在发生冲突时应该优先使用现有的旧配置文件。

更广泛地说,正确的解决方案取决于您避免交互式提示的迫切程度,以及您想要避免的提示。

dpkg 有许多选项可以 select 针对各种情况的特定行为。请参阅其 man page; 滚动到有关 --force-things 的部分;其中之一是 --force-confold,或者相反 --force-confnew 总是替换任何现有的配置文件。 (许多现代软件包具有完全自动升级任何未更改配置的功能,但手动更改的配置文件仍需要手动更新或合并。)

如果您不是直接 运行 dpkgapt 和朋友允许您通过

向其传递选项
apt install -o Dpkg::Options::="--force-confold" install package

(是的,有很多冒号。您可能希望 install -y 也避免 Apt 本身的交互式提示。)

将环境变量 DEBIAN_FRONTEND 设置为字符串 noninteractive 将使 Debconf(Debian 的配置管理组件)select 成为所有问题的默认答案,并禁用任何提示。

如果软件包配置问题的默认答案不合适,您可以preseed Debconf 的配置数据库,其中包含您想要的设置。您需要安装包含实用程序 debconf-set-selectionsdebconf-utils。进一步查看 its man page and e.g. some sections of https://wiki.debian.org/DebianInstaller/Preseed(虽然这更侧重于预置安装程序,因此您可以执行所有 Debian 的无人值守安装)。

的问题
yes | dpkg -i package.deb

您无法准确预测将显示哪些提示,具体取决于包和托管系统的配置;您可能会对您不想要的内容说 yes,或者告诉系统您的域名或默认数据库用户是 yes。 Debconf 旨在为您提供非常详细的信息,并且在大多数情况下,对软件包安装进行非常安全和强大的控制 - 使用它的力量。