import iscsi-initiator-utils-6.2.0.876-7.gitf3c8e90.el8

This commit is contained in:
CentOS Sources 2019-05-07 00:32:14 -04:00 committed by Andrew Lukoshko
commit b3152b4b4a
37 changed files with 6796 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/open-iscsi-f3c8e90.tar.gz

View File

@ -0,0 +1 @@
fdf8ac2fc45f493bdc005bb6739406b65126b31f SOURCES/open-iscsi-f3c8e90.tar.gz

View File

@ -0,0 +1,54 @@
From dbec0a5b7737142f8a1462cdf826c35a78e899b2 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Tue, 13 Aug 2013 10:59:44 -0700
Subject: [PATCH 01/32] idmb_rec_write, check for tpgt first
Factor out the check for a tpgt to a single place, before going crazy on
the rec files. Makes flow of this function easier to follow, and preps
for splitting it up.
---
usr/idbm.c | 18 +++++-------------
1 file changed, 5 insertions(+), 13 deletions(-)
diff --git a/usr/idbm.c b/usr/idbm.c
index 830189f571ea..ab3577878e86 100644
--- a/usr/idbm.c
+++ b/usr/idbm.c
@@ -2042,6 +2042,10 @@ static int idbm_rec_write(node_rec_t *rec)
if (rc)
goto free_portal;
+ if (rec->tpgt == PORTAL_GROUP_TAG_UNKNOWN)
+ /* drop down to old style portal as config */
+ goto open_conf;
+
rc = stat(portal, &statb);
if (rc) {
rc = 0;
@@ -2050,22 +2054,10 @@ static int idbm_rec_write(node_rec_t *rec)
* set the tgpt. In new versions you must pass all the info in
* from the start
*/
- if (rec->tpgt == PORTAL_GROUP_TAG_UNKNOWN)
- /* drop down to old style portal as config */
- goto open_conf;
- else
- goto mkdir_portal;
+ goto mkdir_portal;
}
if (!S_ISDIR(statb.st_mode)) {
- /*
- * older iscsiadm versions had you create the config then set
- * set the tgpt. In new versions you must pass all the info in
- * from the start
- */
- if (rec->tpgt == PORTAL_GROUP_TAG_UNKNOWN)
- /* drop down to old style portal as config */
- goto open_conf;
/*
* Old style portal as a file, but with tpgt. Let's update it.
*/
--
2.14.4

View File

@ -0,0 +1,180 @@
From b9d89091daab823eb2dc72c6c568af7897f83137 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Tue, 13 Aug 2013 11:34:31 -0700
Subject: [PATCH 02/32] idbm_rec_write, seperate old and new style writes
Duplicates a small bit of code, but easier to understand and extened.
---
usr/idbm.c | 116 +++++++++++++++++++++++++++++++++++++++++--------------------
1 file changed, 79 insertions(+), 37 deletions(-)
diff --git a/usr/idbm.c b/usr/idbm.c
index ab3577878e86..21ff61ab2bd8 100644
--- a/usr/idbm.c
+++ b/usr/idbm.c
@@ -2001,7 +2001,7 @@ mkdir_portal:
return f;
}
-static int idbm_rec_write(node_rec_t *rec)
+static int idbm_rec_write_new(node_rec_t *rec)
{
struct stat statb;
FILE *f;
@@ -2013,38 +2013,8 @@ static int idbm_rec_write(node_rec_t *rec)
log_error("Could not alloc portal");
return ISCSI_ERR_NOMEM;
}
-
- snprintf(portal, PATH_MAX, "%s", NODE_CONFIG_DIR);
- if (access(portal, F_OK) != 0) {
- if (mkdir(portal, 0660) != 0) {
- log_error("Could not make %s: %s", portal,
- strerror(errno));
- rc = ISCSI_ERR_IDBM;
- goto free_portal;
- }
- }
-
- snprintf(portal, PATH_MAX, "%s/%s", NODE_CONFIG_DIR, rec->name);
- if (access(portal, F_OK) != 0) {
- if (mkdir(portal, 0660) != 0) {
- log_error("Could not make %s: %s", portal,
- strerror(errno));
- rc = ISCSI_ERR_IDBM;
- goto free_portal;
- }
- }
-
snprintf(portal, PATH_MAX, "%s/%s/%s,%d", NODE_CONFIG_DIR,
rec->name, rec->conn[0].address, rec->conn[0].port);
- log_debug(5, "Looking for config file %s", portal);
-
- rc = idbm_lock();
- if (rc)
- goto free_portal;
-
- if (rec->tpgt == PORTAL_GROUP_TAG_UNKNOWN)
- /* drop down to old style portal as config */
- goto open_conf;
rc = stat(portal, &statb);
if (rc) {
@@ -2065,11 +2035,11 @@ static int idbm_rec_write(node_rec_t *rec)
log_error("Could not convert %s: %s", portal,
strerror(errno));
rc = ISCSI_ERR_IDBM;
- goto unlock;
+ goto free_portal;
}
} else {
rc = ISCSI_ERR_INVAL;
- goto unlock;
+ goto free_portal;
}
mkdir_portal:
@@ -2080,24 +2050,96 @@ mkdir_portal:
log_error("Could not make dir %s: %s",
portal, strerror(errno));
rc = ISCSI_ERR_IDBM;
- goto unlock;
+ goto free_portal;
}
}
snprintf(portal, PATH_MAX, "%s/%s/%s,%d,%d/%s", NODE_CONFIG_DIR,
rec->name, rec->conn[0].address, rec->conn[0].port, rec->tpgt,
rec->iface.name);
-open_conf:
+/* open_conf: */
f = fopen(portal, "w");
if (!f) {
log_error("Could not open %s: %s", portal, strerror(errno));
rc = ISCSI_ERR_IDBM;
- goto unlock;
+ goto free_portal;
}
idbm_print(IDBM_PRINT_TYPE_NODE, rec, 1, f);
fclose(f);
-unlock:
+free_portal:
+ free(portal);
+ return rc;
+}
+
+static int idbm_rec_write_old(node_rec_t *rec)
+{
+ FILE *f;
+ char *portal;
+ int rc = 0;
+
+ portal = malloc(PATH_MAX);
+ if (!portal) {
+ log_error("Could not alloc portal");
+ return ISCSI_ERR_NOMEM;
+ }
+ snprintf(portal, PATH_MAX, "%s/%s/%s,%d", NODE_CONFIG_DIR,
+ rec->name, rec->conn[0].address, rec->conn[0].port);
+
+ f = fopen(portal, "w");
+ if (!f) {
+ log_error("Could not open %s: %sd", portal, strerror(errno));
+ rc = ISCSI_ERR_IDBM;
+ goto free_portal;
+ }
+ idbm_print(IDBM_PRINT_TYPE_NODE, rec, 1, f);
+ fclose(f);
+free_portal:
+ free(portal);
+ return rc;
+}
+
+static int idbm_rec_write(node_rec_t *rec)
+{
+ char *portal;
+ int rc = 0;
+
+ portal = malloc(PATH_MAX);
+ if (!portal) {
+ log_error("Could not alloc portal");
+ return ISCSI_ERR_NOMEM;
+ }
+
+ snprintf(portal, PATH_MAX, "%s", NODE_CONFIG_DIR);
+ if (access(portal, F_OK) != 0) {
+ if (mkdir(portal, 0660) != 0) {
+ log_error("Could not make %s: %s", portal,
+ strerror(errno));
+ rc = ISCSI_ERR_IDBM;
+ goto free_portal;
+ }
+ }
+
+ snprintf(portal, PATH_MAX, "%s/%s", NODE_CONFIG_DIR, rec->name);
+ if (access(portal, F_OK) != 0) {
+ if (mkdir(portal, 0660) != 0) {
+ log_error("Could not make %s: %s", portal,
+ strerror(errno));
+ rc = ISCSI_ERR_IDBM;
+ goto free_portal;
+ }
+ }
+
+ rc = idbm_lock();
+ if (rc)
+ goto free_portal;
+
+ if (rec->tpgt == PORTAL_GROUP_TAG_UNKNOWN)
+ /* old style portal as config */
+ rc = idbm_rec_write_old(rec);
+ else
+ rc = idbm_rec_write_new(rec);
+
idbm_unlock();
free_portal:
free(portal);
--
2.14.4

View File

@ -0,0 +1,87 @@
From 7ba6464018daac1b150335bb73d272761d2cbfe5 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Tue, 13 Aug 2013 12:39:07 -0700
Subject: [PATCH 03/32] idbw_rec_write, pick tpgt from existing record
On a static add (-m node -o new) without a user specified tpgt, looks
for existing new style records with tpgt before creating an old style
record without. If one exists, take the tpgt from it an write an
updated new style record instead.
---
usr/idbm.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/usr/idbm.c b/usr/idbm.c
index 21ff61ab2bd8..cd705fa2b033 100644
--- a/usr/idbm.c
+++ b/usr/idbm.c
@@ -28,6 +28,7 @@
#include <dirent.h>
#include <limits.h>
#include <fcntl.h>
+#include <glob.h>
#include <sys/stat.h>
#include <sys/file.h>
@@ -163,6 +164,8 @@ static struct idbm *db;
_n++; \
} while(0)
+static int idbm_remove_disc_to_node_link(node_rec_t *rec, char *portal);
+
static void
idbm_recinfo_discovery(discovery_rec_t *r, recinfo_t *ri)
{
@@ -2077,12 +2080,49 @@ static int idbm_rec_write_old(node_rec_t *rec)
FILE *f;
char *portal;
int rc = 0;
+ glob_t globbuf;
+ int i;
+ int tpgt = PORTAL_GROUP_TAG_UNKNOWN;
portal = malloc(PATH_MAX);
if (!portal) {
log_error("Could not alloc portal");
return ISCSI_ERR_NOMEM;
}
+
+ /* check for newer portal dir with tpgt */
+ snprintf(portal, PATH_MAX, "%s/%s/%s,%d,*", NODE_CONFIG_DIR,
+ rec->name, rec->conn[0].address, rec->conn[0].port);
+ rc = glob(portal, GLOB_ONLYDIR, NULL, &globbuf);
+ if (!rc) {
+ if (globbuf.gl_pathc > 1)
+ log_warning("multiple tpg records for portal "
+ "%s/%s:%d found", rec->name,
+ rec->conn[0].address, rec->conn[0].port);
+ /* set pattern for sscanf matching of tpgt */
+ snprintf(portal, PATH_MAX, "%s/%s/%s,%d,%%u", NODE_CONFIG_DIR,
+ rec->name, rec->conn[0].address, rec->conn[0].port);
+ for (i = 0; i < globbuf.gl_pathc; i++) {
+ rc = sscanf(globbuf.gl_pathv[i], portal, &tpgt);
+ if (rc == 1)
+ break;
+ }
+ if (tpgt == PORTAL_GROUP_TAG_UNKNOWN)
+ log_warning("glob match on existing records, "
+ "but no valid tpgt found");
+ }
+ globfree(&globbuf);
+ rc = 0;
+
+ /* if a tpgt was selected from an old record, write entry in new format */
+ if (tpgt != PORTAL_GROUP_TAG_UNKNOWN) {
+ log_warning("using tpgt %u from existing record", tpgt);
+ rec->tpgt = tpgt;
+ rc = idbm_remove_disc_to_node_link(rec, portal);
+ free(portal);
+ return idbm_rec_write_new(rec);
+ }
+
snprintf(portal, PATH_MAX, "%s/%s/%s,%d", NODE_CONFIG_DIR,
rec->name, rec->conn[0].address, rec->conn[0].port);
--
2.14.4

View File

@ -0,0 +1,93 @@
From 33076c9c1e975ea3225923d66ae24648c0c82a7f Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Wed, 19 Dec 2012 15:07:36 -0800
Subject: [PATCH 04/32] update systemd service files, add iscsi.service for
starting sessions on boot
Signed-off-by: Chris Leech <cleech@redhat.com>
---
etc/systemd/iscsi.service | 19 +++++++++++++++++++
etc/systemd/iscsi_mark_root_nodes | 14 ++++++++++++++
etc/systemd/iscsid.service | 7 +++++--
etc/systemd/iscsid.socket | 2 +-
4 files changed, 39 insertions(+), 3 deletions(-)
create mode 100644 etc/systemd/iscsi.service
create mode 100755 etc/systemd/iscsi_mark_root_nodes
diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service
new file mode 100644
index 000000000000..bbd52fd66890
--- /dev/null
+++ b/etc/systemd/iscsi.service
@@ -0,0 +1,19 @@
+[Unit]
+Description=Login and scanning of iSCSI devices
+Documentation=man:iscsid(8) man:iscsiadm(8)
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service
+Before=remote-fs-pre.target
+ConditionPathExists=/etc/iscsi/initiatorname.iscsi
+
+[Service]
+Type=oneshot
+RemainAfterExit=true
+ExecStart=/usr/libexec/iscsi_mark_root_nodes
+ExecStart=/sbin/iscsiadm -m node --loginall=automatic
+ExecStop=/bin/sync
+ExecStop=/sbin/iscsiadm -m node --logoutall=automatic
+
+[Install]
+WantedBy=sysinit.target
diff --git a/etc/systemd/iscsi_mark_root_nodes b/etc/systemd/iscsi_mark_root_nodes
new file mode 100755
index 000000000000..c68475c44de5
--- /dev/null
+++ b/etc/systemd/iscsi_mark_root_nodes
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+ISCSIADM=/sbin/iscsiadm
+SESSION_FILE=/run/initramfs/iscsi.sessions
+
+if [ ! -f $SESSION_FILE ] ; then
+ exit 0
+fi
+
+while read t num i target; do
+ ip=${i%:*}
+ $ISCSIADM -m node -p $ip -T $target -o update -n node.startup -v onboot
+done < $SESSION_FILE
+
diff --git a/etc/systemd/iscsid.service b/etc/systemd/iscsid.service
index 028e0b3f4e59..653dd085bbdd 100644
--- a/etc/systemd/iscsid.service
+++ b/etc/systemd/iscsid.service
@@ -1,7 +1,10 @@
[Unit]
Description=Open-iSCSI
-Documentation=man:iscsid(8) man:iscsiuio(8) man:iscsiadm(8)
-After=network.target NetworkManager-wait-online.service iscsiuio.service tgtd.service targetcli.service
+Documentation=man:iscsid(8) man:iscsiadm(8)
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=network.target iscsiuio.service
+Before=remote-fs-pre.target
[Service]
Type=forking
diff --git a/etc/systemd/iscsid.socket b/etc/systemd/iscsid.socket
index 832451d7a0ce..58a8d1239996 100644
--- a/etc/systemd/iscsid.socket
+++ b/etc/systemd/iscsid.socket
@@ -1,6 +1,6 @@
[Unit]
Description=Open-iSCSI iscsid Socket
-Documentation=man:iscsid(8) man:iscsiuio(8) man:iscsiadm(8)
+Documentation=man:iscsid(8) man:iscsiadm(8)
[Socket]
ListenStream=@ISCSIADM_ABSTRACT_NAMESPACE
--
2.14.4

View File

@ -0,0 +1,75 @@
From 5dd8fc7d27204a3461b33defed1e0bb4331c7663 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Mon, 19 Aug 2013 07:18:25 -0700
Subject: [PATCH 05/32] iscsi boot related service file updates
make sure iscsid gets started if there are any boot sessions running
add reload target to fix double session problem when restarting from NM
don't rely on session list passed from initrd, never got fully implemented
---
etc/systemd/iscsi-mark-root-nodes | 13 +++++++++++++
etc/systemd/iscsi.service | 3 ++-
etc/systemd/iscsi_mark_root_nodes | 14 --------------
3 files changed, 15 insertions(+), 15 deletions(-)
create mode 100644 etc/systemd/iscsi-mark-root-nodes
delete mode 100755 etc/systemd/iscsi_mark_root_nodes
diff --git a/etc/systemd/iscsi-mark-root-nodes b/etc/systemd/iscsi-mark-root-nodes
new file mode 100644
index 000000000000..157be62b4041
--- /dev/null
+++ b/etc/systemd/iscsi-mark-root-nodes
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+ISCSIADM=/sbin/iscsiadm
+
+$ISCSIADM -m session >/dev/null 2>&1 || exit 0
+
+$ISCSIADM -m session | while read t num i target; do
+ ip=${i%:*}
+ $ISCSIADM -m node -p $ip -T $target -o update -n node.startup -v onboot
+done
+
+systemctl start iscsid.service
+
diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service
index bbd52fd66890..0309e2fc9892 100644
--- a/etc/systemd/iscsi.service
+++ b/etc/systemd/iscsi.service
@@ -10,10 +10,11 @@ ConditionPathExists=/etc/iscsi/initiatorname.iscsi
[Service]
Type=oneshot
RemainAfterExit=true
-ExecStart=/usr/libexec/iscsi_mark_root_nodes
+ExecStart=/usr/libexec/iscsi-mark-root-nodes
ExecStart=/sbin/iscsiadm -m node --loginall=automatic
ExecStop=/bin/sync
ExecStop=/sbin/iscsiadm -m node --logoutall=automatic
+ExecReload=/sbin/iscsiadm -m node --loginall=automatic
[Install]
WantedBy=sysinit.target
diff --git a/etc/systemd/iscsi_mark_root_nodes b/etc/systemd/iscsi_mark_root_nodes
deleted file mode 100755
index c68475c44de5..000000000000
--- a/etc/systemd/iscsi_mark_root_nodes
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-ISCSIADM=/sbin/iscsiadm
-SESSION_FILE=/run/initramfs/iscsi.sessions
-
-if [ ! -f $SESSION_FILE ] ; then
- exit 0
-fi
-
-while read t num i target; do
- ip=${i%:*}
- $ISCSIADM -m node -p $ip -T $target -o update -n node.startup -v onboot
-done < $SESSION_FILE
-
--
2.14.4

View File

@ -0,0 +1,127 @@
From 2e6f564ebb3c85cb9a457d282b845374776a54ae Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Mon, 19 Nov 2012 16:37:13 -0800
Subject: [PATCH 06/32] update initscripts and docs
---
README | 10 ++++------
etc/iscsid.conf | 21 ++++++++++-----------
usr/idbm.c | 4 ++++
3 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/README b/README
index 2499d9a7b638..c05814a2593b 100644
--- a/README
+++ b/README
@@ -77,11 +77,6 @@ the cache sync command will fail.
- iscsiadm's -P 3 option will not print out scsi devices.
- iscsid will not automatically online devices.
-You need to enable "Cryptographic API" under "Cryptographic options" in the
-kernel config. And you must enable "CRC32c CRC algorithm" even if
-you do not use header or data digests. They are the kernel options
-CONFIG_CRYPTO and CONFIG_CRYPTO_CRC32C, respectively.
-
The userspace components iscsid, iscsiadm and iscsistart require the
open-isns library, which can be found here:
https://github.com/gonzoleeman/open-isns/releases
@@ -1151,7 +1146,7 @@ Red Hat or Fedora:
-----------------
To start open-iscsi in Red Hat/Fedora you can do:
- service open-iscsi start
+ service iscsi start
To get open-iscsi to automatically start at run time you may have to
run:
@@ -1353,6 +1348,9 @@ iscsid will only perform rediscovery when it gets a SCN from the server.
# linux-isns (SLES's iSNS server) where it sometimes does not send SCN
# events in the proper format, so they may not get handled.
+To set the startup value, so that nodes are not logged into automatically
+use the value "manual".
+
Examples
--------
diff --git a/etc/iscsid.conf b/etc/iscsid.conf
index fee11482a09b..3539ac4cd578 100644
--- a/etc/iscsid.conf
+++ b/etc/iscsid.conf
@@ -19,7 +19,7 @@
# the time then leave this attribute commented out.
#
# Default for Fedora and RHEL. (uncomment to activate).
-# iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.soccket
+iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.socket
#
# Default if you are not using systemd (uncomment to activate)
# iscsid.startup = /usr/bin/service start iscsid
@@ -41,8 +41,8 @@
# To request that the iscsi initd scripts startup a session set to "automatic".
# node.startup = automatic
#
-# To manually startup the session set to "manual". The default is manual.
-node.startup = manual
+# To manually startup the session set to "manual". The default is automatic.
+node.startup = automatic
# For "automatic" startup nodes, setting this to "Yes" will try logins on each
# available iface until one succeeds, and then stop. The default "No" will try
@@ -264,28 +264,27 @@ node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
# To allow the targets to control the setting of the digest checking,
-# with the initiator requesting a preference of enabling the checking, uncomment# one or both of the following lines:
+# with the initiator requesting a preference of enabling the checking, uncomment
+# the following lines (Data digests are not supported.):
#node.conn[0].iscsi.HeaderDigest = CRC32C,None
-#node.conn[0].iscsi.DataDigest = CRC32C,None
+
#
# To allow the targets to control the setting of the digest checking,
# with the initiator requesting a preference of disabling the checking,
-# uncomment one or both of the following lines:
+# uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = None,CRC32C
-#node.conn[0].iscsi.DataDigest = None,CRC32C
#
# To enable CRC32C digest checking for the header and/or data part of
-# iSCSI PDUs, uncomment one or both of the following lines:
+# iSCSI PDUs, uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = CRC32C
-#node.conn[0].iscsi.DataDigest = CRC32C
#
# To disable digest checking for the header and/or data part of
-# iSCSI PDUs, uncomment one or both of the following lines:
+# iSCSI PDUs, uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = None
-#node.conn[0].iscsi.DataDigest = None
#
# The default is to never use DataDigests or HeaderDigests.
#
+node.conn[0].iscsi.HeaderDigest = None
# For multipath configurations, you may want more than one session to be
# created on each iface record. If node.session.nr_sessions is greater
diff --git a/usr/idbm.c b/usr/idbm.c
index cd705fa2b033..0aa3870a76fd 100644
--- a/usr/idbm.c
+++ b/usr/idbm.c
@@ -518,9 +518,13 @@ idbm_recinfo_node(node_rec_t *r, recinfo_t *ri)
IDBM_SHOW, "None", "CRC32C", "CRC32C,None",
"None,CRC32C", num, 1);
sprintf(key, CONN_DATA_DIGEST, i);
+
+#if 0
+We do not support data digests
__recinfo_int_o4(key, ri, r, conn[i].iscsi.DataDigest, IDBM_SHOW,
"None", "CRC32C", "CRC32C,None",
"None,CRC32C", num, 1);
+#endif
sprintf(key, CONN_IFMARKER, i);
__recinfo_int_o2(key, ri, r, conn[i].iscsi.IFMarker, IDBM_SHOW,
"No", "Yes", num, 1);
--
2.14.4

View File

@ -0,0 +1,241 @@
From 478527833bdb8ebc9f4523c54e544b244bfe76f1 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Mon, 19 Nov 2012 16:38:45 -0800
Subject: [PATCH 07/32] use var for config
---
README | 33 ++++++++++++++++-----------------
doc/iscsiadm.8 | 8 ++++----
usr/idbm.c | 6 +++---
usr/idbm.h | 13 +++++++------
usr/iface.h | 3 ++-
5 files changed, 32 insertions(+), 31 deletions(-)
diff --git a/README b/README
index c05814a2593b..326c3b01e608 100644
--- a/README
+++ b/README
@@ -172,8 +172,7 @@ Usage: iscsid [OPTION]
Open-iSCSI persistent configuration is stored in a number of
directories under a configuration root directory, using a flat-file
-format. This configuration root directory is /etc/iscsi by default,
-but may also commonly be in /var/lib/iscsi.
+format. This configuration root directory is /var/lib/iscsi by default.
Configuration is contained in directories for:
@@ -561,7 +560,7 @@ a scsi_host per HBA port).
To manage both types of initiator stacks, iscsiadm uses the interface (iface)
structure. For each HBA port or for software iscsi for each network
device (ethX) or NIC, that you wish to bind sessions to you must create
-a iface config /etc/iscsi/ifaces.
+a iface config /var/lib/iscsi/ifaces.
Prep
----
@@ -594,7 +593,7 @@ Running
The command
iscsiadm -m iface
-will report iface configurations that are setup in /etc/iscsi/ifaces:
+will report iface configurations that are setup in /var/lib/iscsi/ifaces:
iface0 qla4xxx,00:c0:dd:08:63:e8,20.15.0.7,default,iqn.2005-06.com.redhat:madmax
iface1 qla4xxx,00:c0:dd:08:63:ea,20.15.0.9,default,iqn.2005-06.com.redhat:madmax
@@ -604,10 +603,10 @@ The format is:
For software iscsi, you can create the iface configs by hand, but it is
recommended that you use iscsiadm's iface mode. There is an iface.example in
-/etc/iscsi/ifaces which can be used as a template for the daring.
+/var/lib/iscsi/ifaces which can be used as a template for the daring.
For each network object you wish to bind a session to, you must create
-a separate iface config in /etc/iscsi/ifaces and each iface config file
+a separate iface config in /var/lib/iscsi/ifaces and each iface config file
must have a unique name which is less than or equal to 64 characters.
Example
@@ -615,12 +614,12 @@ Example
If you have NIC1 with MAC address 00:0F:1F:92:6B:BF and NIC2 with
MAC address 00:C0:DD:08:63:E7, and you wanted to do software iscsi over
-TCP/IP, then in /etc/iscsi/ifaces/iface0 you would enter:
+TCP/IP, then in /var/lib/iscsi/ifaces/iface0 you would enter:
iface.transport_name = tcp
iface.hwaddress = 00:0F:1F:92:6B:BF
-and in /etc/iscsi/ifaces/iface1 you would enter:
+and in /var/lib/iscsi/ifaces/iface1 you would enter:
iface.transport_name = tcp
iface.hwaddress = 00:C0:DD:08:63:E7
@@ -662,7 +661,7 @@ port. The iface name will be of the form:
Running the following command:
iscsiadm -m iface
-will report iface configurations that are setup in /etc/iscsi/ifaces:
+will report iface configurations that are setup in /var/lib/iscsi/ifaces:
default tcp,<empty>,<empty>,<empty>,<empty>
iser iser,<empty>,<empty>,<empty>,<empty>
@@ -742,7 +741,7 @@ need a separate network connection to the target for discovery purposes.
*This will be fixed in the next version of open-iscsi*
For compatibility reasons, when you run iscsiadm to do discovery, it
-will check for interfaces in /etc/iscsi/iscsi/ifaces that are using
+will check for interfaces in /var/lib/iscsi/iscsi/ifaces that are using
tcp for the iface.transport, and it will bind the portals that are discovered
so that they will be logged in through those ifaces. This behavior can also
be overridden by passing in the interfaces you want to use. For the case
@@ -757,7 +756,7 @@ If you had defined interfaces but wanted the old behavior, where we do not
bind a session to an iface, then you can use the special iface "default":
iscsiadm -m discoverydb -t st -p ip:port -I default --discover -P 1
-And if you did not define any interfaces in /etc/iscsi/ifaces and do
+And if you did not define any interfaces in /var/lib/iscsi/ifaces and do
not pass anything into iscsiadm, running iscsiadm will do the default
behavior, allowing the network subsystem to decide which device to use.
@@ -793,7 +792,7 @@ Discovery mode
ID [192.168.1.1:3260]:
iscsiadm -m discoverydb -t st -p 192.168.1.1:3260 --discover
- This will search /etc/iscsi/send_targets for a record with the
+ This will search /var/lib/iscsi/send_targets for a record with the
ID [portal = 192.168.1.1:3260 and type = sendtargets. If found it
will perform discovery using the settings stored in the record.
If a record does not exist, it will be created using the iscsid.conf
@@ -802,7 +801,7 @@ Discovery mode
The argument to -p may also be a hostname instead of an address:
iscsiadm -m discoverydb -t st -p somehost --discover
- For the ifaces, iscsiadm will first search /etc/iscsi/ifaces for
+ For the ifaces, iscsiadm will first search /var/lib/iscsi/ifaces for
interfaces using software iscsi. If any are found then nodes found
during discovery will be setup so that they can logged in through
those interfaces. To specify a specific iface, pass the
@@ -853,7 +852,7 @@ Discovery mode
- SendTargets iSCSI Discovery with a specific interface.
If you wish to only use a subset of the interfaces in
- /etc/iscsi/ifaces, then you can pass them in during discovery:
+ /var/lib/iscsi/ifaces, then you can pass them in during discovery:
iscsiadm -m discoverydb -t sendtargets -p 192.168.1.1:3260 \
--interface=iface0 --interface=iface1 --discover
@@ -1223,8 +1222,8 @@ where targetname is the name of the target and ip_address:port is the address
and port of the portal. tpgt is the Target Portal Group Tag of
the portal, and is not used in iscsiadm commands except for static
record creation. ifacename is the name of the iscsi interface
-defined in /etc/iscsi/ifaces. If no interface was defined in
-/etc/iscsi/ifaces or passed in, the default behavior is used.
+defined in /var/lib/iscsi/ifaces. If no interface was defined in
+/var/lib/iscsi/ifaces or passed in, the default behavior is used.
Default here is iscsi_tcp/tcp to be used over whichever NIC the
network layer decides is best.
@@ -1336,7 +1335,7 @@ If set, iscsid will perform discovery to the address every
discovery.isns.discoveryd_poll_inval or
discovery.sendtargets.discoveryd_poll_inval seconds,
and it will log into any portals found from the discovery source using
-the ifaces in /etc/iscsi/ifaces.
+the ifaces in /var/lib/iscsi/ifaces.
Note that for iSNS the poll_interval does not have to be set. If not set,
iscsid will only perform rediscovery when it gets a SCN from the server.
diff --git a/doc/iscsiadm.8 b/doc/iscsiadm.8
index a82805e28fb9..758a47c2d1fe 100644
--- a/doc/iscsiadm.8
+++ b/doc/iscsiadm.8
@@ -241,7 +241,7 @@ This option is only valid for ping submode.
.TP
\fB\-I\fR, \fB\-\-interface=\fI[iface]\fR
The interface argument specifies the iSCSI interface to use for the operation.
-iSCSI interfaces (iface) are defined in /etc/iscsi/ifaces. For hardware
+iSCSI interfaces (iface) are defined in /var/lib/iscsi/ifaces. For hardware
iSCSI (qla4xxx) the iface config must have the hardware address
(iface.hwaddress = port's MAC address)
and the driver/transport_name (iface.transport_name). The iface's name is
@@ -318,7 +318,7 @@ If no other options are specified: for \fIdiscovery\fR, \fIdiscoverydb\fR and
\fInode\fR, all of their respective records are displayed; for \fIsession\fR,
all active sessions and connections are displayed; for \fIfw\fR, all boot
firmware values are displayed; for \fIhost\fR, all iSCSI hosts are displayed;
-and for \fIiface\fR, all ifaces setup in /etc/iscsi/ifaces are displayed.
+and for \fIiface\fR, all ifaces setup in /var/lib/iscsi/ifaces are displayed.
.TP
\fB\-n\fR, \fB\-\-name=\fIname\fR
@@ -703,10 +703,10 @@ The configuration file read by \fBiscsid\fR and \fBiscsiadm\fR on startup.
The file containing the iSCSI InitiatorName and InitiatorAlias read by
\fBiscsid\fR and \fBiscsiadm\fR on startup.
.TP
-/etc/iscsi/nodes/
+/var/lib/iscsi/nodes/
This directory contains the nodes with their targets.
.TP
-/etc/iscsi/send_targets
+/var/lib/iscsi/send_targets
This directory contains the portals.
.SH "SEE ALSO"
diff --git a/usr/idbm.c b/usr/idbm.c
index 0aa3870a76fd..ec33ce905dc1 100644
--- a/usr/idbm.c
+++ b/usr/idbm.c
@@ -2926,9 +2926,9 @@ free_info:
int idbm_init(idbm_get_config_file_fn *fn)
{
/* make sure root db dir is there */
- if (access(ISCSI_CONFIG_ROOT, F_OK) != 0) {
- if (mkdir(ISCSI_CONFIG_ROOT, 0660) != 0) {
- log_error("Could not make %s %d", ISCSI_CONFIG_ROOT,
+ if (access(ISCSIVAR, F_OK) != 0) {
+ if (mkdir(ISCSIVAR, 0660) != 0) {
+ log_error("Could not make %s %d", ISCSIVAR,
errno);
return errno;
}
diff --git a/usr/idbm.h b/usr/idbm.h
index b83c0bb1cca8..2b05d7871be9 100644
--- a/usr/idbm.h
+++ b/usr/idbm.h
@@ -29,12 +29,13 @@
#include "list.h"
#include "flashnode.h"
-#define NODE_CONFIG_DIR ISCSI_CONFIG_ROOT"nodes"
-#define SLP_CONFIG_DIR ISCSI_CONFIG_ROOT"slp"
-#define ISNS_CONFIG_DIR ISCSI_CONFIG_ROOT"isns"
-#define STATIC_CONFIG_DIR ISCSI_CONFIG_ROOT"static"
-#define FW_CONFIG_DIR ISCSI_CONFIG_ROOT"fw"
-#define ST_CONFIG_DIR ISCSI_CONFIG_ROOT"send_targets"
+#define ISCSIVAR "/var/lib/iscsi/"
+#define NODE_CONFIG_DIR ISCSIVAR"nodes"
+#define SLP_CONFIG_DIR ISCSIVAR"slp"
+#define ISNS_CONFIG_DIR ISCSIVAR"isns"
+#define STATIC_CONFIG_DIR ISCSIVAR"static"
+#define FW_CONFIG_DIR ISCSIVAR"fw"
+#define ST_CONFIG_DIR ISCSIVAR"send_targets"
#define ST_CONFIG_NAME "st_config"
#define ISNS_CONFIG_NAME "isns_config"
diff --git a/usr/iface.h b/usr/iface.h
index 6c06f7f7d450..c8b9de9a7c3a 100644
--- a/usr/iface.h
+++ b/usr/iface.h
@@ -21,8 +21,9 @@
#define ISCSI_IFACE_H
#include <libopeniscsiusr/libopeniscsiusr.h>
+#include "idbm.h"
-#define IFACE_CONFIG_DIR ISCSI_CONFIG_ROOT"ifaces"
+#define IFACE_CONFIG_DIR ISCSIVAR"ifaces"
struct iface_rec;
struct list_head;
--
2.14.4

View File

@ -0,0 +1,39 @@
From ea35362504329e7fe86f4af17a88bed009c5069c Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Mon, 19 Nov 2012 16:40:04 -0800
Subject: [PATCH 08/32] use red hat for name
---
doc/iscsi-iname.8 | 2 +-
utils/iscsi-iname.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/iscsi-iname.8 b/doc/iscsi-iname.8
index a55d666d1af3..dd77ed9f3165 100644
--- a/doc/iscsi-iname.8
+++ b/doc/iscsi-iname.8
@@ -14,7 +14,7 @@ generates a unique iSCSI node name on every invocation.
Display help
.TP
.BI [-p=]\fIprefix\fP
-Use the prefix passed in instead of the default "iqn.2005-03.org.open-iscsi"
+Use the prefix passed in instead of the default "iqn.1994-05.com.redhat"
.SH AUTHORS
Open-iSCSI project <http://www.open-iscsi.com/>
diff --git a/utils/iscsi-iname.c b/utils/iscsi-iname.c
index 6347edc46293..cb2f6c8b8651 100644
--- a/utils/iscsi-iname.c
+++ b/utils/iscsi-iname.c
@@ -73,7 +73,7 @@ main(int argc, char *argv[])
exit(0);
}
} else {
- prefix = "iqn.2005-03.org.open-iscsi";
+ prefix = "iqn.1994-05.com.redhat";
}
/* try to feed some entropy from the pool to MD5 in order to get
--
2.14.4

4014
SOURCES/0009-libiscsi.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,45 @@
From 71b576b10a03651f67173d19883a929e91a3423a Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Mon, 19 Nov 2012 17:09:24 -0800
Subject: [PATCH 10/32] remove the offload boot supported ifdef
---
usr/iface.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/usr/iface.c b/usr/iface.c
index 137138f5af67..889fe8cd8202 100644
--- a/usr/iface.c
+++ b/usr/iface.c
@@ -993,6 +993,7 @@ int iface_setup_from_boot_context(struct iface_rec *iface,
{
struct iscsi_transport *t = NULL;
uint32_t hostno;
+ int rc;
if (strlen(context->initiatorname))
strlcpy(iface->iname, context->initiatorname,
@@ -1006,10 +1007,7 @@ int iface_setup_from_boot_context(struct iface_rec *iface,
return 0;
}
} else if (strlen(context->iface)) {
-/* this ifdef is only temp until distros and firmwares are updated */
-#ifdef OFFLOAD_BOOT_SUPPORTED
char transport_name[ISCSI_TRANSPORT_NAME_MAXLEN];
- int rc;
memset(transport_name, 0, ISCSI_TRANSPORT_NAME_MAXLEN);
/* make sure offload driver is loaded */
@@ -1035,9 +1033,6 @@ int iface_setup_from_boot_context(struct iface_rec *iface,
}
strlcpy(iface->netdev, context->iface, sizeof(iface->netdev));
-#else
- return 0;
-#endif
} else
return 0;
--
2.14.4

View File

@ -0,0 +1,53 @@
From f16f7f90721c9d6965e48c7338a600d23b58e19d Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Tue, 22 Jan 2013 14:27:12 -0800
Subject: [PATCH 11/32] iscsiuio systemd unit files
---
etc/systemd/iscsiuio.service | 17 +++++++++++++++++
etc/systemd/iscsiuio.socket | 9 +++++++++
2 files changed, 26 insertions(+)
create mode 100644 etc/systemd/iscsiuio.service
create mode 100644 etc/systemd/iscsiuio.socket
diff --git a/etc/systemd/iscsiuio.service b/etc/systemd/iscsiuio.service
new file mode 100644
index 000000000000..f0410b76b80e
--- /dev/null
+++ b/etc/systemd/iscsiuio.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=iSCSI UserSpace I/O driver
+Documentation=man:iscsiuio(8)
+DefaultDependencies=no
+Conflicts=shutdown.target
+Requires=iscsid.service
+BindTo=iscsid.service
+After=network.target
+Before=remote-fs-pre.target iscsid.service
+
+[Service]
+Type=forking
+PIDFile=/var/run/iscsiuio.pid
+ExecStart=/usr/sbin/iscsiuio
+
+[Install]
+WantedBy=multi-user.target
diff --git a/etc/systemd/iscsiuio.socket b/etc/systemd/iscsiuio.socket
new file mode 100644
index 000000000000..d42cedc161a3
--- /dev/null
+++ b/etc/systemd/iscsiuio.socket
@@ -0,0 +1,9 @@
+[Unit]
+Description=Open-iSCSI iscsiuio Socket
+Documentation=man:iscsiuio(8)
+
+[Socket]
+ListenStream=@ISCSID_UIP_ABSTRACT_NAMESPACE
+
+[Install]
+WantedBy=sockets.target
--
2.14.4

View File

@ -0,0 +1,30 @@
From 9807bf0a042238891f2008a5a6d70acfd6724b12 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Tue, 28 May 2013 13:12:27 -0700
Subject: [PATCH 12/32] Don't check for autostart sessions if iscsi is not used
(bug #951951)
Change conditional startup in iscsi.service to check for a non-empty
nodes directory, instead of initiator-name. This fits better with what
it's doing, as there's no need to scan for autostart node records if
there are no node records at all.
---
etc/systemd/iscsi.service | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service
index 0309e2fc9892..d5712bd3779b 100644
--- a/etc/systemd/iscsi.service
+++ b/etc/systemd/iscsi.service
@@ -5,7 +5,7 @@ DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service
Before=remote-fs-pre.target
-ConditionPathExists=/etc/iscsi/initiatorname.iscsi
+ConditionDirectoryNotEmpty=/var/lib/iscsi/nodes
[Service]
Type=oneshot
--
2.14.4

View File

@ -0,0 +1,34 @@
From 6629618e3581cbe632b7408a49437270bc04a8d4 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Mon, 24 Feb 2014 09:33:33 -0800
Subject: [PATCH 13/32] Revert "iscsiadm: return error when login fails"
This reverts commit fc2a8e9a2911bc76f961fe3e4a159fab9b8b9691.
Done to address RHBZ #1015563
---
usr/session_mgmt.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/usr/session_mgmt.c b/usr/session_mgmt.c
index 596085b1f640..07f587d2bafb 100644
--- a/usr/session_mgmt.c
+++ b/usr/session_mgmt.c
@@ -178,12 +178,12 @@ int iscsi_login_portal(void *data, struct list_head *list, struct node_rec *rec)
goto done;
}
if (session_count >= rec->session.nr_sessions) {
- log_warning("%s: %d session%s requested, but %d "
+ log_debug(1, "%s: %d session%s requested, but %d "
"already present.",
rec->iface.name, rec->session.nr_sessions,
rec->session.nr_sessions == 1 ? "" : "s",
session_count);
- rc = ISCSI_ERR_SESS_EXISTS;
+ rc = 0;
goto done;
}
--
2.14.4

View File

@ -0,0 +1,55 @@
From c7b743486c6a499a037744760846abdb42959808 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Wed, 26 Feb 2014 16:33:48 -0800
Subject: [PATCH 14/32] update handling of boot sessions
force start iscsiuio if needed, socket activation does not seem to be
working for recovery
---
etc/systemd/iscsi-mark-root-nodes | 29 +++++++++++++++++++++++------
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/etc/systemd/iscsi-mark-root-nodes b/etc/systemd/iscsi-mark-root-nodes
index 157be62b4041..6bddf6c5ccc1 100644
--- a/etc/systemd/iscsi-mark-root-nodes
+++ b/etc/systemd/iscsi-mark-root-nodes
@@ -1,13 +1,30 @@
#!/bin/bash
ISCSIADM=/sbin/iscsiadm
+start_iscsid=0
+start_iscsiuio=0
-$ISCSIADM -m session >/dev/null 2>&1 || exit 0
+while read t num p target flash; do
+ # strip tag number from portal, keep "ip:port"
+ portal=${p%,*}
+ transport=${t%:}
-$ISCSIADM -m session | while read t num i target; do
- ip=${i%:*}
- $ISCSIADM -m node -p $ip -T $target -o update -n node.startup -v onboot
-done
+ $ISCSIADM -m node -p $portal -T $target -o update -n node.startup -v onboot
-systemctl start iscsid.service
+ start_iscsid=1
+
+ if [ "$transport" = bnx2i ] || [ "$transport" = qedi ]; then
+ start_iscsiuio=1
+ fi
+done < <( $ISCSIADM -m session )
+
+# force iscsid and iscsiuio to start if needed for
+# recovering sessions created in the initrd
+
+if [ "$start_iscsid" -eq 1 ]; then
+ systemctl --no-block start iscsid.service
+fi
+if [ "$start_iscsiuio" -eq 1 ]; then
+ systemctl --no-block start iscsiuio.service
+fi
--
2.14.4

View File

@ -0,0 +1,34 @@
From f349a706ec083574fbf7ed1e479fdfebde7023b8 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Fri, 14 Mar 2014 09:22:21 -0700
Subject: [PATCH 15/32] update iscsi.service for boot session recovery
---
etc/systemd/iscsi.service | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service
index d5712bd3779b..3de76c5b07ec 100644
--- a/etc/systemd/iscsi.service
+++ b/etc/systemd/iscsi.service
@@ -5,14 +5,15 @@ DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service
Before=remote-fs-pre.target
-ConditionDirectoryNotEmpty=/var/lib/iscsi/nodes
+ConditionDirectoryNotEmpty=|/var/lib/iscsi/nodes
+ConditionDirectoryNotEmpty=|/sys/class/iscsi_session
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/libexec/iscsi-mark-root-nodes
+SuccessExitStatus=21
ExecStart=/sbin/iscsiadm -m node --loginall=automatic
-ExecStop=/bin/sync
ExecStop=/sbin/iscsiadm -m node --logoutall=automatic
ExecReload=/sbin/iscsiadm -m node --loginall=automatic
--
2.14.4

View File

@ -0,0 +1,41 @@
From 954ab51516734aaeed01a195a6e70b825b0bf10a Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Wed, 17 Sep 2014 09:58:39 -0700
Subject: [PATCH 16/32] updates to iscsi.service
Resolves: #1126524
Resolves: #1111925
---
etc/systemd/iscsi.service | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service
index 3de76c5b07ec..ad7be34d5918 100644
--- a/etc/systemd/iscsi.service
+++ b/etc/systemd/iscsi.service
@@ -5,17 +5,17 @@ DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service
Before=remote-fs-pre.target
+Wants=remote-fs-pre.target
ConditionDirectoryNotEmpty=|/var/lib/iscsi/nodes
ConditionDirectoryNotEmpty=|/sys/class/iscsi_session
[Service]
Type=oneshot
RemainAfterExit=true
-ExecStart=/usr/libexec/iscsi-mark-root-nodes
-SuccessExitStatus=21
-ExecStart=/sbin/iscsiadm -m node --loginall=automatic
-ExecStop=/sbin/iscsiadm -m node --logoutall=automatic
-ExecReload=/sbin/iscsiadm -m node --loginall=automatic
+ExecStart=-/usr/libexec/iscsi-mark-root-nodes
+ExecStart=-/sbin/iscsiadm -m node --loginall=automatic
+ExecStop=-/sbin/iscsiadm -m node --logoutall=automatic
+ExecReload=-/sbin/iscsiadm -m node --loginall=automatic
[Install]
WantedBy=sysinit.target
--
2.14.4

View File

@ -0,0 +1,55 @@
From 3815643d7db65487fa2b7058dd612ddf2549f85a Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Tue, 13 Jan 2015 16:30:01 -0800
Subject: [PATCH 17/32] make-session-shutdown-a-seperate-service.patch
---
etc/systemd/iscsi-shutdown.service | 14 ++++++++++++++
etc/systemd/iscsi.service | 3 +--
2 files changed, 15 insertions(+), 2 deletions(-)
create mode 100644 etc/systemd/iscsi-shutdown.service
diff --git a/etc/systemd/iscsi-shutdown.service b/etc/systemd/iscsi-shutdown.service
new file mode 100644
index 000000000000..23758e959ff2
--- /dev/null
+++ b/etc/systemd/iscsi-shutdown.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Logout off all iSCSI sessions on shutdown
+Documentation=man:iscsid(8) man:iscsiadm(8)
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service
+Before=remote-fs-pre.target
+Wants=remote-fs-pre.target
+RefuseManualStop=yes
+
+[Service]
+Type=oneshot
+RemainAfterExit=true
+ExecStop=-/sbin/iscsiadm -m node --logoutall=all
diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service
index ad7be34d5918..27369568bf35 100644
--- a/etc/systemd/iscsi.service
+++ b/etc/systemd/iscsi.service
@@ -5,7 +5,7 @@ DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service
Before=remote-fs-pre.target
-Wants=remote-fs-pre.target
+Wants=remote-fs-pre.target iscsi-shutdown.service
ConditionDirectoryNotEmpty=|/var/lib/iscsi/nodes
ConditionDirectoryNotEmpty=|/sys/class/iscsi_session
@@ -14,7 +14,6 @@ Type=oneshot
RemainAfterExit=true
ExecStart=-/usr/libexec/iscsi-mark-root-nodes
ExecStart=-/sbin/iscsiadm -m node --loginall=automatic
-ExecStop=-/sbin/iscsiadm -m node --logoutall=automatic
ExecReload=-/sbin/iscsiadm -m node --loginall=automatic
[Install]
--
2.14.4

View File

@ -0,0 +1,56 @@
From bd26fd7e7f91e5c4c6903c3d7e1a375a14261a48 Mon Sep 17 00:00:00 2001
From: Jiri Konecny <jkonecny@redhat.com>
Date: Mon, 11 May 2015 13:16:26 +0200
Subject: [PATCH 18/32] Add macros to release GIL lock
Other threads are blocked when GIL is not released before the time consuming
functions.
---
libiscsi/pylibiscsi.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/libiscsi/pylibiscsi.c b/libiscsi/pylibiscsi.c
index 88008538f04f..40b59553a28e 100644
--- a/libiscsi/pylibiscsi.c
+++ b/libiscsi/pylibiscsi.c
@@ -364,8 +364,13 @@ static PyObject *PyIscsiNode_str(PyObject *self)
static PyObject *PyIscsiNode_login(PyObject *self)
{
PyIscsiNode *node = (PyIscsiNode *)self;
+ int ret;
- if (libiscsi_node_login(context, &node->node)) {
+ Py_BEGIN_ALLOW_THREADS
+ ret = libiscsi_node_login(context, &node->node);
+ Py_END_ALLOW_THREADS
+
+ if (ret) {
PyErr_SetString(PyExc_IOError,
libiscsi_get_error_string(context));
return NULL;
@@ -551,6 +556,7 @@ static PyObject *pylibiscsi_discover_sendtargets(PyObject *self,
const struct libiscsi_auth_info *authinfo = NULL;
struct libiscsi_node *found_nodes;
PyObject* found_node_list;
+ int ret;
if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|iO",
kwlist, &address, &port,
@@ -570,8 +576,12 @@ static PyObject *pylibiscsi_discover_sendtargets(PyObject *self,
}
}
- if (libiscsi_discover_sendtargets(context, address, port, authinfo,
- &nr_found, &found_nodes)) {
+ Py_BEGIN_ALLOW_THREADS
+ ret = libiscsi_discover_sendtargets(context, address, port, authinfo,
+ &nr_found, &found_nodes);
+ Py_END_ALLOW_THREADS
+
+ if (ret) {
PyErr_SetString(PyExc_IOError,
libiscsi_get_error_string(context));
return NULL;
--
2.14.4

View File

@ -0,0 +1,290 @@
From 7671cd56d36a76e954318cbdce3f08fc40aa3fe4 Mon Sep 17 00:00:00 2001
From: Peter Hatina <phatina@redhat.com>
Date: Mon, 5 Oct 2015 16:50:36 -0700
Subject: [PATCH 19/32] libiscsi introduce sessions API
---
libiscsi/libiscsi.c | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++
libiscsi/libiscsi.h | 56 +++++++++++++++++++++++
usr/iscsi_sysfs.c | 6 +++
usr/iscsi_sysfs.h | 2 +
4 files changed, 189 insertions(+)
diff --git a/libiscsi/libiscsi.c b/libiscsi/libiscsi.c
index 064e4b570d0b..755c18ca8e3b 100644
--- a/libiscsi/libiscsi.c
+++ b/libiscsi/libiscsi.c
@@ -3,6 +3,7 @@
*
* Copyright (C) 2008-2009 Red Hat, Inc. All rights reserved.
* Copyright (C) 2008-2009 Hans de Goede <hdegoede@redhat.com>
+ * Copyright (C) 2015 Peter Hatina <phatina@redhat.com>
* maintained by open-iscsi@googlegroups.com
*
* This program is free software; you can redistribute it and/or modify
@@ -469,6 +470,130 @@ leave:
return rc;
}
+struct libiscsi_session_array {
+ int cnt;
+ int size;
+ struct libiscsi_session_info *data;
+};
+
+static void libiscsi_session_array_init(struct libiscsi_session_array *arr)
+{
+ arr->cnt = 0;
+ arr->size = 0;
+ arr->data = NULL;
+}
+
+static int libiscsi_session_array_grow(struct libiscsi_session_array *arr)
+{
+ if (arr->size == 0)
+ arr->size = 4;
+ else
+ arr->size *= 2;
+
+ arr->data = (struct libiscsi_session_info *) realloc(
+ arr->data,
+ arr->size * sizeof(struct libiscsi_session_info));
+
+ return arr->data ? 0 : 1;
+}
+
+static int libiscsi_session_array_grow_ondemand(struct libiscsi_session_array *arr)
+{
+ if (arr->size == arr->cnt)
+ return libiscsi_session_array_grow(arr);
+ return 0;
+}
+
+static int libiscsi_session_array_resize_precize(struct libiscsi_session_array *arr)
+{
+ arr->data = (struct libiscsi_session_info *) realloc(
+ arr->data,
+ arr->cnt * sizeof(struct libiscsi_session_info));
+ arr->size = arr->cnt;
+
+ return arr->data ? 0 : 1;
+}
+
+static void copy_session_info_to_libiscsi_session_info(
+ struct libiscsi_session_info *info,
+ struct session_info *s_info)
+{
+ /* Copy session info to public struct. */
+ info->sid = s_info->sid;
+ /* Timeouts */
+ memcpy(&info->tmo, &s_info->tmo, sizeof(struct libiscsi_session_timeout));
+ /* CHAP authentication information */
+ memcpy(&info->chap, &s_info->chap, sizeof(struct libiscsi_chap_auth_info));
+ /* Target information */
+ strncpy(info->targetname, s_info->targetname, LIBISCSI_VALUE_MAXLEN);
+ strncpy(info->address, s_info->address, NI_MAXHOST);
+ strncpy(info->persistent_address, s_info->persistent_address, NI_MAXHOST);
+ info->tpgt = s_info->tpgt;
+ info->persistent_port = s_info->persistent_port;
+}
+
+static int get_sessions_helper(void *data, struct session_info *s_info)
+{
+ struct libiscsi_session_array *arr = (struct libiscsi_session_array *) data;
+
+ if (libiscsi_session_array_grow_ondemand(arr) != 0)
+ return 1;
+
+ copy_session_info_to_libiscsi_session_info(&arr->data[arr->cnt++], s_info);
+
+ return 0;
+}
+
+int libiscsi_get_session_infos(struct libiscsi_context *context,
+ struct libiscsi_session_info **infos,
+ int *nr_sessions)
+{
+ int rc = 0;
+ int nr_found = 0;
+ struct libiscsi_session_array arr;
+
+ if (!context || !infos || !nr_sessions)
+ return 1;
+
+ libiscsi_session_array_init(&arr);
+
+ rc = iscsi_sysfs_for_each_session((void *) &arr, &nr_found,
+ get_sessions_helper, 0);
+ if (rc != 0 || nr_found == 0) {
+ strcpy(context->error_str, "No matching session");
+ return ENODEV;
+ }
+
+ if (libiscsi_session_array_resize_precize(&arr) != 0) {
+ strcpy(context->error_str, "Can't allocate memory for session infos");
+ return ENOMEM;
+ }
+
+ *infos = arr.data;
+ *nr_sessions = nr_found;
+
+ return 0;
+}
+
+int libiscsi_get_session_info_by_id(struct libiscsi_context *context,
+ struct libiscsi_session_info *info,
+ const char *session)
+{
+ struct session_info s_info;
+
+ if (!context || !info || !session)
+ return 1;
+
+ if (iscsi_sysfs_get_sessioninfo_by_id(&s_info, (char*) session) != 0) {
+ strcpy(context->error_str, "No matching session");
+ return ENODEV;
+ }
+
+ copy_session_info_to_libiscsi_session_info(info, &s_info);
+
+ return 0;
+}
+
int libiscsi_node_set_parameter(struct libiscsi_context *context,
const struct libiscsi_node *node,
const char *parameter, const char *value)
diff --git a/libiscsi/libiscsi.h b/libiscsi/libiscsi.h
index 756590e14d8b..a9891f48b7d6 100644
--- a/libiscsi/libiscsi.h
+++ b/libiscsi/libiscsi.h
@@ -3,6 +3,7 @@
*
* Copyright (C) 2008-2009 Red Hat, Inc. All rights reserved.
* Copyright (C) 2008-2009 Hans de Goede <hdegoede@redhat.com>
+ * Copyright (C) 2015 Peter Hatina <phatina@redhat.com>
* maintained by open-iscsi@googlegroups.com
*
* This program is free software; you can redistribute it and/or modify
@@ -56,6 +57,17 @@ enum libiscsi_auth_t {
*/
struct libiscsi_context;
+/** \brief iSCSI session timeouts
+ *
+ * Struct holding session timeouts.
+ */
+struct libiscsi_session_timeout {
+ int abort_tmo;
+ int lu_reset_tmo;
+ int recovery_tmo;
+ int tgt_reset_tmo;
+};
+
/** \brief iSCSI node record
*
* Struct holding data uniquely identifying an iSCSI node.
@@ -84,6 +96,24 @@ struct libiscsi_chap_auth_info {
char reverse_password[LIBISCSI_VALUE_MAXLEN] /** Reverse Password */;
};
+/** \brief iSCSI session
+ *
+ * Struct hoding iSCSI session information.
+ */
+struct libiscsi_session_info {
+ int sid;
+
+ struct libiscsi_session_timeout tmo;
+ struct libiscsi_chap_auth_info chap;
+
+ char targetname[LIBISCSI_VALUE_MAXLEN];
+ int tpgt;
+ char address[NI_MAXHOST];
+ int port;
+ char persistent_address[NI_MAXHOST];
+ int persistent_port;
+};
+
/** \brief generic libiscsi authentication information struct
*
* Struct holding authentication information for discovery and login.
@@ -248,6 +278,32 @@ PUBLIC int libiscsi_node_login(struct libiscsi_context *context,
PUBLIC int libiscsi_node_logout(struct libiscsi_context *context,
const struct libiscsi_node *node);
+/** \brief Get an array of iSCSI sessions.
+ *
+ * Get the array containing iSCSI sessions' information.
+ *
+ * \param context libiscsi context to operate on.
+ * \param infos Array of iSCSI sessions' information.
+ * Release with free().
+ * \param nr_sessions The number of elements in \e infos.
+ * \return 0 on success, otherwise a standard error code
+ * (from errno.h).
+ */
+PUBLIC int libiscsi_get_session_infos(struct libiscsi_context *context,
+ struct libiscsi_session_info **infos, int *nr_sessions);
+
+/** \brief Get session information by session ID.
+ *
+ * \param context libiscsi context to operate on.
+ * \param info iSCSI session information.
+ * \param session Session name.
+ * \return 0 on success, otherwise a standard error code
+ * (from errno.h)
+ */
+PUBLIC int libiscsi_get_session_info_by_id(struct libiscsi_context *context,
+ struct libiscsi_session_info *info,
+ const char *session);
+
/** \brief Set an iSCSI parameter for the given node
*
* Set the given nodes iSCSI parameter named by \e parameter to value \e value.
diff --git a/usr/iscsi_sysfs.c b/usr/iscsi_sysfs.c
index fdc26c7bd9ba..80b7b0210fd1 100644
--- a/usr/iscsi_sysfs.c
+++ b/usr/iscsi_sysfs.c
@@ -3,6 +3,7 @@
*
* Copyright (C) 2006 Mike Christie
* Copyright (C) 2006 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015 Peter Hatina <phatina@redhat.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
@@ -1146,6 +1147,11 @@ free_info:
return rc;
}
+const char *iscsi_sysfs_get_session_path(void)
+{
+ return ISCSI_SESSION_DIR;
+}
+
int iscsi_sysfs_for_each_iface_on_host(void *data, uint32_t host_no,
int *nr_found,
iscsi_sysfs_iface_op_fn *fn)
diff --git a/usr/iscsi_sysfs.h b/usr/iscsi_sysfs.h
index cdcefa65f683..12ad87f96c8c 100644
--- a/usr/iscsi_sysfs.h
+++ b/usr/iscsi_sysfs.h
@@ -3,6 +3,7 @@
*
* Copyright (C) 2006 Mike Christie
* Copyright (C) 2006 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2015 Peter Hatina <phatina@redhat.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
@@ -47,6 +48,7 @@ typedef int (iscsi_sysfs_flashnode_op_fn)(void *, struct flashnode_rec *,
uint32_t, uint32_t);
typedef int (iscsi_sysfs_iface_op_fn)(void *, struct iface_rec *);
+extern const char *iscsi_sysfs_get_session_path(void);
extern int iscsi_sysfs_for_each_iface_on_host(void *data, uint32_t host_no,
int *nr_found,
iscsi_sysfs_iface_op_fn *fn);
--
2.14.4

View File

@ -0,0 +1,25 @@
From 92aac85cf423d1c566d324255a86de0116d33015 Mon Sep 17 00:00:00 2001
From: Chris Leech <cleech@redhat.com>
Date: Mon, 21 Jan 2013 15:43:36 -0800
Subject: [PATCH 20/32] use Red Hat version string to match RPM package version
---
usr/version.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/usr/version.h b/usr/version.h
index 4dfef4ccfb77..1334d47c6bb3 100644
--- a/usr/version.h
+++ b/usr/version.h
@@ -6,7 +6,7 @@
* This may not be the same value as the kernel versions because
* some other maintainer could merge a patch without going through us
*/
-#define ISCSI_VERSION_STR "2.0-876"
+#define ISCSI_VERSION_STR "6.2.0.876-5"
#define ISCSI_VERSION_FILE "/sys/module/scsi_transport_iscsi/version"
#endif
--
2.14.4

View File

@ -0,0 +1,32 @@
From 1aa35262d566d829d711bc746f944dee5c2d9e7a Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Tue, 28 Feb 2017 09:00:41 -0800
Subject: [PATCH 21/32] libiscsi: fix discovery request timeout regression
---
libiscsi/libiscsi.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/libiscsi/libiscsi.c b/libiscsi/libiscsi.c
index 755c18ca8e3b..bb17dfcafded 100644
--- a/libiscsi/libiscsi.c
+++ b/libiscsi/libiscsi.c
@@ -136,6 +136,7 @@ int libiscsi_discover_sendtargets(struct libiscsi_context *context,
/* Fill the drec struct with all needed info */
memset(&drec, 0, sizeof drec);
+ drec.iscsid_req_tmo = -1;
idbm_sendtargets_defaults(&drec.u.sendtargets);
drec.type = DISCOVERY_TYPE_SENDTARGETS;
strlcpy(drec.address, address, sizeof(drec.address));
@@ -228,6 +229,7 @@ int libiscsi_discover_firmware(struct libiscsi_context *context,
CHECK(iface_create_ifaces_from_boot_contexts(&ifaces, &targets));
memset(&drec, 0, sizeof(drec));
+ drec.iscsid_req_tmo = -1;
drec.type = DISCOVERY_TYPE_FW;
rc = idbm_bind_ifaces_to_nodes(discovery_fw, &drec, &ifaces, &rec_list);
if (rc) {
--
2.14.4

View File

@ -0,0 +1,35 @@
From 1b2b6b683bd7ca3a7030889daf8c326dda797319 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Tue, 28 Feb 2017 10:06:42 -0800
Subject: [PATCH 22/32] libiscsi format-security build errors
---
libiscsi/libiscsi.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/libiscsi/libiscsi.c b/libiscsi/libiscsi.c
index bb17dfcafded..7003388e3346 100644
--- a/libiscsi/libiscsi.c
+++ b/libiscsi/libiscsi.c
@@ -177,7 +177,8 @@ int libiscsi_discover_sendtargets(struct libiscsi_context *context,
*found_nodes = calloc(found, sizeof **found_nodes);
if (*found_nodes == NULL) {
snprintf(context->error_str,
- sizeof(context->error_str), strerror(ENOMEM));
+ sizeof(context->error_str),
+ "%s", strerror(ENOMEM));
rc = ENOMEM;
goto leave;
}
@@ -634,7 +635,7 @@ static int get_parameter_helper(void *data, node_rec_t *rec)
info = idbm_recinfo_alloc(MAX_KEYS);
if (!info) {
snprintf(context->error_str, sizeof(context->error_str),
- strerror(ENOMEM));
+ "%s", strerror(ENOMEM));
return ENOMEM;
}
--
2.14.4

View File

@ -0,0 +1,36 @@
From b0d26441cebf6f1d78a2b4523ee9c348578b3d91 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Thu, 24 May 2018 15:17:05 -0700
Subject: [PATCH 23/32] libiscsi fix build to use libopeniscsiusr
---
libiscsi/Makefile | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/libiscsi/Makefile b/libiscsi/Makefile
index 317a7ec4db30..1196bb5c0cf4 100644
--- a/libiscsi/Makefile
+++ b/libiscsi/Makefile
@@ -4,7 +4,9 @@ OSNAME=$(shell uname -s)
OPTFLAGS ?= -O2 -g
WARNFLAGS ?= -Wall -Wstrict-prototypes
CFLAGS = $(OPTFLAGS) $(WARNFLAGS) -I../include -I../usr \
- -D$(OSNAME) -fPIC -D_GNU_SOURCE -fvisibility=hidden
+ -D$(OSNAME) -fPIC -D_GNU_SOURCE -fvisibility=hidden \
+ -I../libopeniscsiusr
+LDFLAGS = -L../libopeniscsiusr -lopeniscsiusr
LIB = libiscsi.so.0
TESTS = tests/test_discovery_sendtargets tests/test_discovery_firmware
TESTS += tests/test_login tests/test_logout tests/test_params
@@ -19,7 +21,7 @@ FW_PARAM_SRCS = fw_entry.o prom_lex.o prom_parse.tab.o fwparam_ppc.o fwparam_sys
# sources shared with the userspace utils, note we build these separately
# to get PIC versions.
COMMON_OBJS = $(patsubst %.o, common-objs/%.o, $(COMMON_SRCS))
-USR_OBJS = $(patsubst %.o, usr-objs/%.o, $(ISCSI_LIB_SRCS) strings.o)
+USR_OBJS = $(patsubst %.o, usr-objs/%.o, $(ISCSI_LIB_SRCS) local_strings.o)
FW_OBJS = $(patsubst %.o, fw-objs/%.o, $(FW_PARAM_SRCS))
# Flags for the tests
--
2.14.4

View File

@ -0,0 +1,25 @@
From 09485b397990aca06d5e98a855bab2444c9ec572 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Fri, 25 May 2018 09:39:07 -0700
Subject: [PATCH 24/32] dont install scripts
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 80afe86d6558..a35082daa9f9 100644
--- a/Makefile
+++ b/Makefile
@@ -99,7 +99,7 @@ install_udev_rules:
$(INSTALL) -d $(DESTDIR)$(rulesdir)
$(INSTALL) -m 644 $(RULESFILES) $(DESTDIR)/$(rulesdir)
-install_programs: $(PROGRAMS) $(SCRIPTS)
+install_programs: $(PROGRAMS) # $(SCRIPTS)
$(INSTALL) -d $(DESTDIR)$(sbindir)
$(INSTALL) -m 755 $^ $(DESTDIR)$(sbindir)
--
2.14.4

View File

@ -0,0 +1,109 @@
From 089cd6910d9f0d1e459e1d8d00b754843437526d Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Wed, 30 May 2018 16:08:30 -0700
Subject: [PATCH 28/28] use /var/lib/iscsi in libopeniscsiusr
---
libopeniscsiusr/idbm.h | 3 ++-
libopeniscsiusr/iface.c | 2 +-
libopeniscsiusr/libopeniscsiusr/libopeniscsiusr.h | 8 ++++----
libopeniscsiusr/libopeniscsiusr/libopeniscsiusr_iface.h | 2 +-
libopeniscsiusr/node.h | 2 +-
5 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/libopeniscsiusr/idbm.h b/libopeniscsiusr/idbm.h
index 3fd0864a797d..c84d332ff949 100644
--- a/libopeniscsiusr/idbm.h
+++ b/libopeniscsiusr/idbm.h
@@ -31,7 +31,8 @@
#include "libopeniscsiusr/libopeniscsiusr_common.h"
#define ISCSI_CONFIG_ROOT "/etc/iscsi/"
-#define IFACE_CONFIG_DIR ISCSI_CONFIG_ROOT"ifaces"
+#define ISCSI_VAR_LIB "/var/lib/iscsi/"
+#define IFACE_CONFIG_DIR ISCSI_VAR_LIB"ifaces"
#define AUTH_STR_MAX_LEN 256
#define BOOT_NAME_MAXLEN 256
#define IDBM_DUMP_SIZE 8192
diff --git a/libopeniscsiusr/iface.c b/libopeniscsiusr/iface.c
index e2355bc0fff0..cd9dd7326ae6 100644
--- a/libopeniscsiusr/iface.c
+++ b/libopeniscsiusr/iface.c
@@ -383,7 +383,7 @@ int iscsi_default_iface_setup(struct iscsi_context *ctx)
_good(_iscsi_hids_get(ctx, &hids, &hid_count), rc, out);
for (i = 0; i < hid_count; ++i) {
- /* Create /etc/iscsi/ifaces/<iface_name> file if not found
+ /* Create /var/lib/iscsi/ifaces/<iface_name> file if not found
*/
_good(_iscsi_ifaces_get_from_sysfs(ctx, hids[i], &ifaces, &iface_count),
rc, out);
diff --git a/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr.h b/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr.h
index 439590249212..81582da9e1e6 100644
--- a/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr.h
+++ b/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr.h
@@ -339,7 +339,7 @@ __DLL_EXPORT void iscsi_session_free(struct iscsi_session *se);
* * bnx2i
*
* It will also create configuration files for iSCSI hardware offload cards in
- * /etc/iscsi/ifaces/<iface_name>.
+ * /var/lib/iscsi/ifaces/<iface_name>.
*
* @ctx:
* Pointer of 'struct iscsi_context'.
@@ -369,7 +369,7 @@ __DLL_EXPORT int iscsi_default_iface_setup(struct iscsi_context *ctx);
* Retrieves all iSCSI interfaces. For the properties of 'struct iscsi_iface',
* please refer to the functions defined in 'libopeniscsiusr_iface.h' file.
* The returned results contains default iSCSI interfaces(iser and iscsi_tcp)
- * and iSCSI interfaces configured in "/etc/iscsi/ifaces/".
+ * and iSCSI interfaces configured in "/var/lib/iscsi/ifaces/".
* Illegal configuration file will be skipped and warned.
* To generate iSCSI interface configuration when new card installed, please
* use iscsi_default_iface_setup().
@@ -427,7 +427,7 @@ __DLL_EXPORT void iscsi_ifaces_free(struct iscsi_iface **ifaces,
* iscsi_iface_get() - Retrieve specified iSCSI interface.
*
* Retrieves specified iSCSI interfaces by reading configuration from
- * "/etc/iscsi/iface/<iface_name>".
+ * "/var/lib/iscsi/iface/<iface_name>".
* To generate iSCSI interface configuration when new card installed, please
* use iscsi_default_iface_setup().
* Illegal configuration file will be treated as error LIBISCSI_ERR_IDBM.
@@ -438,7 +438,7 @@ __DLL_EXPORT void iscsi_ifaces_free(struct iscsi_iface **ifaces,
* If this pointer is NULL, your program will be terminated by assert.
* @iface_name:
* String. Name of iSCSI interface. Also the file name of configuration
- * file "/etc/iscsi/iface/<iface_name>".
+ * file "/var/lib/iscsi/iface/<iface_name>".
* If this pointer is NULL or empty string, your program will be terminated
* by assert.
* @iface:
diff --git a/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr_iface.h b/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr_iface.h
index a1a255246d20..95b01602fb37 100644
--- a/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr_iface.h
+++ b/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr_iface.h
@@ -182,7 +182,7 @@ __DLL_EXPORT const char *iscsi_iface_name_get(struct iscsi_iface *iface);
*
* Dump all configurations of specified iSCSI interface. Will skip empty
* configuration so that output string could be saved directly to
- * /etc/iscsi/ifaces/<iface_name> file.
+ * /var/lib/iscsi/ifaces/<iface_name> file.
*
* @iface:
* Pointer of 'struct iscsi_iface'.
diff --git a/libopeniscsiusr/node.h b/libopeniscsiusr/node.h
index 39e07b3befae..9eba7fa6077c 100644
--- a/libopeniscsiusr/node.h
+++ b/libopeniscsiusr/node.h
@@ -44,7 +44,7 @@ struct iscsi_node {
char portal[NI_MAXHOST * 2];
};
-#define NODE_CONFIG_DIR ISCSI_CONFIG_ROOT"nodes"
+#define NODE_CONFIG_DIR ISCSI_VAR_LIB"nodes"
/* Might be public in the future */
__DLL_LOCAL void iscsi_node_free(struct iscsi_node *node);
--
2.14.4

7
SOURCES/04-iscsi Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
case "$2" in
up|vpn-up)
/bin/systemctl --no-block reload iscsi.service || :
;;
esac

View File

@ -0,0 +1,2 @@
d /run/lock/iscsi 0700 root root -
f /run/lock/iscsi/lock 0600 root root -

View File

@ -0,0 +1,27 @@
commit d8298fc54eb69d3989878be46e9c7d6ec2055650
Author: Lee Duncan <lduncan@suse.com>
Date: Mon Sep 24 16:22:18 2018 -0700
Allow reading sysfs "port" to fail gracefully.
Do not consider it a fatal error if reading sysfs value
for "port" fails, since we allow failure for "address".
---
libopeniscsiusr/session.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libopeniscsiusr/session.c b/libopeniscsiusr/session.c
index a8339395fc03..f8c89c323afb 100644
--- a/libopeniscsiusr/session.c
+++ b/libopeniscsiusr/session.c
@@ -205,8 +205,8 @@ int iscsi_session_get(struct iscsi_context *ctx, uint32_t sid,
_sysfs_prop_get_str(ctx, sysfs_con_dir_path, "address", (*se)->address,
sizeof((*se)->address) / sizeof(char), "");
- _good(_sysfs_prop_get_i32(ctx, sysfs_con_dir_path, "port",
- &((*se)->port), -1, false), rc, out);
+ _sysfs_prop_get_i32(ctx, sysfs_con_dir_path, "port",
+ &((*se)->port), -1, true);
if ((strcmp((*se)->address, "") == 0) &&
(strcmp((*se)->persistent_address, "") != 0))

View File

@ -0,0 +1,48 @@
commit 7df5edbb427c79337bdd651c2bcdda8eb05f077b
Author: Lee Duncan <lduncan@suse.com>
Date: Mon Sep 24 16:30:34 2018 -0700
Fix incorrect sysfs logic for port and ip address.
If "port" is available and "persistent_port" is not, then
correctly use the one that is present for both values.
Likewise for "address" and "persistent_address".
---
libopeniscsiusr/session.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/libopeniscsiusr/session.c b/libopeniscsiusr/session.c
index f8c89c323afb..98601dcf807e 100644
--- a/libopeniscsiusr/session.c
+++ b/libopeniscsiusr/session.c
@@ -208,22 +208,20 @@ int iscsi_session_get(struct iscsi_context *ctx, uint32_t sid,
_sysfs_prop_get_i32(ctx, sysfs_con_dir_path, "port",
&((*se)->port), -1, true);
- if ((strcmp((*se)->address, "") == 0) &&
- (strcmp((*se)->persistent_address, "") != 0))
- _strncpy((*se)->persistent_address, (*se)->address,
- sizeof((*se)->persistent_address) / sizeof(char));
-
if ((strcmp((*se)->address, "") != 0) &&
(strcmp((*se)->persistent_address, "") == 0))
+ _strncpy((*se)->persistent_address, (*se)->address,
+ sizeof((*se)->persistent_address) / sizeof(char));
+ else if ((strcmp((*se)->address, "") == 0) &&
+ (strcmp((*se)->persistent_address, "") != 0))
_strncpy((*se)->address, (*se)->persistent_address,
sizeof((*se)->address) / sizeof(char));
- if (((*se)->persistent_port != -1) &&
- ((*se)->port == -1))
+ if (((*se)->persistent_port == -1) &&
+ ((*se)->port != -1))
(*se)->persistent_port = (*se)->port;
-
- if (((*se)->persistent_port != -1) &&
- ((*se)->port == -1))
+ else if (((*se)->persistent_port != -1) &&
+ ((*se)->port == -1))
(*se)->port = (*se)->persistent_port;
_good(_iscsi_host_id_of_session(ctx, sid, &host_id), rc, out);

View File

@ -0,0 +1,73 @@
commit 09d7031cb462889392090e71991a89c522d387bc
Author: Lee Duncan <lduncan@suse.com>
Date: Mon Sep 24 16:37:19 2018 -0700
Fix reading of sysfs signed integers when negative.
The code for reading all sysfs integer types (of all
sizes) did not work when reading signed integers and
the return value was negative. So when the default was -1
and the value was not present, the code tried to return -1.
But the logic for checking against "max value" was
incorrect, causing INT_MAX to be returned instead of -1.
---
libopeniscsiusr/sysfs.c | 32 +++++++++++++++++++++++++++-----
1 file changed, 27 insertions(+), 5 deletions(-)
diff --git a/libopeniscsiusr/sysfs.c b/libopeniscsiusr/sysfs.c
index 08f71b317c55..c4f89a31aca0 100644
--- a/libopeniscsiusr/sysfs.c
+++ b/libopeniscsiusr/sysfs.c
@@ -47,7 +47,7 @@
#define _SYS_NULL_STR "(null)"
-#define _sysfs_prop_get_int_func_gen(func_name, out_type, type_max_value) \
+#define _sysfs_prop_get_uint_func_gen(func_name, out_type, type_max_value) \
int func_name(struct iscsi_context *ctx, const char *dir_path, \
const char *prop_name, out_type *val, \
out_type default_value, bool ignore_error) \
@@ -63,6 +63,28 @@
return rc; \
}
+#define _sysfs_prop_get_int_func_gen(func_name, out_type, type_min_value, type_max_value) \
+ int func_name(struct iscsi_context *ctx, const char *dir_path, \
+ const char *prop_name, out_type *val, \
+ out_type default_value, bool ignore_error) \
+ { \
+ long long int tmp_val = 0; \
+ int rc = LIBISCSI_OK; \
+ long long int dv = default_value; \
+ rc = iscsi_sysfs_prop_get_ll(ctx, dir_path, prop_name, \
+ &tmp_val, (long long int) dv, \
+ ignore_error); \
+ if (rc == LIBISCSI_OK) { \
+ if (tmp_val > type_max_value) \
+ *val = type_max_value; \
+ else if (tmp_val < type_min_value) \
+ *val = type_min_value; \
+ else \
+ *val = tmp_val; \
+ } \
+ return rc; \
+ }
+
enum _sysfs_dev_class {
_SYSFS_DEV_CLASS_ISCSI_SESSION,
@@ -82,10 +104,10 @@ static int iscsi_sysfs_prop_get_ll(struct iscsi_context *ctx,
static int sysfs_get_dev_path(struct iscsi_context *ctx, const char *path,
enum _sysfs_dev_class class, char **dev_path);
-_sysfs_prop_get_int_func_gen(_sysfs_prop_get_u8, uint8_t, UINT8_MAX);
-_sysfs_prop_get_int_func_gen(_sysfs_prop_get_u16, uint16_t, UINT16_MAX);
-_sysfs_prop_get_int_func_gen(_sysfs_prop_get_i32, int32_t, INT32_MAX);
-_sysfs_prop_get_int_func_gen(_sysfs_prop_get_u32, uint32_t, UINT32_MAX);
+_sysfs_prop_get_uint_func_gen(_sysfs_prop_get_u8, uint8_t, UINT8_MAX);
+_sysfs_prop_get_uint_func_gen(_sysfs_prop_get_u16, uint16_t, UINT16_MAX);
+_sysfs_prop_get_int_func_gen(_sysfs_prop_get_i32, int32_t, INT32_MIN, INT32_MAX);
+_sysfs_prop_get_uint_func_gen(_sysfs_prop_get_u32, uint32_t, UINT32_MAX);
static int sysfs_read_file(const char *path, uint8_t *buff, size_t buff_size)
{

View File

@ -0,0 +1,69 @@
commit 7d121d12ad6ba7783308c25ffd338a9fa0cc402b
Author: Lee Duncan <lduncan@suse.com>
Date: Tue Sep 25 09:48:53 2018 -0700
Create a new error for "target not connected".
The session_logout_qtask() function now recognizes
a new state of "target likely not connected" if
syncing up, in connection wait state, and re-opening
the connection.
---
include/iscsi_err.h | 2 ++
usr/initiator.c | 16 +++++++++++++++-
usr/iscsi_err.c | 1 +
3 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/include/iscsi_err.h b/include/iscsi_err.h
index 506bd8c9bd27..ed000dd00baf 100644
--- a/include/iscsi_err.h
+++ b/include/iscsi_err.h
@@ -68,6 +68,8 @@ enum {
ISCSI_ERR_UNKNOWN_DISCOVERY_TYPE = 30,
/* child process terminated */
ISCSI_ERR_CHILD_TERMINATED = 31,
+ /* session likely not connected */
+ ISCSI_ERR_SESSION_NOT_CONNECTED = 32,
/* Always last. Indicates end of error code space */
ISCSI_MAX_ERR_VAL,
diff --git a/usr/initiator.c b/usr/initiator.c
index a86d1e6dee90..935056a3abde 100644
--- a/usr/initiator.c
+++ b/usr/initiator.c
@@ -2056,8 +2056,22 @@ int session_logout_task(int sid, queue_task_t *qtask)
return ISCSI_ERR_SESS_NOT_FOUND;
}
conn = &session->conn[0];
+
/*
- * If syncing up or if this is the initial login and mgmt_ipc
+ * If syncing up, in XPT_WAIT, and REOPENing, then return
+ * an informative error, since the target for this session
+ * is likely not connected
+ */
+ if (session->notify_qtask &&
+ (conn->state == ISCSI_CONN_STATE_XPT_WAIT) &&
+ (session->r_stage == R_STAGE_SESSION_REOPEN)) {
+ log_warning("session cannot be terminted because it's trying to reconnect: try again later");
+ return ISCSI_ERR_SESSION_NOT_CONNECTED;
+ }
+
+ /*
+ * If syncing up and not reconnecting,
+ * or if this is the initial login and mgmt_ipc
* has not been notified of that result fail the logout request
*/
if (session->notify_qtask ||
diff --git a/usr/iscsi_err.c b/usr/iscsi_err.c
index 1ba9e648d7c1..23c61fc3574e 100644
--- a/usr/iscsi_err.c
+++ b/usr/iscsi_err.c
@@ -54,6 +54,7 @@ static char *iscsi_err_msgs[] = {
/* 29 */ "operation failed but retry may succeed",
/* 30 */ "unknown discovery type",
/* 31 */ "child process terminated",
+ /* 32 */ "target likely not connected",
};
char *iscsi_err_to_str(int err)

View File

@ -0,0 +1,26 @@
commit 8bf04a094e572c56d4f8bd30ff064c84c75a0247
Author: Lee Duncan <lduncan@suse.com>
Date: Tue Sep 25 09:53:55 2018 -0700
Fix bug in error message when reading sysfs numbers.
The message printed when ENOENT was returned for
a number-type sysfs value was missing the attribute
name parameter.
---
libopeniscsiusr/sysfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libopeniscsiusr/sysfs.c b/libopeniscsiusr/sysfs.c
index c4f89a31aca0..5e6532e7746f 100644
--- a/libopeniscsiusr/sysfs.c
+++ b/libopeniscsiusr/sysfs.c
@@ -237,7 +237,7 @@ static int iscsi_sysfs_prop_get_ll(struct iscsi_context *ctx,
"Failed to read '%s': "
"File '%s' does not exists, using ",
"default value %lld",
- file_path, default_value);
+ prop_name, file_path, default_value);
*val = default_value;
goto out;
}

View File

@ -0,0 +1,62 @@
commit ae0b2ceb620e2bf527c06d21c110791d1e0e8bf4
Author: Lee Duncan <lduncan@suse.com>
Date: Tue Sep 25 09:57:46 2018 -0700
Handle ENOTCONN error separately when reading sysfs values.
This error happens when the daemon is attempting to
reconnect a session when starting up, so should not
be considered an internal error.
---
libopeniscsiusr/sysfs.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/libopeniscsiusr/sysfs.c b/libopeniscsiusr/sysfs.c
index 5e6532e7746f..2c3f077bf3fa 100644
--- a/libopeniscsiusr/sysfs.c
+++ b/libopeniscsiusr/sysfs.c
@@ -184,6 +184,21 @@ int _sysfs_prop_get_str(struct iscsi_context *ctx, const char *dir_path,
_error(ctx, "Failed to read '%s': "
"permission deny when reading '%s'", prop_name,
file_path);
+ } else if (errno_save == ENOTCONN) {
+ if (default_value == NULL) {
+ rc = LIBISCSI_ERR_SYSFS_LOOKUP;
+ _error(ctx, "Failed to read '%s': "
+ "error when reading '%s': "
+ "Target unavailable",
+ prop_name, file_path);
+ } else {
+ _info(ctx, "Failed to read '%s': "
+ "error when reading '%s': "
+ "Target unavailable, using default value '%s'",
+ prop_name, file_path, default_value);
+ memcpy(buff, (void *) default_value,
+ strlen(default_value) + 1);
+ }
} else {
rc = LIBISCSI_ERR_BUG;
_error(ctx, "Failed to read '%s': "
@@ -246,6 +261,22 @@ static int iscsi_sysfs_prop_get_ll(struct iscsi_context *ctx,
_error(ctx, "Permission deny when reading '%s'",
file_path);
goto out;
+ } else if (errno_save == ENOTCONN) {
+ if (!ignore_error) {
+ rc = LIBISCSI_ERR_SYSFS_LOOKUP;
+ _error(ctx, "Failed to read '%s': "
+ "error when reading '%s': "
+ "Target unavailable",
+ prop_name, file_path);
+ goto out;
+ } else {
+ _info(ctx, "Failed to read '%s': "
+ "error when reading '%s': "
+ "Target unavailable, using default value %lld",
+ prop_name, file_path, default_value);
+ *val = default_value;
+ goto out;
+ }
} else {
rc = LIBISCSI_ERR_BUG;
_error(ctx, "Error when reading '%s': %d", file_path,

View File

@ -0,0 +1,26 @@
commit baa0cb45cfcf10a81283c191b0b236cd1a2f66ee
Author: Lee Duncan <lduncan@suse.com>
Date: Fri Oct 12 09:57:20 2018 -0700
Restore space in node-mode level 0 output
As part of the libopeniscsiusr update, the output
of "iscsiadm -m node" dropped a space that needs to
be between the portal and the target, for proper
parsing.
Fixes: 87ea50a1c3a97
diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c
index e3ba03c838f3..25c6cdc0ff12 100644
--- a/usr/iscsiadm.c
+++ b/usr/iscsiadm.c
@@ -683,7 +683,7 @@ static int login_portals(struct node_rec *pattern_rec)
static void print_node_flat(struct iscsi_node *node)
{
- printf("%s,%" PRIu16 "%s\n",
+ printf("%s,%" PRIu16 " %s\n",
iscsi_node_portal_get(node),
iscsi_node_tpgt_get(node),
iscsi_node_target_name_get(node));

View File

@ -0,0 +1,589 @@
%global open_iscsi_version 2.0
%global open_iscsi_build 876
%global commit0 f3c8e90fc0894c088950a15ee6618b427f9e2457
%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
%if 0%{?rhel} > 7
# Disable python2 build by default
%bcond_with python2
%else
%bcond_without python2
%endif
Summary: iSCSI daemon and utility programs
Name: iscsi-initiator-utils
Version: 6.%{open_iscsi_version}.%{open_iscsi_build}
Release: 7.git%{shortcommit0}%{?dist}
Group: System Environment/Daemons
License: GPLv2+
URL: http://www.open-iscsi.org
Source0: https://github.com/open-iscsi/open-iscsi/archive/%{commit0}.tar.gz#/open-iscsi-%{shortcommit0}.tar.gz
Source4: 04-iscsi
Source5: iscsi-tmpfiles.conf
Patch0001: 0001-idmb_rec_write-check-for-tpgt-first.patch
Patch0002: 0002-idbm_rec_write-seperate-old-and-new-style-writes.patch
Patch0003: 0003-idbw_rec_write-pick-tpgt-from-existing-record.patch
Patch0004: 0004-update-systemd-service-files-add-iscsi.service-for-s.patch
Patch0005: 0005-iscsi-boot-related-service-file-updates.patch
Patch0006: 0006-update-initscripts-and-docs.patch
Patch0007: 0007-use-var-for-config.patch
Patch0008: 0008-use-red-hat-for-name.patch
Patch0009: 0009-libiscsi.patch
Patch0010: 0010-remove-the-offload-boot-supported-ifdef.patch
Patch0011: 0011-iscsiuio-systemd-unit-files.patch
Patch0012: 0012-Don-t-check-for-autostart-sessions-if-iscsi-is-not-u.patch
Patch0013: 0013-Revert-iscsiadm-return-error-when-login-fails.patch
Patch0014: 0014-update-handling-of-boot-sessions.patch
Patch0015: 0015-update-iscsi.service-for-boot-session-recovery.patch
Patch0016: 0016-updates-to-iscsi.service.patch
Patch0017: 0017-make-session-shutdown-a-seperate-service.patch.patch
Patch0018: 0018-Add-macros-to-release-GIL-lock.patch
Patch0019: 0019-libiscsi-introduce-sessions-API.patch
Patch0020: 0020-use-Red-Hat-version-string-to-match-RPM-package-vers.patch
Patch0021: 0021-libiscsi-fix-discovery-request-timeout-regression.patch
Patch0022: 0022-libiscsi-format-security-build-errors.patch
Patch0023: 0023-libiscsi-fix-build-to-use-libopeniscsiusr.patch
Patch0024: 0024-dont-install-scripts.patch
Patch0028: 0028-use-var-lib-iscsi-in-libopeniscsiusr.patch
Patch0029: open-iscsi-2.0.876-66-Allow-reading-sysfs-port-to-fail-gracefully.patch
Patch0030: open-iscsi-2.0.876-67-Fix-incorrect-sysfs-logic-for-port-and-ip-address.patch
Patch0031: open-iscsi-2.0.876-68-Fix-reading-of-sysfs-signed-integers-when-negative.patch
Patch0032: open-iscsi-2.0.876-69-Create-a-new-error-for-target-not-connected.patch
Patch0033: open-iscsi-2.0.876-70-Fix-bug-in-error-message-when-reading-sysfs-numbers.patch
Patch0034: open-iscsi-2.0.876-71-Handle-ENOTCONN-error-separately-when-reading-sysfs-values.patch
Patch0035: open-iscsi-2.0.876-93-Restore-space-in-node-mode-level-0-output.patch
BuildRequires: flex bison doxygen kmod-devel systemd-units
BuildRequires: autoconf automake libtool libmount-devel openssl-devel
BuildRequires: isns-utils-devel
# For dir ownership
Requires: %{name}-iscsiuio >= %{version}-%{release}
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
%global _hardened_build 1
%global __provides_exclude_from ^(%{python2_sitearch}/.*\\.so|%{python3_sitearch}/.*\\.so)$
%description
The iscsi package provides the server daemon for the iSCSI protocol,
as well as the utility programs used to manage it. iSCSI is a protocol
for distributed disk access using SCSI commands sent over Internet
Protocol networks.
# I don't think we're ready to expose these just yet
# For now just add the needed library to the base package
#%package -n libopeniscsiusr
#Summary: library providing access to Open-iSCSI initiator functionality
#Group: Development/Libraries
#License: BSD
#%description -n libopeniscsiusr
#The libopeniscsiusr library provides a C API for access to the Open-iSCSI
#initiator. It is used by the Open-iSCSI command line tools.
#%package -n libopeniscsiusr-devel
#Summary: Development files for libopeniscsiusr
#Group: Development/Libraries
#Requires: libopeniscsiusr = %{version}-%{release}
#%description -n libopeniscsiusr-devel
#The libopeniscsiusr-devel package contains libraries and header files for
#developing applications that use libopeniscsiusr.
%package iscsiuio
Summary: Userspace configuration daemon required for some iSCSI hardware
Group: System Environment/Daemons
License: BSD
Requires: %{name} = %{version}-%{release}
%description iscsiuio
The iscsiuio configuration daemon provides network configuration help
for some iSCSI offload hardware.
%package devel
Summary: Development files for %{name}
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
%description devel
The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.
%if %{with python2}
%package -n python2-%{name}
%{?python_provide:%python_provide python2-%{name}}
Summary: Python %{python2_version} bindings to %{name}
Group: Development/Libraries
BuildRequires: python2-devel
BuildRequires: python2-setuptools
%description -n python2-%{name}
The %{name}-python2 package contains Python %{python2_version} bindings to the
libiscsi interface for interacting with %{name}
%endif # with python2
%package -n python3-%{name}
%{?python_provide:%python_provide python3-%{name}}
Summary: Python %{python3_version} bindings to %{name}
Group: Development/Libraries
BuildRequires: python3-devel
BuildRequires: python3-setuptools
%description -n python3-%{name}
The %{name}-python3 package contains Python %{python3_version} bindings to the
libiscsi interface for interacting with %{name}
%prep
%autosetup -p1 -n open-iscsi-%{commit0}
# change exec_prefix, there's no easy way to override
%{__sed} -i -e 's|^exec_prefix = /$|exec_prefix = %{_exec_prefix}|' Makefile
%build
# configure sub-packages from here
# letting the top level Makefile do it will lose setting from rpm
cd iscsiuio
autoreconf --install
%{configure}
cd ..
%{__make} OPTFLAGS="%{optflags} %{?__global_ldflags} -DUSE_KMOD -lkmod"
pushd libiscsi
%if %{with python2}
%py2_build
%endif # with python2
%py3_build
touch -r libiscsi.doxy html/*
popd
%install
%{__make} DESTDIR=%{?buildroot} install_programs install_doc install_etc install_libopeniscsiusr
# upstream makefile doesn't get everything the way we like it
#rm $RPM_BUILD_ROOT%{_sbindir}/iscsi_discovery
rm $RPM_BUILD_ROOT%{_mandir}/man8/iscsi_discovery.8
rm $RPM_BUILD_ROOT%{_mandir}/man8/iscsi_fw_login.8
%{__install} -pm 755 usr/iscsistart $RPM_BUILD_ROOT%{_sbindir}
%{__install} -pm 644 doc/iscsistart.8 $RPM_BUILD_ROOT%{_mandir}/man8
%{__install} -pm 644 doc/iscsi-iname.8 $RPM_BUILD_ROOT%{_mandir}/man8
%{__install} -d $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
%{__install} -pm 644 iscsiuio/iscsiuiolog $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
%{__install} -d $RPM_BUILD_ROOT%{_sharedstatedir}/iscsi
%{__install} -d $RPM_BUILD_ROOT%{_sharedstatedir}/iscsi/nodes
%{__install} -d $RPM_BUILD_ROOT%{_sharedstatedir}/iscsi/send_targets
%{__install} -d $RPM_BUILD_ROOT%{_sharedstatedir}/iscsi/static
%{__install} -d $RPM_BUILD_ROOT%{_sharedstatedir}/iscsi/isns
%{__install} -d $RPM_BUILD_ROOT%{_sharedstatedir}/iscsi/slp
%{__install} -d $RPM_BUILD_ROOT%{_sharedstatedir}/iscsi/ifaces
# for %%ghost
%{__install} -d $RPM_BUILD_ROOT/var/lock/iscsi
touch $RPM_BUILD_ROOT/var/lock/iscsi/lock
%{__install} -d $RPM_BUILD_ROOT%{_unitdir}
%{__install} -pm 644 etc/systemd/iscsi.service $RPM_BUILD_ROOT%{_unitdir}
%{__install} -pm 644 etc/systemd/iscsi-shutdown.service $RPM_BUILD_ROOT%{_unitdir}
%{__install} -pm 644 etc/systemd/iscsid.service $RPM_BUILD_ROOT%{_unitdir}
%{__install} -pm 644 etc/systemd/iscsid.socket $RPM_BUILD_ROOT%{_unitdir}
%{__install} -pm 644 etc/systemd/iscsiuio.service $RPM_BUILD_ROOT%{_unitdir}
%{__install} -pm 644 etc/systemd/iscsiuio.socket $RPM_BUILD_ROOT%{_unitdir}
%{__install} -d $RPM_BUILD_ROOT%{_libexecdir}
%{__install} -pm 755 etc/systemd/iscsi-mark-root-nodes $RPM_BUILD_ROOT%{_libexecdir}
%{__install} -d $RPM_BUILD_ROOT%{_sysconfdir}/NetworkManager/dispatcher.d
%{__install} -pm 755 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/NetworkManager/dispatcher.d
%{__install} -d $RPM_BUILD_ROOT%{_tmpfilesdir}
%{__install} -pm 644 %{SOURCE5} $RPM_BUILD_ROOT%{_tmpfilesdir}/iscsi.conf
%{__install} -d $RPM_BUILD_ROOT%{_libdir}
%{__install} -pm 755 libiscsi/libiscsi.so.0 $RPM_BUILD_ROOT%{_libdir}
%{__ln_s} libiscsi.so.0 $RPM_BUILD_ROOT%{_libdir}/libiscsi.so
%{__install} -d $RPM_BUILD_ROOT%{_includedir}
%{__install} -pm 644 libiscsi/libiscsi.h $RPM_BUILD_ROOT%{_includedir}
%if %{with python2}
%{__install} -d $RPM_BUILD_ROOT%{python2_sitearch}
%endif # with python2
%{__install} -d $RPM_BUILD_ROOT%{python3_sitearch}
pushd libiscsi
%if %{with python2}
%py2_install
%endif # with python2
%py3_install
popd
%post
/sbin/ldconfig
%systemd_post iscsi.service iscsi-shutdown.service iscsid.service iscsid.socket
if [ $1 -eq 1 ]; then
if [ ! -f %{_sysconfdir}/iscsi/initiatorname.iscsi ]; then
echo "InitiatorName=`/usr/sbin/iscsi-iname`" > %{_sysconfdir}/iscsi/initiatorname.iscsi
fi
# enable socket activation and persistant session startup by default
/bin/systemctl enable iscsi.service >/dev/null 2>&1 || :
/bin/systemctl enable iscsid.socket >/dev/null 2>&1 || :
fi
%post iscsiuio
%systemd_post iscsiuio.service iscsiuio.socket
if [ $1 -eq 1 ]; then
/bin/systemctl enable iscsiuio.socket >/dev/null 2>&1 || :
fi
%preun
%systemd_preun iscsi.service iscsi-shutdown.service iscsid.service iscsiuio.service iscsid.socket iscsiuio.socket
%preun iscsiuio
%systemd_preun iscsiuio.service iscsiuio.socket
%postun
/sbin/ldconfig
%systemd_postun
%postun iscsiuio
%systemd_postun
%triggerun -- iscsi-initiator-utils < 6.2.0.873-25
# prior to 6.2.0.873-24 iscsi.service was missing a Wants=remote-fs-pre.target
# this forces remote-fs-pre.target active if needed for a clean shutdown/reboot
# after upgrading this package
if [ $1 -gt 0 ]; then
/usr/bin/systemctl -q is-active iscsi.service
if [ $? -eq 0 ]; then
/usr/bin/systemctl -q is-active remote-fs-pre.target
if [ $? -ne 0 ]; then
SRC=`/usr/bin/systemctl show --property FragmentPath remote-fs-pre.target | cut -d= -f2`
DST=/run/systemd/system/remote-fs-pre.target
if [ $SRC != $DST ]; then
cp $SRC $DST
fi
sed -i 's/RefuseManualStart=yes/RefuseManualStart=no/' $DST
/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || :
/usr/bin/systemctl start remote-fs-pre.target >/dev/null 2>&1 || :
fi
fi
fi
# added in 6.2.0.873-25
if [ $1 -gt 0 ]; then
systemctl start iscsi-shutdown.service >/dev/null 2>&1 || :
fi
%files
%doc README
%dir %{_sharedstatedir}/iscsi
%dir %{_sharedstatedir}/iscsi/nodes
%dir %{_sharedstatedir}/iscsi/isns
%dir %{_sharedstatedir}/iscsi/static
%dir %{_sharedstatedir}/iscsi/slp
%dir %{_sharedstatedir}/iscsi/ifaces
%dir %{_sharedstatedir}/iscsi/send_targets
%ghost %{_var}/lock/iscsi
%ghost %{_var}/lock/iscsi/lock
%{_unitdir}/iscsi.service
%{_unitdir}/iscsi-shutdown.service
%{_unitdir}/iscsid.service
%{_unitdir}/iscsid.socket
%{_libexecdir}/iscsi-mark-root-nodes
%{_sysconfdir}/NetworkManager/dispatcher.d/04-iscsi
%{_tmpfilesdir}/iscsi.conf
%dir %{_sysconfdir}/iscsi
%attr(0600,root,root) %config(noreplace) %{_sysconfdir}/iscsi/iscsid.conf
%{_sbindir}/iscsi-iname
%{_sbindir}/iscsiadm
%{_sbindir}/iscsid
%{_sbindir}/iscsistart
%{_libdir}/libiscsi.so.0
%{_mandir}/man8/iscsi-iname.8.gz
%{_mandir}/man8/iscsiadm.8.gz
%{_mandir}/man8/iscsid.8.gz
%{_mandir}/man8/iscsistart.8.gz
# until we decide to setup libopeniscsiusr as a subpkg for real
%{_libdir}/libopeniscsiusr.so.*
%exclude %{_libdir}/libopeniscsiusr.so
%exclude %{_includedir}/libopeniscsiusr.h
%exclude %{_includedir}/libopeniscsiusr_common.h
%exclude %{_includedir}/libopeniscsiusr_iface.h
%exclude %{_includedir}/libopeniscsiusr_session.h
%exclude %{_libdir}/pkgconfig/libopeniscsiusr.pc
# %files -n libopeniscsiusr
# %{_libdir}/libopeniscsiusr.so.*
#
# %files -n libopeniscsiusr-devel
# %{_libdir}/libopeniscsiusr.so
# %{_includedir}/libopeniscsiusr.h
# %{_includedir}/libopeniscsiusr_common.h
# %{_includedir}/libopeniscsiusr_iface.h
# %{_includedir}/libopeniscsiusr_session.h
# %{_libdir}/pkgconfig/libopeniscsiusr.pc
%files iscsiuio
%{_sbindir}/iscsiuio
%{_unitdir}/iscsiuio.service
%{_unitdir}/iscsiuio.socket
%config(noreplace) %{_sysconfdir}/logrotate.d/iscsiuiolog
%{_mandir}/man8/iscsiuio.8.gz
%files devel
%doc libiscsi/html
%{_libdir}/libiscsi.so
%{_includedir}/libiscsi.h
%if %{with python2}
%files -n python2-%{name}
%{python2_sitearch}/*
%endif # with python2
%files -n python3-%{name}
%{python3_sitearch}/*
%changelog
* Thu Feb 21 2019 Chris Leech <cleech@redhat.com> - 6.2.0.876-7.gitf3c8e90
- 1647826: fix sysfs and output format regressions in libopeniscsi code
* Thu Jan 03 2019 Chris Leech <cleech@redhat.com> - 6.2.0.876-6.gitf3c8e90
- 1650402: fix missing space in node display output
* Tue Jul 10 2018 Chris Leech <cleech@redhat.com> - 6.2.0.876-5.gitf3c8e90
- iscsiuio: add mutex to protect netlink buffer for pass-through xmit
- iscsid: get gateway information from sysfs when recovering sessions
- enabled MaxOustandingR2T negotiation during login
* Mon Jun 25 2018 Adam Williamson <awilliam@redhat.com> - 6.2.0.876-4.git4ef9261
- Rebuilt for Python 3.7, again
* Mon Jun 25 2018 Adam Williamson <awilliam@redhat.com> - 6.2.0.876-3.git4ef9261
- Link libiscsi against libopeniscsiusr (bz #1594946) (python 3.6 build)
* Wed Jun 20 2018 Miro Hrončok <mhroncok@redhat.com> - 6.2.0.876-2.git4ef9261
- Rebuilt for Python 3.7
* Tue Jun 19 2018 Chris Leech <cleech@redhat.com> - 6.2.0.876-1.git4ef9261
- pull in post 2.0.876 tagged fixes from upstream git
- minimal packaging of libopeniscsiusr (internal use only, no dev package yet)
* Tue Jun 19 2018 Chris Leech <cleech@redhat.com> - 6.2.0.876-1.git24580ad
- rebase to upstream 2.0.876
* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 6.2.0.874-10.git86e8892
- Rebuilt for Python 3.7
* Mon May 28 2018 Charalampos Stratakis <cstratak@redhat.com> - 6.2.0.874-10.git86e8892
- Conditionalize the python2 subpackage
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 6.2.0.874-9.git86e8892
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Fri Jan 05 2018 Iryna Shcherbina <ishcherb@redhat.com> - 6.2.0.874-8.git86e8892
- Update Python 2 dependency declarations to new packaging standards
(See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 6.2.0.874-7.git86e8892
- Python 2 binary package renamed to python2-iscsi-initiator-utils
See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 6.2.0.874-6.git86e8892
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 6.2.0.874-5.git86e8892
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Wed Apr 12 2017 Chris Leech <cleech@redhat.com> - 6.2.0.874-4.git86e8892
- rebuild to use shared libisns
* Tue Feb 28 2017 Chris Leech <cleech@redhat.com> - 6.2.0.874-3.git86e8892
- libiscsi: fix discovery command timeout regression
- libiscsi: fix format security build errors
* Thu Feb 16 2017 Chris Leech <cleech@redhat.com> - 6.2.0.874-2.git86e8892
- fix regression with iscsiadm discoverydb commands having a 0 timeout
* Thu Feb 09 2017 Chris Leech <cleech@redhat.com> - 6.2.0.874-1
- update to 2.0.874
* Mon Dec 12 2016 Charalampos Stratakis <cstratak@redhat.com> - 6.2.0.873-35.git4c1f2d9
- Rebuild for Python 3.6
* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 6.2.0.873-34.git4c1f2d9
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
* Fri Feb 19 2016 Chris Leech <cleech@redhat.com> - 6.2.0.873-33.git4c1f2d9
- sync with upstream
- sysfs handling changes to speed up operations over large number of sessions
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 6.2.0.873-32.git4c9d6f9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Wed Feb 3 2016 Michael Schwendt <mschwendt@fedoraproject.org> - 6.2.0.873-31.git4c9d6f9
- BuildRequires: isns-utils-static for -lisns (bz #1291913)
* Tue Nov 03 2015 Robert Kuska <rkuska@redhat.com> - 6.2.0.873-30.git4c9d6f9
- Rebuilt for Python3.5 rebuild
* Tue Oct 06 2015 Chris Leech <cleech@redhat.com> - 6.2.0.873-29.git4c9d6f9
- rebase with upstream, change Source0 url to github
- build with external isns-utils
* Mon Oct 05 2015 Chris Leech <cleech@redhat.com> - 6.2.0.873-28.git6aa2c9b
- fixed broken multiple trigger scripts, removed old pre-systemd migration triggers
- added libiscsi session API patch (bz #1262279)
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 6.2.0.873-27.git6aa2c9b
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Wed Jun 10 2015 Chris Leech <cleech@redhat.com> - 6.2.0.873-26.git6aa2c9b
- rebase to upstream snapshot
- add patch to improve GIL lock performance in libiscsi
- Split Python 2 and Python 3 bindings out into subpackages
* Wed Jan 28 2015 Chris Leech <cleech@redhat.com> - 6.2.0.873-25.gitc9d830b
- split out session logout on shutdown to a separate service
- 985321 roll up libiscsi patches, update python bindings to support python3
- scriptlets were never split out properly for the iscsiuio subpackage
- fix regression in network interface binding
- created iscsi-shutdown.service to ensure that session cleanup happens
- Add --with-slp=no
- segfault from unexpected netlink event during discovery
- inhibit strict aliasing optimizations in iscsiuio, rpmdiff error
* Thu Oct 23 2014 Chris Leech <cleech@redhat.com> - 6.2.0.873-24.gitc9d830b
- sync with upstream v2.0.873-84-gc9d830b
- ignore iscsiadm return in iscsi.service
- make sure systemd order against remote mounts is correct
- add discovery as a valid mode in iscsiadm.8
- make sure to pass --with-security=no to isns configure
* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 6.2.0.873-23
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 6.2.0.873-22
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Mon Apr 14 2014 Chris Leech <cleech@redhat.com> - 6.2.0.873-21
- boot session handling improvements
- split out iscsiuio into a seperate sub-package
- sync with new upstream additions
- revert change to return code when calling login_portal for sessions
that already exist, as it impacts users scripting around iscsiadm
* Tue Dec 10 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-17
- fix regression in glob use, inappropriate error code escape
- clean up dead node links from discovery when reusing tpgt
* Mon Nov 25 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-16
- fix iscsiuio socket activation
- have systemd start socket units on iscsiadm use, if not already listening
* Sun Sep 15 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-15
- move /sbin to /usr/sbin
- use rpm macros in install rules
* Fri Sep 13 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-14
- fix iscsiuio hardened build and other compiler flags
* Fri Aug 23 2013 Andy Grover <agrover@redhat.com> - 6.2.0.873-13
- Fix patch 0041 to check session != NULL before calling iscsi_sysfs_read_boot()
* Tue Aug 20 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-12
- fix regression in last build, database records can't be accessed
* Mon Aug 19 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-11
- iscsi boot related fixes
make sure iscsid gets started if there are any boot sessions running
add reload target to fix double session problem when restarting from NM
don't rely on session list passed from initrd, never got fully implemented
remove patches related to running iscsid from initrd, possible to revisit later
* Sun Aug 18 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-10
- sync with upstream git, minor context fixes after rebase of out-of-tree patches
- iscsiuio is merged upstream, remove old source archive and patches
- spec cleanups to fix rpmlint issues
* Sun Aug 4 2013 Peter Robinson <pbrobinson@fedoraproject.org> 6.2.0.873-9
- Fix FTBFS, cleanup spec
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 6.2.0.873-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Tue Jun 11 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-7
- Use the systemd tmpfiles service to recreate lockfiles in /var/lock
- 955167 build as a position independent executable
- 894576 fix order of setuid/setgid and drop additional groups
* Tue May 28 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-6
- Don't have iscsiadm scan for autostart record if node db is empty (bug #951951)
* Tue Apr 30 2013 Orion Poplawski <orion@cora.nwra.com> - 6.2.0.873-5
- Fix typo in NM dispatcher script (bug #917058)
* Thu Feb 21 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-4
- build with libkmod support, instead of calling out to modprobe
- enable socket activation by default
* Thu Jan 24 2013 Kalev Lember <kalevlember@gmail.com> - 6.2.0.873-3
- Fix the postun script to not use ldconfig as the interpreter
* Wed Jan 23 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-2
- package iscsi_mark_root_nodes script, it's being referenced by the unit files
* Tue Jan 22 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-1
- rebase to new upstream code
- systemd conversion
- 565245 Fix multilib issues caused by timestamp in doxygen footers
* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 6.2.0.872-19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Tue Feb 14 2012 Mike Christie <mchristi@redhat.com> 6.2.0.872.18
- 789683 Fix boot slow down when the iscsi service is started
(regression added in 6.2.0.872.16 when the nm wait was added).
* Mon Feb 6 2012 Mike Christie <mchristi@redhat.com> 6.2.0.872.17
- 786174 Change iscsid/iscsi service startup, so it always starts
when called.
* Sat Feb 4 2012 Mike Christie <mchristi@redhat.com> 6.2.0.872.16
- 747479 Fix iscsidevs handling of network requirement
* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 6.2.0.872-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Wed Nov 30 2011 Mike Christie <mcrhsit@redhat.com> 6.2.0.872.14
- Fix version string to reflect fedora and not rhel.
* Tue Oct 18 2011 Mike Christie <mcrhsit@redhat.com> 6.2.0.872.13
- Update iscsi tools.
* Sat Apr 30 2011 Hans de Goede <hdegoede@redhat.com> - 6.2.0.872-12
- Change iscsi init scripts to check for networking being actually up, rather
then for NetworkManager being started (#692230)
* Tue Apr 26 2011 Hans de Goede <hdegoede@redhat.com> - 6.2.0.872-11
- Fix iscsid autostarting when upgrading from an older version
(add iscsid.startup key to iscsid.conf on upgrade)
- Fix printing of [ OK ] when successfully stopping iscsid
- systemd related fixes:
- Add Should-Start/Stop tgtd to iscsi init script to fix (re)boot from
hanging when using locally hosted targets
- %%ghost /var/lock/iscsi and contents (#656605)
* Mon Apr 25 2011 Mike Christie <mchristi@redhat.com> 6.2.0.872-10
- Fix iscsi init scripts check for networking being up (#692230)
* Wed Feb 09 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 6.2.0.872-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild