1
.

Debian GNU/Linux включает в себя пакетную систему DEB
3
+APT
4

и инсталлятор промышленного уровня D-I, позволяющий гибко управлять
составом устанавливаемого программного обеспечения, ходом инсталяции и
вводить, при необходимости, новый функционал.


5

  • Перезагрузка в процессе инсталяции не требуется
  • Языки реализации ограничены Bourne Shell и С
  • Базовая система построена на основе BusyBox
    6
  • Вариативность внешнего вида (консольный, графика, web-based)

  • 7
    .
    Например udeb не содержит changelog, лицензию, документацию (в
    частности man-страницы) или md5-сумму. Причина -необходимость
    минимизировать размер, так как инсталяция проходит целиком в RAM, а
    раздел подкачки может быть доступен только после Фазы 4 (разметки
    разделов).

    Дополнительноое отличие -udebs не поддерживают
    деинсталяцию и обновление. Несоответствие Policy обозначает то, что
    udeb’ы бессмысленно ставить на обычную систему, есть возможность
    сломать зависимости и переписать существенные для нормального
    функционирования файлы.

    Для разработчика, знакомого ( начинающие могут ознакомится с
    8

    ) с процессом создания пакетов Debian, создание udeb не составит
    никаких сложностей. Требуется помнить о размере и стараться
    поддерживать размер пакета минимальным.

    Далее на примерах будут показаны отличия udeb от стандартного пакетирования Debian.


    9
    собирать udeb (а не обычный пакет).

    Поле XB-Installer-Menu-Item регулирует порядок включения в процесс установки. Например, если мы укажем номер меню больший, чем у пакета finish-install, то наш пакет не выполнится по умолчанию (не будет запущен debian/postinst ).

    Вы также можете смешивать объявления deb и udeb в одном файле (пакет util-linux, пример дан с сокращениями):

    Source: util-linux 
    Build-Depends: libncurses5-dev, ..
    Section: base
    Priority: required
    Maintainer: LaMont Jones <lamont@debian.org>

    Package: util-linux
    Architecture: any
    Section: utils
    Priority: required
    Essential: yes
    Depends: lsb-base (>= 3.0-6), tzdata (>=2006c-2)
    Provides: schedutils, linux32
    Description: Miscellaneous system utilities

    Package: fdisk-udeb
    Architecture: alpha amd64 arm armeb armel hppa i386 ia64
    Priority: extra
    Section: debian-installer
    Depends: ${shlibs:Depends}
    XC-Package-Type: udeb
    XB-Installer-Menu-Item: 99900
    Description: Manually partition a hard drive (fdisk)


    5
    . Включает в себя описание пункта для меню:

    debian-installer/<component>/title 
    Type: text _Description: <пункт меню>


    Может также включать дополнительные записи, предназначенные для хранения настроек и сообщений.

    Template: miu/server-uri 
    Type: text
    Default: http://172.17.0.1/netinstall
    Description: MIU netinstall server host
    Server that store activity about installation


    10
    )

  • распределјнная (сетевая) установка
  • создание LiveCD
  • Рассмотрим их подробнее.


    11
    :

    • обширная (и запутанная -прим. авт.) система настроек через переменные окружения Shell
    • позволяет изготавливать и официальные, и неофициальные сборки Debian
    • полный контроль над содержимым установочного образа
    • требует высокой квалификации пользователя

    simple-cdd
    12
    :

    • интуитивно понятная конфигурация
    • профили проектов-возможность создать несколько наборов конфигураций спиcок желаемых пакетов
    • возможность задать ответы инсталятору (preseed)
    • кэширование зеркала перед сборкой ISO
    • раздельное задание источников для компонент инсталятора и устанавливаемых пакетов

    Simple-cdd является надстройкой над debian-cd


    5
    .

    preseed
    10
    -текстовый файл с ответами на вопросы debconf и имеет следующий вид:

    # setting the default params
    d-i debian-installer/locale string ru_RU
    d-i netcfg/choose_interface select eth1
    d-i mirror/country string manual
    d-i mirror/http/hostname string linux.org.by
    d-i base-installer/kernel/image string linux-image-2.6-486

    Имя preseed-файла передајтся как параметр при загрузке ядра, может
    быть локальным или URL. Примеры для различных типов инсталяции:

    preseed/url=http://host/path/to/preseed.cfg 
    preseed/file=/cdrom/preseed.cfg
    preseed/file=/hd-media/preseed.cfg

    Параметры preseed могут быть заданы как вручную (из приглашения загрузчика), так и используя DHCP.

    Особо следует отметить специальный язык описания разделов для утилиты разметки дисков partman:

    d-i partman-auto/expert_recipe strin \ 
    boot-root :: \
    40 10000 1000000000 ext3 \
    method{ format } form \
    use_filesystem{ } filesystem{ ext3 } \
    mountpoint{ \
    . \
    64 512 300% linux-swap \
    method{ swap } format{ } \

    В preseed-файл также могут включаться ответы на вопросы
    устанавливаемых приложений. К примеру OEM инсталяция может
    подразумевать начальное конфигурирование сервера samba или
    автоматический ответ «да» на вопрос о принятии лицении Sun Java JRE.


    13
    предназначен для создания LiveCD на базе Debian. Возможности:

    • сборка образа в несколько этапов
    • полное конфигурирование каждого из этапов
    • создание ISO, netboot и USB-_ash образов плагины и хуки
    • поддержка сжатых и шифрованных файловых систем
    • добавление сторонних пакетов и репозиториев, как на фазе настройки
    • сборочного окружения, так и на фазе распаковки ПО
    • настройка загрузчиков
    • добавление любых дополнительных файлов, в том числе и перезаписывающих (особенно полезно для конфигурирования

      ) существующие в пакетах, устанавливаемых в образ

    • интеграция с инсталляторами Debian и Ubuntu (создание инсталляционных дисков, совмещјнных с livecd)

    Проект хорошо документирован и быстро развивается


    13
    . Были внесены некоторые изменения в конфигурацию по умолчанию.

    • LiveCD/con_g/binary, настройки бинарной стадии сборки:
    LH_BINARY_IMAGES="iso"
    LH_BOOTAPPEND_LIVE="noapic"
    LH_BOOTLOADER="syslinux"

    Задан загрузчик и дополнительные параметры к загрузке, и тип образа.

    • LiveCD/con_g/chroot, фаза развјртывания системы
    LH_CHROOT_FILESYSTEM="squashfs"
    LH_UNION_FILESYSTEM="aufs"
    LH_LINUX_FLAVOURS="686-bigmem"
    LH_PACKAGES="xyz-player pciutils openssh-server vsftpd less lftp mc"

    Заданы пакет с ядром и дополнительные пакеты, требуемые для работы
    live-cd. В частности ftp-сервер для закачки контента, mc (mcedit) для
    управления файлами и редактирования конфигурации.

    • LiveCD/con_g/chroot_local-includes/etc/ -сюда были положены
      некоторые файлы, которыми мы дополняем стандартную конфигурацию,
      например генератор конфигурации Xorg и конфигурационный файл vsftpd.
    • LiveCD/con_g/chroot_sources/xyz-player.chroot -дополнительный APT репозиторий, содержащий 3rd-party пакеты, не являющиеся частью Debian:
    deb http://mend0za.xyz.com/debian-aw-display/ ./

    Сборка реализована как набор правил, включенных в общий Makefile проекта 5.1.

    livecd-repo: $(BUILD_DIR)/$(PLAYER_PACKAGE) $(BUILD_DIR)/$(SWFDEC_PACKAGE)
    @test -d $(LIVE_CD_REPO) || mkdir $(LIVE_CD_REPO)
    @cp -fv $^ LiveCD/repo
    cd $(LIVE_CD_REPO) && apt-ftparchive packages ./ >Packages
    gzip <$(LIVE_CD_PACKAGES) >$(LIVE_CD_PACKAGES).gz
    bzip2 <$(LIVE_CD_PACKAGES) >$(LIVE_CD_PACKAGES).bz2
    livecd: livecd-repo
    cd LiveCD && sudo lh_build

    Отдельно следует отметить скорость создания LiveCD на основе уже
    имеющейся инфраструктуры CDD. Используя готовые схемы сборки 3rd-party
    пакетов deb и CDD (через simple-cdd), дополнительные правила для сборки
    LiveCD созданы и отлажены за 3 человеко-дня, включая стадию контроля
    качества (QA) и передачу результата работы (ISO­образа) заказчику.


    14
    (NAS) для i386

    Портирование существующего продукта с Alt Linux/XScale на Debian/i386.

    Техническое задание:

    • Управление функциями NAS через EVMS
      15
    • Поддержка до 4 винчестеров на стадии инсталяции
    • Пользовательский интерфейс (GUI) на WEB+Java
    • Портирование функционала с Alt Linux на Debian

    Реализация.

    • Пересборка ядра/модулей ядра в D-I и образов инсталятора
    • Накладывание набора (порядка 15) патчей на ядро
    • Замена стандартного менеджера разделов в D-I (partman) на NAS-специфичный
    • Пакетирование пользовательского интерфейса
    • Добавление поддержки EVMS в D-I

    Отличие от проектов, указанных выше (см. 5.1, 5.2, 5.3) -в
    необходимости глубокой интеграции с Debian-Installer, вплоть до
    модификации штатного ядра и замены штатного менеджера дисков.

    Функционал продукта полностью базируется на использовании EVMS. Все
    операции с дисковой подсистемой проводятся через Device Mapper
    16

    + EVMS. D-I на момент начала работы над проектом содержал только
    рудиментарные признаки поддержки EVMS, ранее не используемые и
    исключјнные из релизов незадолго до выхода Sarge.

    Детали реализации:

    • заново создан пакет evms-udeb, дающий возможности управлять evms из D-I (библиотеки и утилиты командной строки)
    • компонент partman полностью заменјн на partman-evms, вводящий функционал определения всех доступных дисков и развјртывания
      NAS-массива с их использованием
    • частично портированы части старого инсталятора из Alt Linux,
      касающиеся развјртывания NAS и добавлены утилиты (awk), необходимые
      для их работы в среде D-I.
    • GUI перепакетирован из RPM в DEB
    • портированы патчи с устаревших версий ядра на современные (касающиеся особенностей функционала продукта)
    • D-I полностью пересобран с модифированным ядром
      18


    17
    для получения дополнительной информации.

    partman-evms/debian/postinst содержит код переразбиения
    дисков согласно штатной разметки NAS как группы RAID-1 разделов на всех
    существующих дисках. Также осуществляются действия стандартного
    partman: форматирование разделов, создание /etc/fstab, подключение
    свопа.

    Вся дальнейшая установка (базовая система, пост-инсталяционные настройки) уже работает с корневым разделом под управлением EVMS.

    OEM-инсталяция

    Часть из используемых пакетов проекта требует ответов пользователя
    по ходу их установки. Средствами добавления preseed в simple-cdd мы
    можем заранее задать ответы на них и сохранить инсталяцию «молчаливой»:

    # omit questions to user
    mdadm mdadm/autostart boolean false
    mdadm mdadm/initrdstart string none

    lilo liloconfig/wipe_old_liloconf boolean true
    lilo liloconfig/install_mbr boolean true

    nis nis/domain string local

    samba-common samba-common/workgroup string local
    samba-common samba-common/dhcp boolean false

    sun-java5-bin shared/accepted-sun-dlj-v1-1 boolean true
    sun-java5-jdk shared/accepted-sun-dlj-v1-1 boolean true
    sun-java5-jre shared/accepted-sun-dlj-v1-1 boolean true
    Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34