diff --git a/installer/grub-menu-builder.sh b/installer/grub-menu-builder.sh index 06371d4af7e..078d2c09d07 100644 --- a/installer/grub-menu-builder.sh +++ b/installer/grub-menu-builder.sh @@ -19,24 +19,47 @@ default=0 timeout=5 GRUBEND -addEntry() { - name="$1" - path="$2" - if ! test -e $path/menu.lst; then + +addEntry() { + local name="$1" + local path="$2" + + if ! test -e $path/kernel -a -e $path/initrd; then return fi + local kernel=$(readlink -f $path/kernel) + local initrd=$(readlink -f $path/initrd) + + if test -n "@copyKernels@"; then + local kernel2=/boot/kernels/$(echo $kernel | sed 's^/^-^g') + if ! test -e $kernel2; then + cp $kernel $kernel2 + fi + kernel=$kernel2 + + local initrd2=/boot/kernels/$(echo $initrd | sed 's^/^-^g') + if ! test -e $initrd2; then + cp $initrd $initrd2 + fi + initrd=$initrd2 + fi + cat >> $tmp << GRUBEND title $name + kernel $kernel init=$(readlink -f $path/init) $(cat $path/kernel-params) + initrd $initrd GRUBEND - - #cat $path/menu.lst >> $tmp - - grep -v "title \|default=\|timeout=" < $path/menu.lst >> $tmp } +rm -rf /boot/kernels +if test -n "@copyKernels@"; then + mkdir -p /boot/kernels +fi + + if test -n "$tmp"; then addEntry "NixOS - Default" $default fi @@ -52,7 +75,6 @@ for generation in $( link=/nix/var/nix/profiles/system-$generation-link date=$(stat --printf="%y\n" $link | sed 's/\..*//') addEntry "NixOS - Configuration $generation ($date)" $link - done diff --git a/system/options.nix b/system/options.nix index 1cdf3d04157..6c0322aa70c 100644 --- a/system/options.nix +++ b/system/options.nix @@ -175,6 +175,17 @@ } + { + name = ["boot" "copyKernels"]; + default = false; + description = " + Whether the Grub menu builder should copy kernels and initial + ramdisks to /boot. This is necessary when /nix is on a + different file system than /. + "; + } + + { name = ["networking" "useDHCP"]; default = true; diff --git a/system/system.nix b/system/system.nix index c29d6100c98..0fbe3ad7c65 100644 --- a/system/system.nix +++ b/system/system.nix @@ -256,6 +256,7 @@ rec { isExecutable = true; inherit (pkgs) bash; path = [pkgs.coreutils pkgs.gnused pkgs.gnugrep]; + copyKernels = config.get ["boot" "copyKernels"]; };