Сборка своего LiveCD

Личный опыт по сборке LiveCD на основе репозитория ALTLinux (branch) с помощью spt3.

Что хочется получить

Хочется получить некоторый мультимедийный контент (презентации, аудио- и видео-ролики в заранее оговоренных форматах) с набором программ, обеспечивающих однозначное воспроизведение этого контента. Все это хозяйство хочется уложить на LiveCD с максимально широкой поддержкой всякого оборудования с целью самостоятельного воспроизведения пользователями где угодно. Короче говоря, хочется сделать презентационный диск со звуком и фильмами для раздачи без всяких лицензионных заморочек.

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

В результате длительных раздумий родился следующий список форматов контента:

Источниками вдохновения для вышеуказанной деятельности послужили Edu/Courses/OpenLectory/BuildLiveCD Edu/Courses/OpenLectory, высказывания Генерального директора ALTLinux А.В.Смирнова о том, что "дистрибутив делается нажатием на одну кнопку", а также статьи в Спец-Хакере и Линукс-Формате о сборке собственного дистрибутива.

Однако статьи в основном ориентируются на Knoppix или Ubuntu, а такие решения имеют ряд недостатков технологического и этического характера. Есть информация, что в Fedora7 есть инструмент для сборки собственного дистрибутива (в том числе и LiveCD), но мешает уже нажитое отрицательное отношение к Fedore.

В результате за основу был выбран ALTLinux (см. источники вдохновения выше) еще и потому, что разработчики более-менее досягаемы (не в Германии и не в ЮАР).

Что нужно для решения задачи

Пакеты

Пакеты, необходимые для решения задачи, существуют в репозитории Sysiphus, однако использовался стабильный срез репозитария - branch-4.0. Нужно установить в сборочную систему следующие пакеты:

Настройка репозитария

spt3 активно использует репозиторий, указанный в источнике для apt. Поскольку она не является менеджером пакетов, то запросов типа "Вставьте диск номер Х" не выдает, а просто не работает. Поэтому для spt3 нужен источник пакетов в виде ftp-сервера.

Тут есть два варианта:

  1. Подключиться к существующему зеркалу репозиториев ALTLinux
  2. Поднять собственный ftp-сервер и создать зеркало на нем, прописав его в sources.list apt'a.

В обоих случаях все "посторонние" источники пакетов нужно вычистить из всех списков источников.

При работе с внешним репозиторием (существующим зеркалом) нужен скоростной канал с большим объемом трафика. т.к. каждая пересборка требует закачивания всех необходимых пакетов (200-400 Мбайт). На "медленной" безлимитке (ADSL 256К) ничего не получается, т.к. в случайные моменты процесс вылетает по таймауту.

Профиль

Профиль - это каталог с набором конфигурационных файлов и скриптов, содержащих список пакетов для целевой системы, настройки будущего рабочего стола, список файлов и папок, образующих полезный контент и пр. Как его сделать с нуля - тайна сия велика есть, а от примеров из spt3-profiles практической пользы никакой.

В любом случае каталог профиля (назовем его условно profile) кладется в домашний каталог пользователя, осуществляющего сборку (не root!).

profile-livecd-khakhaev.zip - исходный профиль /!\ (нуждается в оптимизации и уборке лишнего из файла packages)

profile-livecd-khakhaev-final.zip - итоговый профиль (после выяснения всех деталей)

В прилагаемых профилях каталог content оставлен пустым для экономии места, но его можно наполнить любым содержанием, соответственно подправив index.html.

Настройки пользователей

Пусть сборкой занимается пользователь ust. Тогда в /home/ust создаем папку build (или с другим именем по вкусу), в которой и будет осуществляться весь процесс сборки.

Действия администратора (root)

$ hasher-useradd ust

(при этом создаются дополнительные пользователи ust_a и ust_b, от имени и с правами которых совершаются все действия по сборке)

Все содержимое комментируем и добавляем строку

prefix=/home/ust/build

На этом предварительные действия администратора заканчиваются.

Действия пользователя (сборщика)

Пусть рабочий профиль скопирован в /home/ust/profile Тогда в /home/ust/build создаем симлинк с именем profile на /home/ust/profile (Реальное имя каталога профиля может быть каким угодно, но симлинк должен иметь имя profile обязательно!).

Компоненты профиля

Этапы сборки, проблемы и их решение

На свежеподготовленной системе, находясь в каталоге build, запускаем

[/home/ust/build]> spt3 -v

И минут через 30-50 (в зависимости от скорости канала и быстродействия сборочной системы) получаем готовый livecd.iso, который для проверки можно запустить в эмуляторе Qemu:

[/home/ust]> qemu -boot d -cdrom ~/build/livecd.iso

В случае применяемого профиля получаем графическую загрузку с паузой 1 секунда, рабочий стол с KDE и возможностью настройки видеорежимов и сети. Но автоматического открытия index.html не происходит.

Основные проблемы, которые решались (или не решились) при отладке процесса, были следующие:

  1. Смена темы графической загрузки
  2. Замена названий пунктов загрузочного меню
  3. Получение корректной русификации в "Центре управления системы"
  4. Обеспечение автоматического включения звуковой подсистемы
  5. Обеспечение автоматического открытия index.html
  6. Получение на рабочем столе ссылок на произвольные папки, в том числе и на папку с контентом
  7. Замена фона рабочего стола.

Для замены названий пунктов загрузочного меню нужно редактировать syslinux.cfg и isolinux.cfg:

в строках, формирующих меню загрузчика (строки, начинающиеся с "label") вместо label live и label disk пишем соответственно label Start и label Stop.

Для замены картинки на экране загрузочного меню (bootlogo) нужно сначала создать свой собственный вариант bootlogo.

Для этого из /home/ust/build/chroot/usr/share/gfxboot/$THEME/ (все это было создано на предыдущем этапе при автоматической сборке) копируем файл bootlogo куда-нибудь к себе (например, в специально созданный каталог /home/ust/logo). Здесь под переменной $THEME понимается значение THEME=<...>, которое прописано в файле config профиля.

Файл bootlogo является архивом каталога с элементами экрана загрузки, созданным с помощью утилиты cpio. Поэтому сначала архив надо распаковать, а потом проделать изменения, после чего опять запаковать.

Для порядка переименуем bootlogo в bootlogo.cpio и дадим команду распаковки:

[home/ust/logo]> cpio -i < bootlogo.cpio

В результате получим много разных файлов, среди которых интересен файл back.jpg. Он имеет размер 800х600 точек и его можно редактировать по вкусу.

После создания своей версии файла back.jpg нужно создать свой вариант bootlogo. Предварительно удалив имеющийся bootlogo.cpio (старый вариант), создаем новый cpio-архив командой

[home/ust/logo]> ls | cpio -o > ../newlogo.cpio

В результате в каталоге /home/ust получаем файл newlogo.cpio

(cpio не понимает метасимволов * или ?, поэтому на вход cpio был послан список файлов, созданный командой ls).

Для замены картинки в процессе загрузки системы (bootsplash) нужно заготовить jpeg'и с именами типа silent-XxY.jpg, где XxY - разрешение экрана. Таких картинок может понадобиться достаточно много, варианты можно посмотреть в chroot/etc/bootsplash/themes/current/images

Менять нужно будет только файлы с именами silent-..., файлы с именами bootsplash-... трогать не надо.

Теперь проводим сборку поэтапно с выполнением ручной настройки по необходимости.

[/home/ust/build]> rm livecd.iso -- Удаляем старый образ (если нужно)

[/home/ust/build]> spt-clean -- Очищаем сборочную среду и приводим ее в исходное состояние

[/home/ust/build]> spt-init-chroot -- Создаем "скелет" файловой структуры целевой системы

[/home/ust/build]> spt-make-chroot -- Собираем целевую систему из пакетов, указанных в packages

Ручная работа:

Для замены bootlogo удаляем в chroot/usr/share/gfxboot/$THEME файл bootlogo, копируем туда ранее созданный newlogo.cpio и переименовываем его в bootlogo. Потом делаем владельцем этого файла пользователя ust_a (с правами которого работает spt3) и выставляем (при необходимости) права 644.

(Тема графической загрузки определяется переменной THEME в файле конфигурации профиля (config). Указанная для этой переменной строка должна соответствовать названию темы в /boot/splash целевой системы , которое получается после установки пакета design-bootloader-* из репозитория (т.е. полезно перед вызовом spt-boot-gfxboot заглянуть в chroot/boot/splash/). В частности, пакет design-bootloader-livecd-desktop, включаемый в профиль, приводит к появлению chroot/boot/splash/desktop-livecd/ , поэтому в переменной THEME должно быть установлено значение desktop-livecd (т.е. то, что получается после установки пакета, а не то, что написано в его названии). А design-bootsplash-* должен соответствовать design-bootloader-* уже по названию пакета в репозитории.)

Для замены bootsplash копируем все заготовленные файлы silent-... в chroot/etc/bootsplash/themes/current/images и выставляем владельца и права как в случае с bootlogo.

Для обеспечения появления ярлыков на рабочем столе нужно сделать следующие действия.

С правами root скопировать в ~/build/chroot/usr/share/apps/kdesktop/DesktopLinks/ с рабочей системы (например, со сборочной) нужные ярлыки (см. /usr/share/apps/kdesktop/DesktopLinks/*, например, Home.desktop и documents.desktop) (подсказано Сергеем Турчиным)

[/home/ust/build]> spt-run-scripts -- Запускаем скрипты настройки конфигурации целевой системы

Ручная работа:

Для автоматического открытия файла index.html после загрузки системы нужно сделать следующие действия.

С правами root скопировать ~/build/profile/root/usr/share/autostart/indexhtml.desktop (файл настроек KDE для автозапуска index.html) в ~/build/chroot/usr/share/autostart/

Почему-то положительный эффект дает еще и переименование ~/build/chroot/usr/share/autostart/indexhtml.desktop в starthtml.desktop (в том же каталоге).

(В итоговом профиле переименование уже сделано.)

Затем выполняются следующие этапы spt3.

[/home/ust/build]> spt-pack-squashfs -- Создаем сжатую файловую систему

[/home/ust/build]> spt-boot-propagator -- По всей видимости, готовит загрузочную часть целевой системы

[/home/ust/build]> spt-boot-gfxboot -- Если эта команда ничего не вывела, то графической загрузки не будет, надо искать ошибки :\ (см. ниже).

[/home/ust/build]> spt-boot-splash -- Если предыдущая команда сработала некорректно, то от этой тоже толку не будет

[/home/ust/build]> profile/spt-copy-files iso -- Копируем контент в грядущий образ. (К сожалению, нельзя использовать этот этап только для замены контента.)

[/home/ust/build]> spt-pack-iso -- Создание финального образа целевой системы. Последний этап работы.

Замечание о звуковой подсистеме

Включение в список пакетов всего, что относится к alsa (kernel-modules-alsa, alsa-utils) и kde-multimedia с kmix'ом приводит к тому, что после загрузки звук оказывается всегда выключен. При ручном включении и настройке каналов (главный, фронт, PCM) все начинает работать. По подсказке Кирилла Маслинского (KirillMaslinsky) добавление в список пакета sound-scripts дало положительный эффект и на поддерживаемых звуковых картах звук включается автоматически.

Замечание о русской локали с UTF-8

В исходном профиле в файле config переменная LANGS установлена в ru_RU. С первоначальным профилем в итоге получается ru_RU.cp-1251.

Решение: в профиле в папке setup.d в скрипте console (а не locale!) прописать везде ru_RU.UTF-8 (см. итоговый профиль)

Иллюстрации

Bootlogo:

Исходный профиль

Итоговый профиль

Bootsplash:

Исходный профиль

Итоговый профиль

Благодарности

Большое спасибо ALTLinux в целом за возможность использования репозитория, спасибо также Михаилу Якшину, автору spt3 и краткого описания к нему, и особая благодарность Кириллу Маслинскому (KirillMaslinsky) за помощь в вышеописанном процессе и терпение, проявленное в ходе ее оказания.

ALTLinuxHeap: IvanKhakhaev/spt3-livecd-HOWTO (last edited 2008-05-19 09:16:36 by IvanKhakhaev)