Here is the diff.
--- /sbin/update-grub 2005-04-19 02:38:00.000000000 +0300
+++ update-grub.final-1 2005-09-25 17:58:59.000000000 +0300
@@ -301,6 +301,9 @@
# should grub create a memtest86 entry
memtest86="true"
+# should update-grub remember the default entry
+ keepdefaultentry="false"
+
# stores the command line arguments
command_line_arguments=$1
@@ -556,6 +559,14 @@
echo >> $buffer
}
+set_default_value() {
+
+value="$1"
+newmenu=$(tempfile)
+sed -e "s/^[[:blank:]]*default[[:blank:]]*[[:digit:]]*\(.*\)/default ${value}\1/;b" $menu > $newmenu
+mv $newmenu $menu # not nice
+unset newmenu
+}
echo -n "Testing for an existing GRUB menu.list file... "
@@ -594,6 +605,10 @@
esac
fi
+# Extract the keepdefaultentry option
+keepdefaultentry=$(GetMenuOpt "keepdefaultentry" "$keepdefaultentry")
+#echo "keepdefaultentry is $keepdefaultentry"
+
# Extract the kernel options to use
kopt=$(GetMenuOpt "kopt" "$kopt")
@@ -651,6 +666,11 @@
echo "# alternative=$alternative" >> $buffer
echo >> $buffer
+echo "## should update-grub adjust the value of the default booted system" >> $buffer
+echo "## can be true or false" >> $buffer
+echo "# keepdefaultentry=$keepdefaultentry" >> $buffer
+echo >> $buffer
+
echo "## should update-grub lock alternative automagic boot options" >> $buffer
echo "## e.g. lockalternative=true" >> $buffer
echo "## lockalternative=false" >> $buffer
@@ -728,6 +748,22 @@
kernel_dir=
fi
+if test "$keepdefaultentry" = "true" ; then
+ defaultEntryNumber=$(sed -ne 's/^[[:blank:]]*default[[:blank:]]*\([[:digit:]]*\).*/\1/p' $menu)
+# echo "Default entry is \"$defaultEntryNumber\""
+ if test -n "$defaultEntryNumber"; then
+# echo "Restoring old entry"
+ defaultEntryNumberPlusOne=$(expr $defaultEntryNumber \+ 1);
+ defaultEntry=$(grep "^[[:blank:]]*title" $menu | sed -ne "${defaultEntryNumberPlusOne}p" | sed -ne ";s/^[[:blank:]]*title[[:blank:]]*//p")
+ defaultEntry=$(echo $defaultEntry | sed -e "s/[[:blank:]]*$//") # don't trust trailing blanks
+# echo "Default entry title is \"$defaultEntry\""
+ else
+ notChangeDefault="yes"
+ fi
+else
+ notChangeDefault="yes"
+fi
+
## heres where we start writing out the kernel entries
counter=0
for kern in $sortedKernels ; do
@@ -824,5 +860,28 @@
cat $menu.new > $menu
rm -f $buffer $menu.new
fi
+
+if test -z "$notChangeDefault"; then
+ echo
+ newDefaultNumberPlusOne=$(grep "^[[:blank:]]*title[[:blank:]]*" $menu | grep -n "${defaultEntry}" | cut -f1 -d ":" | sed -ne "1p")
+# echo "newDefaultNumberPlusOne is \"$newDefaultNumberPlusOne\""
+ if test -z "$newDefaultNumberPlusOne"; then
+ echo "Previous default entry removed, resetting to 0"
+ set_default_value "0"
+ elif test -z "$defaultEntry"; then
+ echo "Value of default value matches no entry, resetting to 0"
+ set_default_value "0"
+ else
+ if test "$newDefaultNumberPlusOne" = "1"; then
+ newDefaultNumber="0"
+ else
+ newDefaultNumber=$(expr $newDefaultNumberPlusOne - 1)
+ fi
+# echo "newDefaultNumber is $newDefaultNumber"
+# echo "Adjusting default entry to $newDefaultNumber"
+ set_default_value "$newDefaultNumber"
+ fi
+fi
+
echo "done"
echo