мемный заголовок))) ладно, теперь серьёзно. >:|
Я вернулся! И начал писать с нуля вторую версию своего имба-поделия под названием Booty. От слова Boot. Цель у этой штуки всего одна: лёгким движением пальцев рук создавать загрузочные образы операционных систем.
https://github.com/sp00f1ng/booty/tree/booty2 // Это пре-альфа версия, многие планируемые функции ещё не реализованы.
Сборка загрузочного образа состоит из трёх ключевых этапов: сборка ядра, сборка initramfs и сборка iso.
Система внутри — всегда ваша, любая, на выбор. Вы можете любую систему установить в директорию, в chroot, а потом закатать её в ISO всего одной командой booty chroot/
, либо целиком весь /dev/sda упихать в загрузочный ISO или initrd, не суть важно. При этом, загружается система на ваш выбор, хоть в голое tmpfs, хоть в SquashFS + Overlay FS. Такая главная идея booty. Всё это уже реализовано в первой версии, но сейчас надо сделать _проще_.
Основные отличия от первой версии:
- booty >= 2.0 теперь самостоятельно собирает ядро, проводя весь процесс «от» и «до»: скачает, распакует, соберёт, аккуратно положит куда надо.
- Чёткое разделение на API и пользовательский интерфейс, то есть, каждая вызываемая функция теперь самодостаточна и может быть выполнена независимо от контекста: вы можете использовать интерфейс booty >= 2.0 по-отдельности для личных целей, например, собрать ядро последней версии.
- Самая главная моя задача сделать booty >= 2.0 настолько юзер-френдли, насколько это в принципе возможно. Чтобы поведение предугадывалось и было логичным. Настолько, что запуск booty без каких-либо параметров всё равно выплюнет вам какой-нибудь загрузочный ISO, я пока только не решил, что в него складывать, но дело тривиальное задать все параметры по-умолчанию.
Например, запуск команды booty linux
скачает ядро Linux последней версии, распакует, соберёт и установит во временную директорию.
Другие примеры:
booty linux 5.7.12
— соберёт ядро указанной версии.
booty linux --install-path /
— соберёт ядро последней версии и установит прямо в /, так что если вы могли бы доверить свой / моей booty, этим можно пользоваться и вне контекста создания загрузочных образов. По-умолчанию же создаётся /tmp директория для --install-path, куда ядро будет установлено в любом случае.
Можно задать директорию для кэширования файлов, куда будут помещаться исходный код и собранные ядра. То есть, на каждый запуск booty вам не придётся ждать пока ядро скачается, или пока соберётся. Если вы собираете образы однотипных систем, то можете брать ядро из имеющегося кэша.
booty linux --cache /usr/src
Представим ситуацию:
1) Я хочу собрать 2 образа для сервера, и 8 образов для декстопа.
2) Ядро последней версии.
3) Конфиг разный.
booty linux 5.11.11 for-workgroups --config .config1 --cache /usr/src
booty linux 5.11.11 for-workstations --config .config2 --cache /usr/src
Ядра будут собраны ровно по одному разу, а далее, при повторном запуске сборки образов, они уже будут браться из кэша.
Грубо говоря-мягко выражаясь, запустив в цикле while true; do booty linux --cache /usr/src; done
ядро будет загружено и собрано ровно один раз, а далее оно помещается в --cache, и при повторном запуске оно будет просто устанавливаться раз за разом во временную /tmp директорию. Так!
А ещё можно сделать принудительный --force-download и --force-rebuild если надо обновить данные в кэше.
А можно вообще не использовать кэш и каждый раз заново качать-собирать всё с нуля. Такое поведение по-умолчанию. Хозяин барин.
Другие команды:
booty linux_via_http версия имя --force-download --install-path путь
, в будущем планируется добавить linux_via_git
, но пока http и парсинг html-кода bash-скриптами работает стабильно, это не спеху. )))
booty linux_build директория-с-сорцами --config-file конфиг --install-path путь
booty ramdisk --image initrd.img
для создания initramfs-образа, используя родные бинарники прямо из вашей системы. Опциональный busybox и другие плюшки будут прикручены уже апосля.
Вообще в этот раз планируется интерфейс делать примерно таким:
booty новая_папка(1)/ новая_папка(2)/ новая_папка(3)/ --profile overlayfs
И эта команда полностью, от и до, подготовит ядро, и упакует указанные директории в SquashFS, и в финале выплюнет загрузочный ISO с системой.
Простой запуск booty новая_папка(1)/
либо с указанием --profile initramfs
приведёт к поведению по-умолчанию: упихать всю «новая_папка(1)» в initramfs-образ.
Теперь я планирую использовать профили, которые пользователи смогут создавать сами и расширять имеющиеся возможности booty.
Но на этом пока всё. Официальная документация — потом! Надо ещё много кода писать. =)