Browse Source
vm: Create installation media with MBR and HFS only, no GPT.
vm: Create installation media with MBR and HFS only, no GPT.
* gnu/build/vm.scm (make-iso9660-image): Accept XORRISO, GRUB-MKRESCUE-ENVIRONMENT. * gnu/system/vm.scm (iso9660-image): Pass XORRISO; accept GRUB-MKRESCUE-ENVIRONMENT. (system-disk-image): Pass GRUB-MKRESCUE-ENVIRONMENT. * gnu/packages/patches/xorriso-no-mbr-in-inner-efi.patch: New file. * gnu/packages/patches/xorriso-no-partition-table-in-inner-efi.patch: New file. * gnu/local.mk (dist_patch_DATA): Add them. * gnu/packages/cdrom.scm (xorriso)[source]: Add patches. [arguments]<#:phases>[install-frontends]: Add phase.wip-texlive-importer

No known key found for this signature in database
GPG Key ID: E71A35542C30BAA5
6 changed files with 194 additions and 7 deletions
-
18gnu/build/vm.scm
-
4gnu/local.mk
-
14gnu/packages/cdrom.scm
-
47gnu/packages/patches/xorriso-no-mbr-in-inner-efi.patch
-
107gnu/packages/patches/xorriso-no-partition-table-in-inner-efi.patch
-
11gnu/system/vm.scm
@ -0,0 +1,47 @@ |
|||
https://dev.lovelyhq.com/libburnia/libisoburn/commit/1eb51f44dadb8b6c5f87533ca357186cdc1ac625 |
|||
diff --git a/frontend/grub-mkrescue-sed.sh b/frontend/grub-mkrescue-sed.sh
|
|||
index b3948c99..dcd9d696 100755
|
|||
--- a/frontend/grub-mkrescue-sed.sh
|
|||
+++ b/frontend/grub-mkrescue-sed.sh
|
|||
@@ -120,6 +120,7 @@ fi
|
|||
# "yes" overwrites the MBR partition table area in the EFI boot image by zeros. |
|||
# Some EFI implementations get stuck when seeing in the EFI partition a |
|||
# partition table entry which begins at LBA 0. |
|||
+# "extra" not only zeros the partition table but also the MBR signature.
|
|||
efi_zero_inner_pt=no |
|||
if test -n "$MKRESCUE_SED_IN_EFI_NO_PT" |
|||
then |
|||
@@ -192,24 +193,31 @@ then
|
|||
find "$dir" |
|||
fi |
|||
|
|||
-if test "$efi_zero_inner_pt" = yes
|
|||
+if test "$efi_zero_inner_pt" = yes -o "$efi_zero_inner_pt" = extra
|
|||
then |
|||
did_dd=0 |
|||
if test -e "$dir"/efi.img |
|||
then |
|||
+ # Look for 0x55 0xAA in bytes 510 and 511
|
|||
magic=$(dd bs=1 skip=510 count=2 if="$dir"/efi.img 2>/dev/null | \ |
|||
od -c | head -1 | awk '{print $2 " " $3}') |
|||
if test "$magic" = "U 252" |
|||
then |
|||
+ echo "Performing actions for MKRESCUE_SED_IN_EFI_NO_PT=$efi_zero_inner_pt" >&2
|
|||
dd if=/dev/zero bs=1 seek=446 count=64 conv=notrunc of="$dir"/efi.img |
|||
did_dd=1 |
|||
+ if test "$efi_zero_inner_pt" = extra
|
|||
+ then
|
|||
+ dd if=/dev/zero bs=1 seek=510 count=2 conv=notrunc of="$dir"/efi.img
|
|||
+ fi
|
|||
+ echo >&2
|
|||
fi |
|||
fi |
|||
if test "$did_dd" = 0 |
|||
then |
|||
echo >&2 |
|||
echo "$0 : NOTE : No EFI image found or no MBR signature in it." >&2 |
|||
- echo "$0 : NOTE : Will not obey MKRESCUE_SED_IN_EFI_NO_PT=yes" >&2
|
|||
+ echo "$0 : NOTE : Will not obey MKRESCUE_SED_IN_EFI_NO_PT=$efi_zero_inner_pt" >&2
|
|||
echo >&2 |
|||
fi |
|||
fi |
@ -0,0 +1,107 @@ |
|||
https://dev.lovelyhq.com/libburnia/libisoburn/commit/3a2a3ba737a06162c22ace0ae09d33ba97aa2673 |
|||
diff --git a/frontend/grub-mkrescue-sed.sh b/frontend/grub-mkrescue-sed.sh
|
|||
index d772ff22..b3948c99 100755
|
|||
--- a/frontend/grub-mkrescue-sed.sh
|
|||
+++ b/frontend/grub-mkrescue-sed.sh
|
|||
@@ -1,6 +1,6 @@
|
|||
#!/bin/sh |
|||
|
|||
-# Copyright (C) 2015 - 2016
|
|||
+# Copyright (C) 2015 - 2019
|
|||
# Thomas Schmitt <scdbackup@gmx.net>, libburnia-project.org |
|||
# Provided under BSD license: Use, modify, and distribute as you like. |
|||
|
|||
@@ -117,6 +117,15 @@ fi
|
|||
# command line.) |
|||
# Each argument must be a single word. No whitespace. No quotation marks. |
|||
|
|||
+# "yes" overwrites the MBR partition table area in the EFI boot image by zeros.
|
|||
+# Some EFI implementations get stuck when seeing in the EFI partition a
|
|||
+# partition table entry which begins at LBA 0.
|
|||
+efi_zero_inner_pt=no
|
|||
+if test -n "$MKRESCUE_SED_IN_EFI_NO_PT"
|
|||
+then
|
|||
+ efi_zero_inner_pt="$MKRESCUE_SED_IN_EFI_NO_PT"
|
|||
+fi
|
|||
+
|
|||
|
|||
# |
|||
# Do the work |
|||
@@ -183,12 +192,48 @@ then
|
|||
find "$dir" |
|||
fi |
|||
|
|||
+if test "$efi_zero_inner_pt" = yes
|
|||
+then
|
|||
+ did_dd=0
|
|||
+ if test -e "$dir"/efi.img
|
|||
+ then
|
|||
+ magic=$(dd bs=1 skip=510 count=2 if="$dir"/efi.img 2>/dev/null | \
|
|||
+ od -c | head -1 | awk '{print $2 " " $3}')
|
|||
+ if test "$magic" = "U 252"
|
|||
+ then
|
|||
+ dd if=/dev/zero bs=1 seek=446 count=64 conv=notrunc of="$dir"/efi.img
|
|||
+ did_dd=1
|
|||
+ fi
|
|||
+ fi
|
|||
+ if test "$did_dd" = 0
|
|||
+ then
|
|||
+ echo >&2
|
|||
+ echo "$0 : NOTE : No EFI image found or no MBR signature in it." >&2
|
|||
+ echo "$0 : NOTE : Will not obey MKRESCUE_SED_IN_EFI_NO_PT=yes" >&2
|
|||
+ echo >&2
|
|||
+ fi
|
|||
+fi
|
|||
+
|
|||
efi_tmp_name= |
|||
+if test x"$mode" = xmjg \
|
|||
+ -o x"$mode" = xmbr_only \
|
|||
+ -o x"$mode" = xgpt_appended \
|
|||
+ -o x"$mode" = xmbr_hfs
|
|||
+then
|
|||
+ # Move EFI partition image file out of the "$dir" tree, i.e. out of the ISO
|
|||
+ efi_tmp_name=grub-mkrescue-sed-efi-img.$$
|
|||
+ if test -e "$dir"/efi.img
|
|||
+ then
|
|||
+ mv "$dir"/efi.img /tmp/$efi_tmp_name
|
|||
+ elif test -e /tmp/$efi_tmp_name
|
|||
+ then
|
|||
+ rm /tmp/$efi_tmp_name
|
|||
+ fi
|
|||
+fi
|
|||
+
|
|||
if test x"$mode" = xmjg |
|||
then |
|||
# Exchange arguments for the experimental GRUB2 mjg layout |
|||
- efi_tmp_name=grub-mkrescue-sed-efi-img.$$
|
|||
- mv "$dir"/efi.img /tmp/$efi_tmp_name
|
|||
x=$(echo " $*" | sed \ |
|||
-e "s/-efi-boot-part --efi-boot-image/-no-pad -append_partition $partno 0xef \/tmp\/$efi_tmp_name/" \ |
|||
-e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_${partno}:all:: -no-emul-boot -isohybrid-gpt-basdat/" \ |
|||
@@ -207,8 +252,6 @@ then
|
|||
elif test x"$mode" = xmbr_only |
|||
then |
|||
# Exchange arguments for no-HFS MBR-only layout |
|||
- efi_tmp_name=grub-mkrescue-sed-efi-img.$$
|
|||
- mv "$dir"/efi.img /tmp/$efi_tmp_name
|
|||
x=$(echo " $*" | sed \ |
|||
-e "s/-efi-boot-part --efi-boot-image/$iso_mbr_part_type -no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name/" \ |
|||
-e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \ |
|||
@@ -228,8 +271,6 @@ then
|
|||
elif test x"$mode" = xmbr_hfs |
|||
then |
|||
# Exchange arguments for MBR and HFS+ layout |
|||
- efi_tmp_name=grub-mkrescue-sed-efi-img.$$
|
|||
- mv "$dir"/efi.img /tmp/$efi_tmp_name
|
|||
x=$(echo " $*" | sed \ |
|||
-e "s/-efi-boot-part --efi-boot-image/$iso_mbr_part_type -no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name/" \ |
|||
-e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \ |
|||
@@ -247,8 +288,6 @@ then
|
|||
elif test x"$mode" = xgpt_appended |
|||
then |
|||
# Exchange arguments for no-HFS MBR-only layout |
|||
- efi_tmp_name=grub-mkrescue-sed-efi-img.$$
|
|||
- mv "$dir"/efi.img /tmp/$efi_tmp_name
|
|||
x=$(echo " $*" | sed \ |
|||
-e "s/-efi-boot-part --efi-boot-image/-no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name -appended_part_as_gpt -partition_offset 16/" \ |
|||
-e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue