Как я могу автоматизировать dpkg /apt-get?
Вопрос
Я пытаюсь создать скрипт, который автоматически загружает пакеты для новых серверов.Однако некоторые вещи, такие как 'mysql-server', не могут быть установлены автоматически, потому что вам сначала нужно настроить их в интерфейсе ncurses.Я просмотрел справочные страницы и не могу найти ничего подходящего.
Меня не волнует, придется ли мне позже загружать / редактировать файл conf - мне просто нужно установить соответствующие пакеты.
Кто-нибудь знает, что делать, кроме того, чтобы брать тарболы и делать их самому?
Обновить обнаружил, что для таких вещей, как mysql-server, вы можете просто сделать:
DEBIAN_FRONTEND='noninteractive' apt-get install -yq mysql-server
однако expect выглядит как то, что мне понадобится для sun-java6-jdk;я еще не оценил это
Решение
Для пакетов, которые задают вопросы через debconf (именно это выводит на экран ncurses), вы можете предварительно ответить на вопросы.Для sun-java на вопросы можно предварительно ответить, следуя инструкциям на http://www.davidpashley.com/blog/debian/java-license
Другие советы
Ответ от ossramblings.com:
Сначала установите свой пакет обычным способом;затем извлеките ответы на вопросы о конфигурации из файлов данных debconf:
sudo apt-get install debconf-utils
sudo debconf-get-selections | grep mypackage > something.seed
Затем, для других установок, вы можете применить его перед установкой пакета:
sudo debconf-set-selections ./something.seed
Любой пакет 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
, как обычно.
Одноразовый
Поскольку эта команда также считывается из 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
Источники
- Ответ Энтони Таунса & бит-гниющая ссылка
- Человек debconf-набор-выборок(1)
- Дублирующий ответ по ошибке сервера
Я не уверен точно, какая конфигурация нужна mysql-серверу, но вы могли бы попробовать что-то вроде ожидать
Я бы изучил cron-способный.Я сам этого не пробовал, но описание упаковки звучит многообещающе.