使用apt-get在ubuntu上自动执行proftpd-basic install

我试图build立一个shell脚本来自动安装几个软件包到Ubuntu 10.04服务器上,而且我遇到了proftpd-basic的问题。

我正在使用命令行

apt-get -qy install proftpd-basic >/tmp/install.log 

对于大多数软件包,这种方法可以正常工作,但是proftpd-basic似乎需要一些交互(它询问是否执行inetd或独立安装)。

是否有可能以某种方式在命令行上预先select此选项,因为我不希望用户被这个问题困扰? – 有关信息,如果重要,我想select“独立”选项。

编辑:

该过程的交互部分不仅仅需要简单的y / n答案,它需要我使用箭头键导航到我想要的选项,要求我按Enter键进行select。 这可能对解决这个问题有一定的影响。

你可以“预先”答案,这样debconf就会发现你已经回答了这个问题,而且不用再问它了。

您需要使用debconf-utils包中的一些工具:

 sudo apt-get install debconf-utils 

安装程序并手动回答一次问题。 然后,你可以问debconf在它的数据库中存储了什么:

 debconf-get-selections | grep proftpd-basic 

该信息可以input到debconf-set-selections (通过pipe道或从文件中读取)。

华纳的答案是更多的跨平台(debconf是一个Debian和衍生技术),但并不总是在版本之间工作,如果问题改变; 或者如果您有一些debconf问题,只有在您安装了其他软件包时才会被询问。

有这样的事情有各种不同的解决scheme。 我更喜欢shell脚本,其他人可能更喜欢其他方法。

为了与需要input的东西进行交互,并且没有标志来指定答案,可以redirectinput。 在使用这种方法之前,我会先阅读apt-get的联机帮助页面 ,因为它可能对您正在指定的内容有本地支持。 例如:

 apt-get -qy install proftpd-basic <<** RESPONSES GO HERE ** 

你也可以使用像预期的东西。 有些客户端并不总是处理inputredirect,无需额外的努力。

对于日志logging,可以在运行主脚本时使用tee和redirectSTDERR和STDOUT。 例:

 bash -x script.sh 2>&1 | tee script.log 

我经常喜欢用set -x运行bash。 对于构build脚本,我更喜欢冗长的输出。