Blob Blame Raw
%global open_iscsi_version	2.0
%global open_iscsi_build	873
%global checkout		6aa2c9b

Summary: iSCSI daemon and utility programs
Name: iscsi-initiator-utils
Version: 6.%{open_iscsi_version}.%{open_iscsi_build}
Release: 28.git%{checkout}%{?dist}
Group: System Environment/Daemons
License: GPLv2+

Source4: 04-iscsi
Source5: iscsi-tmpfiles.conf

# upstream patches, post last tagged version
Patch1: 0001-sync-to-2.0.873-134-g6aa2c9b.patch
Patch2: 0002-idmb_rec_write-check-for-tpgt-first.patch
Patch3: 0003-idbm_rec_write-seperate-old-and-new-style-writes.patch
Patch4: 0004-idbw_rec_write-pick-tpgt-from-existing-record.patch
Patch5: 0005-update-systemd-service-files-add-iscsi.service-for-s.patch
Patch6: 0006-iscsi-boot-related-service-file-updates.patch
Patch7: 0007-update-initscripts-and-docs.patch
Patch8: 0008-use-var-for-config.patch
Patch9: 0009-use-red-hat-for-name.patch
Patch10: 0010-libiscsi.patch
Patch11: 0011-remove-the-offload-boot-supported-ifdef.patch
Patch12: 0012-iscsiuio-systemd-unit-files.patch
Patch13: 0013-disable-iscsid.startup-from-iscsiadm-prefer-systemd-.patch
Patch14: 0014-Don-t-check-for-autostart-sessions-if-iscsi-is-not-u.patch
Patch15: 0015-start-socket-listeners-on-iscsiadm-command.patch
Patch16: 0016-Revert-iscsiadm-return-error-when-login-fails.patch
Patch17: 0017-update-handling-of-boot-sessions.patch
Patch18: 0018-update-iscsi.service-for-boot-session-recovery.patch
Patch19: 0019-updates-to-iscsi.service.patch
Patch20: 0020-make-session-shutdown-a-seperate-service.patch.patch
Patch22: 0022-honor-all-requested-delays-in-iscsi_sched_ev_context.patch
Patch23: 0023-Add-macros-to-release-GIL-lock.patch
Patch24: 0024-libiscsi-introduce-sessions-api.patch
# ugly version string patch, should change with every rebuild
Patch9999: 9999-use-Red-Hat-version-string-to-match-RPM-package-vers.patch

BuildRequires: flex bison python2-devel python3-devel python-setuptools doxygen kmod-devel systemd-units
BuildRequires: autoconf automake libtool libmount-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)$

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.

%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}.

%package -n python-%{name}
Summary: Python %{python2_version} bindings to %{name}
Group: Development/Libraries

%description -n python-%{name}
The %{name}-python2 package contains Python %{python2_version} bindings to the
libiscsi interface for interacting with %{name}

%package -n python3-%{name}
Summary: Python %{python3_version} bindings to %{name}
Group: Development/Libraries

%description -n python3-%{name}
The %{name}-python3 package contains Python %{python3_version} bindings to the
libiscsi interface for interacting with %{name}

%autosetup -p1 -n open-iscsi-%{open_iscsi_version}-%{open_iscsi_build}

# change exec_prefix, there's no easy way to override
%{__sed} -i -e 's|^exec_prefix = /$|exec_prefix = %{_exec_prefix}|' Makefile


# configure sub-packages from here
# letting the top level Makefile do it will lose setting from rpm
cd iscsiuio
autoreconf --install
cd ..
cd utils/open-isns
%{configure} --with-security=no --with-slp=no
cd ../..

%{__make} OPTFLAGS="%{optflags} %{?__global_ldflags} -DUSE_KMOD -lkmod"
pushd libiscsi
%{__python2} build
%{__python3} build
touch -r libiscsi.doxy html/*

%{__make} DESTDIR=%{?buildroot} install_programs install_doc install_etc
# 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
%{__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/ $RPM_BUILD_ROOT%{_libdir}
%{__ln_s} $RPM_BUILD_ROOT%{_libdir}/
%{__install} -d $RPM_BUILD_ROOT%{_includedir}
%{__install} -pm 644 libiscsi/libiscsi.h $RPM_BUILD_ROOT%{_includedir}

%{__install} -d $RPM_BUILD_ROOT%{python2_sitearch}
%{__install} -d $RPM_BUILD_ROOT%{python3_sitearch}
pushd libiscsi
%{__python2} install --skip-build --root $RPM_BUILD_ROOT
%{__python3} install --skip-build --root $RPM_BUILD_ROOT


%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
	# 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 || :

%post iscsiuio
%systemd_post iscsiuio.service iscsiuio.socket

if [ $1 -eq 1 ]; then
	/bin/systemctl enable iscsiuio.socket >/dev/null 2>&1 || :

%systemd_preun iscsi.service iscsi-shutdown.service iscsid.service iscsiuio.service iscsid.socket iscsiuio.socket

%preun iscsiuio
%systemd_preun iscsiuio.service iscsiuio.socket


%postun iscsiuio

%triggerun -- iscsi-initiator-utils <
# prior to iscsi.service was missing a
# this forces 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
        if [ $? -ne 0 ]; then
            SRC=`/usr/bin/systemctl show --property FragmentPath | cut -d= -f2`
            if [ $SRC != $DST ]; then
                cp $SRC $DST
            sed -i 's/RefuseManualStart=yes/RefuseManualStart=no/' $DST
            /usr/bin/systemctl daemon-reload >/dev/null 2>&1 || :
            /usr/bin/systemctl start >/dev/null 2>&1 || :
# added in
if [ $1 -gt 0 ]; then
    systemctl start iscsi-shutdown.service >/dev/null 2>&1 || :

%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
%dir %{_sysconfdir}/iscsi
%attr(0600,root,root) %config(noreplace) %{_sysconfdir}/iscsi/iscsid.conf

%files iscsiuio
%config(noreplace) %{_sysconfdir}/logrotate.d/iscsiuiolog

%files devel
%doc libiscsi/html

%files -n python-%{name}

%files -n python3-%{name}

* Mon Oct 05 2015 Chris Leech <> -
- 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 <> -
- Rebuilt for

* Wed Jun 10 2015 Chris Leech <> -
- 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 <> -
- 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 <> -
- 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 <> -
- Rebuilt for

* Sat Jun 07 2014 Fedora Release Engineering <> -
- Rebuilt for

* Mon Apr 14 2014 Chris Leech <> -
- 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 <> -
- 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 <> -
- fix iscsiuio socket activation
- have systemd start socket units on iscsiadm use, if not already listening

* Sun Sep 15 2013 Chris Leech <> -
- move /sbin to /usr/sbin
- use rpm macros in install rules

* Fri Sep 13 2013 Chris Leech <> -
- fix iscsiuio hardened build and other compiler flags

* Fri Aug 23 2013 Andy Grover <> -
- Fix patch 0041 to check session != NULL before calling iscsi_sysfs_read_boot()

* Tue Aug 20 2013 Chris Leech <> -
- fix regression in last build, database records can't be accessed

* Mon Aug 19 2013 Chris Leech <> -
- 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 <> -
- 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 <>
- Fix FTBFS, cleanup spec

* Sat Aug 03 2013 Fedora Release Engineering <> -
- Rebuilt for

* Tue Jun 11 2013 Chris Leech <> -
- 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 <> -
- Don't have iscsiadm scan for autostart record if node db is empty (bug #951951)

* Tue Apr 30 2013 Orion Poplawski <> -
- Fix typo in NM dispatcher script (bug #917058)

* Thu Feb 21 2013 Chris Leech <> -
- build with libkmod support, instead of calling out to modprobe
- enable socket activation by default

* Thu Jan 24 2013 Kalev Lember <> -
- Fix the postun script to not use ldconfig as the interpreter

* Wed Jan 23 2013 Chris Leech <> -
- package iscsi_mark_root_nodes script, it's being referenced by the unit files

* Tue Jan 22 2013 Chris Leech <> -
- rebase to new upstream code
- systemd conversion
- 565245 Fix multilib issues caused by timestamp in doxygen footers

* Thu Jul 19 2012 Fedora Release Engineering <> -
- Rebuilt for

* Tue Feb 14 2012 Mike Christie <>
- 789683 Fix boot slow down when the iscsi service is started
  (regression added in when the nm wait was added).

* Mon Feb 6 2012 Mike Christie <>
- 786174 Change iscsid/iscsi service startup, so it always starts
  when called.

* Sat Feb 4 2012 Mike Christie <>
- 747479 Fix iscsidevs handling of network requirement

* Fri Jan 13 2012 Fedora Release Engineering <> -
- Rebuilt for

* Wed Nov 30 2011 Mike Christie <>
- Fix version string to reflect fedora and not rhel.

* Tue Oct 18 2011 Mike Christie <>
- Update iscsi tools.

* Sat Apr 30 2011 Hans de Goede <> -
- 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 <> -
- 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 <>
- Fix iscsi init scripts check for networking being up (#692230)

* Wed Feb 09 2011 Fedora Release Engineering <> -
- Rebuilt for