LINUX.ORG.RU
ФорумTalks

Возможно я изобретаю велосипед, но...

 ,


1

1

https://github.com/sp00f1ng/boobstrap

Картинко.

Для тех, кто читает это впервые. Изначально я написал три простых утилиты, mkbootstrap устанавливает дистрибутив (Arch, Debian, CRUX) в chroot/ директорию, mkinitramfs создаёт initramfs-образ из директории, ему можно указать chroot/ директорию как --overlay, и тогда она упакует её в squashfs-архив, дистрибутив будет работать в tmpfs (CRUX/core занимает 150мб в squashfs). И конечно же, mkbootisofs, которая делает из директории загрузочный (BIOS / UEFI) ISO, который хоть на флешку, хоть виртуалке скорми. Оригинальный тред [Комплекс загрузочных скриптов boobstrap].

Так вот, я решил пойти немного дальше, и добавил:

boobstrap run --template netboot -- "sleep 5 ; ping 8.8.8.8 -c 10 ; poweroff"

Вам понятно, что делает эта команда?

boobstrap run \
    --template default
    "/root/.ssh/authorized_keys=$HOME/.ssh/id_rsa.pub" \
    "/tmp/add_remote_file=./from_local_file" \
    -- "/etc/rc.d/sshd start"

А так?

boobstrap run --timeout 3600 "/etc/rc.local=./git_clone_and_try_to_build_my_project"

Может быть так понятнее?

Во-первых, это система шаблонов. Указывая, какой шаблон использовать и используя все три утилиты mkbootstrap / mkinitramfs / mkbootisofs, мы собираем кастомный загрузочный ISO, например шаблон netboot, который соберёт самый маленький, базовый CRUX.ISO в 50мбайт.

Во-вторых, в шаблон прямо «на лету» можно добавлять свои файлы в любом количестве. /remote=/local. Например, предустановить ssh-ключ с последующим запуском sshd чтобы хост был сразу доступен после загрузки.

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

А если я ещё добавлю к этому PXE ...........

ставь лайк если тоже поймал флэшбек увидев pxe и многоточие вместе

Я наверное изобретаю велосипед. Или не? Ну это не просто менеджер виртуальных машин, что было бы понятно, а он сперва собирает ISO-образ, в сооветствии с вашей конфигурацией, какую укажете одной командой, а затем выполняет её запуск. Делает полезную работу и может выключиться. Добавить к этому PXE, чтобы дело не огранивалось одним локалхостом, а можно было эти конфигурации физическим хостам отдавать, и вообще красота будет. Да? Да. И всё это — в tmpfs.

Дискач?

★★★★★

Это попытка сделать докер на баше или где?

leave ★★★★★ ()

По-моему ты делаешь гибрид ansible и xorriso.

kirk_johnson ★☆ ()

Добавить к этому PXE, чтобы дело не огранивалось одним локалхостом, а можно было эти конфигурации физическим хостам отдавать, и вообще красота будет

пока локалхостов несколько штук да. но вообще не заскейлится такое.

куча проблем c PXE будет. если надо, могу пояснить какие проблемы тебя ждут именно по части PXE.

ещё как только добавишь туда что-то кроме ssh и башатины - то размер образа сразу же увеличится на порядочек. полноценная система с полужигабайта начинается. (допустим зажмешь эффективнее, станет под 250-300 - это не для PXE однозначно)

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

а чтобы всем управлять придется CRUD-ик делать.

n_play ()

boobstrap run –template netboob

Мне кажется, так будет лучше.

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

Я наверное изобретаю велосипед. Или не?

Я что-то не понимаю в чем профит. Ну кроме того что другие инструменты "писал не ты". Для продакшна есть всякие докеры-кубернетусы-вмвари и все такое прочее. Держать в tmpfs - ну это пока у тебя контейнер с пингом на локалхосте то может и норм, но в реальности не представляю зачем это будет нужно и сколько рамы потребует.

Если это просто хобби-проект то вопросов нет. Но если ты реально планируешь что этим кто-то будет пользоваться - у меня большие сомнения.

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

станет под 250-300 - это не для PXE однозначно

Чо эта? Мы в конторе так тестовые стенды и деплоим.

kirk_johnson ★☆ ()

плюсану гибрид ансибля с докером. нахера…?

Rastafarra ★★★ ()

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

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

тестовые стенды

возможно в этом дело. либо у вас сеть качественно под эти дела подтюнена.

обычно уже даже на нескольких десятках нод начинаются приключения. из-за того, что

  1. часть нод подвиснет на этапе начальной загрузки (обычно несколько штук), даже не дойдя до этапа распаковки образа.

  2. существующие реализации tftp сервера крайне убогие в плане производительности. там либо новый процесс на каждое «соединение», либо новый тред.

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

n_play ()

Тема отстёгивающийся сисек не раскрыта

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

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

например, его штуку можно использовать как бутстрап для виртуального приватного облака, железо для которого собирают роботы (физически, манипуляторами). Сервер собрали, флешки с бутстрапами автоматически воткнули, получился левел 0. И дальше уже поверх опенстек с кубернетисами

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

там либо новый процесс на каждое «соединение», либо новый тред.

что у вас за масштабы такие, что возможностей 64-битного линукса по созданию новых тредов не хватает? Вы раздаёте по образу каждому человеку и каждому iot-устройству в мире?

администратор Матрицы, перелогиньтесь!

stevejobs ★★★★☆ ()
Последнее исправление: stevejobs (всего исправлений: 1)

Погоди, это же ещё было во времена Red hat Linux 6.2 (не RHEL) и называлось kikstart

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

У нас порядка полусотни с чем-то серверов и в целом нормальная сеть.

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

Потому что надо грузить по NFS, а по tftp только ядро, хотя и в случае полного образа проблем не должно быть. Более сотни узлов загружает весьма скромная железка у нас.

tftpd-hpa, с параметром -B 1468

Сетевая карта

Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]

Процессор E3-1225 v5, 64GB RAM

Nfs шара на 3xSSD zfs mirror

xnix ★★ ()

Наверное было бы меньше глупых вопросов, если бы вы изначально написали какую проблему хотите решить и зачем её решать.

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

это другое

Потому что надо грузить по NFS, а по tftp только ядро, хотя и в случае полного образа проблем не должно быть.

просто обход/уход от проблем с tftp, т.к. не сокращает обьем нужного трафика от единственного сервера.

n_play ()
Ответ на: это другое от n_play

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

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

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

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

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

буду благодарен если поделитесь мыслями и идеями.

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

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

вместо этого у тебя есть куча несвязных инструментов. типа

1) кромсалка диска на разделы

2) всякие абстракции над физическим стораждем типа MD, LVM и чтонибудь ещё.

3) тут уже пойдут ФС и средства работы с ними.

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

да, можно такую конфигурячилку быстренько накидать и на баше и прочих скриптах. но как только начнешь вносить туда логику, то быстро обосрёшься. а изкоробочную тривиальную можно и через preseed/kickstart сделать. но кому нужна тривиальщина?

ок, можно считать, что пока об этом рано задумываться.

вот потребовалось PXE приделать. как же решать проблему встрявших нод? притом никто не обещает, что везде будут новейшие моднейшие последние ipmi и прочие штуки, которые шутливо и беззаботно работают из голой консули и не требуют богомерзкой проприетарной 32битной жабы и прочих компонентов для запуска из бровзера.

и вот такие подвохи тебя ждут на каждом следущем шагу.

n_play ()
Ответ на: это другое от n_play

просто обход/уход от проблем с tftp, т.к. не сокращает обьем нужного трафика от единственного сервера.

Ну во-первых pNFS, а во-вторых по TFTP можно просто отдать минимальное ядро и минимальный initrd, в котором curl’ом через HTTPS подсасывается нужная система хоть из cloudflare.

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

Внимательно рассмотрите код по ссылке

Внимательно рассмотри баш скрипты на прилагающейся ссылках: 1, 2, 3. Можешь ли ты представить себе, как автор этого кода, будучи разбуженным посреди ночи экстренным звонком от дежурного support-инженера, резко вскакивает и бежит обьяснять неуверенным дрожащим голосом по телефону значения и нюансы всех этих невнятных скриптовых закорючек, чтобы рассказать о том что делает этот код и как быстро и эффективно его поправить и запустить, ничего не сломав вокруг?

С какими мыслями встречают и провожают взглядом в корридорах его коллеги с кофием в руках? Можешь представить, что он пропускает в очереди в столовой милую и приветливую hr-ку, с iphone-ом в руках?

А то, что он тратит минимум по пол-дня, каждый раз заново разгадывая эти портянки скриптов, чтобы наконец найти ту неверную закорючку и лишний символ и заменить его? Ты видишь в нем человека, который не стесняется сказать руководителю, что на свой тридцать четвертый день рождения он хочет писать архитектурно продуманный красивый код в IDE на язычке высокого уровня, с uml-диаграммами, юнит-тестами и авто-документацией и работающим умным авто-дополнением, получая при этом одобрительную поддержку и восторги в кругу коллег на code review?

Теперь посмотри на этот код еще раз. Видишь ли ты примененные в нём стильные best practices и хорошо зарекомендовавшие себя брендовые архитектурные дизайны? Может они глубоко сокрыты за ширмой парадигмы процедурного стиля огранично перемежающейся с обилием однообразных глобальных переменных и lock-файлов? Код обладает внешней выразительстностью и/или легкостью чтения вкупе с простотой отладки и внесением поддерживаемых изменений?

Позади него стоит руководитель и заставляет писать такой код?

Посмотри снова на этот код и спроси самого себя, что с ним так?

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

n_play ()
Ответ на: Внимательно рассмотрите код по ссылке от n_play

класс)

#!/bin/bash

но нет, спасибо. )

иду на принцип и соблюдаю posix. не везде получается надёжно, например, нету массивов, а значит списки в обычных переменных перечисляются через пробел, а значит вылезет баг когда в имени файла будет пробел. ну это ерунда, либо перейду на файлы в `mktemp -d`, либо разделитель использую типа IFS=$(printf '\n') (newline), который нельзя использовать в имени файлов.

соблюдая posix получается даже интереснее, меньше пространства для манёвра, меньше вариантов написать какую-то дичь. :)

пощупаю что там за проект, интересно, ага.

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

это другое

опять борьба с последствиями, вместо причин.

ненужно один и тот же крупный образ мНОДОкратно раздавать. этим тратится лишнее время впустую.

в котором curl’ом через HTTPS подсасывается нужная система хоть из cloudflare.

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

n_play ()
Ответ на: Внимательно рассмотрите код по ссылке от n_play

кстати, вот вам в копилку интересных проектов https://github.com/dylanaraps/fff — файловый менеджер на баш. интересен тем, что всё с нуля, на чистом баш. скроллинг по директории стрелочками вверх-низ, сама логика навигации, всё это написано. интересно )

Spoofing ★★★★★ ()
Ответ на: это другое от n_play

ненужно один и тот же крупный образ мНОДОкратно раздавать. этим тратится лишнее время впустую.

А как ты его на ноду-то доставишь? Флешкой?

kirk_johnson ★☆ ()
Ответ на: это другое от n_play

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

Шта? Смари, ты по mgmt получаешь ядро и initrd, а по обычной (в initrd настроечки-то можно применить) загружаешь все остальное. TFTP тупой как валенок, в этом-то и прелесть.

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

Ну во-первых pNFS

Проблемы с сетью нет от слова совсем, тут все преувеличивают. 100 узлов одновременно грузятся за 30 сек (по systemd-analyze blame). 10гбит карточки хватает с головой.

10гбит карта <—> <core switch 10gbe - 1gbit> <—> <1gbit свитчи> <—> узлы с 1гбит картами

Проблема tftp что он крайне медленный и не может использовать 1гбит линк(получалось 160мбит на узел), а также он очень капризен к задержкам(пингу).

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

Проблема tftp что он крайне медленный и не может использовать 1гбит линк(получалось 160мбит на узел), а также он очень капризен к задержкам(пингу).

Клиенты – да. Сервер как напишешь.

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

пощупаю что там за проект, интересно, ага.

можно условно считать, что эта некая конечная стадия подобного проекта. только там ещё CRUD-ик и эдакий недофреймворк вокруг него на рубях на рельсах, chef и соплях, для добавления новой функционльности.

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

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

никаких нормальных быстрых мелких гранулярных тестов ни прочего нету. только полный беспощадный прогон всего от начала и до конца. хотя это проект не той сложности, чтобы такой подход был обоснованным. сейчас конечно никого скромными требованиями 8+гигов и несколько ядер для тестиков неудивить, но 10лет назад это выглядело просто бомбически. когда они показывали это на ютубе на своём лаптопе.

#!/bin/bash

но нет, спасибо. )

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

иду на принцип и соблюдаю posix. не везде получается надёжно, например, нету массивов, а значит списки в обычных переменных перечисляются через пробел, а значит вылезет баг когда в имени файла будет пробел. ну это ерунда, либо перейду на файлы в `mktemp -d`, либо разделитель использую типа IFS=$(printf '\n') (newline), который нельзя использовать в имени файлов.
соблюдая posix получается даже интереснее, меньше пространства для манёвра, меньше вариантов написать какую-то дичь. :)

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

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

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

так это мНОГОкратно фактически поочередно случается. и одному сарвару нужно раздать всё количество трафика

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

это в самом деле так трудно понять? или просто обьяснения неудачные?

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

работающее p2p решение для раздачи крупных образов

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

подержи моё пиво, сейчас пару строк на баше накидаю.

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

Это действительно трудно понять, потому что я не вижу момента, в котором случается ботлнек. Если внезапно ВСЕ ноды ломанутся за образом, перегрузка будет (ну, если сеть не справится, что тоже отдельный вопрос), но она будет на свиче, и p2p тебя не спасет (а много мелких UDP запросов, скорее всего, сделают только хуже, потому что они сыпатся начнут).

P.S. Все это при условии, что гигабайтные образы не раздает сам tftp конечно же. Если раздает, то тут все понятно, но чтобы этого избежать достаточно разделить тяжелые данные (лежат на HTTPS серверах) и TFTP.

kirk_johnson ★☆ ()
Последнее исправление: kirk_johnson (всего исправлений: 5)

boobstrap

Картинко.

я разачарован. даже простыню читать не захотелось. :(

__

Добавлю в закладки. Выглядит интересно. Когда-то хотел собрать кастомный sysresc, но так и не поборол лень.

Tanger ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)