9. Сборка системы

Введение

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

Начиная с версии утилит 3.4, модуль сборки системы был полностью переписан. Выполняемые файлы утилит были переименованы и теперь начинаются с префикса 'cl-builder-', после которого следует выполняемое действие (например, 'cl-builder-update').

Необходимые требования

Для выполнения сборки вам понадобится выход в интернет, свободное место на диске, а также любой доступный "ISO-образ системы Calculate Linux: версии 15 или выше, например, Calculate Linux Scratch или Calculate Scratch Server. Вместо ISO-образа можно указать CD-привод или USB Flash с установленным Calculate Linux. Для больших возможностей в формировании собственных сборок неплохо иметь свой Git-репозиторий с Calculate-совместимым профилем системы. Для размещения репозитория подойдёт такой хостинг как GitHub, Bitbucket или любой другой, например, собственный, поднятый при помощи Gitolite.

Для разворачивания и обновления образа без использования слоёв вам может потребоваться около 5 Гб свободного места на жёстком диске и 15 Гб при разворачивании образа без использовании слоёв (см. Подготовка системы к сборке). Для создания образа дистрибутива потребуется около 2 Гб. В случае создания бинарных пакетов дополнительно может потребоваться до 5 Гб свободного места.

Сборка дистрибутива может производиться как на отдельном разделе жёсткого диска, так и в выделенном каталоге файловой системы. Готовый образ сохраняется в директории /var/calculate/linux, бинарные пакеты сохраняются в директории /var/calculate/remote/builder. Позаботьтесь о наличии свободного места по этим путям.

Использование

Пакет sys-apps/calculate-utils 3.4, входящий во все дистрибутивы Calculate Linux 15, включает в себя необходимые компоненты для сборки системы.

Основные возможности:
  • поддержка графического интерфейса и работы из командной строки;
  • поддержка работы с многослойной файловой системой OverlayFS;
  • поддержка работы в системе, загруженной c Live USB;
  • поддержка параллельной сборки нескольких дистрибутивов;
  • создание мультизагрузочных USB Flash;
  • профили сборки: Calculate-совместимые;
  • поддерживаемые архитектуры: i686 и x86_64;
  • поддержка сборки 32-битных дистрибутивов на 64-битной системе.

Операции по сборке системы выполняются в разделе "Сборка" графической консоли утилит Calculate:

 

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

  • cl-builder-prepare (Подготовить новую сборку) - используется для подготовки данных для сборки;
  • cl-builder-profile (Изменить профиль) - используется для смены профиля собираемой системы;
  • cl-builder-update (Обновить сборку) - используется для обновления пакетов собираемой системы;
  • cl-builder-break (Прервать сборку) - используется для прекращения сборки;
  • cl-builder-image (Создать образ) - используется для создания загрузочного ISO-образа;
  • cl-builder-restore (Восстановить сборку) - используется для восстановления данных сборки после перезагрузки машины;
  • cl-builder-menu (Обновить меню загрузки) - используется для обновления мультизагрузочного меню Live USB.

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

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

Для подготовки системы к сборке кликните по иконке "Подготовить новую сборку" в разделе "Сборка" графической консоли утилит Calculate:

 

В открывшейся странице выберите исходный образ системы. В случае загрузки с Live USB по умолчанию вам будет предложен загруженный образ. По необходимости используйте дополнительные настройки.

Для работы в терминале выполните:

cl-builder-prepare

Основные опции:
  • --source SOURCE - исходный образ системы.

В качестве исходного образа может выступать ISO образ, CD-привод или Live USB с дистрибутивом Calculate Linux.

Дополнительные опции:
  • -d DEST, --disk DEST - раздел или директория для сборки. Убедитесь, что в разделе и в каталоге у вас не хранится информации, так как во время подготовки сборки она будет удалена.
  • --layers [ON/OFF] - использовать многослойную файловую систему (OverlayFS) для подготовки сборки, при использовании этой опции образ не будет распакован в файловую систему, в файловой системе будут хранится только изменения от базового образа. Не используется при сборке в отдельном разделе.
  • --id ID - идентификатор сборки. При одновременной сборке нескольких систем служит для обозначения сборки. По умолчанию обозначается как имя_репозитория:имя_профиля.

Исходя из того, укажете ли вы раздел или директорию сборки, будете ли вы использовать многослойную файловую систему, у вас может быть три варианта подготовки образа:

  1. Сборка в выделенной директории с использованием многослойной файловой системы.
  2. Сборка в выделенной директории без использования многослойной файловой системы.
  3. Сборка в выделенном разделе диска.

Сборка в выделенном разделе с использованием многослойной файловой системы не поддерживается.

Для экономии времени и места, по умолчанию, при подготовке образа используется многослойная файловая система.

Во всех типах сборки доступ к корню собираемой системы можно получить в директории /run/calculate/mount/каталог_сборки, где каталог сборки - это имя сборки с подменой символов ":" и "/" на "_" (пример: "distros_CLSK_amd64").

Во время подготовки системы к сборке выполняются следующие действия:

  1. Подключение базового образа в директории /var/calculate/mount/iso и /var/calculate/mount/squash
  2. Распаковка базового образа
  3. Настройка шаблонами builder/prepare (событие ac_builder_prepare), builder/setup (событие ac_builder_setup)
  4. Подключение точек монтирования /dev, /dev/shm, /dev/pts, /proc, /sys, /var/calculate/remote
  5. Отключение базового образа системы

Особенности в подготовке системы к сборке при использовании выделенного раздела:

  • Для развёртывания образа потребуется выделенный раздел, данные в котором будут удалены при форматировании. В качестве файловой системы будет использована текущая файловая система, если она поддерживается утилитами.

Особенности в подготовке системы к сборке при использовании слоёв:

  • Вместо распаковки исходный образ монтируется и остаётся примонтированным на всём протяжении сборки системы.
  • Дельта выполняемых изменений хранится в директории /var/calculate/builder/каталог_сборки.

Смена профиля системы

Смена профиля собираемой системы вам может понадобиться, главным образом, для выбора своего профиля, в котором вы можете описать особенности системы, такие как: состав пакетов, используемые флаги сборки, опции компилятора, настройки переменных утилит Calculate, шаблоны настройки системы, ebuild-ы пакетов и т.д.

Для переключения профиля, воспользуйтесь иконкой "Изменить профиль" в разделе "Сборка" графической консоли утилит, после чего откроется следующая страница:

 

По умолчанию отображаются профили репозитория distros. При использовании своего профиля, хранящегося, например, на Github, вы можете указать "github:lautre76", где "github" - обозначение сервиса хостинга, "lautre76" - имя вашей учётной записи. При указании сокращённого имени поиск профилей будет выполняться в репозитории "overlay.git".

В дополнительных настройках вы можете указать "Обновить кэш" для того, чтобы при наличии кэша репозитория данные были обновлены. Это может понадобиться, если вы захотите добавить новый профиль, отсутствовавший при предыдущем вызове команды.

После нажатия кнопки "Далее" откроется окно выбора профиля:

 

В списке доступных профилей отображаются все профили выбранного репозитория.

Состав пакетов (файл /var/lib/portage/world) формируется шаблонами утилит Calculate. Вы можете выбрать один из режимов обновления файла: переформировать, объединить или обновить. По умолчанию используется полная замена списка пакетов дистрибутива.

При работе в терминале для смены профиля вы можете использовать следующую команду:

cl-builder-profile

Основные параметры:
  • --id ID - идентификатор сборки. Указывать данный параметр необходимо в случае одновременных сборок. Просмотреть список идентификатором можно при помощи значения list.
  • --url URL - репозиторий профиля. По умолчанию использует резпозиторий, в котором находится текущий профиль системы.
  • --rebuild-world, --merge-world, --update-world - действие с файлов world при переключении профиля: список замещается списком из профиля, текущий список объединяется с новым или выполняется только обновление списка пакетов.

Дополнительные параметры:

  • -u [ON/OFF], --update-cache [ON/OFF] - обновить скаченный ранее репозиторий
  • --skip-setup-system [ON/OFF] - пропустить перенастройку системы после переключения профиля. По умолчанию после переключения профиля в системе выполняется действие аналогичное cl-setup-system, за исключением того, что в собираемой системе не будут выполнены шаблоны события 3_ac_install_live.

Переключение профиля в собираемой системе по сути аналогично переключению профиля в текущей системе при помощи команды cl-update-profile.

Обновление системы

Для обновления пакетов собираемой системы кликните по иконке "Обновить сборку" в разделе "Сборка" графической консоли утилит Calculate. После чего вам откроется следующая страница:

 

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

cl-builder-update

Параметры:

  • --id ID - идентификатор сборки. Указывать данный параметр необходимо в случае одновременных сборок.
  • -s [ON/OFF], --sync-only [ON/OFF] - выполнить только синхронизацию репозиториев и обновление настроек
  • -o [ON/OFF], --update-other [ON/OFF] - обновление вспомогательных репозиториев
  • -p [ON/OFF], --pretend [ON/OFF] - вместо действительного обновления пакетов отобразить только, что будет установлено
  • -r REPOSITORIES, --repositories REPOSITORIES - синхронизируемые репозитории. По умолчанию синхронизируются все репозитории дистрибутива, причём если репозиторий бинарный, то синхронизация будет до необходимых ревизий, в противном случае до ветки master.
  • -e [ON/OFF], --emergelist [ON/OFF] - отобразить список пакетов в формате emerge
  • --(rebuild|merge|update)-world действие с файлов world: список замещается базовым набором, текущий список объединяется с базовым или выполняются только обновление списка пакетов
  • --(force|skip|auto)-egencache - обновть кэш репозиторев: принудительно, не обновлять, при необходимости.
  • --(force|skip|auto)-eix-update - обновить кэш eix: принудительно, не обновлять, при необходимости.
  • --rebuild-changed-packages [ON/OFF] - пересобрать пакеты, ebuild файлы которых изменились (изменились либо сами ebuild файлы, либо eclass файлы, используемые для сборки пакетов.
  • -R [ON/OFF], --skip-revdep-rebuild [ON/OFF] - пропустить выполнение команды revdep-rebuild (опция включена по умолчанию)
  • --scan [ON/OFF] - выполнить поиск наиболее актуального сервера бинарных обновлений
  • --clean-pkg [ON/OFF] - удалять устаревшие архивы программ (очистка packages и distfiles от версий пакетов, которые отсутствуют в дереве portage)
  • --branch REFS - переключить репозитории на указанные ветки или ревизии. Начиная с версии 3.4 репозитории недостаточно переключить на нужную ветку один раз. При последующем запуске без параметра --branch утилиты попытаются привести репозитории к ревизиями, указанным на выбранном сервере бинарных обновлений.

Функционал cl-builder-update повторяет функционал cl-update за исключением того, что обновление выполняется внутри подготавливаемой сборки.

Список выполняемых действий:
Действия, обновляющие репозитории и настройки:
  1. Настройка шаблонами builder/prepare (событие ac_builder_prepare), builder/setup (событие ac_builder_setup)
  2. Синхронизация репозиториев (можно пропустить, указав "-r none")
  3. Синхронизация прочих оверлеев (можно пропустить, указав "-o off")
  4. Обновление кэша метаданных в репозиториях (можно пропустить, указав "--skip-egen-cache")
  5. Обновление кэшей связанных с репозиториями (можно пропустить указав "--skip-eix-update")
  6. Удаление устаревших файлов из distfiles, packages (выполняется при "--clean-pkg")
  7. Исправление настроек в собираемой системе (шаблоны события ac_update_sync)
  8. Выполнение dispatch-conf
Действия, обновляющие пакеты в системе, выполняются, если не указана опция -p:
  1. Выполнение emerge -uDN --changed-deps --with-bdeps=y @world
  2. Пересборка изменившихся пакетов
  3. Обновление Python пакетов
  4. Обновление Perl пакетов
  5. Выполнение emerge --depclean
  6. Пересборка модулей ядра
  7. Пересборка модулей xorg-server
  8. Пересборка @preserved-libs
  9. Выполнение revdev-rebuild
  10. Выполнение dispatch-conf
  11. Исправление бинарных пакетов
  12. Отображение списка новостей
  13. Проверка на устаревшие пакеты

Отдельной команды для проверки зависимостей нет, их можно проверить без обновления репозиториев при помощи cl-update -o off -r none -p.

Во время сборки будут загружены все необходимые пакеты с исходными текстами программ в директорию /var/calculate/remote/distfiles.

Помните, что вы всегда можете получить доступ к системе при помощи chroot, выполнив:

chroot /run/calculate/mount/каталог_сборки

Пример:

chroot /run/calculate/mount/distros_CLDX_amd64

Обратите внимание, что для доступа к собираемой 32-битной системе из-под 64-битной команду chroot следует выполнять, используя утилиту linux32. Пример:

linux32 chroot /run/calculate/mount/distros_CLDX_i686

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

 * /bin/bash уже запущена внутри distros:CLSK/amd64

Создание загрузочного образа

Для создания нового образа дистрибутива воспользуйтесь иконкой "Создать образ" в разделе "Сборка" графической консоли утилит Calculate. Страница создания образа будет выглядеть, как на рисунке ниже:

 

Большинство настроек будет по умолчанию скрыто от глаз. При желании вы можете указать, включить ли дистрибутивы проприетарных видеодрайверов в образ Live USB для того, чтобы иметь возможность оценить их работу, загрузившись с USB Flash. Вы можете выбрать метод сжатия образа для того, чтобы найти оптимальный вариант между размером файла и скоростью сжатия. Опция ISO hybrid позволит создавать образ диска, который можно писать на устройство при помощи прямого копирования (например, dd). Выполнение Prelink позволит слинковать библиотеки перед запаковкой для получения некоторого ускорения запуска программ.

После выполнения в директории /var/calculate/linux/ будет создан образ дистрибутива (с расширением .iso), файл с контрольными суммами (с расширением DIGESTS) и файл с составом программ (с расширением list).

В терминале запаковать образ можно, выполнив:

cl-builder-image

Основные параметры:
  • --id ID - идентификатор сборки; необходим, только если производится несколько сборок одновременно.
  • --iso IMAGE - путь и имя создаваемого ISO образа. Если не указывать, то образ будет помещен в каталог по умолчанию, и имя будет в стандартном формате, содержащее корткое имя дистрибутива, архитектуру и build.
Дополнительные параметры:
  • -V, --video [ON/OFF] - включить установочные файлы проприетарных драйверов в дистрибутив. При выключенной опции удаляет из дистрибутива установочные файлы проприетарных драйверов.
  • -c, --compress COMPRESS - формат сжатия при подготовке squashFS
  • --keep-tree [ON/OFF] - сохранить дерево портежей в образе. По умолчанию из дерева портежей (и оверлеев) удаляются ebuild файлы и metadata, остаются только eclass -файлы, профили и шаблоны (за исключением шаблонов в каталоге deprecated).
  • --live [ON/OFF] - выполнить модификацию init.d/calculate, так, чтобы при первой загрузке выполнялись только шаблоны ac_install_live. Опция включена по умолчанию, так как при сборке дистрибутива шаблоны ac_install_merge выполняются на этапе сборки пакета.
  • --isohybrid [ON/OFF] - модифицировать по завершению полученный образ утилитой isohybrid, чтобы его можно было записать USB Flash командной dd
  • --prelink [ON/OFF] - выполнить prelink перед созданием ISO образа

Полученный ISO образ в дальнейшем можно использовать в том числе и для новых сборок.

Прерывание сборки

Чтобы прервать выполнение сборки, воспользуйтесь иконкой "Прервать сборку" в разделе "Сборка" графической консоли утилит. После этого откроется следующая страница:

 

После выполнения операции все временные файлы будут удалены.

В терминале прервать сборку можно, выполнив:

cl-builder-break

Параметры:

  • --id ID - идентификатор сборки; необходим, только если производится несколько сборок одновременно.
  • --clear [ON/OFF] - очистить данные после отключения сборки (актуально при сборке в отдельном каталоге). Опция включена по умолчанию.
  • --clear-pkg [ON/OFF] - удалить бинарные пакеты

Восстановление сборки

Если во время работы с дистрибутивом компьютер был перезагружен, вы можете выполнить восстановление прерванной сборки. Для этого кликните по иконке "Восстановить сборку" в разделе "Сборка" графической консоли утилит Calculate. После чего откроется следующее окно:

 

То же действие можно выполнить в терминале, набрав:

cl-builder-restore

В качестве параметра вы можете указать идентификатор сборки.

Создание мультизагрузочной Live USB Flash

Вы можете полноценно работать с Live USB, создавая модификации текущего, либо любого другого ISO образа Calculate Linux. Для возможности сохранять на USB Flash данные система должна быть установлена на флешку при помощи утилит Calculate.

Во время работы с Live USB при создании образа загрузочное меню переформировывается таким образом, чтобы можно было выбрать загрузку с любого из созданных ISO-образов. Вы также можете просто скопировать в директорию /linux USB Flash другие ISO-образы Calculate Linux, а затем обновить меню загрузчика. Для этого кликните по иконке "Обновить меню загрузки" в разделе "Сборка" графической консоли утилит Calculate. После этого откроется следующая страница:

 

Вы можете сформировать меню флешки, загрузившись с неё, либо вставив в USB разъём и из текущей системы при помощи утилит выполнить обновление.

При работе в терминале для обновления меню выполните:

cl-builder-menu -d устройство

Вместо устройства можно указать путь, в который подключена USB Flash.

Спасибо!