diff --git a/.fmf/version b/.fmf/version deleted file mode 100644 index d00491f..0000000 --- a/.fmf/version +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/.gitignore b/.gitignore index 9e74667..ddc7f63 100644 --- a/.gitignore +++ b/.gitignore @@ -3,25 +3,3 @@ /targetd-0.2.4.tar.gz /targetd-0.3.tar.gz /targetd-0.3.1.tar.gz -/targetd-0.6.tar.gz -/targetd-0.6.1.tar.gz -/targetd-0.7.tar.gz -/targetd-0.7.1.tar.gz -/targetd-0.7.2.tar.gz -/targetd-0.8.tar.gz -/targetd-0.8.1.tar.gz -/targetd-0.8.2.tar.gz -/targetd-0.8.3.tar.gz -/targetd-0.8.5.tar.gz -/targetd-0.8.6.tar.gz -/targetd-0.8.9.tar.gz -/targetd-0.8.10.tar.gz -/targetd-0.8.11.tar.gz -/targetd-0.8.12.tar.gz -/targetd-0.9.0.tar.gz -/targetd-0.9.1.tar.gz -/targetd-0.10.0.tar.gz -/targetd-0.10.1.tar.gz -/targetd-0.10.2.tar.gz -/targetd-0.10.3.tar.gz -/targetd-0.10.4.tar.gz diff --git a/0001_rtslib_fb_api_fix.patch b/0001_rtslib_fb_api_fix.patch deleted file mode 100644 index 887fd2d..0000000 --- a/0001_rtslib_fb_api_fix.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/targetd/block.py b/targetd/block.py -index b7b03f0..edd47ec 100644 ---- a/targetd/block.py -+++ b/targetd/block.py -@@ -26,10 +26,17 @@ from rtslib_fb import ( - LUN, - MappedLUN, - RTSLibError, -- RTSLibNotInCFS, - NodeACLGroup, - ) - -+# This commit https://github.com/open-iscsi/rtslib-fb/commit/fdd69b1984bac6a6c3f08890bc22267b848a26ac -+# renamed a number of error classes which causes us to do the following -+try: -+ from rtslib_fb import RTSLibNotInCFS -+except ImportError: -+ from rtslib_fb import RTSLibNotInCFSError as RTSLibNotInCFS -+ -+ - from targetd.backends import lvm, zfs - from targetd.main import TargetdError - from targetd.utils import ignored, name_check diff --git a/plans/ci_test.sh b/plans/ci_test.sh deleted file mode 100755 index 8d8bc63..0000000 --- a/plans/ci_test.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/bash - -function _chk -{ - echo "executing: $@" - eval "$@" - local rc=$? - if [ $rc -ne 0 ]; then - echo "Failed: $rc" - # Dump log for targetd - echo "journalctl -u targetd" - journalctl -u targetd - - # On failure dump the audit logs - echo "ausearch ..." - ausearch -i -m avc,user_avc,selinux_err,user_selinux_err -ts recent - exit 1 - fi -} - -if [ "$#" -ne 1 ]; then - echo "Usage: $0 source directory" - exit 1 -fi - -SOURCE_DIR="$1" -BASE=$PWD - -# TODO REMOVE THIS WHEN RAWHIDE PICKS UP -# https://github.com/fedora-selinux/selinux-policy-contrib/pull/334 -_chk setenforce 0 - -# Run the upstream setup script -_chk cd $SOURCE_DIR -_chk ./test/test.sh setup - -# Pick up new changes from setup -_chk systemctl restart targetd - -# Make sure nfs stuff is ok -_chk systemctl start rpcbind -_chk systemctl start nfs-server - -# Try stopping the firewall, but don't fail if this fails -systemctl stop firewalld - -# Give the service a moment to start up. -_chk sleep 10 - -# See if the daemon is up and accepting ... -netstat -anp | grep LISTEN | grep 18700 - -# Go back to start directory and run unit test. -_chk cd $BASE - -SRC="$SOURCE_DIR" -_chk TARGETD_UT_CERTFILE=/etc/target/targetd_cert.pem PYTHONPATH=$SRC python3 $SRC/test/targetd_test.py -v -exit 0 \ No newline at end of file diff --git a/plans/tests.fmf b/plans/tests.fmf deleted file mode 100644 index 6775fd6..0000000 --- a/plans/tests.fmf +++ /dev/null @@ -1,50 +0,0 @@ -summary: targetd gating tests - -provision: - how: virtual - image: fedora - -prepare: - how: install - package: - - targetd - - util-linux - - lvm2 - - procps-ng - - coreutils - - openssl - - btrfs-progs - - audit - - python3-requests - - net-tools-2.0 - - nfs-utils - -discover: - how: shell - dist-git-source: true - dist-git-install-builddeps: true - tests: - - name: upstream test suite - test: | - set -x - if [ -z "$PKG_VER" ]; then - PKG_VER=`rpmspec -q --srpm --qf "%{version}" targetd.spec` - fi - if [ -z "$PKG_VER" ]; then - echo "Error: Unable to extract package version" - exit 1 - fi - - export SRC="$TMT_SOURCE_DIR/targetd-${PKG_VER}" - echo "Source is located: $SRC" - - echo "We are $PWD" - ls -lh - - echo "TMT_SOURCE_DIR is ($TMT_SOURCE_DIR)" - - ./plans/ci_test.sh "$SRC" - -execute: - - how: tmt - diff --git a/sources b/sources index 4dee891..d7dd140 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (targetd-0.10.4.tar.gz) = 3394b0ee2226a4fb7e5f93f1c4e3f7aeeb5a023351b8be3d33f7d5201da4ca4c906cacb437327ceb2fe81c509f654f2fc142457896f8fc43188de8a62af6dcb8 +cf27a2142f7c432171f73d930ffd40ab targetd-0.3.1.tar.gz diff --git a/targetd-require-password.patch b/targetd-require-password.patch new file mode 100644 index 0000000..c2db299 --- /dev/null +++ b/targetd-require-password.patch @@ -0,0 +1,32 @@ +commit bf6e05e1ebb3e36de4e1e5641046a6adc648dd5b +Author: Andy Grover +Date: Tue Apr 16 12:59:31 2013 -0700 + + Fail if password not set in config file + + Signed-off-by: Andy Grover + +diff --git a/targetd b/targetd +index 9e85e16..cd5cb2b 100755 +--- a/targetd ++++ b/targetd +@@ -43,7 +43,7 @@ config_path = "/etc/target/targetd.yaml" + default_config = dict( + pool_name = "vg-targetd", + user = "admin", +- password = "targetd", ++ # security: no default password + target_name = "iqn.2003-01.org.linux-iscsi.%s:targetd" % socket.gethostname(), + ssl = False, + ssl_cert = "/etc/target/targetd_cert.pem", +@@ -64,6 +64,10 @@ if os.getuid() != 0: + print "targetd must run as root." + sys.exit(-1) + ++if not config.get('password', None): ++ print "password not set in %s, aborting" % config_path ++ sys.exit(-1) ++ + # fail early if can't access vg + test_vg = lvm.vgOpen(config['pool_name'], "w") + test_vg.close() diff --git a/targetd-use-std-ssl.patch b/targetd-use-std-ssl.patch new file mode 100644 index 0000000..b3e0596 --- /dev/null +++ b/targetd-use-std-ssl.patch @@ -0,0 +1,54 @@ +diff --git a/targetd b/targetd +index 6e51941..9e85e16 100755 +--- a/targetd ++++ b/targetd +@@ -34,7 +34,7 @@ import yaml + import time + from targetcli import UIRoot + from configshell import ConfigShell +-import tlslite ++import ssl + + setproctitle.setproctitle("targetd") + +@@ -400,31 +400,17 @@ class TargetHandler(BaseHTTPRequestHandler): + class ThreadedHTTPServer(ThreadingMixIn, HTTPServer, object): + """Handle requests in a separate thread.""" + +-class TLSThreadedHTTPServer(tlslite.TLSSocketServerMixIn, ThreadedHTTPServer): ++class TLSThreadedHTTPServer(ThreadedHTTPServer): + """Also use TLS to encrypt the connection""" + +- def __init__(self, *args, **kwargs): +- super(TLSThreadedHTTPServer, self).__init__(*args, **kwargs) +- s = open(config['ssl_cert']).read() +- x509 = tlslite.X509() +- x509.parse(s) +- self.certChain = tlslite.X509CertChain([x509]) +- +- s = open(config['ssl_key']).read() +- self.privateKey = tlslite.parsePEMKey(s, private=True) +- +- self.sessionCache = tlslite.SessionCache() +- +- def handshake(self, tlsConnection): +- try: +- tlsConnection.handshakeServer(certChain=self.certChain, +- privateKey=self.privateKey, +- sessionCache=self.sessionCache) +- tlsConnection.ignoreAbruptClose = True +- return True +- except tlslite.TLSError, error: +- print "Handshake failure:", str(error) +- return False ++ def finish_request(self, sock, addr): ++ sockssl = ssl.wrap_socket( ++ sock, server_side=True, ++ keyfile=config["ssl_key"], ++ certfile=config["ssl_cert"], ++ ciphers="HIGH:-aNULL:-eNULL:-PSK", ++ suppress_ragged_eofs=True) ++ return self.RequestHandlerClass(sockssl, addr, self) + + + if config['ssl']: diff --git a/targetd.service b/targetd.service index a4cf4e9..27ac073 100644 --- a/targetd.service +++ b/targetd.service @@ -1,7 +1,7 @@ [Unit] Description=targetd storage array API daemon -Requires=target.service -After=target.service +Requires=targetcli.service +After=targetcli.service [Service] ExecStart=/usr/bin/targetd diff --git a/targetd.spec b/targetd.spec index 7634f2c..01c0e9f 100644 --- a/targetd.spec +++ b/targetd.spec @@ -1,17 +1,22 @@ Name: targetd -License: GPL-3.0-only +License: GPLv3 +Group: System Environment/Libraries Summary: Service to make storage remotely configurable -Version: 0.10.4 -Release: 10%{?dist} -URL: https://github.com/open-iscsi/targetd -Source: https://github.com/open-iscsi/targetd/archive/v%{version}/targetd-%{version}.tar.gz +Version: 0.3.1 +Release: 5%{?dist} +URL: https://github.com/agrover/targetd +Source: https://github.com/downloads/agrover/%{name}/%{name}-%{version}.tar.gz Source1: targetd.service -Patch1: 0001_rtslib_fb_api_fix.patch +Source2: targetd.yaml +Patch0: targetd-use-std-ssl.patch +Patch1: targetd-require-password.patch BuildArch: noarch -BuildRequires: systemd-rpm-macros -BuildRequires: python3-devel python3-gobject-base python3-blockdev libblockdev-lvm -Requires: python3-PyYAML python3-setproctitle python3-rtslib target-restore -Requires: nfs-utils, btrfs-progs, python3-blockdev, libblockdev-lvm +Requires: targetcli PyYAML python-setproctitle +Requires: python-lvm >= 1.9 +Requires(post): systemd-units +Requires(preun): systemd-units +Requires(postun): systemd-units + %description targetd turns the machine into a remotely-configurable storage appliance. @@ -20,224 +25,51 @@ administrator allocate volumes from an LVM volume group, and export those volumes over iSCSI. %prep -%autosetup -p1 - -%generate_buildrequires -%pyproject_buildrequires +%setup -q +%patch0 -p1 +%patch1 -p1 %build -%pyproject_wheel +gzip --stdout targetd.8 > targetd.8.gz %install +mkdir -p %{buildroot}%{_bindir} mkdir -p %{buildroot}%{_mandir}/man8/ -mkdir -p %{buildroot}%{_mandir}/man5/ mkdir -p %{buildroot}%{_unitdir} mkdir -p %{buildroot}%{_sysconfdir}/target/ +install -m 755 targetd %{buildroot}%{_bindir} install -m 644 %{SOURCE1} %{buildroot}%{_unitdir}/targetd.service -install -m 644 targetd.yaml %{buildroot}%{_sysconfdir}/target/targetd.yaml -install -m 644 targetd.8 %{buildroot}%{_mandir}/man8/ -install -m 644 targetd.yaml.5 %{buildroot}%{_mandir}/man5/ -%pyproject_install -%pyproject_save_files -l targetd - -%check -%pyproject_check_import +install -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/target/targetd.yaml +install -m 644 targetd.8.gz %{buildroot}%{_mandir}/man8/ %post -%systemd_post targetd.service +if [ $1 -eq 1 ] ; then + # Initial installation + /bin/systemctl daemon-reload >/dev/null 2>&1 || : +fi %preun -%systemd_preun targetd.service +if [ $1 -eq 0 ] ; then + # Package removal, not upgrade + /bin/systemctl --no-reload disable targetd.service > /dev/null 2>&1 || : + /bin/systemctl stop targetd.service > /dev/null 2>&1 || : +fi %postun -%systemd_postun_with_restart targetd.service +/bin/systemctl daemon-reload >/dev/null 2>&1 || : +if [ $1 -ge 1 ] ; then + # Package upgrade, not uninstall + /bin/systemctl try-restart targetd.service >/dev/null 2>&1 || : +fi -%files -f %{pyproject_files} +%files %{_bindir}/targetd %{_unitdir}/targetd.service -%doc README.md API.md client -%{_mandir}/man8/targetd.8* -%{_mandir}/man5/targetd.yaml.5* +%doc LICENSE README.md API.md client +%{_mandir}/man8/targetd.8.gz %config(noreplace) %{_sysconfdir}/target/targetd.yaml %changelog -* Fri Sep 19 2025 Python Maint - 0.10.4-10 -- Rebuilt for Python 3.14.0rc3 bytecode - -* Fri Aug 15 2025 Python Maint - 0.10.4-9 -- Rebuilt for Python 3.14.0rc2 bytecode - -* Thu Jul 24 2025 Tony Asleson - 0.10.4-8 -- Workaround for: https://github.com/open-iscsi/rtslib-fb/issues/220 -- Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2383084 - -* Mon Jun 09 2025 Python Maint - 0.10.4-7 -- Rebuilt for Python 3.14 - -* Mon Jun 09 2025 Tony Asleson - 0.10.4-6 -- Use pyproject macros - -* Mon Jun 02 2025 Python Maint - 0.10.4-5 -- Rebuilt for Python 3.14 - -* Sun Jan 19 2025 Fedora Release Engineering - 0.10.4-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Sat Jul 20 2024 Fedora Release Engineering - 0.10.4-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Fri Jun 07 2024 Python Maint - 0.10.4-2 -- Rebuilt for Python 3.13 - -* Tue Mar 12 2024 Tony Asleson - 0.10.4-1 -- New upstream release - -* Sat Jan 27 2024 Fedora Release Engineering - 0.10.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Mon Dec 11 2023 Tony Asleson - 0.10.3-1 -- New upstream release - -* Fri Jul 21 2023 Tony Asleson - 0.10.2-3 -- migrated to SPDX license - -* Mon Jun 26 2023 Python Maint - 0.10.2-2 -- Rebuilt for Python 3.12 - -* Sat Jun 24 2023 Tony Asleson - 0.10.2-1 -- New upstream release which adds libblockdev 3.0 support - -* Thu Jun 15 2023 Tony Asleson - 0.10.1-1 -- New upstream release which includes a fix for python 3.12 - -* Tue Jun 13 2023 Python Maint - 0.10.0-8 -- Rebuilt for Python 3.12 - -* Sat Jan 21 2023 Fedora Release Engineering - 0.10.0-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Sat Jul 23 2022 Fedora Release Engineering - 0.10.0-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Mon Jun 13 2022 Python Maint - 0.10.0-5 -- Rebuilt for Python 3.11 - -* Sat Jan 22 2022 Fedora Release Engineering - 0.10.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Fri Jul 23 2021 Fedora Release Engineering - 0.10.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Fri Jun 04 2021 Python Maint - 0.10.0-2 -- Rebuilt for Python 3.10 - -* Tue Apr 06 2021 Tony Asleson - 0.10.0-1 -- New upstream release - -* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 0.9.1-3 -- Rebuilt for updated systemd-rpm-macros - See https://pagure.io/fesco/issue/2583. - -* Wed Jan 27 2021 Fedora Release Engineering - 0.9.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Tue Dec 1 2020 Tony Asleson - 0.9.1-1 -- New upstream release - -* Thu Sep 10 2020 Tony Asleson - 0.9.0-1 -- New upstream release - -* Wed Jul 29 2020 Fedora Release Engineering - 0.8.12-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Wed Jul 15 2020 Tony Asleson - 0.8.12-1 -- New upstream release - -* Tue May 26 2020 Miro Hrončok - 0.8.11-2 -- Rebuilt for Python 3.9 - -* Tue Feb 25 2020 Tony Asleson - 0.8.11-1 -- New upstream release -- Add man page for targetd.yaml.8 - -* Fri Jan 31 2020 Fedora Release Engineering - 0.8.9-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Mon Nov 25 2019 Tony Asleson - 0.8.9-1 -* Revive package and update to latest upstream release. - -* Tue Jun 19 2018 Miro Hrončok - 0.8.6-5 -- Rebuilt for Python 3.7 - -* Fri Feb 09 2018 Fedora Release Engineering - 0.8.6-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Thu Jul 27 2017 Fedora Release Engineering - 0.8.6-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Wed May 3 2017 Tony Asleson 0.8.6-2 -- Add and correct dependencies - -* Thu Apr 27 2017 Tony Asleson 0.8.6-1 -- New upstream version, bug fixes - -* Thu Feb 16 2017 Tony Asleson 0.8.5-1 -- New upstream version which has python3 support - -* Sat Feb 11 2017 Fedora Release Engineering - 0.8.3-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Tue Jul 19 2016 Fedora Release Engineering - 0.8.3-3 -- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages - -* Fri Feb 05 2016 Fedora Release Engineering - 0.8.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Wed Aug 12 2015 Andy Grover 0.8.3-1 -- New upstream version - -* Tue Jun 23 2015 Andy Grover 0.8.2-1 -- New upstream version - -* Fri Jun 19 2015 Fedora Release Engineering - 0.8.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Wed Feb 11 2015 Andy Grover 0.8.1-1 -- New upstream version - -* Tue Feb 10 2015 Andy Grover 0.8-1 -- New upstream version - -* Sun Jun 08 2014 Fedora Release Engineering - 0.7.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Fri Mar 14 2014 Andy Grover 0.7.2-1 -- New upstream version - -* Mon Feb 10 2014 Andy Grover 0.7.1-1 -- New upstream version - -* Mon Nov 25 2013 Andy Grover 0.7-2 -- Fix service file for new ktarget service name -- Add python-rtslib to requires - -* Fri Nov 8 2013 Andy Grover 0.7-1 -- New upstream version -- Use systemd spec macros - -* Thu Aug 8 2013 Andy Grover 0.6.1-1 -- Update to latest version, make needed changes -- Drop patches: - * require-password.patch - * use-std-ssl.patch -- Change requires from python-lvm to lvm2-python-libs - -* Mon Aug 5 2013 Peter Robinson 0.3.1-7 -- Add systemd to BuildReq to fix FTBFS - -* Sun Aug 04 2013 Fedora Release Engineering - 0.3.1-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - * Tue Apr 16 2013 Andy Grover - 0.3.1-5 - Update require-password.patch - Change target.yaml to not include a commented-out default password diff --git a/targetd.yaml b/targetd.yaml index d12a833..24836aa 100644 --- a/targetd.yaml +++ b/targetd.yaml @@ -1,26 +1,11 @@ # See http://www.yaml.org/spec/1.2/spec.html for more on YAML. -# -# A sample /etc/target/targetd.yaml file. -# # No default password, please pick a good one. password: # defaults below; uncomment and edit -#block_pools: [vg-targetd/thin_pool] # just 1 by default, but can be more - -#zfs_block_pools: [] # you can also use zfs as backend -#zfs_enable_copy: true # Enable if you want copy support, default is false - -#fs_pools: [] # Path to btrfs FS, eg. /my_btrfs_mount +#pool_name: vg-targetd #user: admin -#target_name: iqn.2003-01.org.example.mach1:1234 - -# log level (debug, info, warning, error, critical) -#log_level: info - #ssl: false -# if ssl is activated: -#ssl_cert: /etc/target/targetd_cert.pem -#ssl_key: /etc/target/targetd_key.pem +#target_name: iqn.2003-01.org.example.mach1:1234