如何使用 debcondf 和 debconf-set-selections 显示结果?

如何使用 debcondf 和 debconf-set-selections 显示结果?

我通常想知道如何使用 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等,并且对此非常严格。noteselect

在您的问题中,我假设您想要自动化 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

以下是逐步操作的方法:

  1. apt update一如既往。
  2. apt install debconf-utils获得访问权限debconf-get-selections
  3. 由于包foo尚未安装,debconf-get-selections | grep foo因此不会显示您所需的内容。
  4. apt install foo并手动完成该过程。
  5. 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 
    
  6. 复制所需的行并进行修改。可能需要反复试验才能知道哪些是相关的,哪些不是您特定情况下需要的。例如,我需要这两个来跳过所有配置postfix
    postfix postfix/mailname    string  /etc/mailname
    postfix postfix/main_mailer_type    select  No configuration
    
    我通过反复试验得出以下结论:
    • 无效选项会被忽略,且不会产生错误。它非常挑剔。
    • 制表符可以被空格代替。
    • 值放在最后。不要用引号引起来。我在“无配置”两边加上了单引号,这导致它无法工作,直到我删除引号。
  7. 卸载该包及其配置:apt purge foo
  8. 现在使用debconf-set-selections并输入您在步骤 6 中复制的字符串。例如:
    debconf-set-selections <<< "postfix postfix/mailname string $(hostname)"
    debconf-set-selections <<< "postfix postfix/main_mailer_type select No configuration"
    
  9. 用来debconf-get-selections检查您已完成的事情。
  10. apt install -y foo。这次,您不应该看到交互式提示。但是,如果它需要您未使用设置的选项debconf-set-selections,或者它不喜欢您使用设置的选项debconf-set-selections,它仍会提示输入。这就是反复试验的用武之地。从第 5 步开始反复试验,直到您做对为止。
  11. 编写安装脚本。

相关内容