Я уже давно пользуюсь мультизагрузочным внешним жёстким диском, наполненным различными дистрибутивами Linux. В свете последних событий и очередной волны импортозамещения возникла необходимость дополнить его «отечественными» дистрибутивами.
Я решил сделать для себя небольшой HOWTO и поделиться им с сообществом.
Не буду долго таскать резину за хвост, а лишь вкратце изложу суть - файлы установочного образа дистрибутивов размещаются на внешнем USB-накопителе в формате .
iso, а для загрузчика grub2 есть меню формируется с конкретными параметрами для каждого дистрибутива, которые позволяют скачать и установить из необходимого образа.
Если кому-то не интересно, то расстанемся.
Никаких сакральных знаний здесь не будет. Для остальных объясню почему так, ведь есть всякие мультизагрузочные решения типа вентой и т.п.
? Ну во-первых, хочется получать все самое свежее и не факт, что эти системы быстро добавят отечественные дистрибутивы, когда откроется железный занавес.
Во-вторых, интересно в этом немного разобраться самому.
В других удобно пользоваться, удобно добавлять новые дистрибутивы, легко очищать устаревшие, на внешнем диске много свободного места, доступного системе в процессе установки - можно, например , взять оттуда конкретные драйвера, пакеты или добавить логи.
Давайте начнем.
Приборы и материалы: Внешний USB накопитель без каких-либо требований к производителю/скорости/форм-фактору/объему - флешка или hdd, как у меня.
Компьютер с операционной системой Linux. Установочные образы дистрибутивов Linux в формате iso — скачать у производителей.
Эти файлы были подготовлены для лабораторной работы:
- альтернативная рабочая станция-10.0-x86_64.iso;
- CentOS-8.4.2105-x86_64-dvd1.iso;
- орел-current.iso;
- redos-MUROM-7.3-20210412-Everything-x86_64-DVD1.iso;
- REL-Desktop-DVD-x86_64-7.3.iso;
- Ubuntu-21.10-рабочий стол-amd64.iso.
Первый шаг.
Мой диск на 250 ГБ оказался совершенно пуст, поэтому я его размечу и отформатирую без сохранения данных.
Более того, по моим прикидкам, для мультизагрузки с данным набором дистрибутивов и планируемой разработкой 60 ГБ будет более чем достаточно, а остальному пространству я найду другое применение.
Подключаем диск (если система успела его смонтировать автоматически, размонтируем), затем под рутом или через sudo выполняем разметку.
Я сделал скриншот, но вы наверняка знаете и можете все сделать сами.
Будь как будет.
разметка диска Объяснение того, что было сделано здесь:
- Запускаю fdisk с указанием блочного устройства диска/флешки для разметки;
- Я показываю текущую таблицу разделов (p – print) и проверяю, что она пуста;
- создать новый раздел (n – новый);
- Выбираю тип раздела (p – основной), в этом случае просто соглашаюсь, нажимая Enter;
- fdisk предлагает использовать первый раздел, согласен — входим;
- Я не вижу смысла менять первый сектор.
Входить;
- запрашивает последний сектор раздела, вы можете указать смещение относительно первого сектора в секторах или единицах дискового пространства.
Указано 60 ГБ;
- посмотрите запланированную таблицу разделов (p – распечатать) и проверьте ее правильность;
- Таблицу разделов записываю на диск (w – запись).
В нашем случае требования к файловой системе также минимальны — ext2 будет достаточно.
формирование файловой системы Записываем загрузчик и копируем наши образы в каталог iso, который предварительно создадим на нашем мультизагрузочном диске (флешке).
Скриншот прилагается.
написание загрузчика grub2 и копирование образов на диск Дальше самое интересное - создание меню загрузчика и настройка установщиков.
Файл конфигурации загрузчика называется grub.cfg и представляет собой простой текстовый файл, который должен находиться в каталоге /boot/grub2 (в нашем случае /mnt/USB/boot/grub2).
Поскольку его пока не существует, создадим его в любом текстовом редакторе.
Полный формат файла рассматривать не буду; при необходимости исходников в сети достаточно, но здесь будет только тот минимум, необходимый для запуска установщика для конкретного дистрибутива.
Дистрибутивы на базе RedHat. Здесь 3 варианта - CentOS, ROSA, REDos, но принцип формирования один и тот же, т.к.
используется стандартный установщик RedHat anaconda. Вот пример для CentOS:
Пояснения по вводу параметров для других дистрибутивов на базе RedHat:menuentry "CentOS-Stream-8-x86_64-20210204" { isofile="/iso/CentOS-Stream-8-x86_64-20210204-dvd1.iso" loopback loop "${isofile}" linux (loop)/isolinux/vmlinuz iso-scan/filename="${isofile}" inst.stage2=hd:LABEL=CentOS-Stream-8-x86_64-dvd initrd (loop)/isolinux/initrd.img }
- вход в меню – название пункта меню.
Придумайте свои собственные идеи.
- изофайл — имя образа с полным путем относительно корня нашего мультизагрузочного диска/флешки.
Если в метке есть пробелы, их следует заменить на \x20.
получить информацию о метке диска на изображении Я намеренно удалил дополнительные параметры ядра и установщика.
При необходимости добавить их не составит труда, тем более что документация RedHat очень качественная и даже переведена на русский язык.
Таким же образом добавляем пункты меню для RedOS и Rosa Linux (полный конфиг будет в конце статьи) немного о параметрах ядра Многие новички спрашивают, что можно и что нельзя писать в параметрах строки с ядром — боятся что-нибудь сломать и получить большой кирпич.
Ничего страшного — во-первых, grub позволяет вручную исправить все нужные строки при загрузке (нажать «е» на нужном пункте меню) и загрузиться с новыми параметрами (после редактирования — «Ctrl-x»).
Ну и кроме того - при загрузке ядро будет смотреть те параметры, которые оно понимает( https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html ), все остальное будет просто пропущено.
Ядро сохранит полную строку с параметрами в /proc/cmdline и она будет доступна другим процессам — например systemd. Ну и соответственно установщик системы выбирает из этой строки знакомые слова и корректирует свое поведение.
Чтобы лучше понять это, прочтите man kernel-command-line. Дистрибутивы на основе Debian. Их тоже есть 2 вида, но есть небольшие «подводные грабли».
Сначала конфигурация Ubuntu: menuentry "Ubuntu 21.10 Impish Indri Release amd64 (20211012)" {
isofile="/iso/ubuntu-21.10-desktop-amd64.iso"
loopback loop "${isofile}"
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename="${isofile}" noprompt noeject debug file=/cdrom/preseed/ubuntu.seed maybe-ubiquity splash ---
initrd (loop)/casper/initrd
Вроде бы он мало чем отличается от ранее рассмотренных вариантов, и это хорошо.
Скажу сразу, что почти всю свою профессиональную карьеру я имел дело с дистрибутивами на базе RH (также Solaris, HP-UX) и особо не изучал инсталляторы для других систем.
Поэтому строка запуска ядра была взята из образа и не корректировалась — были добавлены только опции debug и iso-scan/filename. Следующий дистрибутив Astra Linux — это тоже Debian в чистом виде.
Вот конфигурация: menuentry "Astra linux common edition (v2.12 OREL)" {
isofile="/iso/orel-current.iso"
loopback loop "${isofile}"
linux (loop)/hd-media/vmlinuz modprobe.blacklist=evbug
initrd (loop)/hd-media/initrd.gz
}
Обратите внимание, что ядро и рамдиск для загрузки образа находятся в каталоге /hd-media. Далее явный «косяк» (рука не поднимается написать функцию) — это поиск файла изображения.
Согласно документации (также в скрипте iso-scan - я посмотрел, но не стал вникать в логику и редактировать, т.к.
необходимо использовать оригинальные образы) можно через iso-scan/filename указать, где находится файл с образом располагается.
Однако что-то там не так — в процессе установки мы наблюдаем логи и видим, что установщик просматривал все подкаталоги, не учитывая iso-scan/filename. Ну и самое неприятное в моем случае то, что он первым нашел образ ubuntu и смонтировал его как родной в каталог /hd-media, игнорируя лежащий рядом orel-current.iso! Как я писал выше, я не стал разбираться, как расставлять приоритеты (документация Debian/Astra мне тоже не понравилась), поэтому сделал образ orel-current.iso жесткая ссылка в корень установочного диска и теперь он всегда находится первым.
Это определенно костыль.
Следующий пациент — ALT Linux. Инсталлятор наш собственный и даже немного документирован: menuentry "ALT Workstation 10.0 x86_64 build 2021-12-10" {
isofile="/alt-workstation-10.0-x86_64.iso"
loopback loop "${isofile}"
linux (loop)/boot/vmlinuz fastboot automatic=method:disk,disk:sdb,partition:sdb1,directory:"${isofile}" stagename=altinst ramdisk_size=475545 vga=normal splash lowmem
initrd (loop)/boot/full.cz
}
Ключевой вариант – автоматический.
В нашем случае указываем способ установки - с жесткого диска (установка из образа возможна только с диска или через nfs), с sdb-диска, из раздела sdb1, в каталоге указывается полное имя образа.
Жёсткая индикация диска и раздела режет глаз.
Если у вас в системе более одного жесткого диска, то сразу понятно, что наша конфигурация больше не подойдет. Здесь можно сделать только «тестовую» установку, зайти в консоль и посмотреть настоящие имена/пути дисков.
Далее запустите переустановку и в меню grub нажмите «e», чтобы отредактировать параметры установки, затем загрузитесь с помощью «Ctrl-x».
Решение рабочее, но оно неверное и неудобное.
Я также думаю, что вы можете поиграть с командой поиска.
Этот способ не пробовал, если кто напишет, поправлю.
Для других дистрибутивов алгоритм действий аналогичен: скачиваем установочный iso-образ и копируем его на наш диск, затем добавляем пункт меню в файл конфигурации загрузчика.
Основная задача — выяснить, какие параметры нужно передать установщику дистрибутива, чтобы он корректно загружался из образа.
полный текст grub.cfg menuentry "CentOS-Stream-8-x86_64-20210204" {
isofile="/iso/CentOS-Stream-8-x86_64-20210204-dvd1.iso"
loopback loop "${isofile}"
linux (loop)/isolinux/vmlinuz iso-scan/filename="${isofile}" inst.stage2=hd:LABEL=CentOS-8-4-2105-x86_64-dvd
initrd (loop)/isolinux/initrd.img
}
menuentry REL-Desktop-DVD-x86_64-7.3 {
isofile="/iso/REL-Desktop-DVD-x86_64-7.3.iso"
loopback loop "${isofile}"
linux (loop)/isolinux/vmlinuz iso-scan/filename="${isofile}" inst.stage2=hd:LABEL=ROSA\x20Linux-7.3-x86_64
initrd (loop)/isolinux/initrd.img
}
menuentry "RED OS MUROM-7.3" {
isofile="/iso/redos-MUROM-7.3-20210412-Everything-x86_64-DVD1.iso"
loopback loop "${isofile}"
linux (loop)/isolinux/vmlinuz iso-scan/filename="${isofile}" inst.stage2=hd:LABEL=redos-MUROM-7.3\x20x86_64
initrd (loop)/isolinux/initrd.img
}
menuentry "Astra linux common edition (v2.12 OREL)" {
set gfxpayload=keep
isofile="/iso/orel-current.iso"
loopback loop "${isofile}"
linux (loop)/hd-media/vmlinuz modprobe.blacklist=evbug
initrd (loop)/hd-media/initrd.gz
}
menuentry "ALT Workstation 10.0 x86_64 build 2021-12-10" {
isofile="/iso/alt-workstation-10.0-x86_64.iso"
loopback loop "${isofile}"
linux (loop)/boot/vmlinuz fastboot automatic=method:disk,disk:sdb,partition:sdb1,directory:"${isofile}" stagename=altinst ramdisk_size=475545 vga=normal splash lowmem
initrd (loop)/boot/full.cz
}
menuentry "Ubuntu 21.10 Impish Indri Release amd64 (20211012)" {
isofile="/iso/ubuntu-21.10-desktop-amd64.iso"
loopback loop "${isofile}"
linux (loop)/casper/vmlinuz iso-scan/filename="${isofile}" boot=casper noprompt noeject debug file=/cdrom/preseed/ubuntu.seed maybe-ubiquity splash ---
initrd (loop)/casper/initrd
}
menuentry "Hard drive" {
set root=(hd0,1)
chainloader (hd0,1)+1
}
Если я что-то упустил по незнанию или совсем ошибаюсь, пишите, потихоньку подправлю статью, надеюсь никто не заметит.
Теги: #*nix #Системное программирование #мультизагрузка #grub2
-
Безопасность В Google
19 Oct, 24 -
Вышла Новая Версия Blender
19 Oct, 24 -
Мысли О Qt 5
19 Oct, 24 -
Русификация Windows 7 Professional
19 Oct, 24