summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLee Duncan <lduncan@suse.com>2021-12-03 10:17:58 -0800
committerGitHub <noreply@github.com>2021-12-03 10:17:58 -0800
commit26446c13be2b04ea3ac83f174db75476491e5c45 (patch)
treec4588a021e8fc173374c634dbabc04b925e6dbbf
parenta2158a7bb73950cc378a99df45fb2e504dab0d90 (diff)
parent42e59a61648ad30545caf349ef872f696a7c92cf (diff)
downloadopen-iscsi-26446c13be2b04ea3ac83f174db75476491e5c45.tar.gz
Merge pull request #290 from gonzoleeman/fix-iscsi-gen-initiatorname
Fix iscsi-gen-initiatorname
-rw-r--r--Makefile2
-rw-r--r--doc/iscsi-gen-initiatorname.836
-rwxr-xr-xutils/iscsi-gen-initiatorname72
3 files changed, 87 insertions, 23 deletions
diff --git a/Makefile b/Makefile
index b72ada0..18cd082 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,7 @@ systemddir = $(prefix)/lib/systemd/system
MANPAGES = doc/iscsid.8 doc/iscsiadm.8 doc/iscsi_discovery.8 \
iscsiuio/docs/iscsiuio.8 doc/iscsi_fw_login.8 doc/iscsi-iname.8 \
- doc/iscsistart.8
+ doc/iscsistart.8 doc/iscsi-gen-initiatorname.8
PROGRAMS = usr/iscsid usr/iscsiadm utils/iscsi-iname iscsiuio/src/unix/iscsiuio \
usr/iscsistart
SCRIPTS = utils/iscsi_discovery utils/iscsi_fw_login utils/iscsi_offload \
diff --git a/doc/iscsi-gen-initiatorname.8 b/doc/iscsi-gen-initiatorname.8
new file mode 100644
index 0000000..5ad0a1e
--- /dev/null
+++ b/doc/iscsi-gen-initiatorname.8
@@ -0,0 +1,36 @@
+.TH ISCSI_GEN_INITIATORNAME 8 "Dec 2021" "" "Linux Administrator's Manual"
+.SH NAME
+iscsi-gen-initiatorname \- smart iSCSI initiator name generation tool
+.SH SYNOPSIS
+.BI iscsi-gen-initiatorname
+[OPTIONS]
+.SH "DESCRIPTION"
+.B iscsi-gen-initiatorname
+generates a unique iSCSI node name on every invocation. If
+iBFT is in use, the iBFT-registered initiator name will be used.
+.P
+If there is an existing initiator name, it will not be overwritten
+unless the \fB-f\fP option is supplied.
+.SH OPTIONS
+.TP
+.BI [-h]
+Display a help message and exit.
+.TP
+.BI [-f]
+Force overwrite of existing initiator name, if present.
+.TP
+.BI [-p] \fIIQN-PREFIX\fP
+Use \fIIQN-PREFIX\fP as the prefix to the IQN generated,
+instead of the default of \fBiqn.1996-04.de.suse:01\fP.
+.SH FILES
+.TP
+/etc/iscsi/initiatorname.iscsi
+The file containing the initiator name. Do not edit manually.
+.SH "SEE ALSO"
+.BR iscsi-iname (8)
+.SH AUTHORS
+Open-iSCSI project <http://www.open-iscsi.com/>
+.br
+Hannes Reinecke <hare@suse.de>
+.br
+Lee Duncan <lduncan@suse.com>
diff --git a/utils/iscsi-gen-initiatorname b/utils/iscsi-gen-initiatorname
index 3e30465..e182f8a 100755
--- a/utils/iscsi-gen-initiatorname
+++ b/utils/iscsi-gen-initiatorname
@@ -8,23 +8,47 @@
# This script is licensed under the GPL.
#
-if [ "$1" ] ; then
- if [ "$1" = "-f" ] ; then
- FORCE=1
- else
- echo "Invalid option $1"
- echo "Usage: $0 [-f]"
- exit 1
- fi
+NAME="$0"
+INAME_FILE="/etc/iscsi/initiatorname.iscsi"
+IQN_PREFIX="iqn.1996-04.de.suse:01"
+
+usage_and_exit()
+{
+ xit_val=$1
+
+ echo "Usage: $NAME [OPTIONS] -- generate an iSCSI initiatorname"
+ echo "Where OPTIONS are from:"
+ echo " -h print usage and exit"
+ echo " -f overwrite existing initiator name, if any"
+ echo " -p IQN-PRE set the prefix for the IQN generated (default $IQN_PREFIX)"
+ exit $xit_val
+}
+
+while getopts "hfp:" o ; do
+ case "${o}" in
+ h) usage_and_exit 0 ;;
+ f) FORCE=1 ;;
+ p) IQN_PREFIX=${OPTARG} ;;
+ ?) usage_and_exit 1 ;;
+ esac
+done
+shift $(($OPTIND-1))
+
+if [ "$#" -gt 0 ] ; then
+ echo "Invalid argument(s): $*"
+ usage_and_exit
fi
+# use the iBFT initiator name, if present
if [ -d /sys/firmware/ibft/initiator ] ; then
read iSCSI_INITIATOR_NAME < /sys/firmware/ibft/initiator/initiator-name
fi
-if [ -f /etc/iscsi/initiatorname.iscsi -a -z "$FORCE" ] ; then
+# if we have an iBFT initiator name and an initiator name
+# file, they had better match, unless "force" is set
+if [ -f $INAME_FILE -a -z "$FORCE" ] ; then
if [ "$iSCSI_INITIATOR_NAME" ] ; then
- eval $(cat /etc/iscsi/initiatorname.iscsi | sed -e '/^#/d')
+ eval $(cat $INAME_FILE | sed -e '/^#/d')
if [ "$iSCSI_INITIATOR_NAME" != "$InitiatorName" ] ; then
echo "iSCSI Initiatorname from iBFT is different from the current setting."
echo "Please call '@SBINDIR@/iscsi-gen-initiatorname -f' to update the iSCSI Initiatorname."
@@ -33,10 +57,12 @@ if [ -f /etc/iscsi/initiatorname.iscsi -a -z "$FORCE" ] ; then
fi
fi
+# if we have an initiator name from iBFT or from
+# an existing initiator name file, use it
if [ "$iSCSI_INITIATOR_NAME" ] ; then
- cat << EOF >> /etc/iscsi/initiatorname.iscsi
-##
-## /etc/iscsi/iscsi.initiatorname
+ echo "##" > $INAME_FILE || exit 1
+ echo "## $INAME_FILE" >> $INAME_FILE
+ cat << EOF >> $INAME_FILE
##
## iSCSI Initiatorname taken from iBFT BIOS tables.
##
@@ -48,14 +74,16 @@ if [ "$iSCSI_INITIATOR_NAME" ] ; then
## @SBINDIR@/iscsi-gen-initiatorname -f
## to recreate an updated version of this file.
##
-InitiatorName=$iSCSI_INITIATOR_NAME
EOF
+ echo "InitiatorName=$iSCSI_INITIATOR_NAME" >> $INAME_FILE
+ chmod 0600 $INAME_FILE
fi
-if [ ! -f /etc/iscsi/initiatorname.iscsi ] ; then
- cat << EOF >> /etc/iscsi/initiatorname.iscsi
-##
-## /etc/iscsi/iscsi.initiatorname
+# if we still do not have an initiator name, create one
+if [ ! -f $INAME_FILE ] ; then
+ echo "##" > $INAME_FILE || exit 1
+ echo "## $INAME_FILE" >> $INAME_FILE
+ cat << EOF >> $INAME_FILE
##
## Default iSCSI Initiatorname.
##
@@ -65,9 +93,9 @@ if [ ! -f /etc/iscsi/initiatorname.iscsi ] ; then
## may reject this initiator. The InitiatorName must be unique
## for each iSCSI initiator. Do NOT duplicate iSCSI InitiatorNames.
EOF
- ISSUEDATE="1996-04"
- INAME=$(@SBINDIR@/iscsi-iname -p iqn.$ISSUEDATE.de.suse:01)
- printf "InitiatorName=$INAME\n" >>/etc/iscsi/initiatorname.iscsi
- chmod 0600 /etc/iscsi/initiatorname.iscsi
+ # create a unique initiator name using iscsi-iname
+ INAME=$(@SBINDIR@/iscsi-iname -p "$IQN_PREFIX")
+ echo "InitiatorName=$INAME" >> $INAME_FILE
+ chmod 0600 $INAME_FILE
fi