LINUX.ORG.RU
ФорумTalks

boobstrap v1.1

 


2

2

Скриншот

Спустя несколько дней активной разработки состоялся релиз boobstrap v1.1 — набор POSIX shell скриптов для создания загрузочных носителей с ОС GNU/Linux.

Что нового в этой версии?

  • Добавлена поддержка busybox, оно не обязательно, но если оно установлено в вашей системе, — оно будет использовано при создании initrd образов. Если нет, то по прежнему весь необходимый набор утилит будет скопирован с вашей системы.
  • Оверлеи (образы систем) теперь можно хранить на любых устройствах хранения данных. В версии 1.0 при создании загрузочного образ система с дистрибутивом линукса «вшивалась» прямо в initrd, в результате чего initrd мог получиться больших размеров и не на всех системах загружаться, но теперь благодаря busybox стало возможным хранить образы на любых накопителях информации. Оверлеи можно хранить на том же ISO образе или на других накопителях отдельно.
  • Добавлена отдельная утилита mkoverlayfs для создания оверлеев, а именно это могут быть директории, cpio-архивы, squashfs-образы. Это удобно для ручного создания оверлеев с последующим их перемещением на initd-образ или создаваемый загрузочный ISO-образ.
  • Утилита mkbootisofs теперь поддерживает все те же опции что и mkinitramfs, так например при создании оверлеев через mkbootisofs `mktemp -d` --overlay rootfs-system/ --overlay rootfs-changes/ --squashfs > boot.iso перечисленные оверлеи будут добавлены на сам ISO-образ. Больше нет необходимости создавать и загружать initrd огромных размеров.
  • Создаваемый initrd теперь может работать сам по себе mkinitramfs `mktemp -d` > initrd.img без необходимости переключаться в какую-либо систему. initrd будет сам пытаться найти систему из оверлеев на всех доступных накопителях и переключаться в неё. Для работы этой функции потребуется наличие busybox.
  • Обеспечена полная обратная совместимость, таким образом, что не имеет значение, откуда и как вы загружаетесь и какими инструментами пользуетесь. Больше нет обязательных к установке программ-зависимостей (кроме как для создания ISO). Загружаемый initrd прекрасно работает при использовании нативных утилит из вашей хост-системы, либо же при использовании busybox. Так же без разницы, где итоговая система будет распологаться, на самом initrd или на отдельном устройстве накопителе информации (ISO, USB, HDD/SSD, CD-ROM...). initrd загрузится в любом случае, если найдёт куда.
  • Добавлена возможность загружать систему в SHMFS (tmpfs, ramfs) и переключаться в чистое окружение tmpfs без использования OVERLAY_FS. Таким образом обеспечена работа с ванильным ядром, просто make defconfig && make и у вас всё будет работать. Стоит при этом учесть, что система может занимать много места в оперативной памяти, подробнее уточняйте у вашего du -csh your-gentoo-chroot/. Так же, теперь использование SHMFS это поводение загрузчика initrd по-умолчанию, и если вы хотите продолжить использование оверлеев, необходимо принудительно их включить.
  • Добавлены следующие опции для передачи ядру Linux при загрузке.
    • boobs.use-shmfs — при использовании данной опции данные со всех оверлеев будут скопированы в одну tmpfs папку, после чего система будет полностью загружена и работать прямиком из чистого tmpfs. Используйте данную опцию с осторожностью. Так например, если ваша система распологается внутри initrd-образа, к примеру, хранится как rootfs.cpio-архив, и размер данного архива 1ГБ, то прежде чем система будет окончательно загружена, она должна быть распакована из архива, а для этого потребуется ещё 1ГБ памяти помимо уже загруженого initrd, и плюс ещё немножко на запущенные программы. И только после того как система будет окончательно загужена, первичный rootfs.cpio-архив будет удалён из памяти и 1ГБ памяти будет освобождён. Учитывайте такие нюансы. Если же система в rootfs.cpio-архиве хранится на каком-либо носителе, например ISO на USB, то тогда потребуется всего 1ГБ памяти для распаковки системы в память. Так же учитывайте, что это поведение по-умолчанию, поскольку SHMFS поддерживается ванильным ядром «из коробки», а CONFIG_OVERLAY_FS нужно включать, что может быть не дружелюбно к пользователю, как женщины не дружелюбны ко мне.
    • boobs.use-overlayfs — опция, при которой будет использована файловая система Overlay FS для монтирования, загрузки и дальнейшей работы всех образов с оверлеями. Например, SquashFS-образ с системой будет смонтирован в папку, после чего система будет загружена и работать из данного SquashFS-образа с использованием Overlay FS. При использовании оверлеев так же добавлена возможность сохранения всех изменений сделанных в системе. Вся история изменений сохраняется в папке /mnt/overlays/rootfs-changes. Например, когда вы загрузились в свою систему, запускаются различные демоны, которые вносят свои данные в корень файловой системы, или например вы создаёте файлы, и так далее и тому подобное. Все эти изменения, внесённые в систему, доступны через папку /mnt/overlays/rootfs-changes. Вы можете её архировать и сохранять с последующей загрузкой как оверлей.
    • boobs.copy-to-ram — опция позволяет скопировать образы с оверлеями в память, прежде чем система будет с ними работать. Например, когда вы загрузились с USB-флешки, все образы соответственно будут смонтированы с данной USB-флешки и система будет загружена и работать с неё. Однако, указав данную опцию, все образы с оверлеями будут предварительно скопированы с USB-флешки в память, и только затем подключены, и система будет окончательно загружена, после чего USB-флешку можно отключить от вашего устройства.
    • boobs.search-rootfs — по-умолчанию все созданные оверлеи сохраняются в папке /system/overlays, но вы можете указать любую свою папку на выбор или даже просто файл, где следует искать и откуда загружать оверлеи с вашей системой. Так например, указав опцию для ядра boobs.search-rootfs=/filesystem.squashfs, и далее создав утилитой mkoverlayfs свой оверлей с системой, положив его в корень любого вашего накопителя информации, будь то диск, флешка... initrd будет искать данный образ в корне каждого накопителя информации, и в случае успеха оверлей с системой будет загружен. Опять же, если вы хотите загрузить несколько оверлеев наложенных друг поверх друга, то укажите, внезапно, директорию!
  • Ну и, конечно же, обновлена документация, за что отдельное спасибо камраду Difrex за перевод файла README в формат Markdown.

Так же, товарищем @swine с IRC-канала #lor @ freenode поступил запрос загружать оверлей не с initrd, не с iso-образа, а именно с жёсткого диска. В качестве примера рассмотрю эту ситацию и опишу как это делается.

Прежде всего, у вас должна быть подготовлена ваша система в отдельной директории, разверните какой-нибудь чрут, да хоть ту же Gentoo скачайте и распакуйте в директорию (шутки кончились, да, теперь всё сульёзна!). Допустим, в gentoo/.

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

# mkoverlayfs gentoo/ --squashfs-xz --output /gentoo.squashfs

Теперь создадим «фирменный» initrd-образ, обычный, без ничего.

# mkinitramfs `mktemp -d` > /boot/initrd

Для загрузки осталось лишь обновить загрузчик и указать загрузку ядра со следеующими опциями:

linux /boot/vmlinuz boobs.use-overlayfs boobs.search-rootfs=/gentoo.squashfs
initrd /boot/initrd

Всё, перезагружаем компьютер, выбираем в загрузчике наши опции и получаем на выходе работающий /gentoo.squashfs через Overlay FS, сохраняющий все изменения в памяти (tmpfs).

При желании можете добавить опцию boobs.copy-to-ram и отнести жёсткий диск на свалку истории, личная рекомендация от Спуфаря.

★★★★★

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

По сабжу: совершенно непонятно нафиг оно нужно, но как хобби вполне себе прикольно.

phoen ★★
()

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

Секундочку, это выходит что содержимое создаваемого образа (target) зависит от того, что я там в host системе наставил?

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

да. что не так?

SYSTEMWIDE_BINARIES="sh env switch_root mount umount mkdir rmdir cp mv rm cpio"

что тут может быть не так?

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

По поводу разных схем загрузки системы в ОЗУ — у Alpine можно использовать довольно интересный подход с lbu: https://wiki.alpinelinux.org/wiki/Alpine_local_backup

Если кратко, то можно загрузиться с дистрибутивных vmlinuz+initramfs в память, доставить нужные пакеты, настроить систему, а потом сказать lbu commit и получить на флешке псевдопакет, который при установке подтянет все настройки и установленные ранее пакеты (и их зависимости). Такие псевдопакеты почти не занимают места, и их можно хранить много штук для переключения между конфигурациями (прямо как в NixOS, только с cache вместо nix/store).

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

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

Спасибо, гляну что там.

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

Неа, мне б на свои то хобби время найти. Поэтому главный вопрос в моём комменте был тот, который вы проигнорировали :)

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

А что такого? Если 2/2 работать, и тебе такое времяпрепровождение интересно, то вообще никаких проблем. Если делать нехер, алкоголь, вещества, деньги и распутные женщины не интересуют, то тем более. Да и на самой работе наверное всё автоматизированно, загрузил, оно и бродит там.

K50
()

Дождались! Так и до 1.2 недалеко.

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

с чего вообще всё началось. тоже хотел свою сборку линукса сделать прост. а потом подумал, что на ЛОРе посмеиваться начнут, мол «Попов» очередной нашёлся. ну короче зашквар. и решил сделать ход конём, вместо дистрибутива, пилить саму систему для создания дистрибутивов. и теперь каждый может за две-три команды стать «Поповым», ахаха.

я бы ещё оформил как-то это понагляднее. думаю надо либо интерфейс обобщённый писать, boobs-cli, чтобы за одну команду вообще делалось всё. либо обработку сценариев, чтобы описывать создание дистрибутива не баш-портянкой, как это задумано сейчас: https://github.com/sp00f1ng/boobstrap/blob/master/bootstrap-systems/spoofie-h..., а сделать по типу Dockerfile например.

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

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

Тогда всё сходится!

phoen ★★
()

А скажи, сделать так OneFileLinux можно? Пусть даже это будет не 30MB, а 100-200MB.

Что бы «скопировать OneFileLinux.efi в раздел EFI» и прямо оттуда запускать rescue систему.

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

Что бы «скопировать OneFileLinux.efi в раздел EFI» и прямо оттуда запускать rescue систему.

Это делается одной командой objcopy (пакет binutils) которая есть в любом линуксе.

objcopy --add-section .cmdline="/proc/cmdline" --change-section-vma .cmdline=0x30000 \
        --add-section .linux="/boot/vmlinuz" --change-section-vma .linux=0x40000 \
        --add-section .initrd="/boot/initrd" --change-section-vma .initrd=0x3000000 \
"/efi/boot/bootx64.efi" "bootx64.efi"

На выходе получаем bootx64.efi файл, в котором: загрузчик, vmlinuz и initrd вместе с системой.

Но конкретно в моём детище такой возможности нету (пока).

Вы хотите чтобы я добавил такую возможность в booty?

Один нюанс. На некоторых системах присутствует ограничение на размер такого загрузочного образа, на AM4 платформе я сталкивался с ограничением 512мб. На FM2 и LGA 1151 такого ограничения нет.

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

ОЙ!

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

а я выше ^^^^^ предложил правильный вариант, со всеми фичами. надо его прорабатывать.

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

короче смотри, OneFileLinux — вэй (way), как говорится.

mkinitramfs `mktemp -d` --overlay gentoo-chroot/ --squashfs --output initrd

берёшь полученный initrd и указываешь при сборке своего ядра как initrd образ.

собранное ядро bzImage кладёшь в это место /efi/boot/bootx64.efi на любую FAT32 флешку.

загрузаешься с этой флешки на любой системе в свой линукс.

но это OneFileLinux — вэй, тут нечего ловить :)

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