LINUX.ORG.RU
ФорумTalks

booty2 != booty 2.0

 


5

1

мемный заголовок))) ладно, теперь серьёзно. >:|

Я вернулся! И начал писать с нуля вторую версию своего имба-поделия под названием 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.

Но на этом пока всё. Официальная документация — потом! Надо ещё много кода писать. =)

★★★★★

Для Ъ^Ъ:

Executable File 578 lines (439 sloc) 11.2 KB

#! /usr/bin/env sh

boowai ★★★★
()
Последнее исправление: boowai (всего исправлений: 1)
Ответ на: комментарий от CYB3R

мне и всем тем топикстартерам, которые спрашивают как из докер-образа собрать загрузочный iso-образ!

не знаю как вы, а я время от времени натыкаюсь на такие темы и это только на этом форуме.

что, неужели вам никогда не хотелось всего одной командой из chroot-директории с линуксом получить готовый к запуску iso'шник на любой системе?

не? :(

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от luke

да, именно поэтому sh без всякой экзотики. любая архитектура, любой тостер, любая ОС, где это запустится и будет работать: нужен только POSIX-терминал.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

Ага, и ещё куча утилит, которые нигде не перечислены. А ещё желательно shellcheck прогнать в режиме POSIX.

CYB3R ★★★★★
()
Ответ на: комментарий от Spoofing

что, неужели вам никогда не хотелось всего одной командой из chroot-директории с линуксом получить готовый к запуску iso’шник на любой системе?

не совсем понятен юзкейс. Я помню ты там раньше писал про нетбут итд, но как-то тоже непонятен смысл. типа так проще ноды кластерные обновлять?

mrdeath ★★★★★
()
Ответ на: комментарий от luke

ДА

Проекту (всмысле, второй версии проекта) только второй день. Будет и git и всё остальное.

А если совсем всё плохо, то будем либо пропускать этот этап, либо попросим пользователя наковырять что-нибудь из своего /boot, всего делов.

На дворе ещё не наступил апокалипсис, чтобы ядро линукса стало вдруг дефицитом))

Spoofing ★★★★★
() автор топика
Последнее исправление: Spoofing (всего исправлений: 1)
Ответ на: комментарий от cocucka

ой не знаю, booty, boot, мне кажется это всё однокоренные слова.

неужели носители языка, при упоминании boot, как сухого технического термина, используемого в компьютерном сленге, думают про жопы? :(

BOOT to anY, я бы скорее так обыграл эти слова.

или вы сейчас заявите, что буква Y похожа на стринги и как нельзя кстати впишется в слово booty?

аррр!

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

Не то чтоб мне везде жопы мерещатся, но в свете современных SJW-загонов, когда даже невинные константы а-ля 0xB16B00B5 выпиливают, название твоего проекта, как глоток свежего воздуха. Так брось им вызов, подчеркни, так сказать, что тебе пофиг на их визги, сделай вызывающий логотип. Можно ASCII-артом.

cocucka ★★★★☆
()

Официальная документация — потом

Ты же понемаешь, что поделием без документации никто пользоваться не будет?

P.S. А boobstrap звучало задорнее.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Nervous

ПОНИ-маю

но чтобы не переписывать документацию каждый раз, я сперва реализую все хотелки, а потом уже займусь ревизиями и описями. :P

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от luke

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

но ещё останется 1% от 1% пользователей, тех самых, у которых даже /boot нет. и wget нет. и программируют они с помощью солнечных лучей и бабочек. и придётся мне этим 1% от 1% пользователей пренебречь.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

сперва реализую все хотелки, а потом уже займусь ревизиями

Так ведь (обзорная) документация и есть список хотелок, для себя самого. Чтобы не забыть.

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

А boobstrap звучало задорнее.

Удваиваю. Booty – что-то детско-пиратское, какая-то невнятная ассоциация с песенкой из Lazy Town. А Boobstrap сразу направляло фантазию в нужное русло! :)

Korchevatel ★★★★★
()
Ответ на: комментарий от Spoofing

ой не знаю, booty, boot, мне кажется это всё однокоренные слова.

Примерно как газ и газон.

t184256 ★★★★★
()
Ответ на: комментарий от Spoofing

но чтобы не переписывать документацию каждый раз, я сперва реализую все хотелки, а потом уже займусь ревизиями и описями. :P

А ОП накатывать не лень было? :)

Достаточно чёткого плана разработки, по типу «версия 69 – то-то и то-то, версия 666 – то-то и то-то…». Можешь даже скооперироваться с кем-то, чтобы твои шальные мысли оформлял в понятный каждому текст.

Korchevatel ★★★★★
()
Ответ на: комментарий от Korchevatel

Booty — это попка. Автору приелись сиськи, видимо.

shimon ★★★★★
()
Ответ на: комментарий от CYB3R

У меня тоже, но сие говноподелие настолько тяжело неповоротливо и перегружено что пользоваться им можно только для больших проектов и в больших компанияхкогда у тебя есть много времени!

Jetty ★★★★★
()
Ответ на: комментарий от Korchevatel

Удваиваю. Booty – что-то детско-пиратское

Да. У меня тоже такие ассоциации. Поэтому на месте ТС я бы нарисовал голотип в виде пони в пиратской шляпе повёрнутую задом.

Был бы идеальный логотип.

fornlr ★★★★★
()
Ответ на: комментарий от fornlr

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

а букву В нужно зеркально отразить.

n_play
()

У меня вопрос: на кой ты что-то пишешь про улучшение ux при работе с cli, но там такой треш, который никто в жизни по памяти набирать не будет, а только копипастить?

Сходи посмотри cli ZFS, чтоли, приобщись так сказать к нормальному дизайну интерфейсов.

system-root ★★★★★
()
Ответ на: комментарий от system-root

погуглил zfs cli, псевдо-аски-таблички? ну это без необходимости в моём случае, нет такой информации, которую надо сортировать.

мой cli хорош, я просто слишком много лишнего понаписал чтобы раскрыть суть.

а суть такова. твоя задача:

1) ЕСТЬ ПАПКА

2) ХОЧУ ГРУЗИТЬСЯ USB / ISO / PXE

это звучит достаточно просто? да. насколько простой должна быть команда, чтобы реализовать твою хотелку?

booty ТВОЯ_ПАПКА/ BOOT.ISO

насколько это сложный CLI?

и эта команда, на секундочку, сделает вот прям вообще всё: соберёт ядро, закатает твою папку в образ, создаст initrd, и в конце концов загрузочный iso.

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

1) собрать ядро используя всё такую же простую команду booty linux

2) собрать подключаемые образы booty filesystem новая_папка(1)/

3) создать initrd с образами или чем ты захочешь booty ramdisk

4) создать iso образ booty boot

повторюсь, _всё это НЕ НУЖНО_. но _это просто ЕСТЬ_. для личного использования вне контекста от создания загрузочных образов из папок.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

Если мы говорим о ui, то вот эта мудянка с параметрами вроде linux_чтото_там_хер_запомнишь - это плохой ui. Я конечно понимаю, что у тебя нет опыта в создании, но есть опыт в использовании и можешь к нему обратиться. И через два деша параметры, которые могут быть без двух дешей тоже бессмысленны. Дань моде дидовских ушлёпских интерфейсов уровня git?

Предлагаю тебе два стула: тратить время на ui и сделать норм (для людей) или не тратить вообще времени на ui и получить стандартное говно, никто даже не заметит что оно плохое, оно будет нормальным (обмудская блевотина с запашком 60х).

system-root ★★★★★
()
Последнее исправление: system-root (всего исправлений: 1)
Ответ на: комментарий от Spoofing

И в продолжение, просто прочти свой же текст

создать iso образ booty boot

booty boot

создать iso образ

Серьёзно? Не booty build image, booty build iso, а boot? Типа по приколу так? Ты ещё раз посмотри на ZFS а? Не на таблички, а что нужно написать чтобы увидеть ответ. Семантика там от людей для людей, а это делали ещё при царе горохе с жопой в мыле и дедлайнах.

system-root ★★★★★
()
Последнее исправление: system-root (всего исправлений: 1)
Ответ на: комментарий от system-root

ага, уже сделал booty image.

завтра надеюсь допилю в течении дня и выпущу в продакшон =)

Spoofing ★★★★★
() автор топика

https://github.com/sp00f1ng/booty/tree/booty2

закоммитил изменения за эти два дня %)

в общем на данном этапе если просто написать booty, то спустя некоторое время оно даже выплюнет загрузочный ISO, который можно запустить в виртуалке.

но пока ничего больше не работает, лол. завтра продолжу пилить. всем спокойной ночи. :)

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Nervous

booty тоже нормуль. в гугле пишешь booty и переходишь в картинки. Я бы даже сказал, что в этом есть некоторая ирония :))))

yax123 ★★★★★
()

По делу.

Предлагаю одной из первых фич запилить возможность собирать одинаковые образы которые будут отличаться некоторыми файлами, например /etc/hosts /etc/hostname. Учетными записями, настройками в них, прописанными ключами для захода под ssh без пароля. Вот это реально полезная штука.

yax123 ★★★★★
()
Ответ на: комментарий от yax123

сделано.

вы установили систему в директорию linux-install/

в директорию host-master/ вы положили файл /etc/hostname = master

в директорию host-mistress/ вы полижили файл /etc/hostname = mistress

в директорию host-slave/ вы положили файл /etc/hostname = slave

теперь собираете три разных образа

# booty build master.iso linux-install/ host-master/

# booty build mistress.iso linux-install/ host-mistress/

# booty build slave.iso linux-install/ host-slave/

отличаться между собой эти .iso будут только содержимым их директории host-*, т.е. файлами /etc/hostname

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

Spoofing ★★★★★
() автор топика

Это тип твоя форма прокрастенации? Делать какие то мягко говоря специфичные скрипты для специфичных целей? Если тебе очень хочется помочь линуксоидам в облегчении каких то задач то лучше идти по стезе поиска того что нужно, а потом это нужно пилить вместе с другими есь у тебя опыта нету.

Linux_Newbie
()
Ответ на: комментарий от Linux_Newbie

ну ваапщето

работу оно выполняет крайне полезную. имей возможность переписать это на нормальном ЯП — я этого делать не стану из-за очевидного оверхеда, когда POSIX shell прекрасно справляется с задачей на любом устройстве и любой архитектуре, тянуть за собой в зависимостях какое-нибудь Python3, Perl, ради чего? чтобы перед посонами с ЛОРа не стыдно было? ха! в то время, как POSIX shell терминал есть на любой кофеварке, собственно, это основа основ любой юникс-среды. скрипт уже по факту будет работать вообще везде. изи вин!

во-вторых, потребность в такой штуке есть вообще у всех, начиная школотой, которые захотят сделать свою кали-сборку убунты и закатать её в образ, заканчивая девопсами на зарплате, которые знают толк в одноразовых системах.

просто по факту говорю тебе, что установка линуксов в их привычном понимании это легаси. когда 64гб памяти станет нормой, как сейчас 4-8гб в каждом компьютере, вы ещё увидите, как мир изменится и будет грузить ОС как одноразовую прошивку в память. сейчас это происходит в SOHO сегменте всяких там роутеров, но как только будут позволять домашние десктопы — это придёт и к нам.

Spoofing ★★★★★
() автор топика
Последнее исправление: Spoofing (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.