LINUX.ORG.RU

История изменений

Исправление kostik87, (текущая версия) :

Если хочешь грузить с флешки, без ventoy - нужно править init сценарий в initramfs.

А он написан на чём-то наркоманском.

Без сложных правок:

  • копируешь всё в корень флешки из ISO;
  • распаковываешь initramfs
mkdir initramfs
cd initramfs
gunzip -c -9 <точка_монтирования_iso>/gnu/store/iwp9qpy89c19v17xl9bdb60p8figy0y6-raw-initrd/initrd.cpio.gz | cpio -i -d -H newc
124415 blocks
# правишь файл 
vim gnu/store/870rglriw0x0g1x0jhwylp1xkg54x5v1-init

меняешь

(map spec->file-system (quote (((uuid iso9660 #vu8(49 57 55 48 48 49 48 49 49 57 51 51 51 49 56 51)) "/" "iso9660" () #f #f #t #t preen))))

На ext4 или тот тип файловой системы, что на флешки:

(map spec->file-system (quote (((uuid ext4 #vu8(49 57 55 48 48 49 48 49 49 57 51 51 51 49 56 51)) "/" "ext4" () #f #f #t #t preen))))

Сохраняешь и собираешь initramfs

find . -print0 | cpio --null -ov --format=newc | gzip -9 > <точка_монтирования_iso>/gnu/store/iwp9qpy89c19v17xl9bdb60p8figy0y6-raw-initrd/initrd.cpio.gz

В параметрах ядра в параметре blkid указываешь просто UUID файловой системы на флешке, без слова UUID.

root=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX gnu.system=/gnu/store/sqxsv69rcnr6bc9fzz57mzkp0gxk0q3b-system 

Т.е. можно скопировать секцию из ISO

menuentry "GNU Guix installation 1.4.0" {
  #search --fs-uuid --set 1970-01-01-19-33-31-83
  linux /gnu/store/3qdad0k7wvwl09wah246q7fvsb1hbr0x-linux-libre-6.0.10/bzImage root=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX gnu.system=/gnu/store/sqxsv69rcnr6bc9fzz57mzkp0gxk0q3b-system gnu.load=/gnu/store/sqxsv69rcnr6bc9fzz57mzkp0gxk0q3b-system/boot quiet modprobe.blacklist=radeon,amdgpu
  initrd /gnu/store/iwp9qpy89c19v17xl9bdb60p8figy0y6-raw-initrd/initrd.cpio.gz
}

#search --fs-uuid --set 1970-01-01-19-33-31-83 - можно закомментирвоать.

Проверил, всё загружается.

Если правок init сценария на guile не сделать - будет ошибка:

417:8	2 (mount-root-file-system "/dev/sda1" "iso9660" # _ # _ # )
In unknown file:
	1 (mount "/dev/sda1" "/real-root" "iso9660" 1 #f)
In ice-9/boot-9.scm

Они ещё и тип захардкодили.

Теоретически можно сделать монтирование, флешки, например в /usb, а далее mount -o bind /usb/guix /real-root и разместить файлы из ISO в /guix. Но в этом наркоманском guile разбирайся сам как сделать иначе.

С FAT32 не проверял, пробуй, если интересно.

Ужасно сделанный livecd, где всё прибито гвоздями и написано не понятно на чём.

UPDATE: Ну либо используй ventoy - это grub2 с патчами, в нём реализован функционал виртуальной CD/DVD привода. Т.е. он эмулирует виртуальное устройство, вместо загрузки ISO файла в память, как в обычном grub2 и создания loop устройства.

Обычный grub2 так не сможет.

Исходная версия kostik87, :

Если хочешь грузить с флешки, без ventoy - нужно править init сценарий в initramfs.

А он написан на чём-то наркоманском.

Без сложных правок:

  • копируешь всё в корень флешки из ISO;
  • распаковываешь initramfs
mkdir initramfs
cd initramfs
gunzip -c -9 <точка_монтирования_iso>/gnu/store/iwp9qpy89c19v17xl9bdb60p8figy0y6-raw-initrd/initrd.cpio.gz | cpio -i -d -H newc
124415 blocks
# правишь файл 
vim gnu/store/870rglriw0x0g1x0jhwylp1xkg54x5v1-init

меняешь

(map spec->file-system (quote (((uuid iso9660 #vu8(49 57 55 48 48 49 48 49 49 57 51 51 51 49 56 51)) "/" "iso9660" () #f #f #t #t preen))))

На ext4 или тот тип файловой системы, что на флешки:

(map spec->file-system (quote (((uuid ext4 #vu8(49 57 55 48 48 49 48 49 49 57 51 51 51 49 56 51)) "/" "ext4" () #f #f #t #t preen))))

Сохраняешь и собираешь initramfs

find . -print0 | cpio --null -ov --format=newc | gzip -9 > <точка_монтирования_iso>/gnu/store/iwp9qpy89c19v17xl9bdb60p8figy0y6-raw-initrd/initrd.cpio.gz

В параметрах ядра в параметре blkid указываешь просто UUID файловой системы на флешке, без слова UUID.

root=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX gnu.system=/gnu/store/sqxsv69rcnr6bc9fzz57mzkp0gxk0q3b-system 

Т.е. можно скопировать секцию из ISO

menuentry "GNU Guix installation 1.4.0" {
  #search --fs-uuid --set 1970-01-01-19-33-31-83
  linux /gnu/store/3qdad0k7wvwl09wah246q7fvsb1hbr0x-linux-libre-6.0.10/bzImage root=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX gnu.system=/gnu/store/sqxsv69rcnr6bc9fzz57mzkp0gxk0q3b-system gnu.load=/gnu/store/sqxsv69rcnr6bc9fzz57mzkp0gxk0q3b-system/boot quiet modprobe.blacklist=radeon,amdgpu
  initrd /gnu/store/iwp9qpy89c19v17xl9bdb60p8figy0y6-raw-initrd/initrd.cpio.gz
}

#search --fs-uuid --set 1970-01-01-19-33-31-83 - можно закомментирвоать.

Проверил, всё загружается.

Если правок init сценария на guile не сделать - будет ошибка:

417:8	2 (mount-root-file-system "/dev/sda1" "iso9660" # _ # _ # )
In unknown file:
	1 (mount "/dev/sda1" "/real-root" "iso9660" 1 #f)
In ice-9/boot-9.scm

Они ещё и тип захардкодили.

Теоретически можно сделать монтирование, флешки, например в /usb, а далее mount -o bind /usb/guix /real-root и разместить файлы из ISO в /guix. Но в этом наркоманском guile разбирайся сам как сделать иначе.

С FAT32 не проверял, пробуй, если интересно.

Ужасно сделанный livecd, где всё прибито гвоздями и написано не понятно на чём.