diff options
author | Lee Duncan <lduncan@suse.com> | 2021-12-03 10:17:58 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-03 10:17:58 -0800 |
commit | 26446c13be2b04ea3ac83f174db75476491e5c45 (patch) | |
tree | c4588a021e8fc173374c634dbabc04b925e6dbbf | |
parent | a2158a7bb73950cc378a99df45fb2e504dab0d90 (diff) | |
parent | 42e59a61648ad30545caf349ef872f696a7c92cf (diff) | |
download | open-iscsi-26446c13be2b04ea3ac83f174db75476491e5c45.tar.gz |
Merge pull request #290 from gonzoleeman/fix-iscsi-gen-initiatorname
Fix iscsi-gen-initiatorname
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | doc/iscsi-gen-initiatorname.8 | 36 | ||||
-rwxr-xr-x | utils/iscsi-gen-initiatorname | 72 |
3 files changed, 87 insertions, 23 deletions
@@ -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 |