iso-image: add loopback.cfg support to boot iso from grub
This commit is contained in:
parent
54393d25d8
commit
9d04a64a8f
@ -24,7 +24,7 @@ let
|
|||||||
# Name appended to menuentry defaults to params if no specific name given.
|
# Name appended to menuentry defaults to params if no specific name given.
|
||||||
option.name or (if option ? params then "(${option.params})" else "")
|
option.name or (if option ? params then "(${option.params})" else "")
|
||||||
}' ${if option ? class then " --class ${option.class}" else ""} {
|
}' ${if option ? class then " --class ${option.class}" else ""} {
|
||||||
linux ${defaults.image} ${defaults.params} ${
|
linux ${defaults.image} \''${isoboot} ${defaults.params} ${
|
||||||
option.params or ""
|
option.params or ""
|
||||||
}
|
}
|
||||||
initrd ${defaults.initrd}
|
initrd ${defaults.initrd}
|
||||||
@ -268,6 +268,12 @@ let
|
|||||||
set timeout=10
|
set timeout=10
|
||||||
${grubMenuCfg}
|
${grubMenuCfg}
|
||||||
|
|
||||||
|
# If the parameter iso_path is set, append the findiso parameter to the kernel
|
||||||
|
# line. We need this to allow the nixos iso to be booted from grub directly.
|
||||||
|
if [ \''${iso_path} ] ; then
|
||||||
|
set isoboot="findiso=\''${iso_path}"
|
||||||
|
fi
|
||||||
|
|
||||||
#
|
#
|
||||||
# Menu entries
|
# Menu entries
|
||||||
#
|
#
|
||||||
@ -616,6 +622,9 @@ in
|
|||||||
{ source = "${efiDir}/EFI";
|
{ source = "${efiDir}/EFI";
|
||||||
target = "/EFI";
|
target = "/EFI";
|
||||||
}
|
}
|
||||||
|
{ source = pkgs.writeText "loopback.cfg" "source /EFI/boot/grub.cfg";
|
||||||
|
target = "/boot/grub/loopback.cfg";
|
||||||
|
}
|
||||||
] ++ optionals (config.boot.loader.grub.memtest86.enable && canx86BiosBoot) [
|
] ++ optionals (config.boot.loader.grub.memtest86.enable && canx86BiosBoot) [
|
||||||
{ source = "${pkgs.memtest86plus}/memtest.bin";
|
{ source = "${pkgs.memtest86plus}/memtest.bin";
|
||||||
target = "/boot/memtest.bin";
|
target = "/boot/memtest.bin";
|
||||||
|
@ -183,6 +183,12 @@ for o in $(cat /proc/cmdline); do
|
|||||||
copytoram)
|
copytoram)
|
||||||
copytoram=1
|
copytoram=1
|
||||||
;;
|
;;
|
||||||
|
findiso=*)
|
||||||
|
# if an iso name is supplied, try to find the device where
|
||||||
|
# the iso resides on
|
||||||
|
set -- $(IFS==; echo $o)
|
||||||
|
isoPath=$2
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -442,6 +448,27 @@ if test -e /sys/power/resume -a -e /sys/power/disk; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# If we have a path to an iso file, find the iso and link it to /dev/root
|
||||||
|
if [ -n "$isoPath" ]; then
|
||||||
|
mkdir -p /findiso
|
||||||
|
|
||||||
|
for delay in 5 10; do
|
||||||
|
blkid | while read -r line; do
|
||||||
|
device=$(echo "$line" | sed 's/:.*//')
|
||||||
|
type=$(echo "$line" | sed 's/.*TYPE="\([^"]*\)".*/\1/')
|
||||||
|
|
||||||
|
mount -t "$type" "$device" /findiso
|
||||||
|
if [ -e "/findiso$isoPath" ]; then
|
||||||
|
ln -sf "/findiso$isoPath" /dev/root
|
||||||
|
break 2
|
||||||
|
else
|
||||||
|
umount /findiso
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
sleep "$delay"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
# Try to find and mount the root device.
|
# Try to find and mount the root device.
|
||||||
mkdir -p $targetRoot
|
mkdir -p $targetRoot
|
||||||
|
Loading…
x
Reference in New Issue
Block a user