我通常想知道如何使用 debconf-show 的结果和 debconf 设置选择来通过命令行或 shell 脚本预先配置 deb 包
例如
如果我使用
sudo debconf-get-selections | grep java7 > result;cat result
我得到以下
oracle-java7-installer shared/present-oracle-license-v1-1 note
oracle-java7-installer oracle-java7-installer/local string
oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true
oracle-java7-installer shared/error-oracle-license-v1-1 error
oracle-java7-installer oracle-java7-installer/not_exist error
正确的 debconf 设置选择行应该如何配置安装过程中出现的两个对话框?
一般来说,debconf 设置选择的正确语法是什么?我认为不仅有布尔值,如 true 或 false 以及 yes 或 no
我想还有更多其他的例子,如果 lightdm 和 gdm 通过 bash 脚本安装,如何选择默认桌面管理器。
是否存在一种通用的、经过验证的方法来确定 debconf 包的正确值,并编写适当的 bash 脚本来安装类似 webupt8 java 包的东西并预先选择通常会要求用户输入的值?
答案1
您需要使用预播种。该debconf-set-selections
命令会在安装软件包之前预设 debconf 询问的答案。
例如
sudo debconf-set-selections <<< "shared/accepted-oracle-license-v1-1 boolean true"
然后安装该包。
sudo apt-get install -y oracle-java7-installer
答案2
Debconf 仅接受一组有限的可能类型值,例如boolean
,,,,,string
等,并且对此非常严格。note
select
在您的问题中,我假设您想要自动化 Java 许可证 debconf 值,因此您可以运行如下命令:
echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | sudo debconf-set-selections
如果需要添加字符串值,请运行以下命令:
echo "oracle-java7-installer oracle-java7-installer/local string java" | sudo debconf-set-selections
如果您需要选择值,您可以运行:
echo "oracle-java7-installer oracle-java7-installer/legacy select true" | sudo debconf-set-selections
笔记:运行这些命令后,确保使用类似的命令设置正确的值
sudo debconf-show oracle-java7-installer
,然后当然,在真实的服务器安装上进行测试。
提示:你也
> result;cat result
可以使用| tee result
它,它的工作原理非常相似,但不会等到第一个命令完成后才显示内容
答案3
以下是逐步操作的方法:
apt update
一如既往。apt install debconf-utils
获得访问权限debconf-get-selections
- 由于包
foo
尚未安装,debconf-get-selections | grep foo
因此不会显示您所需的内容。 apt install foo
并手动完成该过程。debconf-get-selections | grep foo
查看您需要的确切字符串。例如:debconf-get-selections | grep postfix
postfix postfix/mailbox_limit string 0 postfix postfix/chattr boolean false postfix postfix/root_address string postfix postfix/bad_recipient_delimiter error postfix postfix/protocols select postfix postfix/recipient_delim string + postfix postfix/mailname string /etc/mailname postfix postfix/main_mailer_type select No configuration postfix postfix/mynetworks string 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 postfix postfix/rfc1035_violation boolean false postfix postfix/not_configured error postfix postfix/relayhost string postfix postfix/main_cf_conversion_warning boolean true postfix postfix/newaliases boolean false postfix postfix/dynamicmaps_conversion_warning boolean postfix postfix/destinations string postfix postfix/compat_conversion_warning boolean true postfix postfix/procmail boolean
- 复制所需的行并进行修改。可能需要反复试验才能知道哪些是相关的,哪些不是您特定情况下需要的。例如,我需要这两个来跳过所有配置
postfix
:
我通过反复试验得出以下结论:postfix postfix/mailname string /etc/mailname postfix postfix/main_mailer_type select No configuration
- 无效选项会被忽略,且不会产生错误。它非常挑剔。
- 制表符可以被空格代替。
- 值放在最后。不要用引号引起来。我在“无配置”两边加上了单引号,这导致它无法工作,直到我删除引号。
- 卸载该包及其配置:
apt purge foo
。 - 现在使用
debconf-set-selections
并输入您在步骤 6 中复制的字符串。例如:debconf-set-selections <<< "postfix postfix/mailname string $(hostname)" debconf-set-selections <<< "postfix postfix/main_mailer_type select No configuration"
- 用来
debconf-get-selections
检查您已完成的事情。 apt install -y foo
。这次,您不应该看到交互式提示。但是,如果它需要您未使用设置的选项debconf-set-selections
,或者它不喜欢您使用设置的选项debconf-set-selections
,它仍会提示输入。这就是反复试验的用武之地。从第 5 步开始反复试验,直到您做对为止。- 编写安装脚本。