Product SiteDocumentation Site

12.3. Автоматизированная установка

Администраторам Falcot Corp, как и многим администраторам больших IT-инфраструктур, необходимы инструменты для быстрой установки (или переустановки), причём по возможности автоматической, на новых машинах.
Эти потребности можно удовлетворить с помощью широкого диапазона решений. С одной стороны, универсальные инструменты вроде SystemImager делают это, создавая образ, основанный на шаблонной машине, после чего развёртывают этот образ на целевых системах; с другой стороны, стандартный установщик Debian может быть преднастроен с помощью конфигурационного файла, содержащего ответы на задаваемые в процессе установки вопросы. Промежуточным вариантом являются такие гибридные инструменты как FAI (Fully Automatic Installer), которые производят установку с помощью пакетной системы, но также используют свою собственную инфраструктуру для задач, специфичных для массового развёртывания (таких как запуск, разметка, конфигурирование и т. п.).
У каждого из этих решений есть свои преимущества и недостатки: SystemImager работает независимо от какой бы то ни было системы управления пакетами, что позволяет управлять большими наборами машин с несколькими различными дистрибутивами Linux. Он также включает систему обновления, не требующую переустановки, но эта система обновлений подходит только для тех случаев, когда на отдельных машинах не вносится независимых изменений; другими словами, пользователь не должен самостоятельно обновлять никакое программное обеспечение или устанавливать новое. Аналогично, обновления безопасности не должны быть автоматизированы, потому что им следует проити через централизованный эталонный образ, поддерживаемый SystemImager. Кроме того, парк машин должен быть гомогенным, иначе придётся хранить и поддерживать много разных образов (образ i386 не подойдёт для powerpc-машины и т. п.).
С другой стороны, автоматизированная установка с помощью debian-installer может приспособиться к специфике каждой машины: установщик выберет подходящее ядро и пакеты программного обеспечения из соответствующих репозиториев, определит доступное оборудование, разметит весь жёсткий диск, чтобы максимально использовать доступное пространство, установит систему Debian и настроит загрузчик. Однако стандартный установщик будет устанавливать только стандартные версии Debian с базовой системой и набором предварительно выбранных «задач»; это не позволяет установить специфическую систему с приложениями не из пакетов. Для удовлетворения такой специфической потребности требуется модификация установщика… К счастью, установщик имеет модульную архитектуру, и существуют инструменты для автоматизации большей части работы, необходимой для такой модификации, в первую очередь simple-CDD (CDD — это аббревиатура от Custom Debian Derivative). Однако даже решение с simple-CDD решает только вопрос установки; обычно это не проблема, поскольку инструменты APT справляются с эффективным развёртыванием обновлений в дальнейшем.
Мы предоставим только краткий обзор FAI и совсем пропустим SystemImager (который больше не входит в состав Debian), чтобы более внимательно сосредоточиться на debian-installer и simple-CDD, которые более интересны в контексте Debian.

12.3.1. Fully Automatic Installer (FAI)

Fully Automatic Installer — это, возможно, самая старая система автоматизированного развёртывания Debian, чем объясняется её статус эталонной; но её очень гибкая натура едва компенсирует привносимую ей сложность.
FAI требуется серверная система для хранения информации для развёртывания и обеспечения загрузки целевых машин по сети. Для этого сервера нужен пакет fai-server (или fai-quickstart, в который также входят необходимые элементы для стандартной конфигурации).
В FAI используется специфический подход к определению разных профилей установки. FAI не просто дублирует эталонную установку, он является полноценным установщиком, полностью настраиваемым через набор файлов и сценариев, хранящихся на сервере; расположение их по умолчанию /srv/fai/config/ не создаётся автоматически, так что администратору нужно создать его вместе с соответствующими файлами. В большинстве случаев эти файлы будут модифицированными файлами примеров, взятых из документации пакета fai-doc, а точнее из каталога /usr/share/doc/fai-doc/examples/simple/.
Когда профили определены, с помощью команды fai-setup генерируются элементы, необходимые для запуска FAI-установки; под этим подразумевается главным образом подготовка или обновление минимальной системы (NFS-root), используемой в процессе установки. Альтернативой является генерация специального загрузочного CD с помощью fai-cd.
Для создания всех этих конфигурационных файлов нужно иметь представление о том, как работает FAI. Типичный процесс установки включает следующие шаги:
  • получение ядра по сети и загрузка его;
  • монтирование корневой файловой системы по NFS;
  • запуск /usr/sbin/fai, который контролирует оставшуюся часть процесса (последующие шаги, таким образом, запускаются этим сценарием);
  • копирование конфигурации с сервера в /fai/;
  • запуск fai-class. Сценарии /fai/class/[0-9][0-9]* последовательно выполняются и возвращают имена «классов», которые применяются к устанавливаемой машине; эта информация послужит основой для дальнейших шагов. Это придаёт некоторую гибкость в определении сервисов, которые следует установить и настроить.
  • получение набора переменных конфигурации, в зависимости от соответствующих классов;
  • разметка дисков и форматирование разделов на основании информации, предоставленной классом /fai/disk_config/class;
  • монтирование указанных раделов;
  • установка базовой системы;
  • предварительная подготовка базы данных Debconf с помощью fai-debconf;
  • получение списка доступных пакетов для APT;
  • установка пакетов, перечисленных в /fai/package_config/class;
  • выполнение постконфигурационных сценариев, /fai/scripts/class/[0-9][0-9]*;
  • запись журналов установки, отмонтирование разделов и перезагрузка.

12.3.2. Пресидинг Debian-Installer

В конце концов, если рассуждать логически, лучшим инструментом для установки Debian должен быть официальный установщик Debian. По этой причине debian-installer с самого начала разрабатывался для автоматизированной установки, используя возможности, предоставляемые debconf. Последняя позволяет, с одной стороны, уменьшить число задаваемых вопросов (для скрытых вопросов будет использоваться ответ, заданный по умолчанию), а с другой стороны, устанавливать ответы по умолчанию отдельно, так что установка может быть неинтерактивной. Последняя возможность известна как пресидинг ("preseeding").

12.3.2.1. Использование preseed-файла

Есть несколько мест, откуда установщик может получить файл пресидинга:
  • в initrd, используемом для запуска машины; в этом случае пресидинг происходит на самом раннем этапе установки, и можно избежать каких бы то ни было вопросов. Нужно лишь назвать файл preseed.cfg и сохранить его в корне initrd.
  • на загрузочном носителе (CD или USB-брелоке); пресидинг в таком случае происходит, как только носитель смонтирован, то есть сразу после вопросов о языке и раскладке клавиатуры. Для указания расположения файла пресидинга можно использовать параметр загрузки preseed/file (например, /cdrom/preseed.cfg при установке с CD-ROM, или /hd-media/preseed.cfg в случае USB-брелока).
  • из сети; в таком случае пресидинг происходит после (автоматическиой) настройки сети; соответствующий загрузочный параметр в таком случае — preseed/url=http://server/preseed.cfg.
На первый взгляд, включение файла пресидинга в initrd выглядит наиболее интересным решением; однако оно редко используется на практике, потому что генерация initrd установщика довольно сложна. Другие два решения гораздо более общеприняты, тем более сто параметры загрузки предоставляют другой путь пресидинг ответов на первые вопросы процесса установки. Обычный путь избежания возни с вписыванием параметров загрузки вручную при каждой установки — сохранить их в конфигурации isolinux (в случае CD-ROM) или syslinux (USB-брелок).

12.3.2.2. Создание preseed-файла

Preseed-файл — это простой текстовый файл, в котором каждая строка содержит ответ на один вопрос Debconf. Строка разбита на четыре поля, разделённых между собой пробельными символами (пробелами или символами табуляции), например d-i mirror/suite string stable:
  • первое поле — это «владелец» вопроса; «d-i» используется для вопросов, относящихся к установщику, но это также может быть имя пакета для вопросов, относящихся к пакетам Debian;
  • второе поле — это идентификатор вопроса;
  • третье — тип вопроса;
  • четвёртое и последнее поле содержит значение ответа. Заметьте, что оно должно быть отделено от третьего поля одним пробелом; если пробелов больше одного, последующие пробелы будут считаться частью значения.
Простейший путь написать preseed-файл — установить систему вручную. После этого debconf-get-selections --installer предоставит ответы, относящиеся к установщику. Ответы о других пакетах могут быть получены с помощью debconf-get-selections. Однако более правильным решением будет написать preseed-файл вручную, руководствуясь примером и справочной документацией: при таком подходе пресидингу подвергнутся только вопросы, для которых следует изменить значение ответа по умолчанию; используя параметр загрузки priority=critical, можно указать Debconf, что следует задавать только критические вопросы, и использовать ответ по умолчанию для остальных.

12.3.2.3. Создание модифицированного загрузочного носителя

Знать, где разместить preseed-файл, конечно, уже хорошо, но одного этого знания недостаточно: нужно, так или иначе, внести изменения в загрузочные параметры носителя, с которого осуществляется установка, и добавить preseed-файл.
12.3.2.3.1. Сетевая загрузка
Когда компьютер загружается по сети, сервер, отправляющий элементы для инициализации, также определяет параметры загрузки. Таким образом, изменения надо вносить в конфигурацию PXE на сервере загрузки; точнее, в его конфигурационный файл /tftpboot/pxelinux.cfg/default. Предварительно нужно настроить сетевую загрузку; подробности смотрите в инструкции по установке.
12.3.2.3.2. Подготовка загрузочного USB-брелока
Когда загрузочный брелок подготовлен (см. Раздел 4.1.2, «Загрузка с USB-брелока»), нужно выполнить несколько дополнительных операций. Если содержимое брелока доступно в каталоге /media/usbdisk/:
  • скопируйте файл ответов в /media/usbdisk/preseed.cfg
  • отредактируйте /media/usbdisk/syslinux.cfg и добавьте необходимые параметры загрузки (см. пример ниже).

Пример 12.2. файл syslinux.cfg и параметры файла ответов

default vmlinuz
append preseed/file=/hd-media/preseed.cfg locale=en_US.UTF-8 keymap=us language=us country=US vga=788 initrd=initrd.gz  --
12.3.2.3.3. Создание образа CD-ROM
USB-брелок является перезаписываемым носителем, поэтому нам было легко добавить туда файл и изменить несколько параметров. В случае CD-ROM эта процедура усложняется, поскольку требуетс перегенерировать весь ISO-образ. Для этой задачи служит debian-cd, но этот инструмент несколько неудобен в использовании: ему требуется локальное зеркало, и для работы с ним необходимо понимать все опции /usr/share/debian-cd/CONF.sh; даже при соблюдении этих условий нужно несколько раз запускать make. По этой причине крайне рекомендуется ознакомиться с файлом /usr/share/debian-cd/README.
С другой стороны, debian-cd всегда работает сходным образом: создаётся каталог «образа» с содержимым CD-ROM, а затем он преобразуется в ISO-образ с помощью такого инструмента как genisoimage, mkisofs или xorriso. Создание каталога образа завершается после выполнения шага make image-trees. На этом этапе мы добавляем preseed-файл в соответствующий каталог (обычно $TDIR/$CODENAME/CD1/, где $TDIR и $CODENAME являются параметрами, определёнными в конфигурационном файле CONF.sh). На CD-ROM в качестве загрузчика используется isolinux, и необходимо изменить его конфигурацию, сгенерированную debian-cd, чтобы добавить нужные параметры загрузки (в файле $TDIR/$CODENAME/boot1/isolinux/isolinux.cfg). После этого можно продолжить «нормальную» процедуру и сгенерировать ISO-образ с помощью make image CD=1 (или make images, если генерируются несколько образов).

12.3.3. Simple-CDD: решение «всё-в-одном»

Простого использования preseed-файла недостаточно, чтобы удовлетворить всем требованиям, которые могут предъявляться при массовом развёртывании. Несмотря на наличие возможности выполнить некоторые сценарии в конце обычного процесса установки, выбор набора пакетов для установки всё же недостаточно гибок (собственно, можно выбрать для установки только «задачи»); что более важно, возможна установка только официальных пакетов Debian, но не локально собранных.
С другой стороны, debian-cd способен включать сторонние пакеты, а debian-installer может быть расширен путём включения новых шагов в процесс установки. Совмещение этих возможностей позволило бы создать модифицированный установщик, удовлетворяющий нашим запросам; он даже мог бы быть способен сконфигурировать некоторые сервисы после распаковки необходимых пакетов. К счастью, это не пустое предположение, поскольку это в точности то, что делает Simple-CDD (в пакете simple-cdd).
Назначение Simple-CDD — дать возможность каждому легко создавать дистрибутив, производный от Debian, выбрав набор пакетов из числа доступных, предварительно настроив их с помощью Debconf, добавив специальное программное обеспечение и добавив сценарии, которые будут выполнены в конце установки. Это соответствует принцину «универсальной операционной системы», поскольку каждый может адаптировать её под свои собственные нужды.

12.3.3.1. Создание профилей

Simple-CDD определяет «профили», сходные с «классами» FAI, причём у машины может быть несколько профилей (назначенных во время установки). Профиль определяется набором файлов profiles/profile.*:
  • файл .description содержит одну строку с описанием профиля;
  • файл .packages содержит список пакетов, которые будут автоматически установлены при выборе профиля;
  • файл .downloads содержит список пакетов, которые будут записаны на установочный носитель, но не обязательно установлены;
  • файл .preseed содержит информацию для пресидинга вопросов Debconf (для установщика и/или пакетов);
  • файл .postinst содержит сценарий, который будет запущен по завершении процесса установки;
  • наконец, файл .conf позволяет менять некоторые параметры Simple-CDD на основании профилей, включённых в образ.
Профиль default играет особую роль, поскольку он всегда выбран; это минимальный профиль, необходимый для работы Simple-CDD. Единственное, что обычно настраивается в этом профиле, — параметр пресидинга simple-cdd/profiles: это позволяет избежать вопроса, добавленного Simple-CDD, о том, какие профили необходимо установить.
Заметьте также, что команды потребуется вызывать из родительского каталога по отношению к каталогу profiles.

12.3.3.2. Настройка и использование build-simple-cdd

Simple-CDD для полноценной работы требуется передать множество параметров. Чаще всего они указываются в конфигурационном файле, который передаётся build-simple-cdd с помощью опции --conf, но они также могут быть указаны в виде отдельных параметров build-simple-cdd. Вот беглый обзор того, как эта соманда себя ведёт, и как можно использовать эти параметры:
  • параметр profiles служит для перечисления профилей, которые будут включены на генерируемый образ CD-ROM;
  • на основании списка необходимых пакетов Simple-CDD загружает соответствующие файлы с сервера, указанного в параметре server, и собирает их них частичное зеркало (которое будет затем передано debian-cd);
  • пользовательские пакеты, указанные в параметре local_packages, также включаются в это локальное зеркало;
  • затем запускается debian-cd (в каталоге по умолчанию, который можно задать с помощью переменной debian_cd_dir) со списком пакетов для включения;
  • когда debian-cd подготовит свой каталог, Simple-CDD вносит в него некоторые изменения:
    • файлы с профилями добавляются в подкаталог simple-cdd (который будет записан на CD-ROM);
    • также добавляются другие файлы, перечисленные в параметре all_extras;
    • параметры загрузки изменяются, чобы включить пресидинг. Вопросов о языке и стране можно избежать, если сохранить необходимую информацию в переменных language и country.
  • После этого debian-cd генерирует окончательный ISO-образ.

12.3.3.3. Генерация ISO-образа

Когда мы написали конфигурационный файл и определили наши профили, осталось только запустить build-simple-cdd --conf simple-cdd.conf. Через несколько минут мы получим требуемый образ images/debian-8.0-amd64-CD-1.iso.