如何预置 debconf 密码字段?

如何预置 debconf 密码字段?

我之前问过(并回答过)一个关于如何在 Ubuntu 上预置 debconf 的问题:如何从以前安装的软件包中预置 debconf?

我发现只需附加到 config.dat 文件就可以了。然而,附加到passwords.dat 文件不起作用,因为它似乎创建了一个空白(或其他无法使用的密码)。 passwords.dat 预置看起来像这样:

Name: couchdb/adminpass
Template: couchdb/adminpass
Value: 
Owners: couchdb
Flags: seen

Name: couchdb/adminpass_again
Template: couchdb/adminpass_again
Value: 
Owners: couchdb
Flags: seen

我是否在值字段中添加了任何内容并不重要 - 当尝试输入管理员密码时,Couch 无论如何都会崩溃。

如何在 debconf 中预先配置密码信息?

答案1

不确定您是否找到了解决方案,但似乎没有很好或直观的方法来做到这一点。不过,有一些解决方案......

首先,你可以尝试debconf-set-selections手册页(并不是那么有用))来自debconf包裹。这似乎是为了将配置从一台机器镜像到另一台机器。它接受带有逐行命令的文件(大概是用debconf-get-selections > my-conf.debconf)或STDIN输入(大概是从debconf-get-selections另一台机器上通过管道传输的)。您还可以通过启动它sudo debconf-set-selections并传递命令(用于ctrl-d退出),或者您可以通过 echo 管道命令。

输入语法似乎是这样的

[package-name] [package-name]/[question-name] [type] [value]

例如,要将 openssh 服务器配置为在任何人通过 debconf 安装 sshd 时默认拒绝 root 密码,您可以运行

echo "openssh-server openssh-server/permit-root-login boolean false" | sudo debconf-set-selections

或者,您可以使用该debconf-communicate程序,该程序类似于debconf-set-selections,但它允许使用找到的命令进行更具交互性的会话这里。你可以像这样使用它:

$ sudo debconf-communicate
$ GET openssh-server/permit-root-login
$ 0 false
$ SET openssh-server/permit-root-login true
$ 0 value set
$ GET openssh-server/permit-root-login
$ 0 true
$ FSET openssh-server/permit-root-login seen true
$ 0 true
$ FGET openssh-server/permit-root-login seen       
$ 0 true
$ SET openssh-server/permit-root-login false
$ 0 value set

对于某人来说,这似乎是一个成熟的领域,可以编写一个更好的 debconf 前端......

显然,如果您要编写此脚本,那么最好的选择就是路线debconf-set-selections

最后一点,不幸的是,找出软件包可用的选项更加困难。您的选择包括:

  1. 通过 下载包sudo apt-get download [package-name] [dir],通过 解压dpkg-deb -R [filename] [unpacked-dirname],并检查[unpacked-dirname]/DEBIAN/templates文件;或者
  2. 用于sudo debconf-show [package-name]查看已安装软件包的配置问题。 (请注意,包不必以自己的名义注册问题。)

无论如何,希望能有所帮助...

答案2

正如已接受的答案中提到的,debconf-set-selections这是继续下去的方法。

基本上,您需要首先手动安装软件包,然后查看 debconf 数据库以查看创建了哪些条目(我不记得我是如何做到这一点的,抱歉)。

然后您可以创建一个.sh脚本来为您预先播种这些条目。以下代码展示了如何预先播种 CouchDB 2.0 软件包安装程序:

HOST = aaa
USER = bbb
COUCH_PSWD = ccc

debconf-set-selections <<< 'couchdb couchdb/bindaddress string 0.0.0.0';
debconf-set-selections <<< 'couchdb couchdb/cookie string monster';
debconf-set-selections <<< 'couchdb couchdb/mode string clustered';
debconf-set-selections <<< 'couchdb couchdb/nodename string couchdb@#{HOST}';
debconf-set-selections <<< 'couchdb couchdb/adminpass password #{COUCH_PSWD}';
debconf-set-selections <<< 'couchdb couchdb/adminpass_again password #{COUCH_PSWD}';

相关内容