Installer/common
Основные сведения
Cтруктурa
Набор ПО для установки системы делится на две части: загрузчик (propagator) и собственно инсталлятор, с которым в основном пользователь и работает.
Загрузчик запускается при помощи аппаратно реализованных низкоуровневых протоколов (протокол загрузки с CD/DVD, PXE для загрузки через сеть). В силу больших ограничений на занимаемое место, единственная его задача -- запустить ядро, найти (при необходимости получить из сети) и запустить инсталлятор. В дистрибутиве загрузчик размещается в initrd образе.
Инсталлятор в свою очередь тоже делится на две части:
- первая часть (install2) выполняется в специализированной среде инсталлятора, после установки системы происходит перенос настроек из этой среды в только что установленную. В дистрибутиве первая часть распространяется в виде squashfs-образа файловой системы.
- вторая часть (install3) выполняется уже внутри установленной системы. В дистрибутиве представлена в виде пакетов, устанавливаемых как базовая система.
Благодаря такому разделению сильно сокращается размер первой части и, соответственно, понижаются требования к аппаратной платформе.
Способы установки
Инсталлятор поддерживает следующие способы установки:
- CD/DVD - диск
- жёсткий диск.
- nfs
- ftp (анонимный и с авторизацией)
- http
Способ установки выбирается на самом первом экране (F4). При установке c жёсткого диска или по nfs можно указывать как развёрнутый образ дистрибутива, так и файл с iso-образом.
Параметры командной строки
Загрузчик инсталлятора принимает следующие параметры:
- stagename=<имя> -- название squashfs образа со второй стадией, по умолчанию "altinst".
- splashcount=<номер> -- количество шагов progressbar'а bootsplash, которые необходимо выполнить до полной загрузки системы. Используется только в том случае, если в bootsplash включён режим silent.
- automatic=атрибут:значение,атрибут:значение - настройка поведения propagator. Возможно достаточно детальное описание поведения. Основной атрибут -- method, способ установки. При использовании gfxboot метод установки можно выбрать нажатием на F4.
Инсталлятор принимает следующие параметры:
- xdriver -- графический инсталлятор предпринимает попытку автоматического подбора драйвера видеокарты, но иногда это ему не удаётся. Данным параметром, можно отключить "искуственный интеллект".
- instdebug -- если будет присутсвовать этот параметр, то до и после инсталлятора будет запущена оболочка shell. Очень полезное средство, когда требуется выяснить почему инсталлятор не запускается. Вообще последовательность работы внутренних скриптов следующая: install2 -> xinit -> alterator-install2 -> "alterator-wizard". При необходимости, можно вручную загрузить xorg (команда xinit), и в открывшемся окне терминала запустить alterator-install2 (или alterator-wizard) вручную.
- expertmode — режим дополнительной функциональности. Например, возможность выбора других файловых систем.
Отладочная информация
В ходе работы инсталлятора на одной из виртуальных консолей доступна оболочка shell для отладки (на остальных консолях можно при этом наблюдать сообщения от различных работающих подсистем). Инсталлятор создаёт несколько файлов журнала и в случае возникновения каких-либо проблем эти файлы можно отослать разработчикам для "разбора полётов" и выяснения причин отказа. Во время работы инсталлятора эти журналы размещаются в /tmp, в установленную систему они копируются в /root/.install-log. Возможно изучение следующих журналов:
- install2.log - стандартный вывод (stdout, stderr) от инсталлятора. Тут можно обнаружить полезные сообщения, если инсталлятор вдруг не запустился или "свалился" на пол-пути.
- basesystem.log - стандартный вывод (stdout,stderr) от процесса установки базовой системы. Здесь наблюдаются все ошибки в устанавливаемых пакетах, в частности немаловажным является изучение порядка установки.
- wizard.log - отладочная информация от alterator. Здесь записаны все команды пролетавшие по его внутренней шине. Полезно для уточнения причин отказа того или иного шага. Кроме того, данный лог может использоваться для воспроизведения установки при помощи alterator-autoinstall (there have been some problems with this: altbug #31817).
Типичный сценарий работы инсталлятора
- Выбор языка и клавиатуры - по некоторому алгоритму выбирается язык на котором будет происходить установка системы и её работа. Вместе с языком надо бы выбрать и раскладку клавиатуры, ибо не у всех народов мира она QWERTY. (см. тж. altbug #6781)
- Настройка даты и времени - чтобы вся дальнейшая установка отработала корректно, необходимо убедиться, что на машине правильно установлены часы
- Подготовка целевого устройства - создание разделов, настройка точек монтирования.
При использовании p7/branch и новее обратите внимание на altbug #28181, добавилось перемонтирование свежесозданных разделов без применения EVMS для обеспечения окружения в части блочных устройств и ФС, совпадающего с итоговым. - Установка базовой системы - фактически базовая система -- это система, достаточная для того чтобы всю оставшуюся работу инсталлятора проводить в ней. В частности, в базовую систему устанавливаются модули инсталлятора, которые будут запущены чуть позже.
- Перенос настроек в установленную систему - часть данных введённых пользователем ранее осталась в среде инсталлятора, необходимо их донести до новой системы. Также на этом этапе выгружаются из памяти большая часть предыдущих модулей и инсталлятор переходит (chroot) к работе из новой системы.
- Дополнительные настройки - дальнейший тюнинг системы: установка дополнительных пакетов, настройка сети, задание пароля для администратора системы, создание первого пользователя, и так далее и тому подобное ... Все запускаемые модули должны быть предварительно установлены в базовую систему.
Вполне допустимо вносить изменения в установленный порядок, но делайте это всё на свой страх и риск. Например, модули могут быть не подготовлены к тому, чтобы сделанные при их помощи настройки были перенесены из среды инсталлятора в базовую систему. Самая правильная идея - заниматься творчеством в районе пункта №6.
Неинтерактивные шаги инсталлятора
Часть шагов установщика пользователь видит на экране (настройка времени, установка системы), а часть нет. Неинтерактивные шаги оформленны как последовательно запускаемые скрипты.
Есть три точки в ходе работы установщика, где можно вставить свой собственный скрипт (подробнее):
- /usr/share/install2/initinstall.d -- выполняются перед стартом инсталлятора. В этот момент как правило производится вся подготовительная работа (генерация конфигурационного файла xorg.conf, необходимые исправления в evms.conf и apt.conf[1]).
- /usr/share/install2/preinstall.d -- выполняются сразу после установки базовой системы . Как правило это скрипты для дополнительной настройки базовой системы (перед установки дополнительного набора ПО) и для переноса настроек из среды инсталлятора. Добавлять суда свои собственные скрипты стоит только тогда когда вы чётко представляете свои цели (например перенесли шаг до установки базовой системы и теперь требуется перенести настройки).
- /usr/share/install2/postinstall.d — выполняются сразу после последнего шага инсталлятора. Как правило это скрипты, удаляющие служебные пакеты инсталлятора из базовой системы и прочий «окончательный тюнинг» установленных пакетов для тех или иных нужд. Если захочется сделать какие-нибудь специфические настройки «из коробки», то это самое лучшее место для этого.
Обратите внимание: скрипты из такого каталога выполняются сперва из только что установленной системы, затем — из корня инсталятора (см. scripts/postinstall); причём среди последних обычно есть зачищающий отработавшие первые. Следует также учитывать, что даже скрипты из установленной системы выполняются в среде установщика, а не в среде установленной системы.
Некоторые распространённые коллекции скриптов оформлены как пакеты installer-feature-*.
Схема запуска различных подсистем инсталлятора (процесс /sbin/install2):
- предварительная подготовка и разбор командной строки
- запуск /sbin/initinstall -- initinstall.d скрипты.
- запуск alterator . В ходе работы alterator сразу по окончанию установки базовой системы происходит запуск preinstall.d скриптов.
- запуск /sbin/postinstall -- postinstall.d скрипты.
- отмонтирование всех файловых систем, завершение работы.
Cреда инсталлятора
Среда инсталлятора — это сильно урезанная система Linux. Имеется несколько дополнительных каталогов:
- /image — образ дистрибутива
- /mnt/destination — устанавливаемая система
/image Используется прежде всего как источник пакетов, репозиторий которых которые располагаются в /image/ALTLinux. Список подлежащих установке пакетов определяется в /image/Metadata/pkg-groups.tar (см. ниже). Установка пакетов производится модулем alterator-pkg.
Вся файловая система за исключением каталогов /var и /etc находится в режиме "только чтение".
Данные и метаданные
Инсталлятор размещается в корне CD/DVD-диска в файле altinst. Это образ файловой системы формата squashfs. Для работы ваших скриптов им возможно потребуются некоторые файлы с данными. Первый способ ("данные") - разместить их вместе с инсталлятором. Это делается во время сборки squashfs образа (при помощи хуков spt или mkimage). Соответственно для того чтобы изменить данные - надо создать заново файл altinst. Иногда это не очень удобно и хочется менять отдельные параметры созданного дистрибутива без полной пересборки. А поэтому существует ... Второй способ ("метаданные") - рядом с файлом altinst вы обнаружите каталог Metadata. Всё что туда положите можно будет потом получить прямо в скриптах вызвав утилиту cp-metadata — данные будут доставлены, даже если установка идёт через сеть. Формат запуска:
metadata-cp <целевой-каталог>/<файл>
В результат будет взят (скачан, скопирован) Metadata/<файл> и положен в <целевой-каталог>.
На данный момент используются следующие метаданные:
- basesystem.manifest - список rpm-пакетов составляющих базовую систему. Фактически это список пакетов из каталога RPMS.base. Получение происходит на стадии запуска initinstall.d
- pkg-groups.tar — описание групп пакетов, устанавливаемых дополнительно при помощи модуля alterator-pkg. Получение происходит на стадии запуска preinstall.d
- autoinstall.scm — сценарий автоматической установки для alterator-autoinstall. Получение происходит на стадии запуска initinstall.d.
- vm-profile.scm — различные варианты автоматической разбивки диска для модуля разбивки диска alterator-vm. Получение происходит на стадии запуска initinstall.d.
Сборка собственного инсталлятора
Описание шагов инсталлятора
Описание шагов инсталлятора делится на две части: описание порядка шагов и собственно описание каждого шага. Описание шага полностью повторяет описание модуля конфигуратора. Все описания шагов размещаются в каталогe /usr/share/install2/steps/.
Порядок шагов указывается в файле /usr/share/install2/installer-steps (см. alterator-wizardface). В этом файле перечисляются имена desktop-файлов без полного пути и суффикса .desktop. Вот пример типичного набора шагов инсталлятора:
sysconfig license datetime vm pkg installer-preinstall grub installer-network users-root users-add release-notes
В поставке с инсталлятором идут описания самых распространённых шагов.
Примечание: По техническим причинам (инсталлятору нужно видеть описание всех шагов при старте одновременно, а часть из-них появляется после базовой системы), dekstop-файлы не распределяются по пакетам модулей, а лежат в пакетах installer-*-stage2. Пакет installer-stage2 содержит набор готовых desktop-файлов, достаточный для большинства дистрибутивов. Если хочется добавить свои особые шаги - сохраняйте все необходимые вам desktop-файлы в installer-flavour-stage2.
Профиль инсталлятора
Профиль инсталлятор состоит из:
- список шагов
- описание нестандартных шагов (если есть)
- postinstall.d скрипты (если надо)
Ядро инсталлятора, основные скрипты, шаги установки и файлы с описанием основных шагов размещаются в серии пакетов installer (installer,installer-stage2,installer-stage3).
Профиль размещается в серии пакетов installer-distro (installer-distro, installer-distro-stage2, installer-distro-stage3). Не забудьте добавить в каждый пакет зависимости на пакеты с необходимыми модулями alterator и на соответствующие пакеты installer.
Вместо написания своих preinstall.d/postinstall.d скриптов постарайтесь использовать готовые компоненты
- ↑ См. alterator-pkg