use*_*475 5 command-line dpkg automation software-installation
假设我需要使用安装一个包dpkg -i
,这会提示用户输入一些值,例如用户名和密码。
我可以轻松地从终端完成此操作并继续安装。
但是按照这个计划,我无法自动化安装,例如,如果我想编写一个脚本来安装以交互方式获取参数的包。
因此,我想要一个交互式的 dpkg 安装计划(提示输入用户名和密码),但仍然可以从脚本调用,以便安装过程自动化。
我该怎么办?还有其他选择吗?
小智 4
您可以使用 debconf-utils 包中的工具创建预配置文件。您可以使用以下命令手动创建预配置文件:
<owner> <question> <type> <value>
Run Code Online (Sandbox Code Playgroud)
或者举个例子:
my-package username string Bob
my-package password string I$aN1ceGuy
Run Code Online (Sandbox Code Playgroud)
更简单的方法是将其安装在您的计算机上并运行:
debconf-get-selections | grep my-package
Run Code Online (Sandbox Code Playgroud)
使用输出创建文件。
获得该文件后,请使用:
debconf-set-selections <filename>.
dpkg -i my-package
Run Code Online (Sandbox Code Playgroud)
默认情况下将使用文件名中列出的选择,并且软件包将静默安装。
http://www.debian.org/releases/stable/i386/apbs03.html.en
对于这样的事情,你可以编写一个expect
脚本。处理起来并不是很难。
首先你必须安装解释器:
apt-get install expect
Run Code Online (Sandbox Code Playgroud)
然后你可以写这样的东西,例如:
#!/usr/bin/expect -f
set timeout 30
set password "pass"
set username "user"
#run the command
spawn dpkg -i package.deb
# Look for username prompt
expect "*?sername:*" #<--- this statement is important it wait's for a prompt "username:"
send "$username\r"
# Look for passwod prompt
expect "*?assword:*" #<--- the same with the "password:" prompt
send "$password\r"
#dpkg -i continues
Run Code Online (Sandbox Code Playgroud)
当然,该脚本必须是可执行的。Expect非常适合通过脚本控制交互式终端程序(ssh、ftp...)