LINUX.ORG.RU
ФорумTalks

makeiso: Программа для создания загрузочных ISO-образов

 ,


3

2

Многих пользователей GNU/Linux часто интересует вопрос: как система работает изнутри, какие этапы она проходит в процессе загрузки и как собрать свой дистрибутив?

Так, в процессе работы над принципиально новым дистрибутивом GNU/Linux в первую же очередь был написан простой скрипт на Bash, автоматизирующий процесс создания загрузочных ISO-образов для будущего дистрибутива. Данный скрипт в чуть более 200 строчек по сути является «самодокументируемым кодом» и поможет всем новичкам осуществлять сборки дистрибутивов Linux для личного использования.

Сборка ISO проходит в несколько этапов:

  • Установка загрузчиков syslinux для PC и grub для EFI;
  • Сборка и установка ядра Linux;
  • Сборка и установка окружения Busybox;
  • Настройка корневой системы, создание необходимых каталогов и файлов;
  • Создание ISO для загрузки с CD или USB-накопителей.

Требования к системе для сборки:

  • grub версии 2 с поддержкой EFI, но можно обойтись и без него, если вам не нужна поддержка EFI;
  • syslinux содержит утилиту isohybrid, которая позволяет создавать загрузочные USB-накопители, а не только CD/DVD-диски, можно так же обойтись и без неё;
  • cdrkit содержит утилиту genisoimage, которая создает ISO-образы, требуется обязательно. Обратите внимание, что не во всех дистрибутивах genisoimage пропатчен для создания EFI-разделов.
  • Потребуются инструменты для сборки и компиляции программ, поскольку скрипт собирает из исходных кодов ванильное ядро Linux и окружение Busybox.

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

Для некоторых специфичных задач потребуются права root, поскольку скрипт должен подготовить EFI-образ для загрузки: необходимо выполнить команды mount и umount. Скрипт использует директорию /tmp для сборки, если у вас она находится в tmpfs, то потребуется около 2Гб свободной памяти: в /tmp собирается Linux и Busybox. Однако /tmp можно изменить на что-нибудь другое, например $HOME, — вы найдёте в скрипте как это сделать.

После всего, в рабочей директории /tmp/tmp.some-here появится файл bootable.iso — образ полностью готовый к записи на CD или USB-накопитель и дальнейшей загрузке с него. Образ можно протестировать в виртуальной машине или на компьютере, выполнив перезагрузку. Как всегда, для записи на USB используйте команду dd: dd if=/tmp/tmp.some-here/bootable.iso of=/dev/sdX.

Вкратце, весь процесс загрузки происходит так: железо передаёт управление загрузчику, загрузчик передаёт управление ядру и init самая первая программа в корне образа initramfs, которую ядро запускает. В качестве примера init запустит /bin/ash, предоставив доступ к командной строке. Возможности по созданию дистрибутивов ограничиваются только вашей фантазией.

Программа makeiso познавательна для всех желающих начать создавать собственные загрузочные ISO-образы с дистрибутивами GNU/Linux.

>>> Скриншот

>>> Подробности

Скачать

Перемещено JB из doc

★★★★★

для всех желающих начать создавать собственные загрузочные ISO-образы с дистрибутивами GNU/Linux.

Ну теперь начнется....

Odalist ★★★★★ ()

Вы бы только знали, какая неблагодарная это работа, мейнтейнить дистрибутив линукса! Поэтому мы не видим тысяч сборок линуксов от всяких «Васянов», а то, что видим — основано на чём-то готовом вроде Debian или Arch.

Открываешь книжку по LFS, всё просто и понятно. Доходишь до сборки какого-нибудь glibc, думаешь, неужели всё так просто? Любопытства ради заглядываешь в другие дистрибутивы, как оно собирается там, и видишь примерно такую картину:

patch -p1 -i CVE-2012-3406-Stack-overflow-in-vfprintf-BZ-16617.patch
patch -p1 -i CVE-2014-7817-wordexp-fails-to-honour-WRDE_NOCMD.patch
patch -p1 -i CVE-2014-9402-Avoid-infinite-loop-in-nss_dns-getnetbyname.patch
patch -p1 -i CVE-2015-1472-wscanf-allocates-too-little-memory.patch
patch -p1 -i CVE-...
patch -p1 -i CVE-...
patch -p1 -i CVE-...

И много чего ещё подобного, вроде обновления микрокода процессора (intel_ucode.img) через тот-же initrd, потому что всё изкоробочно-ванильное — РЕ-ШЕ-ТО!

Нельзя так просто взять и собрать дистрибутив, от тебя требуется оставаться в «тренде», следить за новостями в мире Open Source, о личной жизни, о времени на еду и сон можно забыть. Поэтому в сборке популярных Debian и Arch учавствует куча народа, для одного человека такое хобби физически нереально по времени.

«Линукс с нуля» сам по себе не безопасен.

Пожалуй, я остановлюсь на том, что буду пилить свой линукс для души, не выходя за пределы busybox. Поставлю нескучную цветовую схему, напихаю полезных утилит для починки системы, всё, что нравится лично мне. Но собирать полноценный дистрибутив — увольте. :(

Да, следите за обновлениями скрипта, я сообщу, когда начну собирать образ своей системы автоматически каждые сутки в 00:00 по крону. Всегда свежий образ со свежим набором утилит. :)

Spoofing ★★★★★ ()

License: as is

Это как понимать? Отказ от гарантий? Тогда код проприетарный. Лучше нормально указать лицензию, думаю, могут подойти MIT, CC0, wtfpl.

Klymedy ★★★★★ ()
  6 # License:      as is

Чё за фигня?

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

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

Извините, лень разбираться в этих сортах. «as is» в переводе означает «как есть», я подразумевал, распространяется скрипт «как есть» — что хочешь, то и делай. :)

Spoofing ★★★★★ ()

А что за образ получается? Что в нём, что умеет?

Norong ★★ ()

Тут рядышком новость, где человек написал программу, которая ищет ошибки в ядре. А я всего-лишь скрипт на bash написал, который создаёт загрузочные образы. Чёрт, да этим и так все дистрибутивы издавна занимаются. Чувствую себя полным лохом по сравнению с тем человеком. =(

Да, помимо этого, в различных дистрибутивах уже имеются готовые к работе инструменты, вроде archiso, но, меня не устраивает готовое и сделаное кем-то другим: мне хотелось разобраться как оно работает и сделать так, чтобы оно сырой линукс (опционально мой собственный, или вообще какой захочу) собирало в загрузочный образ, а не делало мне из одного готового дистрибутива типа Debian или Arch ещё один точно такой же, а чуть шаг в сторону, захочу экзотики какой — и уже не сделает. Такого скрипта, преимущественно для LFS, на просторах интернета не нашёл, поэтому собирая информацию по крупицам, написал такой скрипт сам. Надеюсь, кому-то окажется полезным.

Эх..

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

Ничего. Вы получаете ванильное ядро с одним единственным файлом /bin/busybox на борту. А дальше — всё зависит от вас. Вы сами можете прикрутить всё что захотите к нему. В скрипте лишь описан процесс создания такого загрузочного ISO-образа, чтобы всем желающим создать свой дистрибутив «с нуля» было от чего отталкиваться.

Можно аутировать и бесконечно допиливать init скрипт. =)

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

я подразумевал

Надо явно указывать. wtfpl — очень короткая, понятная, но своеобразная и не включает отказ от гарантий. MIT чуть более развернутая, включает отказ от гарантий и не использует нецензурную лексику. А пока нет лицензии — ненужная проприетарщина.

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

А пока нет лицензии — ненужная проприетарщина.

Ладно, спасибо, исправил на MIT.

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

Да, спасибо, так лучше.

А почему новость в документации?

Klymedy ★★★★★ ()

В качестве примера init запустит /bin/ash, предоставив доступ к командной строке.

/bin/ash

Это опечатка, или действительно имелся в виду Almquist shell?

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

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

Своего рода учебный материал в виде скрипта, угу.

Spoofing ★★★★★ ()

Ну офигеть теперь.

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

Нельзя так просто взять и собрать дистрибутив

Патрик смотрит на тебя как на говно

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

Извините, лень разбираться в этих сортах. «as is» в переводе означает «как есть», я подразумевал, распространяется скрипт «как есть» — что хочешь, то и делай. :)

тогда напиши лучше public domain - это как раз то, что ты, скорее всего, имел ввиду (https://en.wikipedia.org/wiki/Public_domain), например sqlite под такой лицензией идёт

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

Поэтому дистрибутивы в одиночку никто и не собирает. Сообщество для чего придумали по-твоему?

Ghostwolf ★★★★ ()

JB, извините, а можно «новость» эту удалить? меня терзают смутные сомнения, что её не подтвердят и вообще никому это не надо.

буду пилить линукс тихо сам с собой наедине... ._.

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

Я бы попробовал твой дистр, главное никаких иксов и гуи, только консоль. Плюсую эту идею. А еще если впихнешь все это в 100-300мб то цены не будет.

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

в процессе работы над принципиально новым дистрибутивом

принципиально новым

вон оно как

p.s. ссылка подробности не открывается

p.s.2. открылась, но не сразу

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

Куда pull-реквесты слать?

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

Ну и зря. У меня очень похожие скрипты для сборки nenuzhnix, я их скоро опубликую.

CYB3R ★★★★★ ()

Окей. Давайте представим на минуточку что некто нашёл очередную уязвимость. И что же теперь, пересобирать весь дистр и перезаписывать на флешку? Дык у флешек же и ресурс около 1к итераций. Так стоил ли игра свеч? И никакой серьёзный софт на такой дистр не повесить, т.к. любой ребут приводит к долгой инициализации, а значит к простою сервера. Это какой-нибудь двухстраничный сайт от Васяна запустится с полпинка, а если нужно поднять тяжелую БД, всех проклянут тебя и тян никогда не появится. Спуфинг, ты бы лучше устроился тыжпрограммистом, чем у мамки на шеи сидеть и ковырять нинужноДистр.

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

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

посиди на SLAX месяц-другой, поймёшь все прелести такого юзкейса.

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

Вот ты это к чему написал, к тому что ОС на флешке ненужна? или к тому что файлы пепеписывать на флешке ненадо лишний раз?

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

в чем проблемы, Debian netinstall вроде одна консоль. И подобного много можно накопать в 50Мб влезут из которых 20-30 ядро займет.

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

Да проблем особо никаких, просто захотелось пощупать что-то подобное от маргинального жителя ЛОРа.

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

Damn Small Linux, заброшен правда.

Puppy Linux, в ту же степь.

SLAX последний самый современный, 226мб занимает, используется KDE 4. но тоже заброшен в итоге.

ЗЫ, отвечал на неотредактированный комментарий.

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

Благодарю, Slax пробовал на флешку записать как-то, но там были какие-то траблы. А что-то вообще без gui есть?

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

Puppy Linux, в ту же степь

Но-но, пааапрашу не обобщать, «папплетов» куча, форум жив вроде.

И идеи модульности уже нашли свое продолжение в Porteus и PuppyRus-Arch

irton ★★★★★ ()

Buildroot уже написали до тебя, он делает то же самое и больше

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

для «поновее» надо будет из iso несколько файлов удалять (не из этого).

а именно для этой системы только обновления ядра есть.

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

Slitaz GNU/Linux — из коробки загрузка в четыре варианта окружения: от сонсоли до «полноценного» DE. Устанавливается и в классическом стиле.

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

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

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

Епрст. Не слушай никого. Для пентеста ванилы, без всяких патчей дистр самое оно (судя по описалову). Кроме того, есть ряд задач, где важен не столь удобство использования дистра, сколь его окружение (сборка под древний libc, например).

Жду скрипта.

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

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

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

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

Я вон звёздочку поставил, что бы на досуге всё повнимательней посмотреть, узнать чего-то.

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

iu0v1 ()

За 403\404 через 5 дней - надо бить. Больно.

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

никому оно не надо же,

Странный ты, ей богу. Обычно решения универсальны и перегружены (мой пример хотя бы про Slitaz). Делай дальше давай!

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