Перейти к содержимому

Создание модулей

Модули в MiniOS — это автономные пакеты файлов и конфигураций, расширяющие функциональность базовой системы. Они похожи на пакеты в других Linux-дистрибутивах, но спроектированы так, чтобы накладываться друг на друга, обеспечивая гибкость и настраиваемость системы. Такой послойный подход позволяет легко настраивать систему, откатывать изменения и делиться конфигурациями.

Полное описание процесса сборки MiniOS и архитектуры системы смотрите в руководстве по сборке MiniOS. Информацию о системе управления пакетами CondinAPT, используемой в модулях, смотрите в документации по CondinAPT.

В MiniOS существует достаточно много утилит для создания модулей. Все они предназначены для работы в терминале и требуют прав суперпользователя.

Утилиты для создания модулей:

apt2sb — устанавливает пакеты из репозиториев и упаковывает их в модуль.
script2sb — выполняет действия, описанные в скрипте, и упаковывает результат в модуль.
chroot2sb — открывает chroot, позволяя выполнить любые действия внутри, после выхода сохраняет результат в модуль.

Дополнительные утилиты для управления модулями:

dir2sb — конвертирует существующую директорию в сжатый модуль.
sb2dir — преобразует сжатый модуль в директорию для изучения содержимого.
rmsbdir — удаляет директорию модуля, созданную с помощью sb2dir.
savechanges — сохраняет все изменённые файлы системы в сжатый файловый бандл.
sb2iso — генерирует ISO-образ MiniOS с возможностью добавления или исключения модулей.
sb — универсальный интерфейс для управления бандлами MiniOS (активация, деактивация, список, конвертация).

Общие возможности утилит для создания модулей:

  • Поддержка различных типов сжатия: zstd (по умолчанию), gzip, lzo, xz
  • Настраиваемое расширение файла модуля (по умолчанию: sb)
  • Фильтрация по уровням для управления включением зависимых модулей
  • Пользовательское имя выходного модуля
  • Все утилиты должны запускаться с правами root

apt2sb

Чтобы собрать модуль с помощью apt2sb, просто перечислите пакеты, которые хотите включить в модуль, например: apt2sb install chromium chromium-sandbox. После выполнения этой команды в папке, где она была запущена, появится модуль chromium.sb, содержащий браузер Chromium. Этот модуль будет собран с учётом всех модулей, загруженных в систему, то есть для его работы потребуются все эти модули, поскольку необходимые для работы программы библиотеки могут уже быть установлены в системе и находиться в нижележащих модулях.

С помощью опции -l/--level можно указать, на каком верхнем модуле нужно собирать ваш модуль. Например, команда apt2sb install -l 4 chromium chromium-sandbox при сборке отфильтрует все модули с номером 04 и выше, то есть модуль будет собран на основе модулей с номерами 00-03. В результате выполнения этой команды в папке, откуда она запускалась, появится модуль 04-chromium.sb. Этот модуль будет больше по размеру, чем в предыдущем примере, так как в него войдут все необходимые для запуска программы библиотеки, которые могли бы находиться в модулях с номерами 04 и выше, но он сможет работать как при наличии модулей 04-xx, так и без них.

Имя модуля формируется автоматически на основе имени первого указанного пакета (в нашем случае chromium) и, если задана опция --level, номера уровня. Если вы хотите задать имя модуля вручную, используйте опцию -n/--name, например: apt2sb install -l 4 chromium chromium-sandbox -n 10-browser.sb.

Дополнительные опции apt2sb:

  • -c/--comp — тип сжатия (zstd, gzip, lzo, xz). По умолчанию: zstd
  • -b/--bext — расширение бандла. По умолчанию: sb
  • -y/--yes — автоматический ответ «да» на запросы
  • --allow-downgrades — разрешить понижение версий пакетов
  • --install-recommends — учитывать рекомендуемые пакеты как зависимость для установки
  • --install-suggests — учитывать предлагаемые пакеты как зависимость для установки
  • --no-install-recommends — не учитывать рекомендуемые пакеты как зависимость
  • --no-install-suggests — не учитывать предлагаемые пакеты как зависимость
  • -t/--target-release — релиз по умолчанию для установки пакетов

В apt2sb также есть команда upgrade, позволяющая обновлять уже установленные пакеты. Команда upgrade использует те же опции, что и install.

script2sb

Для создания модуля с помощью script2sb необходимо написать bash-скрипт, описывающий шаги по сборке вашего модуля. Это удобно, если нужно выполнить какие-либо действия в файловой системе, импортировать ключи, добавить репозиторий и т.д. до или после установки. Вот пример такого скрипта:

bash
#!/bin/bash
# Install the keys to access the Debian repository and the apt add-on to access the repository via https
apt install -y debian-keyring debian-archive-keyring apt-transport-https
# Adding a GPG key for the Caddy repository
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
# Add the Caddy repository to the package source list
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
# Updating the list of packages
apt update
# Installing Caddy
apt install caddy
# Remove keys to access the Debian repository
apt remove -y debian-keyring debian-archive-keyring apt-transport-https
# Deleting the source list file and GPG key for the Caddy repository
rm /etc/apt/sources.list.d/caddy-stable.list /usr/share/keyrings/caddy-stable-archive-keyring.gpg

Чтобы запустить сборку по этому скрипту (назовём его caddy.sh), выполните команду script2sb -s ./caddy.sh.

Доступные опции script2sb:

  • -s/--script — использовать FILE как скрипт установки (обязательно)
  • -l/--level — использовать LEVEL как уровень фильтрации
  • -n/--name — использовать NAME как имя файла модуля
  • -c/--comp — тип сжатия (zstd, gzip, lzo, xz). По умолчанию: zstd
  • -b/--bext — расширение бандла. По умолчанию: sb
  • -d/--directory — скопировать содержимое DIR в корень модуля

Если имя модуля не указано, оно формируется на основе номера уровня (если задан) и имени скрипта. Пример выполнения команды с этими опциями: script2sb -s ./caddy.sh -l 1 -n 01-caddy.sb.

В дополнение к этим опциям можно использовать параметр -d/--directory. Если он указан, содержимое папки, переданной в качестве аргумента, будет скопировано в корень модуля до выполнения скрипта. Файлы в такой папке должны располагаться так, как если бы они находились в корне системы. Например, если нужно добавить ярлык для какой-либо программы в меню, создайте папку mymodule и в ней структуру относительно корня системы:

mkdir -p /home/user/mymodule/usr/share/applications

В mymodule/usr/share/applications нужно поместить desktop-файл, который будет упакован в модуль после завершения сборки, и выполнить команду сборки:

script2sb -s ./caddy.sh -l 1 -n 01-caddy.sb -d /home/user/mymodule

chroot2sb

Утилита chroot2sb используется для создания интерактивной среды chroot. Это позволяет вручную выполнить любые действия, необходимые для сборки вашего модуля (установка пакетов, редактирование файлов, выполнение команд и т.д.). После выхода из chroot все внесённые изменения упаковываются в модуль.

Доступные опции chroot2sb:

  • -l/--level — использовать LEVEL как уровень фильтрации
  • -n/--name — использовать NAME как имя файла модуля
  • -c/--comp — тип сжатия (zstd, gzip, lzo, xz). По умолчанию: zstd
  • -b/--bext — расширение бандла. По умолчанию: sb
  • -d/--directory — скопировать содержимое DIR в корень модуля

Если имя модуля не указано, оно формируется на основе номера уровня (если задан) и текущей даты и времени в формате YYYYMMDD-HHMM.

Также можно использовать опцию -d/--directory, аналогично script2sb. Если она указана, содержимое указанной папки будет скопировано в корень модуля до входа в chroot. Это позволит задать исходную точку для ваших доработок.

Примеры использования:

  • Обычный chroot, имя модуля формируется автоматически: chroot2sb
  • Указать уровень и тип сжатия: chroot2sb -l 3 -c gzip
  • Указать уровень, имя и сжатие: chroot2sb -l 3 -n 04-my-module.sb -c xz
  • Скопировать файлы из директории перед входом в chroot: chroot2sb -d /path/to/my/files

После запуска команды chroot2sb вы попадёте в chroot-среду. Здесь можно выполнить любые необходимые действия. По завершении работы наберите exit для выхода из chroot. После этого chroot2sb упакует изменения в модуль. Команды, введённые в chroot, не сохраняются как часть процесса установки итогового модуля — сохраняется снимок итогового состояния файловой системы. История bash автоматически удаляется из модуля.

Дополнительные утилиты для управления модулями

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

dir2sb

Утилита dir2sb используется для преобразования существующей директории в сжатый модуль. Это удобно, если у вас уже подготовлена структура с нужными файлами, и вы хотите упаковать её в модуль без выполнения каких-либо установочных процессов.

Доступные опции dir2sb:

  • -c/--comp — тип сжатия (zstd, gzip, lzo, xz). По умолчанию: zstd
  • -b/--bext — расширение бандла. По умолчанию: sb

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

dir2sb [ОПЦИИ] SOURCE_DIRECTORY [TARGET_FILE]

Поведение:

  • Если SOURCE_DIRECTORY не имеет расширения .sb и не называется 'squashfs-root', то сама директория включается в модуль, и TARGET_FILE обязателен.
  • Если TARGET_FILE не указан, SOURCE_DIRECTORY заменяется новым файлом модуля.

Примеры:

  • Преобразовать подготовленную директорию в модуль: dir2sb /path/to/my/prepared/files my-module.sb
  • Преобразовать директорию squashfs-root (заменяет оригинал): dir2sb squashfs-root
  • Использовать другое сжатие: dir2sb -c xz /path/to/files custom-module.sb

Эта утилита особенно полезна, если вам нужно:

  • Упаковать заранее настроенные файлы и директории
  • Конвертировать извлечённое содержимое модуля обратно в модуль
  • Создавать модули из вручную подготовленных директорий

sb2dir

Утилита sb2dir преобразует сжатый модуль (.sb файл) в директорию с таким же именем. Это удобно для извлечения и изучения содержимого модуля.

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

sb2dir [source_file.sb] [optional_output_directory]

Поведение:

  • Если выходная директория указана, она должна существовать
  • Если выходная директория не указана, используется имя source_file.sb, и директория монтируется поверх tmpfs

Примеры:

  • Извлечь модуль для изучения содержимого: sb2dir mymodule.sb
  • Извлечь в определённую директорию: sb2dir mymodule.sb /tmp/extracted

rmsbdir

Утилита rmsbdir удаляет директорию модуля, созданную с помощью sb2dir. Это корректно очищает монтирование tmpfs, если оно использовалось.

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

rmsbdir [source_directory.sb]

Пример:

  • Удалить извлечённую директорию модуля: rmsbdir mymodule.sb

savechanges

Утилита savechanges сохраняет все изменённые файлы в системе в сжатый файловый бандл. Это удобно для создания модулей из изменений, внесённых во время работы.

Доступные опции:

  • -c/--comp — тип сжатия (zstd, gzip, lzo, xz). По умолчанию: zstd
  • -b/--bext — расширение бандла. По умолчанию: sb

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

savechanges [ОПЦИИ] target_file.sb [changes_directory]

Если changes_directory не указана, используется /run/initramfs/memory/changes.

Примеры:

  • Сохранить все текущие изменения: savechanges my-changes.sb
  • Сохранить с другим сжатием: savechanges -c xz my-changes.sb

sb2iso

Утилита sb2iso генерирует ISO-образ MiniOS с возможностью добавления указанных модулей или исключения существующих.

Доступные опции:

  • -e/--exclude — исключить любой существующий путь или файл, совпадающий с REGEX
  • -n/--name — указать имя выходного ISO-файла (по умолчанию: minios-YYYYMMDD_HHMM.iso)

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

sb2iso [ОПЦИИ]... [MODULE.SB]...

Примеры:

  • Создать ISO MiniOS без модуля firefox.sb: sb2iso -e 'firefox' -n minios_without_firefox.iso
  • Создать только текстовый режим MiniOS: sb2iso --exclude='firmware|xorg|desktop|apps|firefox' --name=minios_textmode.iso

sb

Утилита sb предоставляет универсальный интерфейс для управления бандлами MiniOS, включая активацию, деактивацию и операции конвертации.

Важно: Для большинства операций утилита sb требует поддержки AUFS (Advanced multi layered UniFication FileSystem) в ядре. Если AUFS недоступен в вашем ядре, многие команды работать не будут.

Доступные команды:

  • activate BUNDLE — активировать бандл MiniOS
  • deactivate BUNDLE — деактивировать активный бандл MiniOS
  • list — показать список активных бандлов MiniOS
  • savechanges — сохранить изменения, внесённые во время работы, в бандл
  • rm DIR / rmdir DIR — удалить распакованную директорию бандла
  • conv PATH — конвертировать бандл .sb в директорию или обратно

Примеры:

  • Активировать модуль: sb activate mymodule.sb
  • Деактивировать модуль: sb deactivate mymodule.sb
  • Показать активные модули: sb list
  • Конвертировать модуль в директорию: sb conv mymodule.sb
  • Конвертировать директорию в модуль: sb conv mymodule/

Примечание: Команды activate, deactivate и list требуют поддержки AUFS в ядре и прав root. Команды conv, rm и rmdir работают без AUFS, но также требуют прав root.

Связанная документация

  • Пересборка ISO — Узнайте, как упаковать свои собственные модули в загрузочные ISO-образы с помощью sb2iso
  • Сборка MiniOS — Полное руководство по сборке MiniOS из исходников с пользовательскими конфигурациями