ISO+EFI на флешку Роса
Добавлено: 26 мар 2018, 11:59
ISO Роса на флешу EFI
Полигон:
description: Notebook
product: HP ProBook 450 G2
Linux 4.9.76-nrj-desktop-1rosa-i586 i686 GNU/Linux
memory size: 4GiB
загрузка в биос возможна mbr, смешанный и EFI
Установлена система без EFI ROSA Desktop Fresh R10 MATE 2016.1 Desktop x32
Проведем простой опыт:
форматируем любыми способами флешку в таблица разделов msdos, тип FAT32.
кидаем туда папку EFI из ROSA Desktop Fresh x86-64
меняем /EFI/BOOT/grub.cfg на свой из папки /boot/grub2/grub.cfg
перезагружаемся, и ставим в биос чистый режим EFI
матюкается что нет файла grubenv, и спокойно загружается.
Вывод:
• для загрузки с флешки в EFI, не требуется таблица разделов gpt и флаги boot,esp. нужен только тип FAT32
• так можно загрузить систему без предустановленного EFI
• стартовые bootia32.efi и grubia32.efi у меня не работают а работают только с bootx64.efi и grubx64.efi
• на форуме не могли загрузится с bootia32.efi и grubia32.efi, вот вам и ответ почему (это уже вопрос к разработчикам Росы).
Едем дальше:
Исследования показали что bootx64.efi и grubx64.efi другим bootx64.efi и grubx64.efi рознь.
Объясню почему. Собирается это штука с разными модулями, имеют сертификаты или не имеют, по разному. Стандартное расположение у многих /EFI/BOOT/ c конфигом там же. Конфиг для multibootusb наптпример, / multibootusb/grub/grub.cfg, это уже не стандартно.
Цель же сделать универсальную флешку с загрузкой ISO, с загрузкой в EFI в том числе.
Выяснилось что основным модулем для монтирования ISO служит loopback из пакета grub2, и этот модуль не включен в сборку от Росы. Было опробовано куча bootx64.efi и grubx64.efi, просто набил их в разные папки на флешке с конфигом, закинул образы ISO. В каждой папке уже выбирал и запускал bootx64.efi и grubx64.efi в меню EFI. В результате нарвался на интересную парочку от Ubuntu mate 18.04 x86-64, модуль lookback работает и конфиг работает. Ладушки, загрузчики для EFI определены готовим флешку.
Флешка отформатирована в таблице разделов msdos, тип FAT32 метка WORK у меня. Кидаем в корень папку EFI взятую из корня системы Ubuntu mate 18.04 x86-64. В /EFI/BOOT/ лежит наша парочка bootx64.efi grubx64.efi, там же создаем папку grub2 получится так:
/EFI/BOOT/ и /EFI/BOOT/grub2/ это те папки в которые будем класть свой grub.cfg.
Разберем конфиг grub.cfg:
нас интересуют всего 3 места
menuentry 'Start ROSA.FRESH.MATE.start.iso' {
set root='hd0,msdos1'
set iso=/ROSA.FRESH.MATE.start.iso
loopback loop ${iso}
linux (loop)/isolinux/vmlinuz0 isoboot=${iso} boot=isolinux iso-scan/filename=${iso} root=live:[color=LABEL=ROSA.FRESH.MATE. ro rd.live.image quiet rootflags=rw,noatime rd.luks=0 rd.md=0 rd.dm=0 rhgb splash=silent logo.nologo
initrd (loop)/isolinux/initrd0.img
}
Расмотрим;
Start ROSA.FRESH.MATE.start.iso # это пункт который отобразится при загрузке
set root='hd0,msdos1' # это корневая директория
#
set iso=/ROSA.FRESH.MATE.start.iso # это переменная чтоб каждый раз не писать название вашего iso
#
loopback loop ${iso} # эта команда монтирует ваш iso
#
linux (loop)/isolinux/vmlinuz0 isoboot=${iso} boot=isolinux iso-scan/filename=${iso} # это место запускает vmlinuz0 в /isolinux/ смонтированного iso
#
root=live:LABEL=ROSA.FRESH.MATE. # это лейба вашего iso узнается командой file, а смотрим между одинарных кавычек `ROSA.FRESH.MATE.`
#
ro rd.live.image quiet rootflags=rw,noatime rd.luks=0 rd.md=0 rd.dm=0 rhgb splash=silent logo.nologo # это режимы запуска ядра.
#
initrd (loop)/isolinux/initrd0.img # это запускает initrd0.img в /isolinux/ смотированного iso
####
Вот пример конфига grub.cfg на запуск в режиме livecd и install для моего дистрибутива:
####
menuentry 'Start ROSA.FRESH.MATE.i586.iso' {
set root='hd0,msdos1'
set iso=/ROSA.FRESH.MATE.i586.iso
loopback loop ${iso}
linux (loop)/isolinux/vmlinuz0 isoboot=${iso} boot=isolinux iso-scan/filename=${iso} root=live:LABEL=ROSA.FRESH.MATE. ro rd.live.image quiet rootflags=rw,noatime rd.luks=0 rd.md=0 rd.dm=0 rhgb splash=silent logo.nologo
initrd (loop)/isolinux/initrd0.img
}
menuentry 'Install ROSA.FRESH.MATE.i586.iso' {
set root='hd0,msdos1'
set iso=/ROSA.FRESH.MATE.i586.iso
loopback loop ${iso}
linux (loop)/isolinux/vmlinuz0 isoboot=${iso} boot=isolinux iso-scan/filename=${iso} isoboot=${iso} boot=isolinux iso-scan/filename=${iso} root=live:LABEL=ROSA.FRESH.MATE. ro rd.live.image quiet rootflags=rw,noatime rd.luks=0 rd.md=0 rd.dm=0 install rhgb splash=silent logo.nologo
initrd (loop)/isolinux/initrd0.img
}
###
Eсли все файлы и конфиги лежат по своим местам (конфиги одинаковые) то подаем команду на установку grub2.
НЕ забываем поменять /dev/sdb на свою флешку, пользователя iteco на своего, и WORK если метка диска у вас отличается.
###
sudo grub2-install --boot-directory=/media/iteco/WORK/EFI/BOOT/ --root-directory=media/iteco/WORK/ /dev/sdb
[sudo] пароль для iteco:
Установка завершена. Ошибок нет.
###
grub2 я засунул в папку /EFI/BOOT/, можно прямо в корень, iso можно в любую папку а не в корень. например set iso=/iso/ROSA.FRESH.MATE.i586.iso
###
Вот ссылка на EFI https://yadi.sk/d/fyaZTlGL3TkZMh (там уже лежат bootx64.efi и grubx64.efi, создана папка grub2 и лежат конфиги).
А это сборки mate кому надо https://yadi.sk/d/tbCNtwUn3TkZXw
Все можно тестировать.
Полигон:
description: Notebook
product: HP ProBook 450 G2
Linux 4.9.76-nrj-desktop-1rosa-i586 i686 GNU/Linux
memory size: 4GiB
загрузка в биос возможна mbr, смешанный и EFI
Установлена система без EFI ROSA Desktop Fresh R10 MATE 2016.1 Desktop x32
Проведем простой опыт:
форматируем любыми способами флешку в таблица разделов msdos, тип FAT32.
кидаем туда папку EFI из ROSA Desktop Fresh x86-64
меняем /EFI/BOOT/grub.cfg на свой из папки /boot/grub2/grub.cfg
перезагружаемся, и ставим в биос чистый режим EFI
матюкается что нет файла grubenv, и спокойно загружается.
Вывод:
• для загрузки с флешки в EFI, не требуется таблица разделов gpt и флаги boot,esp. нужен только тип FAT32
• так можно загрузить систему без предустановленного EFI
• стартовые bootia32.efi и grubia32.efi у меня не работают а работают только с bootx64.efi и grubx64.efi
• на форуме не могли загрузится с bootia32.efi и grubia32.efi, вот вам и ответ почему (это уже вопрос к разработчикам Росы).
Едем дальше:
Исследования показали что bootx64.efi и grubx64.efi другим bootx64.efi и grubx64.efi рознь.
Объясню почему. Собирается это штука с разными модулями, имеют сертификаты или не имеют, по разному. Стандартное расположение у многих /EFI/BOOT/ c конфигом там же. Конфиг для multibootusb наптпример, / multibootusb/grub/grub.cfg, это уже не стандартно.
Цель же сделать универсальную флешку с загрузкой ISO, с загрузкой в EFI в том числе.
Выяснилось что основным модулем для монтирования ISO служит loopback из пакета grub2, и этот модуль не включен в сборку от Росы. Было опробовано куча bootx64.efi и grubx64.efi, просто набил их в разные папки на флешке с конфигом, закинул образы ISO. В каждой папке уже выбирал и запускал bootx64.efi и grubx64.efi в меню EFI. В результате нарвался на интересную парочку от Ubuntu mate 18.04 x86-64, модуль lookback работает и конфиг работает. Ладушки, загрузчики для EFI определены готовим флешку.
Флешка отформатирована в таблице разделов msdos, тип FAT32 метка WORK у меня. Кидаем в корень папку EFI взятую из корня системы Ubuntu mate 18.04 x86-64. В /EFI/BOOT/ лежит наша парочка bootx64.efi grubx64.efi, там же создаем папку grub2 получится так:
/EFI/BOOT/ и /EFI/BOOT/grub2/ это те папки в которые будем класть свой grub.cfg.
Разберем конфиг grub.cfg:
нас интересуют всего 3 места
menuentry 'Start ROSA.FRESH.MATE.start.iso' {
set root='hd0,msdos1'
set iso=/ROSA.FRESH.MATE.start.iso
loopback loop ${iso}
linux (loop)/isolinux/vmlinuz0 isoboot=${iso} boot=isolinux iso-scan/filename=${iso} root=live:[color=LABEL=ROSA.FRESH.MATE. ro rd.live.image quiet rootflags=rw,noatime rd.luks=0 rd.md=0 rd.dm=0 rhgb splash=silent logo.nologo
initrd (loop)/isolinux/initrd0.img
}
Расмотрим;
Start ROSA.FRESH.MATE.start.iso # это пункт который отобразится при загрузке
set root='hd0,msdos1' # это корневая директория
#
set iso=/ROSA.FRESH.MATE.start.iso # это переменная чтоб каждый раз не писать название вашего iso
#
loopback loop ${iso} # эта команда монтирует ваш iso
#
linux (loop)/isolinux/vmlinuz0 isoboot=${iso} boot=isolinux iso-scan/filename=${iso} # это место запускает vmlinuz0 в /isolinux/ смонтированного iso
#
root=live:LABEL=ROSA.FRESH.MATE. # это лейба вашего iso узнается командой file, а смотрим между одинарных кавычек `ROSA.FRESH.MATE.`
#
ro rd.live.image quiet rootflags=rw,noatime rd.luks=0 rd.md=0 rd.dm=0 rhgb splash=silent logo.nologo # это режимы запуска ядра.
#
initrd (loop)/isolinux/initrd0.img # это запускает initrd0.img в /isolinux/ смотированного iso
####
Вот пример конфига grub.cfg на запуск в режиме livecd и install для моего дистрибутива:
####
menuentry 'Start ROSA.FRESH.MATE.i586.iso' {
set root='hd0,msdos1'
set iso=/ROSA.FRESH.MATE.i586.iso
loopback loop ${iso}
linux (loop)/isolinux/vmlinuz0 isoboot=${iso} boot=isolinux iso-scan/filename=${iso} root=live:LABEL=ROSA.FRESH.MATE. ro rd.live.image quiet rootflags=rw,noatime rd.luks=0 rd.md=0 rd.dm=0 rhgb splash=silent logo.nologo
initrd (loop)/isolinux/initrd0.img
}
menuentry 'Install ROSA.FRESH.MATE.i586.iso' {
set root='hd0,msdos1'
set iso=/ROSA.FRESH.MATE.i586.iso
loopback loop ${iso}
linux (loop)/isolinux/vmlinuz0 isoboot=${iso} boot=isolinux iso-scan/filename=${iso} isoboot=${iso} boot=isolinux iso-scan/filename=${iso} root=live:LABEL=ROSA.FRESH.MATE. ro rd.live.image quiet rootflags=rw,noatime rd.luks=0 rd.md=0 rd.dm=0 install rhgb splash=silent logo.nologo
initrd (loop)/isolinux/initrd0.img
}
###
Eсли все файлы и конфиги лежат по своим местам (конфиги одинаковые) то подаем команду на установку grub2.
НЕ забываем поменять /dev/sdb на свою флешку, пользователя iteco на своего, и WORK если метка диска у вас отличается.
###
sudo grub2-install --boot-directory=/media/iteco/WORK/EFI/BOOT/ --root-directory=media/iteco/WORK/ /dev/sdb
[sudo] пароль для iteco:
Установка завершена. Ошибок нет.
###
grub2 я засунул в папку /EFI/BOOT/, можно прямо в корень, iso можно в любую папку а не в корень. например set iso=/iso/ROSA.FRESH.MATE.i586.iso
###
Вот ссылка на EFI https://yadi.sk/d/fyaZTlGL3TkZMh (там уже лежат bootx64.efi и grubx64.efi, создана папка grub2 и лежат конфиги).
А это сборки mate кому надо https://yadi.sk/d/tbCNtwUn3TkZXw
Все можно тестировать.