Собираем свой дистрибутив с Calculate Linux Scratch

11 Фев
2010

Статья опубликована в журнале Системный Администратор
Практически каждый пользователь Linux хоть раз да собирал свой дистрибутив. Разработчики Calculate Linux предлагают свой вариант.

Необходимость иметь свой вариант системы для системного администратора, да и обычного пользователя может быть продиктована многими факторами. Среди главных — удобство развертывания, когда в устанавливаемой системе присутствует все необходимые приложения, последние версии ядра и системных библиотек, модули локализации, драйвера и так далее.

В Microsoft кстати это тоже отлично понимают и корпорация предлагает средства пересборки системы — пакет автоматической установки Windows (Windows Automated Installation Kit) и Microsoft Deployment Toolkit. Конечно же Linux развивается несколько иным путем, так дистрибутивы выходят гораздо чаще Windows и собираются по другому принципу. Хотя не все релизы считаются стабильными и рекомендуются разработчиками к промышленному применению. А при массовом развертывании на предприятии используются стабильные релизы рекомендуемые разработчиками, например Ubuntu LTS (Long Term Support). Очевидно, это одна из причин по которой в Linux большее распространение получили системы автоматической инсталляции, например такие как – Kickstart. При помощи подготовленного Kickstart файла можно установить дистрибутив с заданными параметрами и набором приложений. Изначально Kickstart появился в RedHat, и сегодня используется его многочисленными клонами и некоторыми другими дистрибутивами вроде Ubuntu. Пересборка системы производится в основном энтузиастами и для собственных нужд. А в инструментарии большинства дистрибутивов мы не найдем удобных средств для этого. Здесь можно отметить Ubuntu Customization Kit (UCK) и rBuilder (http://www.rpath.org/), средство сборки дистрибутива rPath. Конечно, есть Linux From Scratch, который хотя и пользуется некоторой популярностью, но вряд ли может послужить средством массового применения.
Основой Calculate Linux послужил Gentoo. До недавнего времени развивались две основные ветки – серверная CDS (Calculate Directory Server) и для настольных систем CLD (Calculate Linux Desktop). Последняя была представлена в двух вариантах с разными рабочими столами: CLD это KDE 4.x и CLDX – XFCE 4.6.х. Недавно в семействе Calculate Linux появился совершенно новый вариант Calculate Linux Scratch (CLS) – представляющий собой LiveCD, предназначенный для самостоятельной сборки системы под любые задачи. Идея вообщем проста – вместо готовых сборок, в которых часто нет необходимого конкретному пользователю софта, дать удобный инструмент позволяющий создать нужное решение самостоятельно. История появления CLS проста. В начале, была собрана информация о том, что не устраивает пользователей Gentoo в других бинарных дистрибутивах построенных на Gentoo, в частности Calculate и Sabayon. Выяснились две причины: отсутствие нужного софта и отсутствие сборки Calculate Linux с рабочим столом GNOME. В итоге оптимальный дистрибутив устраивающий всех, должен был содержать только те программы и библиотеки которые будут установлены в большинстве случаев – XOrg, Firefox, библиотеки, системные утилиты, драйвера. Так собственно и выглядит CLS.
Первая CLS версия под номером 9.8 вышла в августе 2009 года. Главная особенность появление режима интерактивной сборки системы, позволяющего внести изменения в состав дистрибутива. Причем сразу стало доступно два варианта: CLS и CLSG. Версия CLSG содержит облегченную среду Gnome (gnome-base/gnome-light), менеджер сеансов GDM и Wicd для графической настройки проводных и wifi сетей (всего на ~80 пакетов больше CLS). Дистрибутив выпущен под две архитектуры i686 и x86_64. Первоначально CLS ориентировался именно на стороннего пользователя, сами же разработчики не планировали использовать его для сборки Calculate Linux. Но результат заставил пересмотреть это мнение и теперь CLS является основной для всех будущих версий Calculate Linux, как серверных так и настольных. Ведь CLS может выступать при сборке в роли stage3, содержит portage и базовый софт, а все что отличается в USE флагах (например, в KDE версии) при необходимости пересобирается, но таких пакетов достаточно мало. Так если при стандартной сборке Gentoo (и CLS) “emerge -e system” выполняется дважды, то далее уже в этом нет необходимости, а значит экономится время и ресурсы. Кроме того, учитывая достаточно небольшой состав приложений, для самостоятельной сборки CLS не требуется больших ресурсов. Продолжая ежемесячный цикл выпуска новых версий, последние два релиза дистрибутива (август и сентябрь) были именно CLS/CLSG.
В середине сентября появился следующий релиз CLS 9.9, в котором:

  • перешли на файловую систему Aufs2;
  • сохранена 100% совместимость с Gentoo (по сути Calculate уже практически является частью Gentoo, оверлей помещен в layman, ebuild calculate2 планируется перенести в портежи);
  • используется ядро gentoo-sources;
  • поддерживается установка на USB-Flash, и на HDD/USB-HDD (с файловой системой: ext4, ext3, ext2, reiserfs, xfs и jfs).
  • появилась новая утилита “cl-unmask” предназначенная для размаскировки пакетов;
  • обновлены X.Org 7.4, Kernel 2.6.30.5, Firefox 3.5.3, Gnome 2.24.1 (в CLSG).

Размер образа:

  • CLS 9.9: i686 — 573 MB, x86_64 — 629 MB
  • CLSG 9.9: i686 — 651 MB, x86_64 — 709 MB

Собираем дистрибутив в интерактивном режиме

Чтобы воспользоваться режимом интерактивной сборки следует установить дистрибутив на жесткий диск с параметром “—build”, либо выбрать режим загрузки “Builder” в загрузочном меню LiveCD.

В загрузочном меню Calculate Linux Scratch выбираем Build

В загрузочном меню Calculate Linux Scratch выбираем Build

В этом случае файловая система после загрузки системы будет состоять из трех слоев aufs2 (Advanced Multi Layered Unification File System, представляет собой усовершенствованную реализацию файловой системы Unionfs 2):

  • calculate – первый слой, являющийся образом системы загружаемой с носителя (livecd.squashfs) и смонтированный в режиме «только для чтения». Это основа будущего дистрибутива, которую можно менять.
  • delta - слой, в котором сохраняются все изменения, произведенные во время сборки;
  • workspace — рабочий слой, в котором производятся все манипуляции по изменению исходной системы.

Все указанные слои являются подкаталогами в /mnt/scratch и автоматически образуются после загрузки системы.

# mount | grep /mnt/scratch
tmpfs on /mnt/scratch/delta type tmpfs (rw,relatime)
tmpfs on /mnt/scratch/workspace type tmpfs (rw,relatime)
/dev/loop0 on /mnt/scratch/calculate type squashfs (ro,relatime)

Собственно по наличию каталога /mnt/scratch и определяется текущий режим работы системы (в нашем случае Builder).
Переходим в режим интерактивной сборки, введя в консоли “cl-builder”, после выполнения команды приглашение изменит цвет. Вся дальнейшая работа в текущей виртуальной консоли будет производиться в chroot окружении /mnt/builder. Теперь можно работать как в обычно в Gentoo — обновить портежи, устанавливать, обновлять программы. Здесь необходимо сделать важное замечание. В обычном режиме слои монтируются в таком порядке: calculate + delta + workspace, в интерактивном — calculate + delta.
После установки каждого пакета (завершения выполнения emerge) скрипт “cl-builder” выполняет команду “mount -o remount” перемонтируя заново слой delta. В итоге все изменения в delta сразу же становятся доступными в основной системе (например появляются ярлыки приложений) и их можно протестировать, перед сборкой нового образа. Запуск приложения в chroot окружении приводит к созданию нежелательных временных файлов, которые затем попадают в образ. Именно поэтому во избежание конфликтов в работе устанавливаемых программ, установку и удаление пакетов следует производить только в chroot окружении через cl-builder, а тестировать в обычном. Обновляем утилиту calculate.

# layman -S; emerge calculate

Обновляем портежи (в принципе релизы CLS выходят раз в месяц и этот шаг можно пропустить):

# eix-sync

И устанавливаем нужное приложение:

# emerge weechat

По окончании сборки программа будет сразу же доступна в рабочей системе. В слое дельта появятся новые файлы и библиотеки. Аналогичным образом добавляем и остальные приложения. По окончании работы выходим из режима сборки командой “exit”.
Теперь чтобы собрать загрузочный ISO образ, достаточно смонтировать раздел жесткого диска (если объема ОЗУ достаточно этот шаг можно пропустить):

# mount /dev/sda3 /usr/calculate/share/linux

И затем собираем образ командой:

# calculate --iso

Через некоторое время в каталоге /usr/calculate/share/linux появится ISO образ с новой системой.

# ls /usr/calculate/share/linux/
cls-9.9-i686.iso cls-9.9-i686.iso.DIGESTS

Еще важный момент. Если CLS для сборки установлен на флэшку (calculate -d /dev/sdX), можно пересобрать оригинальный файл livecd.squashfs, в котором собственно, и находится система сохранив изменения. Для этого достаточно ввести команду:

# calculate --rebuild

Новый файл будет иметь другой порядковый номер сборки. При следующей загрузке будет уже использован новый образ со всеми изменениями.
Следует заметить, что полученный в интерактивном режиме дистрибутив подходит для массового пользователя, но считается не совместимым с Calculate Directory Server (CDS). Чтобы собрать совместимый с CDS вариант, необходимо использовать обычный режим сборки.

Обычный режим сборки

Чтобы использовать обычный режим сборки системы следует установить Calculate Linux, (любую версию CLS/CLSG, CLD, CLDX или CDS) на жесткий диск обычным образом. Затем копируем в каталог /usr/calculate/share/linux установленной системы ISO образ CLS оригинальный (если нужна оригинальная версия системы, предложенная разработчиками) или созданный нами в интерактивном режиме. Вначале следует приготовить систему для сборки командой “calculate” запустив ее с параметром “-c/—configure”.

Подготавливаем систему к сборке

Подготавливаем систему к сборке


По умолчанию будет производиться сборка текущей версии системы, то есть если работаем в CLS, то и собираться будет CLS. Чтобы указать другой вариант дистрибутива, добавляем параметр –s/—os=[CLD|CLDX|CLS|CLSG|CDS]. И готовим систему к сборке, например CLDX.

# layman -S; emerge calculate
# calculate -c -s CLDX
Building Calculate Linux Desktop
Collecting system information
  Language: en_US
  Keymap: en_US
  Timezone: UTC
  Computer name: calculate
  Network devices: eth0 (DHCP)
Hardware
  Machine hardware name: i686
  Quantity processors: 1
  Create directory stages...  done.
…

В текущей версии скрипта calculate (1.2.6), не убраны проверки наличия архивов stage3 и portage, которые требовались ранее для сборки системы. Так если в процессе появится сообщение:

To continue copy file "stage3-i686-YYYYMMDD.tar.bz2" to directory "/usr/calculate/share/stages".

Значит в /usr/calculate/share/linux недоступен ISO образ. Проверяем:

# ls /usr/calculate/share/linux/
cls-9.9-i686.iso

Второе возможное сообщение требует архив с portage.

To continue copy file "portage-YYYYMMDD.tar.bz2"
to directory "/usr/calculate/share/snapshots".

Для всех систем кроме CDS и CLS в stage3 и portage нет необходимости, их заменяет сам CLS. Для этих двух систем уже понадобятся последние версии архивов с stage3 и portage.
В будущей версии 1.2.8 проверку наличия portage для настольных версий систем обещают убрать (в GIT уже исправления присутствуют). Если это так, можно обновить в ручную оверлей Сalculate командой “eix-sync” (в ходе выполнения configure, обновляется оверлей и утилита calculate). Как вариант лучше изменить сам скрипт, закомментировав одну строку в разделе “Определим наличие stage, portage” (строка 1828):

# “Определим наличие stage, portage”
 
if(!$data{portage} && !defined $data{arg}{'vars'}){
printmes("\n");
printmes(gettext('To continue copy file'));
printmes(" \"portage-YYYYMMDD.tar.bz2\"\n");
 printmes(gettext('to directory')); printmes(" \"$data{portagepath}\".\n");
beep();
# комментируем строку с exit
#                      exit;
}

2
После этого подготовка системы к сборке должна пройти без проблем. Если ввести команду “calculate -c” в режиме “Builder” получим сообщение:

rmdir: failed to remove `/mnt/builder': Device or resource busy

Смотрим:

# mount | grep /mnt/builder
none on /mnt/builder type aufs (rw,relatime,si=150eca98)
/usr/calculate/share on /mnt/builder/usr/calculate/share type none (rw,bind)
none on /mnt/builder/proc type proc (rw)
/dev on /mnt/builder/dev type none (rw,bind)
/dev/pts on /mnt/builder/dev/pts type none (rw,bind)

При конфигурировании ISO образ CLS будет распакован в свободный дисковый раздел (так сделано специально, что было легко чистить временные файлы), который автоматически форматируется в ReiserFS и монтируется в /mnt/builder.

# mount | grep /mnt/builder
/dev/sda3 on /mnt/builder type reiserfs (rw)

Если скрипт не сможет определить раздел самостоятельно, его следует указать при помощи параметра “-d”.
В процессе работы команды будет изменен файл /mnt/builder/etc/make.conf, в соответствии с настройками выбранной системы, в частности USE флаги, языковые настройки. Сравним оригинальный make.conf с CLS и образовавшийся после ввода “calculate –c –s CLDX

# diff /etc/make.conf /mnt/builder/etc/make.conf
7c7
< CFLAGS="-O2 -march=i686 -pipe"
---
> CFLAGS="-Os -march=i686 -pipe"
28c28
< gtk
---
>   gtk -eds -gnome -kde
40c40
< LINGUAS="en ru"
---
> LINGUAS="en de es fr it pl pt_BR ru uk"
42c42
< PKGDIR="/usr/calculate/share/packages/CLS/9.9/i686"
---
> PKGDIR="/usr/calculate/share/packages/CLDX/9.9/i686"

После обновления портежей и выполнения “emerge sys-apps/portage” скрипт закончит этап подготовки. Cостав пакетов которые будут установлены можно просмотреть при помощи:

# calculate –l

Правим при необходимости /mnt/builder/etc/make.conf (man make.conf) и епереходим к шагу проверки и размаскировки зависимостей для чего используем ключ “-D/—dependence”.

# calculate -D

Проверка зависимостей

Проверка зависимостей


По окончании самый долгий этап — сборка системы при помощи ключа “-m/—make”:

# calculate –m

Все новые пакеты пересобирается с флагом “—newuse”, то что есть пропускается.
По окончании упаковываем дистрибутив в архив (7z) командой:

# calculate -p

И создаем ISO образ:

# calculate --iso -s cld

Результат сборки системы можно увидеть в каталоге /usr/calculate/share/linux/.

В итоге сборка системы при помощи Calculate Linux Scratch выглядит на порядок проще и происходит быстрее, чем сборка того же Gentoo. Путем довольно нехитрых манипуляций можно получить на выходе готовый дистрибутив под свои задачи.

Новое в Calculate Linux

С момента выхода первой статьи в Calculate Linux появилась поддержка “из коробки” DNS и DHCP серверов, в качестве реализации выбраны BIND и dhcpd. Соответственно добавлены и новые утилиты:

  • для управления DNS — cl-dns-recadd, cl-dns-recdel, cl-dns-recmod, cl-dns-zoneadd, cl-dns-zonedel, cl-dns-zonemod;
  • для управления DHCP — cl-dhcp-hostadd, cl-dhcp-hostdel, cl-dhcp-hostmod, cl-dhcp-netadd, cl-dhcp-netdel, cl-dhcp-netmod.

Установка и управление заданными сервисами осуществляется также просто. Например, Чтобы установить DNS, используем команду “cl-setup dns”, во время установки DHCP сразу задаются параметры работы при помощи такой команды:

cl-setup --router <ip шлюза> --dnames < имена доменов> --range < диапазон ip>\
--net </ip><ip сети с маской /24> --dnsip </ip><ip DNS сервера> dhcp
</ip>

Плюс полезная утилита “cl-unmask”, предназначенная для размаскировки пакетов, которая является альтернативой “autoumnask”.
Формат вывода прост:

# cl-unmask package1 package2

Файл размаскировки создается для всех версий включая последнюю.

Комментировать

Наверх