* Generate a Grub boot menu that contains all generations of the

system profile.

svn path=/nixu/trunk/; revision=7105
This commit is contained in:
Eelco Dolstra 2006-11-23 23:22:43 +00:00
parent 84b1cafe4b
commit 34acdf1f22
4 changed files with 60 additions and 5 deletions

50
test/grub-menu-builder.sh Normal file
View 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

View File

@ -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

View File

@ -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;
};
} }

View File

@ -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