* Generate a Grub boot menu that contains all generations of the
system profile. svn path=/nixu/trunk/; revision=7105
This commit is contained in:
parent
84b1cafe4b
commit
34acdf1f22
50
test/grub-menu-builder.sh
Normal file
50
test/grub-menu-builder.sh
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#! @bash@/bin/sh -e
|
||||||
|
|
||||||
|
default=$1
|
||||||
|
if test -z "$1"; then
|
||||||
|
echo "Syntax: grub-menu-builder.sh <DEFAULT-CONFIG>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
target=/boot/grub/menu.lst
|
||||||
|
tmp=$target.tmp
|
||||||
|
|
||||||
|
cat > $tmp << GRUBEND
|
||||||
|
# Automatically generated. DO NOT EDIT THIS FILE!
|
||||||
|
default=0
|
||||||
|
timeout=5
|
||||||
|
GRUBEND
|
||||||
|
|
||||||
|
addEntry() {
|
||||||
|
name="$1"
|
||||||
|
path="$2"
|
||||||
|
|
||||||
|
cat >> $tmp << GRUBEND
|
||||||
|
title $name
|
||||||
|
GRUBEND
|
||||||
|
|
||||||
|
#cat $path/menu.lst >> $tmp
|
||||||
|
|
||||||
|
grep -v "title \|default=\|timeout=" < $path/menu.lst >> $tmp
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if test -n "$tmp"; then
|
||||||
|
addEntry "NixOS - Default" $default
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Add all generations of the system profile to the menu, in reverse
|
||||||
|
# (most recent to least recent) order.
|
||||||
|
for generation in $(
|
||||||
|
(cd /nix/var/nix/profiles && ls -d system-*-link) \
|
||||||
|
| sed 's/system-\([0-9]\+\)-link/\1/' \
|
||||||
|
| sort -n -r); do
|
||||||
|
echo $generation
|
||||||
|
addEntry "NixOS - Configuration $generation" \
|
||||||
|
/nix/var/nix/profiles/system-$generation-link
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
cp $tmp $target
|
@ -19,7 +19,7 @@ targetDevice="$1"
|
|||||||
nixExpr="$2"
|
nixExpr="$2"
|
||||||
|
|
||||||
if test -z "$targetDevice" -o -z "$nixExpr"; then
|
if test -z "$targetDevice" -o -z "$nixExpr"; then
|
||||||
echo "syntax: installer.sh <targetDevice> <nixExpr>"
|
echo "Syntax: installer.sh <targetDevice> <nixExpr>"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -28,9 +28,17 @@ rec {
|
|||||||
inherit (pkgs) grub coreutils gnused gnugrep diffutils;
|
inherit (pkgs) grub coreutils gnused gnugrep diffutils;
|
||||||
inherit grubDevice;
|
inherit grubDevice;
|
||||||
inherit bootStage2;
|
inherit bootStage2;
|
||||||
|
inherit grubMenuBuilder;
|
||||||
kernel = pkgs.kernel + "/vmlinuz";
|
kernel = pkgs.kernel + "/vmlinuz";
|
||||||
initrd = initialRamdisk + "/initrd";
|
initrd = initialRamdisk + "/initrd";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
grubMenuBuilder = pkgs.genericSubstituter {
|
||||||
|
src = ./grub-menu-builder.sh;
|
||||||
|
isExecutable = true;
|
||||||
|
inherit (pkgs) bash;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,6 @@ ln -s $kernel $out/kernel
|
|||||||
ln -s $grub $out/grub
|
ln -s $grub $out/grub
|
||||||
|
|
||||||
cat > $out/menu.lst << GRUBEND
|
cat > $out/menu.lst << GRUBEND
|
||||||
# Automatically generated. DO NOT EDIT THIS FILE!
|
|
||||||
default=0
|
|
||||||
timeout=5
|
|
||||||
title NixOS
|
title NixOS
|
||||||
kernel $kernel selinux=0 apm=on acpi=on
|
kernel $kernel selinux=0 apm=on acpi=on
|
||||||
initrd $initrd
|
initrd $initrd
|
||||||
@ -21,8 +18,8 @@ cat > $out/bin/switch-to-configuration <<EOF
|
|||||||
set -e
|
set -e
|
||||||
export PATH=$coreutils/bin:$gnused/bin:$gnugrep/bin:$diffutils/bin
|
export PATH=$coreutils/bin:$gnused/bin:$gnugrep/bin:$diffutils/bin
|
||||||
if test -n "$grubDevice"; then
|
if test -n "$grubDevice"; then
|
||||||
|
$grubMenuBuilder $out
|
||||||
$grub/sbin/grub-install "$grubDevice" --no-floppy --recheck
|
$grub/sbin/grub-install "$grubDevice" --no-floppy --recheck
|
||||||
cp -f $out/menu.lst /boot/grub/menu.lst
|
|
||||||
ln -sf $bootStage2 /init # !!! fix?
|
ln -sf $bootStage2 /init # !!! fix?
|
||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
|
Loading…
Reference in New Issue
Block a user