Дуже потужною і гнучкою опцією, яку пропонують інструменти попередньої конфігурації, є можливість запуску команд або скриптів у певні моменти інсталяції.
Коли файлову систему цільової системи змонтовано, вона стає доступною у /target
. Якщо використовується інсталяційний CD/DVD, після монтування він буде доступний у /cdrom
.
# d-i попередньої обробки за своєю суттю не є безпечним. Ніщо у програмі встановлення не перевіряє # на спроби переповнення буфера або інших зловживань значеннями # файлу попередньої конфігурації, подібного до цього. Використовуйте файли попередньої конфігурації тільки з # перевірених місць! Щоб довести це до домашнього використання, і тому що це взагалі корисно, # ось спосіб запустити будь-яку потрібну вам команду у командному рядку інсталятора, # автоматично. # Ця перша команда виконується якомога раніше, одразу після того, як # зчитано попередньо. #d-i preseed/early_command string anna-install some-udeb # Ця команда виконується безпосередньо перед запуском утиліти. Може бути # корисно застосувати динамічну попередню установку розділів, яка залежить від стану # дисків (який може бути невидимим під час виконання команди preseed/early_command). #d-i partman/early_command \ # string debconf-set partman-auto/disk "$(list-devices disk | head -n1)" # Ця команда виконується безпосередньо перед завершенням встановлення, але за наявності # ще є придатний для використання каталог /target. Ви можете вкорінитись у /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
Такого ж ефекту можна досягти для запитань all, задавши параметр preseed/interactive=true
у запрошенні до завантаження. Це також може бути корисно для тестування або налагодження вашого файлу попередньої конфігурації.
Зауважте, що власник «d-i» слід використовувати лише для змінних, які використовуються у самій програмі встановлення. Для змінних, що належать до пакунків, встановлених у цільовій системі, слід використовувати назву цього пакунка. Дивіться виноску до Розділ B.2.2, «Використання параметрів завантаження для попереднього вибору питань».
Якщо ви виконуєте попереднє встановлення за допомогою параметрів завантаження, ви можете змусити програму встановлення поставити відповідне запитання за допомогою оператора «?=», наприклад
(або foo
/bar
?=value
). Звичайно, це матиме ефект лише для параметрів, які відповідають питанням, що фактично відображаються під час інсталяції, а не для «внутрішніх» параметрів. owner
:foo/bar
?=value
Для отримання додаткової інформації про налагодження, використовуйте параметр завантаження DEBCONF_DEBUG=5
. Це призведе до того, що debconf
надрукує значно детальнішу інформацію про поточні налаштування кожної змінної та про хід виконання сценаріїв встановлення кожного пакунка.
Можна включити інші файли попередньої конфігурації з файлу попередньої конфігурації. Будь-які налаштування в цих файлах замінять попередні налаштування з файлів, завантажених раніше. Це дозволяє, наприклад, зберігати загальні мережеві налаштування для вашого розташування в одному файлі, а більш специфічні налаштування для певних конфігурацій - в інших файлах.
# Можна перерахувати декілька файлів, розділених пробілами; всі вони будуть мати вигляд # завантажено. Включені файли можуть мати власні директиви # preseed/include. Зауважте, що якщо назви файлів є відносними, вони беруться з # того ж каталогу, що і файл попередньої конфігурації, який їх містить. #d-i preseed/include string x.cfg # Програма встановлення може за бажанням перевіряти контрольні суми файлів попередньої конфігурації # перед їх використанням. Наразі підтримуються лише md5-суми, перелічіть md5-суми # у тому ж порядку, що і список файлів для включення. #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, а другий - після того, як з'явиться мережа.