Статья представляет собой обзор архитектуры и методов применения
инфраструктуры проекта Debian в коммерческих и свободных разработках.
Посвящена построению сред инсталяции, изменению поведения инсталятора,
распределённой установке, сборке LiveCD, добавлению стороннего ПО.
Статья, представленная вашему вниманию, посвящена построению сред инсталяции, изменению поведения инсталятора, распределјнным возможностям установки, сборке LiveCD, добавлению стороннего ПО, используя гибкую архитектуру Debian GNU/Linux.
Первоначально представлена в виде доклада на 4й международной конференции разработчиков и пользователей свободного программного обеспечения Linux Vacation Eastern Europe'2008 (LVEE-2008) 28 июня 2008 года, Гродно, Беларусь.
Позже был дополнен новой информацией о работах компании Promwad в области использования Debian-based дистрибутивов.
Все описанные проекты-примеры являются реальными заказами, выполненые автором в период c 2007 по 2008 год в сфере Outsourcing Software Development.
|
Что такое Custom Debian Distribution
Debian GNU/Linux -Операционная система, содержащая более 18000 программных пакетов различного назначения.
Custom Debian Distribution или CDD является подмножеством Debian, призванный быть инструментом для специальных групп пользователей, сконфигурированный таким образом, чтобы предоставлять специальный функционал "из коробки"
1.
Debian GNU/Linux включает в себя пакетную систему DEB
3+APT
4 и инсталлятор промышленного уровня D-I, позволяющий гибко управлять составом устанавливаемого программного обеспечения, ходом инсталяции и вводить, при необходимости, новый функционал.
|
Архитектура и реализация инсталлятора Debian (D-I)
Debian Installer (далее D-I) представляет собой специальную версию дистрибутива Debian, выполняющую задачи начального развјртывания операционной системы на устройстве (устройствах) пользователя.
При проектировании D-I разработчики должны были учитывать следующие условия:
Мы можем утверждать, что ни один другой инсталятор ОС, как свободно распространяемый, так и коммерческий, не удовлетворяет указанным выше требованиям.
Таблица 1 наглядно иллюстрирует отличия между методами. Содержит список компонент (udebs), вовлечјнных в первую и вторую стадию для методов установки с CD-ROM и через сетевую загрузку.
Table 1: Компоненты 1, 2, 3 стадии инсталяции
Стадия | CD-ROM | NETBOOT | Комментарии |
- | initrd-preseed | Только если есть /preseed.cfg | |
1 | localechooser | Выбор языка/страны/локализации | |
1 | kbd-chooser | Выбор клавиатуры | |
1 | cdrom-detect | eth-detect | Определение железа и настройка |
1 |
| netcfg | Конфигурирование сети |
- | _le-preseed | network-preseed | Если выбран при загрузке |
2 |
| choose-mirror | Выбрать зеркало-источник установки |
2 | load-cdrom | download-installer | Получить и распаковать дополнительные компоненты |
3 | eth-detect |
| Определение железа и настройка |
3 | netcfg |
| Конфигурирование сети |
3 | choose-mirror |
| Выбор зеркала-источника установки |
Как можно убедиться, первые три стадии имеют фундаментальные различия при выборе различных методов инсталяции. Все компоненты (udebs), указанные для стадий 1-3, должны быть включены в initrd, c которым происходит загрузка инсталлятора.
Оставшаяся часть инсталяции в основном общая для всех методов инсталяции (cм. таблицу 2).
Table 2: Компоненты 4 и 5 фаз инсталяции
Стадия | Компоненты | Комментарии |
4 | hw-detect | Дополнительное определение железа |
4 | partman | Разметка дисков, создание файловых систем и выбор точек монтирования |
5 | tzsetup | Выбор часового пояса |
5 | clock-setup | Выбор локального часового пояса или установка UTC |
5 | user-setup | Настройка аккаунта root и обычных пользователей |
5 | base-installer | Установка базовой системы (debootstrap2 ) и установка ядра |
5 | apt-setup | Настройка APT для целевой системы (sources.list) |
5 | pkgsel | Выбор и установить дополнительные пакеты (tasksel) |
5 | grub/lilo-installer; nobootloader | Установка загрузчика |
5 | _nish-install | Окончание инсталяции и перезагрузка |
D-I поддерживает большое количество разнообразных методов инсталяции. В некоторых случаях они могут комбинироваться. Определение инсталяционного метода базируется на следующих вопросах:
Для наиболее употребительных методов инсталяции ответы на эти вопросы даст таблица 3.
Table 3: Методы инсталяции и способы загрузки частей инсталятора
Метод | Загрузка | Udebs | Базовая система | Tasks |
netboot | сетевая загрузка (TFTP сервер) | сеть | сеть | сеть |
mini.iso | CD-ROM | сеть | сеть | сеть |
businesscard CD | CD-ROM | CD-ROM | сеть | сеть |
netinst CD | CD-ROM | CD-ROM | CD-ROM | сеть |
полный CD/DVD | CD-ROM | CD-ROM | CD-ROM | CD-ROM (+сеть) |
hd-media | винчестер/usb флэш | CD образ | CD образ/сеть | CD образ/сеть |
_oppy (net) | boot/root/net-drivers | сеть | сеть | сеть |
_oppy (cd) | boot/root/net-drivers | CD-ROM | CD-ROM/сеть | CD-ROM/сеть |
|
udeb (или микро-deb) является специальным типом пакета Debian. Основное отличие от обычного пакета -отход от значительного количества требований Debian Policy
7. Например udeb не содержит changelog, лицензию, документацию (в частности man-страницы) или md5-сумму. Причина -необходимость минимизировать размер, так как инсталяция проходит целиком в RAM, а раздел подкачки может быть доступен только после Фазы 4 (разметки разделов).
Дополнительноое отличие -udebs не поддерживают деинсталяцию и обновление. Несоответствие Policy обозначает то, что udeb'ы бессмысленно ставить на обычную систему, есть возможность сломать зависимости и переписать существенные для нормального функционирования файлы.
Для разработчика, знакомого ( начинающие могут ознакомится с
8 ) с процессом создания пакетов Debian, создание udeb не составит никаких сложностей. Требуется помнить о размере и стараться поддерживать размер пакета минимальным.
Далее на примерах будут показаны отличия udeb от стандартного пакетирования Debian.
Конфигурационный файл debian/control
Пример типичного debian/control (c сокращениями):
|
В первую очередь обратите внимание на Section: debian-installer и XC-Package-Type: udeb. Тип пакета udeb и секция debian-installer явным образом указывают сборочной системе debhelper
9 собирать udeb (а не обычный пакет).
Поле XB-Installer-Menu-Item регулирует порядок включения в процесс установки. Например, если мы укажем номер меню больший, чем у пакета finish-install, то наш пакет не выполнится по умолчанию (не будет запущен debian/postinst ).
Вы также можете смешивать объявления deb и udeb в одном файле (пакет util-linux, пример дан с сокращениями):
|
debian/postinst выполняется согласно номеру меню и обычно включает большую часть функционала, реализуемого компонентом udeb.
debian-installer/<component>/title |
Шаблон для debconf
5. Включает в себя описание пункта для меню:
debian-installer/<component>/title |
Может также включать дополнительные записи, предназначенные для хранения настроек и сообщений.
|
Для части компонент D-I возможно добавление функциональности без изменения кода.
В настоящий момент поддерживается следующий набор "хуков" общего назначения:
Существуют специализированные хуки apt-setup, main-menu и rescue, с которыми вы можете ознакомится в документации на D-I.
Также к хукам можно отнести команды preseed (см. пункт 4.2)
, выполняющие аналогичную роль.
d-i preseed/early_command и d-i preseed/early_command
|
Нетривиальное применение D-I и CDD
Типовые задачи, решаемые созданием CDD:
Рассмотрим их подробнее.
Существуют два инструмента для создания инсталяционных образов:
debian-cd
11 :
simple-cdd
12 :
Simple-cdd является надстройкой над debian-cd
Preseed : задание настроек инсталяции
Для управлением настройками в D-I и пакетной системе Debian используется debconf
5.
preseed
10 -текстовый файл с ответами на вопросы debconf и имеет следующий вид:
|
Имя preseed-файла передајтся как параметр при загрузке ядра, может быть локальным или URL. Примеры для различных типов инсталяции:
|
Параметры preseed могут быть заданы как вручную (из приглашения загрузчика), так и используя DHCP.
Особо следует отметить специальный язык описания разделов для утилиты разметки дисков partman:
d-i partman-auto/expert_recipe strin \ |
В preseed-файл также могут включаться ответы на вопросы устанавливаемых приложений. К примеру OEM инсталяция может подразумевать начальное конфигурирование сервера samba или автоматический ответ "да" на вопрос о принятии лицении Sun Java JRE.
LiveCD в стиле Debian -live-helper
Пакет live-helper (включён в состав Debian начиная с Lenny )
13 предназначен для создания LiveCD на базе Debian. Возможности:
Проект хорошо документирован и быстро развивается
|
Примеры проектов с использованием CDD
В заключительной части статьи будут предоставлены примеры выполненных проектов, реализованных с помощью технологий Custom Debian Distribution. Основной упор сделан на то, каким образом решались задачи, обусловленные техническим заданием. Приводятся выдержки из конфигурационных и сборочных файлов, с разбором наиболее существенных фрагментов.
OEM-поставка. Многоформатный неинтерактивный плейер для видеоэкрана
Техническое задание:
Реализация:
auto_profiles="miu" |
Что модифицировано:
miu.packages (список пакетов)
openssh-server |
Запрашиваем установку нестандартного ядра и openssh-сервера по умолчанию + устанавливаем 3rd-party пакеты собственной разработки.
miu.preseed (выборочно):
|
изменения:
Обёртка над сборкой debian пакетов и iso-образа -Make_le
|
Техническое задание
Проект реализован с помощью Live-helper
13. Были внесены некоторые изменения в конфигурацию по умолчанию.
LH_BINARY_IMAGES="iso" |
Задан загрузчик и дополнительные параметры к загрузке, и тип образа.
LH_CHROOT_FILESYSTEM="squashfs" |
Заданы пакет с ядром и дополнительные пакеты, требуемые для работы live-cd. В частности ftp-сервер для закачки контента, mc (mcedit) для управления файлами и редактирования конфигурации.
deb http://mend0za.xyz.com/debian-aw-display/ ./ |
Сборка реализована как набор правил, включенных в общий Makefile проекта 5.1.
livecd-repo: $(BUILD_DIR)/$(PLAYER_PACKAGE) $(BUILD_DIR)/$(SWFDEC_PACKAGE) |
Отдельно следует отметить скорость создания LiveCD на основе уже имеющейся инфраструктуры CDD. Используя готовые схемы сборки 3rd-party пакетов deb и CDD (через simple-cdd), дополнительные правила для сборки LiveCD созданы и отлажены за 3 человеко-дня, включая стадию контроля качества (QA) и передачу результата работы (ISOобраза) заказчику.
Распределённая установка с контролем оператором
Техническое задание:
Реализация:
Сценарий установки устройства-клиента:
Как можно видеть, реализация требует плотной интеграции целой группы стандартных компонент (Web сервера, TFTP сервера, DHCP сервера, D-I) с группой самостоятельно разработанных компонент (управляющее ПО оператора, хранилище информации о состоянии устройств, репозитории пакетов для двух раздельных дистрибутивов, udeb, модифирующий поведение D-I).
Было создано 3 новых пакета-интегратора: netboot-server, miu-netinstall, management-server, реализующие функционал, необходимый по техническому заданию.
Обычный deb-пакет. Устанавливается на сервер.
subnet 172.17.0.0 netmask 255.255.0.0 { |
Логика построена в зависимости от идентификатора вендора. Если
сетевые настройки запрашиваются уже запущенным D-I, отдајтся
URL файла preseed. В противном случае осуществляется обычная
сетевая загрузка PXE.
|
Благодаря гибкой схеме конфигурирования Apache 2.x в Debian настройки оформлены отдельным файлом, укладываемый в
/etc/apache2/conf.d |
Компонент udeb для d-i. Загружается в устройство при инсталяции через preseed:
d-i preseed/early_command string anna-install miu-netinstall |
postinstall для этого пакета реализует запрос на разрешение/запрет дальнейшей установки устройства + определение адреса сервера. Содержит также хуки, производящие информирование сервера о стадиях инсталяции и возможности продолжать.
Содержит ПО пријма запросов от устанавливаемых устройств и ПО оператора. Устанавливается на сервер.
Серверный дистрибутив собирается через simple-cdd, так же как и дистрибутив из проекта 5.1. Клиентский дистрибутив фактически содержится в серверном как подмножество пакетов в репозитории CD диска. После инсталяции серверного дистрибутива репозиторий с диска копируется инсталятором на установленную машину и служит пакетной базой для установки клиентских устройств.
Network Attached Storage
14 (NAS) для i386
Портирование существующего продукта с Alt Linux/XScale на Debian/i386.
Техническое задание:
Реализация.
Отличие от проектов, указанных выше (см. 5.1, 5.2, 5.3) -в необходимости глубокой интеграции с Debian-Installer, вплоть до модификации штатного ядра и замены штатного менеджера дисков.
Функционал продукта полностью базируется на использовании EVMS. Все операции с дисковой подсистемой проводятся через Device Mapper
16 + EVMS. D-I на момент начала работы над проектом содержал только рудиментарные признаки поддержки EVMS, ранее не используемые и исключјнные из релизов незадолго до выхода Sarge.
Детали реализации:
Наиболее интересны, с точки зрения CDD, следующие фрагменты:
partman-evms/debian/control
Package: partman-evms |
XB-Installer-Menu-Item задајт место для запуска partman -непосредственно перед оригинальным partman (4000). Имена пакетов и поля Provides: полностью замещают стандартный компонент, эмулируя его привязку к остальным частям инсталятора. См.
17 для получения дополнительной информации.
partman-evms/debian/postinst содержит код переразбиения дисков согласно штатной разметки NAS как группы RAID-1 разделов на всех существующих дисках. Также осуществляются действия стандартного partman: форматирование разделов, создание /etc/fstab, подключение свопа.
Вся дальнейшая установка (базовая система, пост-инсталяционные настройки) уже работает с корневым разделом под управлением EVMS.
Часть из используемых пакетов проекта требует ответов пользователя по ходу их установки. Средствами добавления preseed в simple-cdd мы можем заранее задать ответы на них и сохранить инсталяцию "молчаливой":
# omit questions to user |
|
1 Custom Debian Distribution homepage http://cdd.alioth.debian.org
2 Frans Pop Debian Installer Internals, 2006 http://d-i.alioth.debian.org/doc/talks/debconf6/paper/
3 Debian package control basics http://www.debian.org/doc/FAQ/ch-pkg_basics
4 APT Howto http://www.debian.org/doc/manuals/apt-howto/
5 debconf WiKi http://wiki.debian.org/debconf
6 BusyBox project http://busybox.net/
7 Debian Policy http://www.debian.org/doc/debian-policy/
8 Debian New Maintainers' Guide http://www.debian.org/doc/maint-guide/
9 Debhelper homesite http://kitenet.net/~joey/code/debhelper/
10 Automating the installation using preseeding http://d-i.alioth.debian.org/manual/en.i386/apb.html
11 debian-cd package http://packages.debian.org/etch/debian-cd
12 simple-cdd package simple-cdd package http://wiki.debian.org/Simple-CDD
13 Debian Live Debian Live http://debian-live.alioth.debian.org/
14 Network Attached Storage http://en.wikipedia.org/wiki/Network-attached_storage
15 Enterprise Volume Management System http://evms.sourceforge.net/
16 Device Mapper http://sources.redhat.com/dm/
17Replacement of partman D-I component http://lists.debian.org/debian-boot/2008/02/msg00819.html
18 Debian-Installer: Building images with a custom kernel http://wiki.debian.org/DebianInstaller/Modify/CustomKernel
Шахов Владимир aka mend0za, Senior Software Engineer в Promwad Innovation company. Системный аналитик и разработчик ПО, преподаватель, FOSS-евангелист. | ||