diff options
Diffstat (limited to 'abs/core-testing/grub-gfx/install-grub')
| -rwxr-xr-x | abs/core-testing/grub-gfx/install-grub | 187 | 
1 files changed, 187 insertions, 0 deletions
| diff --git a/abs/core-testing/grub-gfx/install-grub b/abs/core-testing/grub-gfx/install-grub new file mode 100755 index 0000000..3eb7ce5 --- /dev/null +++ b/abs/core-testing/grub-gfx/install-grub @@ -0,0 +1,187 @@ +#!/bin/bash + +# +# This is a little helper script that tries to convert linux-style device +# names to grub-style.  It's not very smart, so it +# probably won't work for more complicated setups. +# +# If it doesn't work for you, try installing grub manually: +# +#    # mkdir -p /boot/grub +#    # cp /usr/lib/grub/i386-pc/* /boot/grub/ +# +# Then start up the 'grub' shell and run something like the following: +# +#    grub> root(hd0,0) +#    grub> setup(hd0) +# +# The "root" line should point to the partition your kernel is located on, +# /boot if you have a separate boot partition, otherwise your root (/). +# +# The "setup" line tells grub which disc/partition to install the +# bootloader to.  In the example above, it will install to the MBR of the +# primary master hard drive. +# + +usage() { +	echo "usage: install-grub <install_device> [boot_device]" +	echo +	echo "where <install_device> is the device where Grub will be installed" +	echo "and [boot_device] is the partition that contains the /boot" +	echo "directory (auto-detected if omitted)" +	echo +	echo "examples: install-grub /dev/hda" +	echo "          install-grub /dev/hda /dev/hda1" +	echo +	exit 0 +} + +## new install-grub, code was taken from setup script +ROOTDEV=$1 +PART_ROOT=$2 +VMLINUZ=vmlinuz26 + +if [ "$ROOTDEV" = "" ]; then +	usage +fi +if [ "$PART_ROOT" = "" ]; then +	PART_ROOT=$(mount | grep "on /boot type" | cut -d' ' -f 1) +fi +if [ "$PART_ROOT" = "" ]; then +	PART_ROOT=$(mount | grep "on / type" | cut -d' ' -f 1) +fi +if [ "$PART_ROOT" = "" ]; then +	echo "error: could not determine BOOT_DEVICE, please specify manually" >&2 +	exit 1 +fi + + +get_grub_map() { +	[ -e /tmp/dev.map ]  && rm /tmp/dev.map	 +	/sbin/grub --no-floppy --device-map /tmp/dev.map >/tmp/grub.log 2>&1 <<EOF +quit +EOF +} + +mapdev() { +	partition_flag=0 +	device_found=0 +	devs=$(cat /tmp/dev.map | grep -v fd | sed 's/ *\t/ /' | sed ':a;$!N;$!ba;s/\n/ /g') +	linuxdevice=$(echo $1 | cut -b1-8) +	if [ "$(echo $1 | egrep '[0-9]$')" ]; then +		# /dev/hdXY +		pnum=$(echo $1 | cut -b9-) +		pnum=$(($pnum-1)) +		partition_flag=1 +	fi +	for  dev in $devs +	do +	    if [ "(" = $(echo $dev | cut -b1) ]; then +		grubdevice="$dev" +	    else +		if [ "$dev" = "$linuxdevice" ]; then +			device_found=1 +			break    +		fi +	   fi +	done	 +	if [ "$device_found" = "1" ]; then +		if [ "$partition_flag" = "0" ]; then +			echo "$grubdevice" +		else +			grubdevice_stringlen=${#grubdevice} +			let grubdevice_stringlen-- +			grubdevice=$(echo $grubdevice | cut -b1-$grubdevice_stringlen) +			echo "$grubdevice,$pnum)" +		fi +	else +		echo " DEVICE NOT FOUND" +	fi +} + +dogrub() { +	get_grub_map	 +	if [ ! -f /boot/grub/menu.lst ]; then +		echo "Error: Couldn't find /boot/grub/menu.lst.  Is GRUB installed?" +		exit 1 +	fi +	# try to auto-configure GRUB... +	if [ "$PART_ROOT" != "" -a "$S_GRUB" != "1" ]; then +		grubdev=$(mapdev $PART_ROOT) +		# look for a separately-mounted /boot partition +		bootdev=$(mount | grep /boot | cut -d' ' -f 1) +		if [ "$grubdev" != "" -o "$bootdev" != "" ]; then +			cp /boot/grub/menu.lst /tmp/.menu.lst +			# remove the default entries by truncating the file at our little tag (#-*) +			head -n $(cat /tmp/.menu.lst | grep -n '#-\*' | cut -d: -f 1) /tmp/.menu.lst >/boot/grub/menu.lst +			rm -f /tmp/.menu.lst +			echo "" >>/boot/grub/menu.lst +			echo "# (0) Arch Linux" >>/boot/grub/menu.lst +			echo "title  Arch Linux" >>/boot/grub/menu.lst +			subdir= +			if [ "$bootdev" != "" ]; then +				grubdev=$(mapdev $bootdev) +			else +				subdir="/boot" +			fi +			echo "root   $grubdev" >>/boot/grub/menu.lst +			echo "kernel $subdir/$VMLINUZ root=$PART_ROOT ro" >>/boot/grub/menu.lst +			if [ "$VMLINUZ" = "vmlinuz26" ]; then +				echo "initrd $subdir/kernel26.img" >>/boot/grub/menu.lst +			fi +			echo "" >>/boot/grub/menu.lst +			# adding fallback/full image +			echo "# (1) Arch Linux" >>/boot/grub/menu.lst +			echo "title  Arch Linux Fallback" >>/boot/grub/menu.lst +			echo "root   $grubdev" >>/boot/grub/menu.lst +			echo "kernel $subdir/$VMLINUZ root=$PART_ROOT ro" >>/boot/grub/menu.lst +			if [ "$VMLINUZ" = "vmlinuz26" ]; then +				echo "initrd $subdir/kernel26-fallback.img" >>/boot/grub/menu.lst +			fi +			echo "" >>/boot/grub/menu.lst +		fi +	fi + +	echo "Installing the GRUB bootloader..." +	cp -a /usr/lib/grub/i386-pc/* /boot/grub/ +	sync +	# freeze xfs filesystems to enable grub installation on xfs filesystems +	if [ -x /usr/sbin/xfs_freeze ]; then +		/usr/sbin/xfs_freeze -f /boot > /dev/null 2>&1 +		/usr/sbin/xfs_freeze -f / > /dev/null 2>&1 +	fi +	# look for a separately-mounted /boot partition +	bootpart=$(mount | grep /boot | cut -d' ' -f 1) +	if [ "$bootpart" = "" ]; then +			bootpart=$PART_ROOT +	fi +	bootpart=$(mapdev $bootpart) +	bootdev=$(mapdev $ROOTDEV) +	if [ "$bootpart" = "" ]; then +		echo "Error: Missing/Invalid root device: $bootpart" +		exit 1 +	fi +	/sbin/grub --no-floppy --batch >/tmp/grub.log 2>&1 <<EOF +root $bootpart +setup $bootdev +quit +EOF +cat /tmp/grub.log +	# unfreeze xfs filesystems +	if [ -x /usr/sbin/xfs_freeze ]; then +		/usr/sbin/xfs_freeze -u /boot > /dev/null 2>&1 +		/usr/sbin/xfs_freeze -u / > /dev/null 2>&1 +	fi + +	if grep "Error [0-9]*: " /tmp/grub.log >/dev/null; then +		echo "Error installing GRUB. (see /tmp/grub.log for output)" +		exit 1 +	fi +	echo "GRUB was successfully installed." + +rm -f /tmp/grub.log + +exit 0 +} + +dogrub
\ No newline at end of file | 
