162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# 362306a36Sopenharmony_ci# This script illustrates the sequence of operations in configfs to 462306a36Sopenharmony_ci# create a very simple LIO iSCSI target with a file or block device 562306a36Sopenharmony_ci# backstore. 662306a36Sopenharmony_ci# 762306a36Sopenharmony_ci# (C) Copyright 2014 Christophe Vu-Brugier <cvubrugier@fastmail.fm> 862306a36Sopenharmony_ci# 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciprint_usage() { 1162306a36Sopenharmony_ci cat <<EOF 1262306a36Sopenharmony_ciUsage: $(basename $0) [-p PORTAL] DEVICE|FILE 1362306a36Sopenharmony_ciExport a block device or a file as an iSCSI target with a single LUN 1462306a36Sopenharmony_ciEOF 1562306a36Sopenharmony_ci} 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cidie() { 1862306a36Sopenharmony_ci echo $1 1962306a36Sopenharmony_ci exit 1 2062306a36Sopenharmony_ci} 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ciwhile getopts "hp:" arg; do 2362306a36Sopenharmony_ci case $arg in 2462306a36Sopenharmony_ci h) print_usage; exit 0;; 2562306a36Sopenharmony_ci p) PORTAL=${OPTARG};; 2662306a36Sopenharmony_ci esac 2762306a36Sopenharmony_cidone 2862306a36Sopenharmony_cishift $(($OPTIND - 1)) 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ciDEVICE=$1 3162306a36Sopenharmony_ci[ -n "$DEVICE" ] || die "Missing device or file argument" 3262306a36Sopenharmony_ci[ -b $DEVICE -o -f $DEVICE ] || die "Invalid device or file: ${DEVICE}" 3362306a36Sopenharmony_ciIQN="iqn.2003-01.org.linux-iscsi.$(hostname):$(basename $DEVICE)" 3462306a36Sopenharmony_ci[ -n "$PORTAL" ] || PORTAL="0.0.0.0:3260" 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ciCONFIGFS=/sys/kernel/config 3762306a36Sopenharmony_ciCORE_DIR=$CONFIGFS/target/core 3862306a36Sopenharmony_ciISCSI_DIR=$CONFIGFS/target/iscsi 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci# Load the target modules and mount the config file system 4162306a36Sopenharmony_cilsmod | grep -q configfs || modprobe configfs 4262306a36Sopenharmony_cilsmod | grep -q target_core_mod || modprobe target_core_mod 4362306a36Sopenharmony_cimount | grep -q ^configfs || mount -t configfs none $CONFIGFS 4462306a36Sopenharmony_cimkdir -p $ISCSI_DIR 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci# Create a backstore 4762306a36Sopenharmony_ciif [ -b $DEVICE ]; then 4862306a36Sopenharmony_ci BACKSTORE_DIR=$CORE_DIR/iblock_0/data 4962306a36Sopenharmony_ci mkdir -p $BACKSTORE_DIR 5062306a36Sopenharmony_ci echo "udev_path=${DEVICE}" > $BACKSTORE_DIR/control 5162306a36Sopenharmony_cielse 5262306a36Sopenharmony_ci BACKSTORE_DIR=$CORE_DIR/fileio_0/data 5362306a36Sopenharmony_ci mkdir -p $BACKSTORE_DIR 5462306a36Sopenharmony_ci DEVICE_SIZE=$(du -b $DEVICE | cut -f1) 5562306a36Sopenharmony_ci echo "fd_dev_name=${DEVICE}" > $BACKSTORE_DIR/control 5662306a36Sopenharmony_ci echo "fd_dev_size=${DEVICE_SIZE}" > $BACKSTORE_DIR/control 5762306a36Sopenharmony_ci echo 1 > $BACKSTORE_DIR/attrib/emulate_write_cache 5862306a36Sopenharmony_cifi 5962306a36Sopenharmony_ciecho 1 > $BACKSTORE_DIR/enable 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci# Create an iSCSI target and a target portal group (TPG) 6262306a36Sopenharmony_cimkdir $ISCSI_DIR/$IQN 6362306a36Sopenharmony_cimkdir $ISCSI_DIR/$IQN/tpgt_1/ 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci# Create a LUN 6662306a36Sopenharmony_cimkdir $ISCSI_DIR/$IQN/tpgt_1/lun/lun_0 6762306a36Sopenharmony_ciln -s $BACKSTORE_DIR $ISCSI_DIR/$IQN/tpgt_1/lun/lun_0/data 6862306a36Sopenharmony_ciecho 1 > $ISCSI_DIR/$IQN/tpgt_1/enable 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci# Create a network portal 7162306a36Sopenharmony_cimkdir $ISCSI_DIR/$IQN/tpgt_1/np/$PORTAL 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci# Disable authentication 7462306a36Sopenharmony_ciecho 0 > $ISCSI_DIR/$IQN/tpgt_1/attrib/authentication 7562306a36Sopenharmony_ciecho 1 > $ISCSI_DIR/$IQN/tpgt_1/attrib/generate_node_acls 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci# Allow write access for non authenticated initiators 7862306a36Sopenharmony_ciecho 0 > $ISCSI_DIR/$IQN/tpgt_1/attrib/demo_mode_write_protect 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ciecho "Target ${IQN}, portal ${PORTAL} has been created" 81