Создание модулей
Модули в 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-скрипт, описывающий шаги по сборке вашего модуля. Это удобно, если нужно выполнить какие-либо действия в файловой системе, импортировать ключи, добавить репозиторий и т.д. до или после установки. Вот пример такого скрипта:
#!/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/mymodulechroot2sb
Утилита 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— активировать бандл MiniOSdeactivate BUNDLE— деактивировать активный бандл MiniOSlist— показать список активных бандлов MiniOSsavechanges— сохранить изменения, внесённые во время работы, в бандл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 из исходников с пользовательскими конфигурациями