如何自动化dpkg/apt-get?

10
我正在尝试创建一个脚本,自动下载新服务器的软件包。但是,一些东西(例如'mysql-server')不能自动安装,因为您需要先在ncurses界面中配置它们。我查阅了手册页,但没有找到合适的内容。
我不介意稍后上传/编辑conf文件——我只需要安装适当的软件包。
除了获取tarballs并自行构建它们之外,还有什么办法吗?
更新 发现对于像mysql-server这样的东西,您可以只需执行:
DEBIAN_FRONTEND='noninteractive' apt-get install -yq mysql-server 然而,expect看起来像是我需要sun-java6-jdk的东西;我还没有评估它。

对于编写Dockerfiles也很有用! - jpaugh
5个回答

9

来自ossramblings.com的答案:

首先,按照常规方式安装您的软件包;之后,从debconf数据文件中提取配置答案:

sudo apt-get install debconf-utils
sudo debconf-get-selections | grep mypackage > something.seed

然后,对于其他安装,您可以在安装软件包之前应用它:
sudo debconf-set-selections ./something.seed

你帮了我很多,谢谢! - Vakho

7
任何使用debconf获取配置值的Debian软件包都可以无人值守运行。诀窍在于debconf将首先搜索给定软件包的任何配置问题的预安装答案

预安装配置答案

只需按以下格式创建一个文件,

# Use one line for each question
package-name question-name question-type answer
package-name question-name question-type really long \
answer here
package-name question-name question-type answer
...

将其输入系统,如下所示:
$ debconf-set-selections my-selections-file

现在,您可以像往常一样使用apt-get install进行安装。

一次性

由于此命令还从stdin读取,因此您可以执行以下操作:
$ echo "man-db man-db/auto-update boolean true" | debconf-set-selections

查找默认答案

如何知道哪些软件包使用这些配置答案?如果您已经以交互方式安装了相关软件包,您可以查询本地系统以查看当前配置的值。 debconf-get-selections 将打印出当前系统所有配置答案的列表。例如:

$ debconf-get-selections | grep '^man'

在我的系统上返回以下内容:
man-db  man-db/install-setuid   boolean false
man-db  man-db/auto-update      boolean true

您可能需要安装debconf-utils软件包才能使此命令可用。

示例

# Preset values to questions which would otherwise be asked while
# installing packages.
# Use debconf-set-selections to install
openssh-server  openssh-server/permit-root-login        boolean false
man-db  man-db/install-setuid   boolean false
man-db  man-db/auto-update      boolean true

来源


6

0

我会研究一下cron-apt。虽然我自己没有尝试过,但它的软件包描述听起来很有前途。


0

我不确定mysql-server需要什么配置,但你可以尝试使用expect这样的工具。


谢谢您的建议——我记得几年前遇到过它,但完全忽略了——看起来它在这里很受欢迎。 - eyberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接