Как выполнить автоматическую установку Debian с помощью preseed
Preseed — это эквивалент Kickstart для семейства дистрибутивов RedHat и «автоустановка» для Ubuntu. Подготовив «предварительный» файл и заполнив его ответами на вопросы, задаваемые установщиком Debian, мы можем выполнять автоматическую и воспроизводимую установку Debian. В этом руководстве мы узнаем, как создать файл предварительной настройки или сгенерировать его из существующей установки, а также как передать его установщику Debian.
В этом уроке вы узнаете:
- Как создать файл предварительной настройки или сгенерировать его из существующей установки Debian
- Как передать файл предварительной настройки установщику Debian
Получение файла предварительной настройки из существующей установки Debian
Начнем с самого простого способа получить действительный файл preseed. Предположим, мы уже выполнили установку Debian, чтобы получить файл preseed, содержащий ответы, которые мы предоставили установщику, мы можем просто использовать утилиту debconf-get-selections
, которая является частью debconf -utils пакет. Чтобы убедиться, что последний установлен, мы можем запустить:
$ sudo apt-get update && sudo apt-get install debconf-utils
После установки утилиты для получения файла preseed мы запускаем следующую команду:
$ sudo debconf-get-selections --installer > preseed.cfg
В приведенном выше примере мы перенаправили вывод команды в файл preseed.cfg; его можно использовать для репликации установки, и он будет повторять выбор, который мы сделали вручную в установщике Debian. По общему признанию, несмотря на свою эффективность, файл может быть довольно многословным. Давайте посмотрим, как создать его с минимальным содержанием.
Создание файла preseed с нуля
Давайте посмотрим, как создать файл предварительной настройки с нуля. По мере приближения мы пройдем основные этапы установки Debian и попытаемся ответить на вопросы с помощью инструкций в файле конфигурации preseed.
Когда мы устанавливаем Debian, выбирая опцию «Графическая установка», первый вопрос, который задает нам установщик: какой язык следует использовать в системе (английский является выбором по умолчанию), наше местоположение, и желаемую раскладку клавиатуры. Внутри нашего файла preseed мы можем дать ответы на эти вопросы с помощью следующих инструкций:
d-i debian-installer/language string en
d-i debian-installer/country string US
d-i keyboard-configuration/xkb-keymap select us
Синтаксис, который мы должны использовать при предоставлении ответов установщику, аналогичен тому, который используется утилитой debconf-set-selections
:
<owner> <question-name> <question-type> <value>
В первом поле мы указываем «владельца» вопроса, того, кто будет отвечать на него. В подавляющем большинстве случаев в файле preseed это будет «d-i», что означает Debian-Installer. Второе поле содержит название вопроса, а третье — тип вопроса. Наконец, четвертое поле содержит значение, то есть ответ на сам вопрос.
Настройка сети
Давайте продолжим дальше. Следующим шагом стандартной установки Debian является настройка сети. Установщик просит нас указать имя хоста и дополнительный домен для нашей системы и, по крайней мере, в «нерасширенном» режиме установки, автоматически настраивает сеть с помощью DHCP-сервера, если таковой доступен в локальной сети. Здесь, в качестве примера, мы будем использовать «linuxconfig» в качестве имени хоста и оставим поле домена пустым. В нашем предварительном файле мы транслируем эти варианты, добавляя следующие инструкции:
d-i netcfg/get_hostname string linuxconfig
d-i netcfg/get_domain string
В определенных ситуациях нам может потребоваться настроить сеть статически, не полагаясь на DHCP-сервер. Инструкции в примере ниже при добавлении в файл предварительной настройки отключают автоконфигурацию сети, явно выбирают сетевой интерфейс («eth0» в данном случае) и назначают ему IP-адрес. Значение сетевой маски вместе с адресами шлюза и серверов имен также назначаются статически. Последняя инструкция необходима для подтверждения этого выбора без запроса:
d-i netcfg/disable_autoconfig boolean true
d-i netcfg/choose_interface select eth0
d-i netcfg/get_ipaddress string 192.168.122.150
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.122.1
d-i netcfg/get_nameservers string 192.168.122.1
d-i netcfg/confirm_static boolean true
Важно отметить, что сетевые инструкции, указанные в предварительном файле, эффективны только в том случае, если сам файл предварительной настройки не получен из сети (например, с веб-сервера). Это типичная проблема курицы и яйца: чтобы получить файл preseed, содержащий инструкции по настройке сети, сама сеть должна быть уже настроена. Мы можем обойти эту проблему, используя DHCP-сервер или, как мы увидим, предоставив инструкции по настройке сети в качестве аргументов загрузки.
Настройка пользователей системы
Следующий этап установки операционной системы заключается в настройке пользователей и паролей. Обычно мы хотим оставить пароль root пустым и предоставить стандартную информацию о пользователе: его «полное имя» («настоящее» имя), имя пользователя и пароль. Это заблокирует учетную запись root и позволит нам выполнять административные задачи с помощью sudo. В preseed файле переводим его, написав:
d-i passwd/root-login boolean false
d-i passwd/user-fullname string egidio
d-i passwd/username string egidio
d-i passwd/user-password-crypted password $6$GjYHPm0qkEd/Ijea$msrqFWfBzuVsVtlTbD.8mbRTq3I5lBegbv1ZtNMse5YyTohQIrMoz.m37lMzVwEm75Klp9bCVU12ySg.7twFj0
Обратите внимание: хотя в установщике мы указываем пароль в открытом виде, в предварительном файле нам необходимо указать его в хешированном формате с использованием алгоритма sha512. Один из самых быстрых способов получения хеша + соли пароля — использование утилиты mkpasswd
:
$ mkpasswd -m sha512crypt
Как только мы запустим приведенную выше команду, утилита предложит нам ввести пароль и выведет хешированную и соленую версию. Мы также могли бы указать пароль непосредственно в качестве аргумента, но это может сделать его видимым в списках процессов, а также сохранить его в истории нашей оболочки. Если мы не предоставим пароль в предварительном файле, установщик запросит его в интерактивном режиме, как и любую другую недостающую информацию.
Указание часового пояса
На следующем шаге установщик предложит нам выбрать часовой пояс системы. Например, чтобы выбрать «восточный» часовой пояс США, мы должны написать:
d-i time/zone string US/Eastern
Разбиение диска на разделы
Разметка диска, вероятно, является наиболее важной частью процесса установки, а также может быть одной из самых сложных для отчета в предварительном файле. Установщик Debian по умолчанию позволяет нам выбрать один из трех управляемых «методов» разбиения на разделы:
- Управляемое – использовать весь диск
- Управляемое — используйте весь диск и настройте LVM.
- Управляемое — используйте весь диск и настройте зашифрованный LVM.
В программе установки есть четвертый вариант «Вручную», который позволяет нам создать более настраиваемую схему разбиения. На этом этапе руководства мы увидим, как перевести предварительно настроенный рецепт «LVM». Позже мы также увидим, как использовать индивидуальный рецепт. Здесь я предполагаю, что мы используем современную прошивку UEFI, а диск, который мы хотим использовать для установки Debian, — /dev/vda
.
Первым делом мы явно сообщаем установщику, что хотим использовать таблицу разделов GPT, и хотим использовать диск vda для установки:
d-i partman-partitioning/choose_label string gpt
d-i partman-auto/disk string /dev/vda
Если на диске уже существуют разделы lvm или RAID, установщик выдаст предупреждение. Чтобы избежать этого, мы можем включить в файл preseed следующие инструкции:
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
Далее мы выбираем метод установки LVM и указываем, что хотим использовать все доступное пространство для группы томов LVM:
d-i partman-auto/method string lvm
d-i partman-auto-lvm/guided_size string max
На этом этапе мы можем выбрать одну из трех доступных схем разбиения: первая устанавливает всю систему в один раздел («атомный» выбор), вторая создает отдельный раздел для /home («home» выбор), а третий создает отдельные разделы (точнее, логические тома) для /home, /var и /tmp («несколько " выбор). Здесь мы выбираем второй вариант:
d-i partman-auto/choose_recipe select home
Наконец, мы сообщаем установщику, что завершили настройку разделов, подтверждаем наш выбор и записываем их на диск:
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
Настройка менеджера пакетов
Установщик позволил нам выбрать, хотим ли мы использовать зеркало репозитория для apt, указать, какое из них использовать, и хотим ли мы/нужно ли нам использовать HTTP-прокси. В этом примере мы явно сообщаем установщику, что хотим использовать зеркало в США (deb.debian.org), и оставляем поле прокси пустым:
d-i apt-setup/use_mirror boolean true
d-i mirror/country string US
d-i mirror/http/mirror select deb.debian.org
d-i mirror/http/proxy string
Чтобы пропустить запрос с вопросом, хотим ли мы просканировать дополнительный установочный носитель, мы используем следующую инструкцию:
d-i apt-setup/cdrom/set-first boolean false
Если мы устанавливаем систему из образа, отличного от сетевой установки, по умолчанию запись «cdrom» сохраняется как источник программного обеспечения в файле /etc/apt/source.list
. Чтобы избежать этого, мы добавляем следующую строку в наш файл preseed:
d-i apt-setup/disable-cdrom-entries boolean true
Мы также можем выбрать, хотим ли мы участвовать в опросе об использовании пакетов. Здесь мы говорим «нет» (во всяком случае, это значение по умолчанию):
popularity-contest popularity-contest/participate boolean false
Выбор пакетов для установки
Установщик Debian использует Tasksel, чтобы мы могли выбрать, какие пакеты следует установить в систему. Доступные варианты (по крайней мере, в Debian Bookworm):
- Среда рабочего стола Debian
- …ГНОМ
- …Xfce
- …Вспышка GNOME
- …KDE Плазма
- …Корица
- …ПРИЯТЕЛЬ
- …LXDE
- …LXQt
- веб-сервер
- SSH-сервер
- Стандартные системные утилиты
- ноутбук
Здесь мы выбираем установку среды рабочего стола GNOME, стандартных системных утилит и метапакетов ssh-сервера:
tasksel tasksel/first multiselect gnome-desktop,standard,ssh
Вместо этого, чтобы установить отдельные пакеты, мы можем использовать параметр pkgsel/include и подтвердить список имен пакетов, разделенных пробелами. Например, для установки vim и git мы напишем:
d-i pkgsel/include string vim git
Завершение установки и перезагрузка
Для завершения установки и перезагрузки добавляем в файл следующие строки:
d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean false
Мы используем первую инструкцию, чтобы пропустить запрос на перезагрузку системы после завершения установки; вместо этого мы используем последнее, чтобы избежать предупреждения об извлечении компакт-диска перед перезагрузкой.
Передача предварительно заданного файла установщику Debian
Чтобы передать файл preseed установщику Debian, у нас есть два варианта. Первый заключается в выборе пункта «Дополнительные параметры» в меню загрузки установщика, а затем выборе «Графическая автоматическая установка» или «Автоматическая установка». Когда мы это сделаем, установщик загрузит необходимые модули, попытается настроить сеть и предложит нам указать URL-адрес предварительно созданного файла:
Другой вариант состоит в изменении существующего пункта меню. Вот пример: предположим, что наш файл preseed доступен по адресу http://192.168.0.35/preseed.cfg; мы могли бы изменить первую запись «Графическая установка», добавив следующую строку в строку «linux», чтобы она стала такой:
linux /install.amd/vmlinuz vga=788 --- quiet auto=true url=http://192.168.0.35/preseed.cfg
Опция auto
(установлена в значение true, просто «auto», по моему опыту, не работает) необходима для запуска установки в автоматическом режиме, когда сеть автоматически настраивается через DHCP перед файлом preseed. извлекается, а вопросы о локали и раскладке клавиатуры откладываются, чтобы они настраивались через файл preseed.
Однако установка не будет полностью автоматизирована, поскольку установщик все равно будет запрашивать имя хоста и дополнительный домен. Только после того, как мы предоставим эту информацию, файл preseed будет получен и использован для ответов на другие вопросы установщика. Для полностью автоматизированной установки при получении файла предварительной настройки из сети мы можем заранее указать имя хоста и имя домена в качестве аргументов загрузки. Например:
linux /install.amd/vmlinuz vga=788 --- quiet auto=true url=http://192.168.0.35/preseed.cfg netcfg/get_hostname=linuxconfig netcfg/get_domain=""
Если мы хотим, мы можем использовать этот метод для статической настройки сети, чтобы DHCP-сервер не требовался:
linux /install.amd/vmlinuz vga=788 --- quiet \
auto=true \
url=http://192.168.0.35/preseed.cfg \
netcfg/get_hostname=linuxconfig \
netcfg/get_domain="" \
netcfg/disable_autoconfig=true \
netcfg/choose_interface=eth0 \
netcfg/get_ipaddress=192.168.122.150 \
netcfg/get_netmask=255.255.255.0 \
netcfg/get_gateway=192.168.122.1 \
netcfg/get_nameservers=192.168.122.1 \
netcfg/confirm_static=true
В качестве альтернативы файлы preseed можно включить в файловую систему Debian ISO или в initramfs. Преимущество этих вариантов заключается в том, что они не требуют рабочей конфигурации сети для получения файла, но они менее удобны, поскольку образ дистрибутива должен перестраиваться каждый раз, когда мы изменяем файл.
Заключительные мысли
В этом руководстве мы узнаем, как выполнять автоматическую (или полуавтоматическую) и реплицируемую установку Debian с использованием файла предварительной настройки. Файлы Preseed содержат ответы на вопросы, задаваемые установщиком Debian, аналогично конфигурациям Kickstart для дистрибутивов, использующих установщик Anaconda, и «автоустановку» в последних версиях Ubuntu. Мы увидели, как получить файл предварительной настройки из уже установленной системы Debian и как создать конфигурацию с нуля. Наконец, мы увидели, как передать файл предварительной настройки установщику Debian.