如何自动化 dpkg/apt-get?

问题描述 投票:0回答:6

我正在尝试创建一个自动下载新服务器包的脚本。但是,有些东西(例如“mysql-server”)无法自动安装,因为您需要先在 ncurses 界面中配置它们。我浏览了手册页,找不到任何合适的内容。

我不在乎稍后是否需要上传/编辑conf文件——我只需要安装适当的软件包。

除了抓取 tarball 并自己构建之外,有人知道还能做什么吗?

更新 发现对于像 mysql-server 这样的东西你可以这样做:

DEBIAN_FRONTEND='非交互式' apt-get install -yq mysql-server

然而,expect 看起来像是我需要 sun-java6-jdk 的东西;还没评价过

ubuntu debian apt
6个回答
9
投票

来自ossramblings.com的回答:

首先,正常安装你的包;然后,从 debconf 数据文件中提取配置答案:

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

然后,对于其他安装,您可以在安装包之前应用它:

sudo debconf-set-selections ./something.seed

8
投票

任何使用

debconf
获取配置值的 Debian 软件包都可以在无人值守的情况下运行。诀窍是
debconf
将首先搜索给定包具有的任何配置 question 的预安装 answers

预安装配置答案

只需创建以下格式的文件即可,

# 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
,像往常一样。

一次性

由于此命令也从标准输入读取,因此您可以执行以下操作:

$ 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
投票
对于通过 debconf 提出问题的软件包(这是 ncurses 显示的内容),您可以预先回答问题。对于 sun-java,可以按照

http://www.davidpashley.com/blog/debian/java-license 中的说明预先回答问题


0
投票
我不确定 mysql-server 到底需要什么配置,但你可以尝试类似

expect



0
投票
值得一提的是,

debconf-get-selections

似乎无法处理
note
。为了无法确认它们,请从 
apt
dpkg
 开始,然后使用 
DEBIAN_FRONTEND=noninteractive
。例如
sudo DEBIAN_FRONTEND=noninteractive apt install foobar

    

© www.soinside.com 2019 - 2024. All rights reserved.