Инструментарий автоматической установки предлагает очень мощную и гибкую возможность — способность запуска команд или сценариев в определённые моменты установки.
Когда целевая файловая система смонтирована, она доступна в /target
. При использовании установочного CD, когда он смонтирован, то доступен в /cdrom
.
# Автоматизация d-i по сути небезопасна. Программа установки не выполняет # проверок на переполнения буфера или другого использования значений # такого направления из файла ответов. Используйте файлы ответов только из # надёжных источников! Для использования дома, и потому что это обычно # полезно, здесь показано как запускать свои команды оболочки внутри # программы установки автоматически. # Эта первая команда, которая выполняется как можно раньше сразу после # чтения файла ответов. #d-i preseed/early_command string anna-install какой-то-udeb # Эта команда выполняется непосредственно перед запуском утилиты разметки. # Это может пригодиться для динамической автоматической настройки утилиты # разметки, зависящей от состояния дисков (которое может быть # непонятно при работе preseed/early_command). #d-i partman/early_command \ # string debconf-set partman-auto/disk "$(list-devices disk | head -n1)" # Эта команда выполняется перед окончанием установки, пока ещё # есть рабочий каталог /target. Вы можете выполнить chroot в /target # и непосредственно использовать его, или же воспользоваться командами # apt-install и in-target для облегчения задачи установки пакетов и # запуска команд в целевой системе. #d-i preseed/late_command string apt-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
в приглашении к загрузке. Также это может помочь при отладке или тестировании вашего файла ответов.
Заметим, что владелец «d-i» должен использоваться только для переменных, используемых в самой программе установки. Для переменных, принадлежащих устанавливаемым в систему пакетам,вы должны использовать имя этого пакета. См. сноску к Раздел B.2.2, «Использование параметров загрузки для автоматизации».
Если вы выполняете автоматизацию через параметры загрузки, то можете заставить программу установки задавать соответствующий вопрос с помощью оператора «?=», а именно
(или foo
/bar
?=value
). Естественно, это действует только на параметры, которые относятся к отображаемым во время установки вопросам, но никак не на «внутренние» параметры. owner
:foo/bar
?=value
Чтобы получить более подробную отладочную информацию, используйте загрузочный параметры DEBCONF_DEBUG=5
. T Он заставит debconf
печатать намного больше подробностей о текущих настройках каждой переменной и о ходе выполнения сценариев установки каждого пакета.
В файлах ответов поддерживаются ссылки на дополнительные файлы ответов. Любые настройки файлов, загруженных позже, будут перекрывать настройки из файлов, загруженных ранее. Это позволяет поместить, например, общие настройки сети в один файл, а более специфичные для определённых конфигураций в другие файлы.
# Можно указать более одного файла, разделив их пробелами; все будут # загружены. Включаемые файлы, в свою очередь, тоже могут содержать # директивы 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 дважды: один раз из первого метода, второй раз после включения сети.