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.
genkernel_fork/defaults/initrd.d/00-iscsi.sh

164 lines
4.0 KiB

#!/bin/sh
. /etc/initrd.d/00-common.sh
start_iscsi() {
if [ ! -e /usr/sbin/iscsistart ]; then
return 0 # disabled
fi
if [ ! -n "${ISCSI_NOIBFT}" ]; then
good_msg "Activating iSCSI via iBFT"
iscsistart -b
fi
if [ -z "${ISCSI_INITIATORNAME}" ]; then
warn_msg "No iSCSI initiator found"
return 0
fi
if [ -z "${ISCSI_TARGET}" ]; then
warn_msg "No iSCSI target found"
return 0
fi
if [ -z "${ISCSI_ADDRESS}" ]; then
warn_msg "No iSCSI address found"
return 0
fi
good_msg "Activating iSCSI via cmdline"
if [ "${ISCSI_TGPT}" ]; then
ADDITIONAL="${ADDITIONAL} -g ${ISCSI_TGPT}"
else
ADDITIONAL="${ADDITIONAL} -g 1"
fi
if [ "${ISCSI_PORT}" ]; then
ADDITIONAL="${ADDITIONAL} -p ${ISCSI_PORT}"
fi
if [ "${ISCSI_USERNAME}" ]; then
ADDITIONAL="${ADDITIONAL} -u ${ISCSI_USERNAME}"
fi
if [ "${ISCSI_PASSWORD}" ]; then
ADDITIONAL="${ADDITIONAL} -w ${ISCSI_PASSWORD}"
fi
if [ "${ISCSI_USERNAME_IN}" ]; then
ADDITIONAL="${ADDITIONAL} -U ${ISCSI_USERNAME_IN}"
fi
if [ "${ISCSI_PASSWORD_IN}" ]; then
ADDITIONAL="${ADDITIONAL} -W ${ISCSI_PASSWORD_IN}"
fi
if [ "${ISCSI_DEBUG}" ]; then
ADDITIONAL="${ADDITIONAL} -d ${ISCSI_DEBUG}"
fi
if [ "${ISCSI_IFACE_NAME}" ]; then
ADDITIONAL="${ADDITIONAL} --param iface.iscsi_ifacename=${ISCSI_IFACE_NAME}"
fi
if [ "${ISCSI_NETDEV_NAME}" ]; then
ADDITIONAL="${ADDITIONAL} --param iface.net_ifacename=${ISCSI_NETDEV_NAME}"
fi
iscsistart -i "${ISCSI_INITIATORNAME}" -t "${ISCSI_TARGET}" \
-a "${ISCSI_ADDRESS}" ${ADDITIONAL}
# let iscsid settle - otherwise mounting the iSCSI-disk
# will fail (very rarely, though)
# TODO(lxnay): this is horrible, find a real synchronization
# technique.
sleep 1
}
parse_dracut_iscsi_root() {
# Adapted from dracut
v=${1#iscsi:}
# extract authentication info
case "$v" in
*@*:*:*:*:*)
authinfo=${v%%@*}
v=${v#*@}
# allow empty authinfo to allow having an @ in
# ISCSI_TARGET like this:
# netroot=iscsi:@192.168.1.100::3260::iqn.2009-01.com.example:testdi@sk
if [ -n "${authinfo}" ]; then
OLDIFS="${IFS}"
IFS=:
set ${authinfo}
IFS="${OLDIFS}"
if [ $# -gt 4 ]; then
bad_msg "Wrong auth info in iscsi: parameter"
return 1
fi
ISCSI_USERNAME="${1}"
ISCSI_PASSWORD="${2}"
if [ $# -gt 2 ]; then
ISCSI_USERNAME_IN="${3}"
ISCSI_PASSWORD_IN="${4}"
fi
fi
;;
esac
# extract target ip
case "${v}" in
[[]*[]]:*)
ISCSI_ADDRESS=${v#[[]}
ISCSI_ADDRESS=${ISCSI_ADDRESS%%[]]*}
v=${v#[[]$ISCSI_ADDRESS[]]:}
;;
*)
ISCSI_ADDRESS=${v%%[:]*}
v=${v#$ISCSI_ADDRESS:}
;;
esac
# extract target name
case "${v}" in
*:iqn.*)
ISCSI_TARGET=iqn.${v##*:iqn.}
v=${v%:iqn.*}:
;;
*:eui.*)
ISCSI_TARGET=iqn.${v##*:eui.}
v=${v%:iqn.*}:
;;
*:naa.*)
ISCSI_TARGET=iqn.${v##*:naa.}
v=${v%:iqn.*}:
;;
*)
bad_msg "iscsi target name should begin with 'iqn.', 'eui.', 'naa.'"
return 1
;;
esac
# parse the rest
OLDIFS="${IFS}"
IFS=:
set ${v}
IFS="${OLDIFS}"
iscsi_protocol="${1}"; shift # ignored
ISCSI_PORT="${1}"; shift
if [ $# -eq 3 ]; then
ISCSI_IFACE_NAME="${1}"; shift
fi
if [ $# -eq 2 ]; then
ISCSI_NETDEV_NAME="${1}"; shift
fi
iscsi_lun="${1}"; shift # ignored
if [ $# -ne 0 ]; then
warn "Invalid parameter in iscsi: parameter!"
return 1
fi
}