* 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"
|
||||
|
||||
if test -z "$targetDevice" -o -z "$nixExpr"; then
|
||||
echo "syntax: installer.sh <targetDevice> <nixExpr>"
|
||||
echo "Syntax: installer.sh <targetDevice> <nixExpr>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
@ -28,9 +28,17 @@ rec {
|
||||
inherit (pkgs) grub coreutils gnused gnugrep diffutils;
|
||||
inherit grubDevice;
|
||||
inherit bootStage2;
|
||||
inherit grubMenuBuilder;
|
||||
kernel = pkgs.kernel + "/vmlinuz";
|
||||
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
|
||||
|
||||
cat > $out/menu.lst << GRUBEND
|
||||
# Automatically generated. DO NOT EDIT THIS FILE!
|
||||
default=0
|
||||
timeout=5
|
||||
title NixOS
|
||||
kernel $kernel selinux=0 apm=on acpi=on
|
||||
initrd $initrd
|
||||
@ -21,8 +18,8 @@ cat > $out/bin/switch-to-configuration <<EOF
|
||||
set -e
|
||||
export PATH=$coreutils/bin:$gnused/bin:$gnugrep/bin:$diffutils/bin
|
||||
if test -n "$grubDevice"; then
|
||||
$grubMenuBuilder $out
|
||||
$grub/sbin/grub-install "$grubDevice" --no-floppy --recheck
|
||||
cp -f $out/menu.lst /boot/grub/menu.lst
|
||||
ln -sf $bootStage2 /init # !!! fix?
|
||||
fi
|
||||
EOF
|
||||
|
Loading…
Reference in New Issue
Block a user