Инструментарий автоматической установки предлагает очень мощную и гибкую возможность способность запуска команд или сценариев в определённые моменты установки.
# Автоматизация d-i по сути небезопасна. Программа установки не выполняет
# проверок на переполнения буфера или другого использования значений
# такого направления из файла ответов. Используйте файлы ответов только из
# надёжных источников! Для использования дома, и потому что это обычно
# полезно, здесь показано как запускать свои команды оболочки внутри
# программы установки автоматически.
# Эта первая команда, которая выполняется сразу после
# чтения файла ответов.
#d-i preseed/early_command string anna-install какой-то-udeb
# Эта команда выполняется перед окончанием установки, пока ещё
# есть рабочий каталог /target. Вы можете выполнить chroot в /target
# и непосредственно использовать его или же воспользоваться командами
# apt-install и in-target для облегчения задачи установки пакетов и
# запуска команд в целевой системе.
#d-i preseed/late_command string apt-get install zsh; in-target chsh -s /bin/zsh
С помощью автоматической установки можно изменить ответы по умолчанию, но вопросы всё равно будут задаваться. Для этого после задания ответа на вопрос нужно установить флаг seen в false после указания ответа на вопрос.
d-i foo/bar string value
d-i foo/bar seen false
Того же эффекта можно достигнуть для всех вопросов, указав параметр preseed/interactive=true
в приглашении к загрузке. Также это может помочь при отладке или тестировании вашего файла ответов.
Если вы выполняете автоматизацию через параметры загрузки, то можете заставить программу установки задавать соответствующий вопрос с помощью оператора ?=, а именно
. Естественно, это действует только на параметры, которые относятся к отображаемым во время установки вопросам, но никак не на внутренние параметры. foo
/bar
?=value
В файлах ответов поддерживаются ссылки на дополнительные файлы ответов. Любые настройки файлов, загруженных позже, будут перекрывать настройки из файлов, загруженных ранее. Это позволяет поместить, например, общие настройки сети в один файл, а более специфичные для определённых конфигураций в другие файлы.
# Можно указать более одного файла, разделив их пробелами; все будут
# загружены. Включаемые файлы, в свою очередь, тоже могут содержать
# директивы preseed/include. Заметим, что если имена файлов
# относительные, то они берутся
# из того же каталога что и файл ответов, в который они включены.
#d-i preseed/include string x.cfg
# Программу установки можно заставить проверять контрольные суммы файлов
# ответов перед их использованием. В данный момент поддерживается только
# md5sums; в списке md5sums файлы должны указываться в том же порядке,
# что и при включении файлов.
#d-i preseed/include/checksum string 5da499872becccfeda2c4872f9171c3d
# Для большей гибкости можно запустить команду оболочки и если она выдаст
# имена файлов ответов, включить эти файлы.
#d-i preseed/include_command \
# string if [ "`hostname`" = bob ]; then echo bob.cfg; fi
# Наиболее гибкий из всех способ -- загрузить и выполнить программу.
# Программа может использовать команды, например, debconf-set для
# управления базой данных debconf.
# Можно указать более одного файла, разделив их пробелами
# Заметим, что если имена файлов относительные, то они ищутся в том же
# каталоге откуда взят файл ответов, который запускает их.
d-i preseed/run string foo.sh
Также возможно цепочечное выполнение автоматизации из initrd или файла, а затем автоматизацию по сети, если задать preseed/url в файлах исполняемых первыми. Это приведёт выполнению автоматизации по сети, когда сеть станет доступна. Нужно быть осторожным при настройке, так как будут выполняться два разных по сути метода автоматизации, что, например, приведёт к выполнению команды из preseed/early дважды: один раз из первого метода, второй раз после включения сети.