You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							181 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
	
	
							181 lines
						
					
					
						
							5.0 KiB
						
					
					
				# --- SDE-COPYRIGHT-NOTE-BEGIN --- | 
						|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch. | 
						|
# | 
						|
# Filename: package/.../grub/stone_mod_grub.sh | 
						|
# Copyright (C) 2006 - 2008 The OpenSDE Project | 
						|
# Copyright (C) 2004 - 2006 The T2 SDE Project | 
						|
# Copyright (C) 1998 - 2003 Clifford Wolf | 
						|
# | 
						|
# More information can be found in the files COPYING and README. | 
						|
# | 
						|
# This program is free software; you can redistribute it and/or modify | 
						|
# it under the terms of the GNU General Public License as published by | 
						|
# the Free Software Foundation; version 2 of the License. A copy of the | 
						|
# GNU General Public License can be found in the file COPYING. | 
						|
# --- SDE-COPYRIGHT-NOTE-END --- | 
						|
# | 
						|
# [MAIN] 70 grub GRUB Boot Loader Setup | 
						|
# [SETUP] 90 grub | 
						|
 | 
						|
create_kernel_list() { | 
						|
	first=1 | 
						|
	for x in `(cd /boot/ ; ls vmlinuz_* ) | sort -r` ; do | 
						|
		ver=${x/vmlinuz_/} | 
						|
		if [ $first = 1 ] ; then | 
						|
			label=linux ; first=0 | 
						|
		else | 
						|
			label=linux-$ver | 
						|
		fi | 
						|
 | 
						|
		cat << EOT | 
						|
 | 
						|
title  $label | 
						|
kernel $bootdrive$bootpath/$x root=$rootdev ro | 
						|
initrd $bootdrive$bootpath/initrd-${ver}.img | 
						|
EOT | 
						|
	done | 
						|
} | 
						|
 | 
						|
create_device_map() { | 
						|
	gui_cmd '(Re-)Create GRUB Device Map' "$( cat << "EOT" | 
						|
rm -vf /boot/grub/device.map | 
						|
echo quit | grub --batch --device-map=/boot/grub/device.map | 
						|
EOT | 
						|
	)" | 
						|
} | 
						|
 | 
						|
convert_device () { | 
						|
    device="$1" | 
						|
 | 
						|
    # extract device type (block) and major number for root drive | 
						|
    user_drive_maj=`ls -Ll $device | | 
						|
    awk '{if ($6 < 64) printf("%c%d0", $1, $5); else printf("%c%d1", $1, $5)}'` | 
						|
 | 
						|
    # does your bios know about the above drive? | 
						|
    for bios_drive in `grep -v '^#' /boot/grub/device.map|awk '{print $2}'`; do | 
						|
    bios_drive_maj=`ls -l $bios_drive | | 
						|
    awk '{if ($6 < 64) printf("%c%d0", $1, $5); else printf("%c%d1", $1, $5)}'` | 
						|
 | 
						|
    if [ "$user_drive_maj" = "$bios_drive_maj" ]; then | 
						|
	# yupi ya yeh! we found your drive! | 
						|
	root_drive=`grep $bios_drive /boot/grub/device.map | awk '{print $1}'` | 
						|
	    tmp_part=`ls -Ll $device | awk '{print $6}'` | 
						|
	break | 
						|
    fi | 
						|
    done | 
						|
 | 
						|
    # convert the partition number to GRUB style | 
						|
    if [ $tmp_part -gt 64 ]; then | 
						|
	# hd[bdfh] | 
						|
	# this doesn't handle the disk itself correctly - just the partitions | 
						|
	root_part=$[$tmp_part-65] | 
						|
    else | 
						|
    root_part=$[$tmp_part-1] | 
						|
    fi | 
						|
    unset tmp_part | 
						|
 | 
						|
    drive=`echo $root_drive | sed "s:)$:,$root_part):"` | 
						|
    # Do we need some user confirmation to this result??? | 
						|
    # ... | 
						|
    unset device | 
						|
    echo $drive | 
						|
} | 
						|
 | 
						|
create_boot_menu() { | 
						|
	cat << EOT > /boot/grub/menu.lst | 
						|
timeout 8 | 
						|
default 0 | 
						|
fallback 1 | 
						|
EOT | 
						|
 | 
						|
	[ -f /boot/opensde-grub-splash.xpm.gz ] && cat << EOT >> /boot/grub/menu.lst | 
						|
 | 
						|
foreground  = 000000 | 
						|
background  = e4e6e3 | 
						|
splashimage $bootdrive$bootpath/opensde-grub-splash.xpm.gz | 
						|
EOT | 
						|
 | 
						|
	create_kernel_list >> /boot/grub/menu.lst | 
						|
 | 
						|
	[ -f /boot/memtest86.bin ] && cat << EOT >> /boot/grub/menu.lst | 
						|
 | 
						|
title  MemTest86 (memory tester) | 
						|
kernel $bootdrive$bootpath/memtest86.bin | 
						|
EOT | 
						|
 | 
						|
	gui_message "This is the new /boot/grub/menu.lst file: | 
						|
 | 
						|
$( cat /boot/grub/menu.lst )" | 
						|
} | 
						|
 | 
						|
grub_install() { | 
						|
	gui_cmd 'Installing GRUB' "echo -e 'root $bootdrive\\nsetup (hd0)\\nquit' | grub --batch --device-map=/boot/grub/device.map" | 
						|
} | 
						|
 | 
						|
main() { | 
						|
 | 
						|
	rootdev="`grep ' / ' /proc/mounts | tail -n 1 | \ | 
						|
				awk '/\/dev\// { print $1; }'`" | 
						|
	bootdev="`grep ' /boot ' /proc/mounts | tail -n 1 | \ | 
						|
				awk '/\/dev\// { print $1; }'`" | 
						|
	[ -z "$bootdev" ] && bootdev="$rootdev" | 
						|
 | 
						|
	i=0 | 
						|
	rootdev="$( cd `dirname $rootdev` ; pwd -P )/$( basename $rootdev )" | 
						|
	while [ -L $rootdev ] ; do | 
						|
		directory="$( cd `dirname $rootdev` ; pwd -P )" | 
						|
		rootdev="$( ls -l $rootdev | sed 's,.* -> ,,' )" | 
						|
		[ "${rootdev##/*}" ] && rootdev="$directory/$rootdev" | 
						|
		i=$(( $i + 1 )) ; [ $i -gt 20 ] && rootdev="Not found!" | 
						|
	done | 
						|
 | 
						|
	i=0 | 
						|
	bootdev="$( cd `dirname $bootdev` ; pwd -P )/$( basename $bootdev )" | 
						|
	while [ -L $bootdev ] ; do | 
						|
		directory="$( cd `dirname $bootdev` ; pwd -P )" | 
						|
		bootdev="$( ls -l $bootdev | sed 's,.* -> ,,' )" | 
						|
		[ "${bootdev##/*}" ] && bootdev="$directory/$bootdev" | 
						|
		i=$(( $i + 1 )) ; [ $i -gt 20 ] && bootdev="Not found!" | 
						|
	done | 
						|
 | 
						|
	if [ -s /boot/grub/device.map ] ; then | 
						|
		rootdrive=`convert_device $rootdev` | 
						|
		bootdrive=`convert_device $bootdev` | 
						|
	else | 
						|
		rootdrive='No Device Map found!' | 
						|
		bootdrive='No Device Map found!' | 
						|
	fi | 
						|
 | 
						|
	if [ "$rootdev" = "$bootdev" ] | 
						|
	then bootpath="/boot" ; else bootpath= ; fi | 
						|
 | 
						|
	if [ ! -f /boot/grub/menu.lst ] ; then | 
						|
	  if gui_yesno "GRUB does not appear to be configured. | 
						|
Automatically install GRUB now?"; then | 
						|
	    create_device_map | 
						|
	    rootdrive=`convert_device $rootdev` | 
						|
	    bootdrive=`convert_device $bootdev` | 
						|
	    create_boot_menu | 
						|
	    if ! grub_install; then | 
						|
	      gui_message "There was an error while installing GRUB." | 
						|
	    fi | 
						|
	  fi | 
						|
	fi | 
						|
 | 
						|
	while | 
						|
 | 
						|
        gui_menu grub 'GRUB Boot Loader Setup' \ | 
						|
		'(Re-)Create GRUB Device Map' 'create_device_map' \ | 
						|
		"Root Device ... $rootdev" "" \ | 
						|
		"Boot Drive .... $bootdrive$boot_path" "" \ | 
						|
		'' '' \ | 
						|
		'(Re-)Create boot menu with installed kernels' 'create_boot_menu' \ | 
						|
		'(Re-)Install GRUB in MBR of (hd0)' 'grub_install' \ | 
						|
		'' '' \ | 
						|
		"Edit /boot/grub/device.map (Device Map)" \ | 
						|
			"gui_edit 'GRUB Device Map' /boot/grub/device.map" \ | 
						|
		"Edit /boot/grub/menu.lst (Boot Menu)" \ | 
						|
			"gui_edit 'GRUB Boot Menu' /boot/grub/menu.lst" | 
						|
    do : ; done | 
						|
} | 
						|
 | 
						|
 |