Files
new_install/operation/configure_bootloader_cnf.sh
Peng Zhihui 3c0236842a rewrite text isntall interface and partition-tool
modified:   dialog/di_dialog.py
	modified:   dialog/di_main.py
	new file:   dialog/di_newt.py
	modified:   interface/ri_inst_cli.py
	modified:   interface/ri_oper.py
	new file:   new_partition/finddisk.sh
	new file:   new_partition/list-devices
	new file:   new_partition/new_partition.py
	new file:   new_partition/parted_devices
	new file:   new_partition/parted_devices.py
	modified:   operation/configure_bootloader_cnf.sh
	modified:   operation/copy_kernels.sh
	modified:   operation/install_bootloader.sh
	modified:   xml/config.xml
	modified:   xml/dependency.xml
2013-12-20 11:10:32 +08:00

265 lines
5.9 KiB
Bash
Executable File

#!/bin/bash
#
# DESCRIPTION: configure configuration file of bootloader
#
# SCRIPT NAME: configure_bootloader_cnf.sh
#
# Input:
# argument:
# <-r|--root> partition mount by root
# [-b|--boot] partition mount by boot (optional,if the boot is not mount by stand alone)
# [-k|--kparameter] kernel parameter
# [-o|--osversion] OS version
#
# Output:
# NULL
# Return value:
# 1 argument error
# 2 bootloader type doesn't specify
# 3 bootloader no implement
# 4 bootloader configuration file doesn't exist
#
#
# AUTHOR: Qin Bo
#
# EMAIL: bqin@linx-info.com
#
# DATE: 2010-09-07
#
# HISTORY:
# REVISOR DATE MODIFICATION
# Qin Bo 2010-09-07 create
#
#
#
source ./functions
usage ()
{
if [ "$1" == "-n" ];then
cmd="info"
ret=0
else
cmd="err"
ret=1
fi
$cmd "
This script will install boot loader for system
Usage: $0 options
options:
[--help] show this message
<-t|--type > boot loader type:grub,etc.
<-r|--root> partition mount by root
[-b|--boot] partition mount by boot (optional,if the boot is not mount by stand alone)
[-k|--kparameter] kernel parameter
[-o|--osversion] OS version
"
return $ret
}
configure_elilo_cnf()
{
local root_dev
by_uuid=$(get_disk_sym $ROOT_PARTITION "by-uuid")
if [ -n "$by_uuid" ];then
root_dev="UUID=$(echo $by_uuid|sed 's/.*\///')"
sed -i -e "s@root=@append=\"$KPARAMETER root=$root_dev rootdelay=2500\"@" $ELILO_CNF
else
root_dev="/dev/$ROOT_PARTITION"
sed -i "s@root=@root=$root_dev@g" $ELILO_CNF
sed -i -e "/initrd=.*/i\ append=\"$KPARAMETER rootdelay=2500\"" $ELILO_CNF
fi
}
configure_grub_cnf ()
{
local root_hd
local part_num
local root
local hd_dev
local devname
local root_dev
# get the boot directory in which hard disk
if [ -n "$BOOT_PARTITION" ];then
root_hd=${BOOT_PARTITION%%[0-9]*}
part_num=${BOOT_PARTITION##*[a-z]}
let $((part_num-=1))
else
root_hd=${ROOT_PARTITION%%[0-9]*}
part_num=${ROOT_PARTITION##*[a-z]}
let $((part_num-=1))
fi
info "generate $DEVICEMAP"
# generate device.map
grub --batch --no-floppy --device-map="$DEVICEMAP" << EOF 1>>"$DEV_LOG" 2>&1
quit
EOF
hd_dev=$(grep "$root_hd" "$DEVICEMAP" | awk '{print $1}' | sed 's/(//' | sed 's/)//') #e.g. hd_dev=hd0
info "hd_dev: $hd_dev part_num: $part_num"
root="($hd_dev,$part_num)"
info "root: $root"
# use UUID in menu.lst except md,
# because when I use UUID of raid device in menu.lst,
# initrd can't switch root .
devname=$(basename $ROOT_PARTITION)
if [[ "$devname" =~ ^md[0-9]*$ ]];then
root_dev="/dev/$ROOT_PARTITION"
else
by_uuid=$(get_disk_sym $ROOT_PARTITION "by-uuid")
if [ -n "$by_uuid" ];then
root_dev="UUID=$(echo $by_uuid|sed 's/.*\///')"
else
root_dev="/dev/$ROOT_PARTITION"
fi
fi
info "root_dev: $root_dev"
local boot
if [ -n "$BOOT_PARTITION" ];then
boot=
else
boot="/boot"
fi
cat >>"$GRUBMENU"<< EOF
## LINX splash image
splashimage $root/boot/grub/linx.xpm.gz
## define special fore-/background colors for splash screen image
foreground = FFFFFF
background = AAAAAA
## time to wait for user interaction
timeout 10
## default boot kernel
default 0
## Default menu entries
title LINX Rocky Secure Operating System Version $OSVERSION with root
kernel $root$boot/vmlinuz-root root=$root_dev $KPARAMETER linx-root
initrd $boot/initrd-full-cgroup.gz
title LINX Rocky Secure Operating System Version $OSVERSION without root
kernel $root$boot/vmlinuz-root-n root=$root_dev $KPARAMETER linx-no-root
initrd $boot/initrd-full-cgroup.gz
title LINX Rocky Secure Operating System Version $OSVERSION with root but no cgroup
kernel $root$boot/vmlinuz-root-nocgroup root=$root_dev $KPARAMETER linx-root-nocgroup
initrd $boot/initrd-full-nocgroup.gz
title LINX Rocky Secure Operating System Version $OSVERSION without root but no cgroup
kernel $root$boot/vmlinuz-root-n-nocgroup root=$root_dev $KPARAMETER linx-no-root-nocgroup
initrd $boot/initrd-full-nocgroup.gz
EOF
chown 96.96 $GRUBMENU
}
configure_def_grub (){
sed -i "s/GRUB_CMDLINE_LINUX=\"/&$KPARAMETER/" "$DEFGRUB"
}
main ()
{
if [ $# -eq 0 ];then
usage; erv
fi
tmp=$(getopt -o t:r:b:k:o: --long type:,root:,boot:,kparameter:,osversion:,help -- "$@" 2>>$DEV_LOG)
if [ $? -ne 0 ];then
usage; erv
fi
# set all argument to arg variable
eval set -- "$tmp"
while true ;do
case "$1" in
-t|--type) TYPE="$2"
info "bootloader type: $TYPE"
shift 2
;;
-r|--root) ROOT_PARTITION="$2"
info "root partition: $ROOT_PARTITION"
shift 2
;;
-b|--boot) BOOT_PARTITION="$2"
info "boot partition: $BOOT_PARTITION"
shift 2
;;
-k|--kparameter) KPARAMETER="$2"
info "kernel parameter: $KPARAMETER"
shift 2
;;
-o|--osversion) OSVERSION="$2"
info "version of opterating system: $OSVERSION"
shift 2
;;
--help) usage -n; exit 0 ;;
# shift the last "--", this dash is define by getopt (more information see man getopt)
--) shift; break;;
*) usage; erv ;;
esac
done
if [ -n "$TYPE" ];then
case "$TYPE" in
grub)
if [ -z "$ROOT_PARTITION" ]; then
err "configure grub configuration file root partition can't be empty"
exit 1
fi
configure_grub_cnf
erv
;;
elilo)
if [ -z "$ROOT_PARTITION" ]; then
err "configure elilo configuration file root partition can't be empty"
exit 1
fi
configure_elilo_cnf
erv
;;
grub2)
configure_def_grub
erv
;;
*)
err "$TYPE bootloader no implement yet !"
exit 3
;;
esac
else
err "bootloader type doesn't specify"
exit 2
fi
}
TYPE=""
ROOT_PARTITION=""
BOOT_PARTITION=""
KPARAMETER=""
OSVERSION=""
GRUB_DIR="$TARGET/boot/grub"
GRUBMENU="$GRUB_DIR/menu.lst"
DEFGRUB="$TARGET/etc/default/grub"
DEVICEMAP="$GRUB_DIR/device.map"
ELILO_CNF="/tmp/tmppoint/efi/boot/elilo.conf"
# The quotes around '$@' are essential!
# in this way we can accept whitespace as parameter.
main "$@"