Как я могу автоматизировать dpkg/apt-get?

Я пытаюсь создать скрипт, который автоматически загружает пакеты для новых серверов. Однако некоторые вещи, такие как «mysql-server», не могут быть установлены автоматически, потому что вам нужно сначала настроить их в интерфейсе ncurses. Я просмотрел справочные страницы и не нашел ничего подходящего.

Меня не волнует, придется ли мне позже загружать/редактировать файл конфигурации - мне просто нужно установить соответствующие пакеты.

Кто-нибудь знает, что делать, кроме как брать архивы и собирать их самостоятельно?

UPDATE обнаружил, что для таких вещей, как mysql-server, вы можете просто сделать:

DEBIAN_FRONTEND='noninteractive' apt-get install -yq mysql-server

однако ожидание похоже на то, что мне понадобится для sun-java6-jdk; еще не оценил


person eyberg    schedule 31.03.2009    source источник
comment
Полезно знать и о создании Dockerfiles!   -  person jpaugh    schedule 12.08.2016


Ответы (5)


Для пакетов, которые задают вопросы через debconf (это то, что выводит на экран ncurses), вы можете предварительно ответить на вопросы. Для sun-java на вопросы можно предварительно ответить, следуя инструкциям на странице https://web.archive.org/web/20120618123342/http://www.davidpashley.com/blog/debian/java-license

person Anthony Towns    schedule 01.04.2009

Ответ с сайта ossramblings.com:

Во-первых, установите свой пакет в обычном режиме; затем извлеките ответы конфигурации из файлов данных debconf:

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

Затем для других установок вы можете применить его перед установкой пакета:

sudo debconf-set-selections ./something.seed
person Kevin    schedule 21.11.2011
comment
Вы мне очень помогли. Спасибо! - person vaxo; 27.12.2014

Любой пакет Debian, который использует debconf для получения значений конфигурации, может быть запущен без участия оператора. Хитрость заключается в том, что 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, как обычно.

Разовый

Поскольку эта команда также считывается со стандартного ввода, вы можете сделать:

$ 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

Источники

person jpaugh    schedule 12.08.2016


Я бы посмотрел на cron-apt. Сам не пробовал, но описание упаковки звучит многообещающе.

person Martin Geisler    schedule 22.05.2009