commit 931f4555ca845f296be704b37a9af1c014ecd08d3d177fa2f7805c0586e3bd4c Author: Adrian Schröter Date: Fri May 3 22:54:08 2024 +0200 Sync from SUSE:SLFO:Main python-rtslib-fb revision e2f1b1353cfd3969c1f31cac8dab20dc diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/_service b/_service new file mode 100644 index 0000000..7aab0f8 --- /dev/null +++ b/_service @@ -0,0 +1,18 @@ + + + git + https://github.com/open-iscsi/rtslib-fb.git + + python-rtslib-fb + @PARENT_TAG@ + v(\d*\.\d*\.)fb(\d*) + \1\2 + v2.1.75 + enable + + + *rtslib-fb*.tar + xz + + + diff --git a/_servicedata b/_servicedata new file mode 100644 index 0000000..ee57292 --- /dev/null +++ b/_servicedata @@ -0,0 +1,4 @@ + + + https://github.com/open-iscsi/rtslib-fb.git + 5469e71cfc47a5a869dae6bc7c1e0b2db7ae4c6a \ No newline at end of file diff --git a/python-rtslib-fb-v2.1.75.tar.xz b/python-rtslib-fb-v2.1.75.tar.xz new file mode 100644 index 0000000..906694b --- /dev/null +++ b/python-rtslib-fb-v2.1.75.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc2f5b371f1523c6492063d0973a5ede58cc4c901ce67a5c0fea8e11735ba960 +size 42740 diff --git a/python-rtslib-fb.changes b/python-rtslib-fb.changes new file mode 100644 index 0000000..a57fb7d --- /dev/null +++ b/python-rtslib-fb.changes @@ -0,0 +1,320 @@ +------------------------------------------------------------------- +Fri Apr 21 12:33:32 UTC 2023 - Dirk Müller + +- add sle15_python_module_pythons (jsc#PED-68) + +------------------------------------------------------------------- +Fri May 06 16:54:21 UTC 2022 - lduncan@suse.com + +- Update to version v2.1.75: (bsc#1206720) + * version 2.1.75 + * rtslib: fix missing ':' after else statement + * dbroot: let the user change the dbroot directory freely. + * handle target kernel module new attribute cpus_allowed_list + * fix "This _Backstore already exists in configFS" exception + * Check whether the enable attribute exists before fread + * Filter fabric wwns by reading driver name + * Add support of efct fabric driver + * tcmu: add support for config param data_pages_per_blk + * Relax restrictions on TPG Tag range + * rtslib: Use O_RDWR for sg devices alone. + +------------------------------------------------------------------- +Sun Jan 30 17:07:00 UTC 2022 - Mykola Golub + +- Update parameters description in rbd-support.patch +- Add rbd-support-disable_emulate_legacy_capacity.patch (bsc#1199090) + +------------------------------------------------------------------- +Thu Sep 30 19:14:14 UTC 2021 - Stefan Schubert + +- Use libalternatives instead of update-alternatives. + +------------------------------------------------------------------- +Sat Nov 7 18:05:32 UTC 2020 - Lee Duncan + +- Fixed issue in SPEC file w/r/t package split with common. + Now, packages python3-rtslib-fb and python-rtslib-fb-common + are built, and the former depends on the latter. The common + package has the non-python parts (documentation, etc), + and the python3-* part the python parts. + +------------------------------------------------------------------- +Fri Oct 23 18:20:23 UTC 2020 - Lee Duncan + +- Split package into "common" part, python-rtslib-fb-common, which + is python-verserion-agnostic, and either python2-rtslib-comon-fb + or python3-rtslib-fb. This maens common files, like man pages, + don't have to be duplicated. + +------------------------------------------------------------------- +Fri Oct 16 18:47:04 UTC 2020 - lduncan@suse.com + +- Update to version v2.1.74: + * version 2.1.74 + * rtslib: safely call shutil.copy() + * Fix fail when target_core_mod doesn't exists + * Fix EPERM errors with scsi_generic devices + Also, add this commit submitted upstream: + * rtslib-Fix-handling-of-sysfs-RW-attrs-that-are-actually-RO.patch + And this commit for SUSE: + * rtslib-target-service-for-suse.patch + Lastly, this package now installs systemd unit file target.service, + which will replace eventually targetcli.service (from the + targetcli-fb package), since this matches how upstream works. + This also meant updating the SPEC file. + +------------------------------------------------------------------- +Thu Aug 27 02:10:59 UTC 2020 - Matthew Oliver + +- Updated the rbd-support.patch (bsc#1175808): + * Fixed the signiture of the RBDStorageObject to match changes made + to parent StorageObject class. + +------------------------------------------------------------------- +Tue Jun 30 17:49:04 UTC 2020 - lduncan@suse.com + +- Update to version v2.1.73 (bsc#1173257 CVE-2020-14019): + * version 2.1.73 + * save_to_file: fix fd open mode + * saveconfig: copy temp configfile with permissions + * saveconfig: open the temp configfile with modes set + * Fix "is not" with a literal SyntaxWarning + * Fix an incorrect config path in two comments + * version 2.1.72 + * Do not change dbroot after drivers have been registered + * Remove '_if_needed' from RTSRoot._set_dbroot()'s name + Replacing old tarball with python-rtslib-fb-v2.1.73.tar.xz + +------------------------------------------------------------------- +Tue Mar 03 15:46:53 UTC 2020 - lduncan@suse.com + +- Update to version v2.1.71 (jre#SLE-7751): + * version 2.1.71 + * restoreconfig: fix skipping of targets [re]loading + Replacing python-rtslib-fb-v2.1.70.tar.xz with python-rtslib-fb-v2.1.71.tar.xz + +------------------------------------------------------------------- +Mon Sep 16 18:14:18 UTC 2019 - lduncan@suse.com + +- Update to version v2.1.70: + * version 2.1.70 + * restoreconfig: add ability to restore/reload single target or storage_object + * rtslib: fix __version__ + * saveconfig: add hw_block_size support in control string + * remove extra semicolons in _get_saveconf + * Add 'readable' param to Group list_*() methods + * Handle write-only parameters like attributes + * save_to_file() function breaks symbolic link when saving configuration + * Handle write-only attributes. + * Allow bs_cache to be bypassed + * report the correct size for partitions + * restoreconfig: support restore when list is non-empty + Replacing python-rtslib-fb-2.1.69.tar.xz with python-rtslib-fb-v2.1.70.tar.xz, + and removing patches: + * 0001-Handle-write-only-attributes.patch + * 0002-Handle-write-only-parameters-like-attributes.patch + * 0003-Add-readable-param-to-Group-list_-methods.patch + +------------------------------------------------------------------- +Mon Feb 18 17:56:57 UTC 2019 - lduncan@suse.com + +- Added 3 patches subbmitted and accepted upstream, to deal with + possibly-write-only sysfs attributes (bsc#1123933), adding: + * 0001-Handle-write-only-attributes.patch + * 0002-Handle-write-only-parameters-like-attributes.patch + * 0003-Add-readable-param-to-Group-list_-methods.patch + +------------------------------------------------------------------- +Fri Dec 7 09:29:54 UTC 2018 - ddiss@suse.com + +- Enable RBD support for SLE/Leap 15+ (bsc#1118516) + +------------------------------------------------------------------- +Tue Dec 4 12:54:00 UTC 2018 - Matej Cepl + +- Remove superfluous devel dependency for noarch package + +------------------------------------------------------------------- +Thu Oct 18 23:27:42 UTC 2018 - opensuse-packaging@opensuse.org + +- Update to version 2.1.69: + * version 2.1.fb69 + * fix compiler warning + * version 2.1.fb68 + * Fix typo + * - remove underscore in hostname + * tcm: allow to enable asynchronous I/O for file backing stores + * saveconfig: way for block-level save with delete command + * saveconfig: fix missing import + * saveconfig: handle no attr exception in _parse_info() + * saveconfig: fix failure in absence of save file + * saveconfig: dump control string containing control=value tuples + * restoreconfig: fix alua tpg config setup + * tcmu: add control constructor arg + * save_to_file: support saveconfig at storage object level + * Allow creating more than 256 LUNs per target + * Ship a systemd service file + Which replaces python-rtslib-fb-2.1.67.tar.xz with + python-rtslib-fb-2.1.69.tar.xz, and updates the SPEC file as well. + +------------------------------------------------------------------- +Tue Apr 10 16:03:33 UTC 2018 - ddiss@suse.com + +- Merge RBD support from non-fb version (bsc#1079329) + + rbd-support.patch (SLE/Leap only, due to LIO kernel dependency) + + Add explicit Provides for "python-rtslib-rbd" + +------------------------------------------------------------------- +Tue Apr 10 12:41:16 UTC 2018 - ddiss@suse.com + +- Automatically generate version string from upstream tag + + Retain current fb-removed version format used + + Rename rtslib-fb-2.1.fb67.tar.xz to python-rtslib-fb-2.1.67.tar.xz and + cleanup hardcoded duplicate name/version values in spec + +------------------------------------------------------------------- +Mon Apr 09 21:41:01 UTC 2018 - lduncan@suse.com + +- Update to version 2.1.fb67: + * Add missing dependency on six in setup.py + * Display a more meaningful error when targetcli cannot change "dbroot" + * Raise an error about failing to change the dbroot value only if the directory does not exist + * More compatibility syntax for legacy distros + * Remove hba-only directories in clear_existing() + * Correct name for Xen pvscsi + * version 2.1.fb65 + * Fix unqualified reference to pyudev.Device + * version 2.1.fb66 + * create: remove stale hba-only dir + * version 2.1.fb67 +- This replaced rtslib-fb-2.1.fb64.tar.xz with + rtslib-fb-2.1.fb67.tar.xz, and it also removed + the patch correct-name-for-xen-pvscsi.patch, + since it is already in the updated tarball + +------------------------------------------------------------------- +Sun Feb 25 08:09:45 UTC 2018 - olaf@aepfle.de + +- Fix upgrade path by provide/obsolete python-rtslib (bsc#1082693) + +------------------------------------------------------------------- +Wed Jan 24 18:43:43 UTC 2018 - lduncan@suse.com + +- Fix incorrect naming for XEN (bsc#1076455), adding patch: + * correct-name-for-xen-pvscsi.patch + +------------------------------------------------------------------- +Tue Jan 9 14:37:15 UTC 2018 - tchvatal@suse.com + +- Fix the conflict to the rtslib properly + +------------------------------------------------------------------- +Wed Jan 3 16:13:57 UTC 2018 - tchvatal@suse.com + +- Drop the epydoc dependency/documentation generating from the package + to allow building in py3 only enviroment + +------------------------------------------------------------------- +Sun Dec 10 21:14:08 UTC 2017 - lduncan@suse.com + +- Converting RPM SPEC file to singlespec format (bsc#1045332), + updating SPEC file only. +- ran 'spec-cleaner' on SPEC file to clean it up. +- Converted from manually-added rtslib-fb-2.1.fb64.tar.gz to + tar_scm service-retrieved rtslib-fb-2.1.fb64.tar.xz + +------------------------------------------------------------------- +Thu Aug 17 08:03:10 UTC 2017 - lszhu@suse.com + +- Update to version 2.1.fb64 + *Improve ALUA and TCMU support, as well as moving the default + directory for APTPL files from /var/target to /etc/target + for better FHS compliance. + *Remove patch Switch-target-driver-DB-root-dir-to-etc-target.patch + from the spec file because upstream already has this change. + +------------------------------------------------------------------- +Thu Jun 8 21:37:20 UTC 2017 - lduncan@suse.com + +- Enable Persistent Reservations (bsc#1042944): + * Add patch Switch-target-driver-DB-root-dir-to-etc-target.patch + * Add /etc/target/pr and /etc/target/alua to SPEC file + +------------------------------------------------------------------- +Thu Apr 13 07:11:02 UTC 2017 - hare@suse.com + +- Update to version 2.1.63 (bsc#1032833): + * Get/Set LUN's ALUA group + * Add ALUA restore support + * Delete ALUA groups with its storage object + * version 2.1.fb62 + * Do not set alua_tg_pt_gp if not supported + * Add ability to invalidate caches + * Add ALUA supported method + * Don't raise exception when getting/setting a LUNs ALUA group + * update to 2.1.fb63 + +------------------------------------------------------------------- +Fri Jun 24 23:12:29 UTC 2016 - lduncan@suse.com + +- Updated spec file: Removed Provides/Obsoletes for python-rtslib, + and added Conflicts for same (bsc#986475) + +------------------------------------------------------------------- +Tue Jun 14 17:12:34 UTC 2016 - lduncan@suse.com + +- Fixing build issue: removed 'noarch' from main package + +------------------------------------------------------------------- +Tue Jun 14 17:12:33 UTC 2016 - lduncan@suse.com + +- Updated SPEC file: + * added Requires for pyudev (bsc#984563) + * removed BuildRequires of pyudev for doc sub-package + +------------------------------------------------------------------- +Wed Apr 20 16:17:30 UTC 2016 - lduncan@suse.com + +- Update to version 2.1.fb60 + * no changelog available, but git log shows 59 changes, + some trivial + +------------------------------------------------------------------- +Tue May 12 14:58:13 UTC 2015 - benoit.monin@gmx.fr + +- update to version 2.1.51: + * no changelog available + +------------------------------------------------------------------- +Wed Sep 3 12:01:09 UTC 2014 - dmueller@suse.com + +- update to 2.1.49: + * Improve error message when NetworkPortal restore fails + * Python 3.x porting fixes + * targetctl: A missing restore file is not an error + * Add a message if no configfile is found + * Add StorageObjectFactory + * Convert all exceptions in set_parameter/attribute to RTSLibError + * Change set_parameters/attributes to take an err_func + * Fix missing err_func parameter to set_attributes + * '!' allowed character in block and partition names + * Don't add to cache if cfs create fails + * Don't lower-case return values from _parse_info functions + +------------------------------------------------------------------- +Tue Jan 14 14:57:28 UTC 2014 - speilicke@suse.com + +- Conflict with python-rtslib + +------------------------------------------------------------------- +Mon Jan 13 13:25:15 UTC 2014 - dmueller@suse.com + +- update to 2.1.43: + * various bugfixes + +------------------------------------------------------------------- +Mon Oct 28 12:21:13 UTC 2013 - dmueller@suse.com + +- Initial package (2.1.40) + diff --git a/python-rtslib-fb.spec b/python-rtslib-fb.spec new file mode 100644 index 0000000..c48339e --- /dev/null +++ b/python-rtslib-fb.spec @@ -0,0 +1,154 @@ +# +# spec file for package python-rtslib-fb +# +# Copyright (c) 2023 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%if 0%{?suse_version} > 1500 +%bcond_without libalternatives +%else +%bcond_with libalternatives +%endif + +%define dbdir %{_sysconfdir}/target +%{?!python_module:%define python_module() python-%{**} python3-%{**}} +%{?sle15_python_module_pythons} +Name: python-rtslib-fb +Version: 2.1.75 +Release: 0%{?dist} +Summary: API for Linux kernel SCSI target (aka LIO) +License: Apache-2.0 +Group: Development/Languages/Python +URL: https://github.com/open-iscsi/rtslib-fb.git +Source: python-rtslib-fb-v%{version}.tar.xz +Patch1: rbd-support.patch +Patch2: rtslib-Fix-handling-of-sysfs-RW-attrs-that-are-actually-RO.patch +Patch3: rtslib-target-service-for-suse.patch +Patch4: rbd-support-disable_emulate_legacy_capacity.patch +BuildRequires: %{python_module pyudev} +BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module six} +BuildRequires: fdupes +BuildRequires: python-rpm-macros >= 20210929 +Requires: python-pyudev +%define oldpython python +%define cpkg %{oldpython}-rtslib-fb-common +Requires: %{cpkg} +%if %{with libalternatives} +Requires: alts +BuildRequires: alts +%else +Requires(post): update-alternatives +Requires(postun):update-alternatives +%endif +Provides: python-rtslib = %{version}-%{release} +Obsoletes: python-rtslib < %{version} +%if 0%{?sle_version} >= 150000 +# explicit Provides advertising RBD support +Provides: python-rtslib-rbd = %{version} +Obsoletes: python-rtslib-rbd < %{version} +%endif +BuildArch: noarch + +%python_subpackages + +%description +rtslib-fb is an object-based Python library for configuring the LIO generic +SCSI target, present in 3.x Linux kernel versions. rtslib-fb is licensed under +the Apache 2.0 license. Contributions are welcome + +%package -n %{cpkg} +Summary: Common python-rtslib-fb subpackage for Python 2 or 3 +Group: Development/Languages/Python +Obsoletes: %{name} < %{version}-%{release} + +%description -n %{cpkg} +python-rtslib-fb-common is the invariant base package needed by both +python2-rtslib-fb and python3-rtslib-fb. + +%prep +%setup -q -n python-rtslib-fb-v%{version} +%if 0%{?sle_version} >= 150000 +# RBD support is dependent on LIO changes present in the SLE/Leap kernel +%patch1 -p1 +%patch4 -p1 +%endif +%patch2 -p1 +%patch3 -p1 + +%build +%python_build + +%install +%python_install +%python_clone -a %{buildroot}/%{_bindir}/targetctl +%fdupes %{buildroot} +install -d -m755 %{buildroot}%{_mandir}/man5 +install -m644 doc/saveconfig.json.5 %{buildroot}%{_mandir}/man5 +install -d -m755 %{buildroot}%{_mandir}/man8 +install -m644 doc/targetctl.8 %{buildroot}%{_mandir}/man8 +install -d -m755 %{buildroot}/%{dbdir} +install -d -m755 %{buildroot}/%{dbdir}/pr +install -d -m755 %{buildroot}/%{dbdir}/alua +mkdir -p %{buildroot}/%{_unitdir}/ +install -m644 systemd/target.service %{buildroot}/%{_unitdir} +install -d -m755 %{buildroot}%{_sbindir} +ln -s %{_sbindir}/service %{buildroot}/%{_sbindir}/rctarget + +%post +%python_install_alternative targetctl +%{service_add_post target.service} + +%postun +%python_uninstall_alternative targetctl +%{service_del_postun target.service} + +%pre +%{service_add_pre target.service} +# If libalternatives is used: Removing old update-alternatives entries. +%python_libalternatives_reset_alternative targetctl + +%preun +%{stop_on_removal target} +%{service_del_preun target.service} + +%post -n %{cpkg} +%{service_add_post target.service} + +%postun -n %{cpkg} +%{service_del_postun target.service} + +%pre -n %{cpkg} +%{service_add_pre target.service} + +%preun -n %{cpkg} +%{service_del_preun target.service} + +%files %{python_files} +%python_alternative %{_bindir}/targetctl +%{python_sitelib}/* + +%files -n %{cpkg} +%license COPYING +%doc README.md +%dir %{dbdir} +%dir %{dbdir}/pr +%dir %{dbdir}/alua +%{_unitdir}/target.service +%{_sbindir}/rctarget +%doc %{_mandir}/man5/saveconfig.json.5.gz +%doc %{_mandir}/man8/targetctl.8.gz + +%changelog diff --git a/rbd-support-disable_emulate_legacy_capacity.patch b/rbd-support-disable_emulate_legacy_capacity.patch new file mode 100644 index 0000000..56d757f --- /dev/null +++ b/rbd-support-disable_emulate_legacy_capacity.patch @@ -0,0 +1,96 @@ +From 4e633572ef8a9b07d1ae1252cf4c2b2daf673998 Mon Sep 17 00:00:00 2001 +From: Mykola Golub +Date: Thu, 3 Feb 2022 18:40:47 +0000 +Subject: [PATCH] disable emulate_legacy_capacity on creating RBD backstore + +When rbd image has object-map feature set, `enable` will fail +unless emulate_legacy_capacity (default is 1) is set to 0. + +Provide a possibility to disable emulate_legacy_capacity when +creating backstore (before enabling it) via additional +disable_emulate_legacy_capacity parameter. + +We might eventually want to merge the rbd support patches into one, +but right now keeping them separate looks useful for tracking the +change (feature) added here. + +This patch is for the changes added by "rbd support" patch +(rbd-support.patch) and thus it is not needed upstream until +the rbd support is added upstream. + +Eventualy we might want to merge this and "rbd support" patches +into one. For now it looks useful to keep it separate to track +the change (feature) added by this patch. + +ceph-iscsi needs this change to support rbd images with +object-map feature enabled. + +Reviewed-by: David Disseldorp +Signed-off-by: Mykola Golub +--- + rtslib/tcm.py | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/rtslib/tcm.py b/rtslib/tcm.py +index d42a78f..3bf599d 100644 +--- a/rtslib/tcm.py ++++ b/rtslib/tcm.py +@@ -809,7 +809,8 @@ class RBDStorageObject(StorageObject): + # RBDStorageObject private stuff + + def __init__(self, name, dev=None, wwn=None, readonly=False, +- write_back=False, index=None): ++ write_back=False, index=None, ++ disable_emulate_legacy_capacity=False): + ''' + A RBDIOStorageObject can be instantiated in two ways: + - B{Creation mode}: If I{dev} is specified, the underlying configFS +@@ -822,6 +823,10 @@ class RBDStorageObject(StorageObject): + I{name}. The underlying configFS object must already exist in + that mode, or instantiation will fail. + ++ Note, setting disable_emulate_legacy_capacity to True is dangerous ++ for any image that has previously been iSCSI exported with ++ emulate_legacy_capacity enabled. ++ + @param name: The name of the RBDIOStorageObject. + @type name: string + @param dev: The path to the backend rbd device to be used. +@@ -835,20 +840,23 @@ class RBDStorageObject(StorageObject): + @type readonly: boolean + @param write_back: Enable write back cache. + @type write_back: boolean ++ @param disable_emulate_legacy_capacity: Disable emulate_legacy_capacity mode. ++ @type disable_emulate_legacy_capacity: boolean + @return: A RBDIOStorageObject object. + ''' + + if dev is not None: + super(RBDStorageObject, self).__init__(name, 'create', index) + try: +- self._configure(dev, wwn, readonly) ++ self._configure(dev, wwn, readonly, ++ disable_emulate_legacy_capacity) + except: + self.delete() + raise + else: + super(RBDStorageObject, self).__init__(name, 'lookup', index) + +- def _configure(self, dev, wwn, readonly): ++ def _configure(self, dev, wwn, readonly, disable_emulate_legacy_capacity): + self._check_self() + if get_blockdev_type(dev) != 0: + raise RTSLibError("Device %s is not a TYPE_DISK rbd device" % dev) +@@ -858,6 +866,8 @@ class RBDStorageObject(StorageObject): + self._set_udev_path(dev) + self._control("udev_path=%s" % dev) + self._control("readonly=%d" % readonly) ++ if disable_emulate_legacy_capacity: ++ self.set_attribute("emulate_legacy_capacity", 0) + self._enable() + + super(RBDStorageObject, self)._configure(wwn) +-- +2.33.1 + diff --git a/rbd-support.patch b/rbd-support.patch new file mode 100644 index 0000000..295f7ba --- /dev/null +++ b/rbd-support.patch @@ -0,0 +1,154 @@ +From 9496352d515b9f440b68c8534e41899cf1a9570e Mon Sep 17 00:00:00 2001 +From: Mike Christie +Date: Wed, 29 Jul 2015 04:28:02 -0500 +Subject: [PATCH] rbd support + +rtslib-fb-rbd-support.patch obtained from: +https://marc.info/?l=ceph-devel&m=143816209010058 + +Reviewed-by: David Disseldorp +--- + rtslib/__init__.py | 1 + rtslib/tcm.py | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 104 insertions(+) + +--- a/rtslib/__init__.py ++++ b/rtslib/__init__.py +@@ -32,6 +32,7 @@ from .fabric import FabricModule + + from .tcm import FileIOStorageObject, BlockStorageObject + from .tcm import PSCSIStorageObject, RDMCPStorageObject, UserBackedStorageObject ++from .tcm import RBDStorageObject + from .tcm import StorageObjectFactory + + from .alua import ALUATargetPortGroup +--- a/rtslib/tcm.py ++++ b/rtslib/tcm.py +@@ -801,6 +801,111 @@ class BlockStorageObject(StorageObject): + d['dev'] = self.udev_path + return d + ++class RBDStorageObject(StorageObject): ++ ''' ++ An interface to configFS storage objects for RBD backstore. ++ ''' ++ ++ # RBDStorageObject private stuff ++ ++ def __init__(self, name, dev=None, wwn=None, readonly=False, ++ write_back=False, index=None): ++ ''' ++ A RBDIOStorageObject can be instantiated in two ways: ++ - B{Creation mode}: If I{dev} is specified, the underlying configFS ++ object will be created with that parameter. ++ No RBDIOStorageObject with the same I{name} can pre-exist in ++ the parent Backstore in that mode. ++ - B{Lookup mode}: If I{dev} is not set, then the ++ RBDIOStorageObject will be bound to the existing configFS ++ object in the parent Backstore having the specified ++ I{name}. The underlying configFS object must already exist in ++ that mode, or instantiation will fail. ++ ++ @param name: The name of the RBDIOStorageObject. ++ @type name: string ++ @param dev: The path to the backend rbd device to be used. ++ - Example: I{dev="/dev/sda"}. ++ - The only device type that is accepted I{TYPE_DISK}. ++ For other device types, use pscsi. ++ @type dev: string ++ @param wwn: T10 WWN Unit Serial, will generate if None ++ @type wwn: string ++ @param readonly: Use to read only. ++ @type readonly: boolean ++ @param write_back: Enable write back cache. ++ @type write_back: boolean ++ @return: A RBDIOStorageObject object. ++ ''' ++ ++ if dev is not None: ++ super(RBDStorageObject, self).__init__(name, 'create', index) ++ try: ++ self._configure(dev, wwn, readonly) ++ except: ++ self.delete() ++ raise ++ else: ++ super(RBDStorageObject, self).__init__(name, 'lookup', index) ++ ++ def _configure(self, dev, wwn, readonly): ++ self._check_self() ++ if get_blockdev_type(dev) != 0: ++ raise RTSLibError("Device %s is not a TYPE_DISK rbd device" % dev) ++ if is_dev_in_use(dev): ++ raise RTSLibError("Cannot configure StorageObject because " ++ + "device %s is already in use" % dev) ++ self._set_udev_path(dev) ++ self._control("udev_path=%s" % dev) ++ self._control("readonly=%d" % readonly) ++ self._enable() ++ ++ super(RBDStorageObject, self)._configure(wwn) ++ ++ def _get_major(self): ++ self._check_self() ++ return int(self._parse_info('Major')) ++ ++ def _get_minor(self): ++ self._check_self() ++ return int(self._parse_info('Minor')) ++ ++ def _get_size(self): ++ # udev_path doesn't work here, what if LV gets renamed? ++ return get_size_for_disk_name(self._parse_info('device')) * int(self._parse_info('SectorSize')) ++ ++ def _get_wb_enabled(self): ++ self._check_self() ++ return bool(int(self.get_attribute("emulate_write_cache"))) ++ ++ def _get_readonly(self): ++ self._check_self() ++ # 'readonly' not present before kernel 3.6 ++ try: ++ return bool(int(self._parse_info('readonly'))) ++ except AttributeError: ++ return False ++ ++ # RBDStorageObject public stuff ++ ++ major = property(_get_major, ++ doc="Get the block device major number") ++ minor = property(_get_minor, ++ doc="Get the block device minor number") ++ size = property(_get_size, ++ doc="Get the block device size") ++ write_back = property(_get_wb_enabled, ++ doc="True if write-back, False if write-through (write cache disabled)") ++ readonly = property(_get_readonly, ++ doc="True if the device is read-only, False if read/write") ++ ++ def dump(self): ++ d = super(RBDStorageObject, self).dump() ++ d['write_back'] = self.write_back ++ d['readonly'] = self.readonly ++ d['wwn'] = self.wwn ++ d['dev'] = self.udev_path ++ return d + + class UserBackedStorageObject(StorageObject): + ''' +@@ -940,6 +1041,7 @@ so_mapping = { + "fileio": FileIOStorageObject, + "iblock": BlockStorageObject, + "block": BlockStorageObject, ++ "rbd": RBDStorageObject, + "user": UserBackedStorageObject, + } + +@@ -950,6 +1052,7 @@ bs_params = { + FileIOStorageObject: dict(name='fileio'), + BlockStorageObject: dict(name='block', alt_dirprefix='iblock'), + UserBackedStorageObject: dict(name='user'), ++ RBDStorageObject: dict(name='rbd'), + } + + bs_cache = {} diff --git a/rtslib-Fix-handling-of-sysfs-RW-attrs-that-are-actually-RO.patch b/rtslib-Fix-handling-of-sysfs-RW-attrs-that-are-actually-RO.patch new file mode 100644 index 0000000..aa54ee1 --- /dev/null +++ b/rtslib-Fix-handling-of-sysfs-RW-attrs-that-are-actually-RO.patch @@ -0,0 +1,65 @@ +From 10f23379b2d3e2226782e2d6185bee22cc586170 Mon Sep 17 00:00:00 2001 +From: Lee Duncan +Date: Thu, 15 Oct 2020 14:21:20 -0700 +Subject: [PATCH] Fix handling of sysfs RW attrs that are actually RO + +Kernel commit 356ba2a8bc8d ("scsi: target: tcmu: Make +gr_support and alua_support attributes writable"), made the +alua_support and pgr_support sysfs attributes writable +so that individual target drivers could change them. +This means that the filesystem attributes might saw +read-write, but the attributes can in fact be read-only. +When a user tries to write to them, in this case, +they EINVAL. + +This causes rtslib to throw error messages when one does +a "targetctl restore" like these: + +> Storage Object fileio/file01: Cannot set attribute alua_support: [Errno 22] Invalid argument, skipped +> Storage Object fileio/file01: Cannot set attribute pgr_support: [Errno 22] Invalid argument, skipped + +While these messages are benign, they will cause confusion, since +(1) there's nothing wrong, and (2) they didn't occur before above- +mentioned kernel commit. + +This fix tells rtslib to ignore errno 22 for these two attributes. +--- + rtslib/node.py | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/rtslib/node.py b/rtslib/node.py +index 415f45d675f9..ed08030002bb 100644 +--- a/rtslib/node.py ++++ b/rtslib/node.py +@@ -20,6 +20,7 @@ under the License. + + import os + import stat ++import errno + from .utils import fread, fwrite, RTSLibError, RTSLibNotInCFS + + +@@ -28,6 +29,10 @@ class CFSNode(object): + # Where is the configfs base LIO directory ? + configfs_dir = '/sys/kernel/config/target' + ++ # these two attributes can have file permissions of ++ # read-write but be read-only ++ may_be_ro_attrs = ['alua_support', 'pgr_support'] ++ + # CFSNode private stuff + + def __init__(self): +@@ -172,7 +177,8 @@ class CFSNode(object): + try: + fwrite(path, "%s" % str(value)) + except Exception as e: +- raise RTSLibError("Cannot set attribute %s: %s" % (attribute, e)) ++ if attribute not in self.may_be_ro_attrs or e.errno != errno.EINVAL: ++ raise RTSLibError("Cannot set attribute %s: %s" % (attribute, e)) + + def get_attribute(self, attribute): + ''' +-- +2.26.2 + diff --git a/rtslib-target-service-for-suse.patch b/rtslib-target-service-for-suse.patch new file mode 100644 index 0000000..0bfca99 --- /dev/null +++ b/rtslib-target-service-for-suse.patch @@ -0,0 +1,18 @@ +--- a/systemd/target.service 2019-01-31 11:11:28.517558290 -0800 ++++ b/systemd/target.service 2020-10-16 09:34:28.888091013 -0700 +@@ -6,10 +6,13 @@ After=sys-kernel-config.mount network.ta + [Service] + Type=oneshot + RemainAfterExit=yes +-ExecStart=/usr/bin/targetctl restore ++Environment=CONFIG_FILE=/etc/target/saveconfig.json ++EnvironmentFile=-/etc/sysconfig/target ++ExecStart=/usr/bin/targetctl restore $CONFIG_FILE ++ExecStop=/usr/bin/targetctl save $CONFIG_FILE + ExecStop=/usr/bin/targetctl clear + SyslogIdentifier=target + + [Install] + WantedBy=multi-user.target +- ++Alias=targetcli.service