Files
new_install/operation/functions
Xu, Shunxuan e7ef3d5b16 添加40安装选项及支持700内核的dmraid识别
modified:   main/begin-install
	modified:   operation/finish_install/98state_grid_custom.py
	new file:   operation/finish_install/exec_install_40.sh
	modified:   operation/functions
	new file:   xml/install-40-d5000.xml

Signed-off-by: Xu, Shunxuan <sxxu@linx-info.com>
2018-11-06 11:21:34 +08:00

154 lines
3.7 KiB
Plaintext

# LOG_FILE, LOG, DEV_LOG, TARGET is global variable,
# they can export from environment variable,
# if not definition, will configure default value.
# installation log file
[ -z "$LOG_FILE" ] && LOG_FILE="/var/log/install.log"
# LOG have two value, true and stdout
# true: log will record to $LOG_FILE
# stdout: log will print to stand out, very usefull for debug
[ -z "$LOG" ] && LOG="true"
# the log of command operation
# ex: stdout of command: mkfs.ext3 /dev/hda2
[ -z "$DEV_LOG" ] && DEV_LOG="/dev/tty8"
# the root directory of hardisk mount
[ -z "$TARGET" ] && TARGET="/mnt"
mkdir -p $(dirname $LOG_FILE)
mkdir -p $(dirname $DEV_LOG)
mkdir -p "$TARGET"
stdout ()
{
# process % in partition
local log=$(echo $*|sed "s/%/%%/g")
printf "$log\n"
}
log ()
{
local DATE=$(date "+%Y/%m/%d %T")
# process % in partition
local log=$(echo $*|sed "s/%/%%/g")
case "$LOG" in
true) printf "$DATE $log\n" >>"$LOG_FILE" ;;
stdout) stdout "$DATE $log" ;;
*) : ;;
esac
}
err ()
{
log "error: $(basename $0): $*" >&2
}
warn ()
{
log "warning: $(basename $0): $*" >&2
}
info ()
{
log "info: $(basename $0): $1"
if [ "$2" == "stdout" ];then
stdout "@$1"
fi
}
# erv stands for "Evaluate Return Value"
erv ()
{
ret="${?}"
if [ "$ret" -ne 0 ];then
exit $ret
fi
}
# recursively umount directory,
# argument can be a device node or mountpoint.
# if argument is a device node:
# 1.if a device be mounted on a directory, then umount this device's mountpoint,
# if a device has been mounted on this mountpoint's subdirectory, then recurisve
# umount device of this subdirectory , finally, umount the device that you want
# be umounted.
# 2.if have a device has been mounted on multi-direcetory, then umount these
# direcectories one by one, use method 1.
# if argument is a mountpoint, then umount this mountpoint, if have device has been mounted on
# this mountpoint's subdirectory, the recursively umount subdirectory, finally umount the directory.
# ex: 1.reumount /dev/hda5
# 2.reumount /mnt/
reumount ()
{
if [ $# -ne 1 ];then
err "$FUNCNAME function argument error, it must have 1 argument !"
return 1
fi
local arg
arg="$1"
local multi_mountpoint
# if arg is a device node
if [ ! -d "$arg" ];then
multi_mountpoint=$(grep "^$arg " /proc/mounts|awk '{print $2}')
else
# delete last "/" in mountpoint
# mountpoint in /proc/mounts don't have "/" at last
multi_mountpoint=$(echo $arg|sed "s%/$%%")
fi
# may be a device has been mounted in multi-mountpoint.
# ex: /dev/hda5 mount at /mnt and /cdrom at the same time,
# this case appear when $TARGET has been changed, when mount paritions.
for mmp in $multi_mountpoint; do
# sort -k2 -r ensure long mountpoint sort at front of short mountpoint,
# so, we can umount long mountpoint before short mountpoint.
# ex: /usr/lib, /, /usr, after sort is /usr/lib, /usr, /
# this mean that /usr/lib is umounted first, then umount /usr, finally umount /
for mp in $(grep "$mmp" /proc/mounts|sort -k2 -r |awk '{print $2}');do
umount $mp 1>>"$DEV_LOG" 2>&1
done
done
}
update_udev()
{
killall udevd
start_udev 1>/dev/null 2>/dev/null
}
#
# get device uuid/by-id/by-path info
# if not found return NULL
# ex: get_disk_sym /dev/sda1 by-uuid
#
get_disk_sym ()
{
if [ $# -ne 2 ];then
err "$FUNCNAME function argument error, it must have 2 argument !"
return 1
fi
local partition="$1"
local type="$2"
local devname=""
local path=$(udevadm info -q path -n $partition)
# if not update udev, uuid or by-id may use old one.
update_udev
# scsci's by-id may be have multi-links, we get first link
# update hard disk informations.
devname=$(udevadm info -q symlink -p $path|tr " " "\n"|grep "$type"|head -n 1)
echo "$devname"
}