#!/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 }