diskimage-builder/elements/ramdisk/extra-data.d/scripts/d/init-func

267 lines
5.4 KiB
Text
Raw Normal View History

2012-07-23 04:07:27 +00:00
# Copyright (c) 2012 NTT DOCOMO, INC.
2012-11-15 03:20:32 +00:00
# Copyright 2012 Hewlett-Packard Development Company, L.P.
#
2012-07-23 04:07:27 +00:00
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
function get_kernel_parameter() {
local name=$1
for i in `cat /proc/cmdline`; do
case "$i" in
${name}=*)
echo "${i#${name}=}"
return 0
;;
${name})
echo ""
return 0
;;
*)
;;
esac
done
echo ""
return 1
2012-07-23 04:07:27 +00:00
}
function string_contains() {
local string=$1
local word=$2
if [ "$string" != "${string/$word/}" ]; then
return 0
else
return 1
fi
}
2012-07-23 04:07:27 +00:00
function load_modules_by_udev() {
udevadm trigger --action=add
udevadm settle
2012-07-23 04:07:27 +00:00
}
function strip_dev() {
echo "$1" | sed -e 's:^/dev/::'
2012-07-23 04:07:27 +00:00
}
function prepend_dev() {
case "$1" in
/dev/*)
echo "$1"
;;
*)
echo "/dev/$1"
;;
esac
2012-07-23 04:07:27 +00:00
}
function whole_disk_name() {
local dev=`prepend_dev "$1"`
case "$dev" in
/dev/sd*|/dev/hd*|/dev/vd*)
echo "$dev" | sed -e 's/[0-9]*$//'
;;
/dev/cciss/*)
echo "$dev" | sed -e 's/p[0-9]*$//'
;;
*)
echo ""
return 1
;;
esac
2012-07-23 04:07:27 +00:00
}
function partition_name() {
local dev=`prepend_dev "$1"`
local part=$2
case "$dev" in
/dev/sd*|/dev/hd*|/dev/vd*)
echo "${dev}${part}"
;;
/dev/cciss/*)
echo "${dev}p${part}"
;;
*)
echo ""
return 1
;;
esac
2012-07-23 04:07:27 +00:00
}
function find_interface() {
local mac=$1
eth=`ifconfig -a | grep -i "$mac" | awk {' print $1 '} | head -n 1`
if [ -n "$eth" ]; then
echo "$eth"
return 0
else
return 1
fi
2012-07-23 04:07:27 +00:00
}
function set_mac() {
local dev=$1
local mac=$2
ip link set "$dev" address "$mac"
2012-07-23 04:07:27 +00:00
}
function swap_ifname() {
local dev=$1
local dev2=$2
if [ "$dev" = "$dev2" ]; then
return
fi
if ip link show "$dev2" >/dev/null; then
# dev2 exists
# swap device name
ip link set "$dev" name "_$dev"
ip link set "$dev2" name "$dev"
ip link set "_$dev" name "$dev2"
else
ip link set "$dev" name "$dev2"
fi
2012-07-23 04:07:27 +00:00
}
function partition_exists() {
local dev=$1
dev=`strip_dev "$dev"`
if tail -n +3 /proc/partitions | grep "$dev" >/dev/null; then
return 0
else
return 1
fi
2012-07-23 04:07:27 +00:00
}
function find_disk() {
local disks=$1
local dev
2012-07-23 04:07:27 +00:00
# find device
local OLD_IFS=$IFS
IFS=,
for i in $disks; do
dev=`whole_disk_name "$i"`
if partition_exists "$dev"; then
dev=`prepend_dev "$dev"`
break
fi
dev=""
done
IFS=$OLD_IFS
2012-07-23 04:07:27 +00:00
if [ -z "$dev" ]; then
return 1
fi
echo "$dev"
return 0
2012-07-23 04:07:27 +00:00
}
function check_tgtd_socket() {
echo -n "waiting for tgtd socket..."
if [ -e /var/run/tgtd.ipc_abstract_namespace.0 ]; then
echo "found"
return 0
else
echo "not found"
return 1
fi
}
wait_for(){
LOOPS=$1
SLEEPTIME=$2
shift ; shift
i=0
while [ $i -lt $LOOPS ] ; do
i=$((i + 1))
eval "$@" && return 0 || true
sleep $SLEEPTIME
done
return 1
}
2012-07-23 04:07:27 +00:00
function start_iscsi_target() {
local iqn=$1
local dev=$2
local cli=$3
2012-07-23 04:07:27 +00:00
# used by tgtd
mkdir -p /var/run
2012-07-23 04:07:27 +00:00
tgtd
wait_for 10 0.5 check_tgtd_socket
2012-07-23 04:07:27 +00:00
tgtadm --lld iscsi --mode target --op new --tid 1 --targetname "$iqn"
tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store "$dev"
tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address "$cli"
2012-07-23 04:07:27 +00:00
}
function stop_iscsi_target() {
tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1
tgtadm --lld iscsi --mode target --op delete --tid 1
killall tgtd
2012-07-23 04:07:27 +00:00
}
function troubleshoot() {
if [ "$TROUBLESHOOT" != 1 ]; then
_DO_TROUBLESHOOT=""
_t=0
echo -n "Troubleshooting required, press t to launch shell."
while [ $_t -lt 10 ]; do
read -n 1 -t 1 _DO_TROUBLESHOOT
_t=$(($_t + 1))
if [ "$_DO_TROUBLESHOOT" == "t" ]; then
export TROUBLESHOOT=1
break
fi
echo -n "."
done
echo ""
fi
if [ "$TROUBLESHOOT" == 1 ]; then
echo "Starting troubleshooting shell."
bash
fi
}
2012-07-23 04:07:27 +00:00
function safe_url_encode() {
local str=$1
local out=""
for (( i=0; i<${#str}; i++ )); do
c=${str:$i:1}
case $c in
[a-zA-Z0-9.-_] )
out+="$c"
;;
' ' )
out+="+"
;;
*)
#skip it
;;
esac
done
echo "$out"
}
function err_msg() {
message=$1
if [ -z "$FIRST_ERR_MSG" ]; then
FIRST_ERR_MSG=$(safe_url_encode "$message")
fi
echo "$message"
}