Sync from SUSE:SLFO:Main python-rtslib-fb revision e2f1b1353cfd3969c1f31cac8dab20dc
This commit is contained in:
commit
931f4555ca
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -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
|
18
_service
Normal file
18
_service
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<services>
|
||||||
|
<service name="tar_scm" mode="disabled">
|
||||||
|
<param name="scm">git</param>
|
||||||
|
<param name="url">https://github.com/open-iscsi/rtslib-fb.git</param>
|
||||||
|
<param name="subdir"></param>
|
||||||
|
<param name="filename">python-rtslib-fb</param>
|
||||||
|
<param name="versionformat">@PARENT_TAG@</param>
|
||||||
|
<param name="versionrewrite-pattern">v(\d*\.\d*\.)fb(\d*)</param>
|
||||||
|
<param name="versionrewrite-replacement">\1\2</param>
|
||||||
|
<param name="revision">v2.1.75</param>
|
||||||
|
<param name="changesgenerate">enable</param>
|
||||||
|
</service>
|
||||||
|
<service name="recompress" mode="disabled">
|
||||||
|
<param name="file">*rtslib-fb*.tar</param>
|
||||||
|
<param name="compression">xz</param>
|
||||||
|
</service>
|
||||||
|
<service name="set_version" mode="disabled"/>
|
||||||
|
</services>
|
4
_servicedata
Normal file
4
_servicedata
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<servicedata>
|
||||||
|
<service name="tar_scm">
|
||||||
|
<param name="url">https://github.com/open-iscsi/rtslib-fb.git</param>
|
||||||
|
<param name="changesrevision">5469e71cfc47a5a869dae6bc7c1e0b2db7ae4c6a</param></service></servicedata>
|
BIN
python-rtslib-fb-v2.1.75.tar.xz
(Stored with Git LFS)
Normal file
BIN
python-rtslib-fb-v2.1.75.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
320
python-rtslib-fb.changes
Normal file
320
python-rtslib-fb.changes
Normal file
@ -0,0 +1,320 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Apr 21 12:33:32 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- 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 <mgolub@suse.com>
|
||||||
|
|
||||||
|
- 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 <schubi@suse.de>
|
||||||
|
|
||||||
|
- Use libalternatives instead of update-alternatives.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Nov 7 18:05:32 UTC 2020 - Lee Duncan <lduncan@suse.com>
|
||||||
|
|
||||||
|
- 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 <lduncan@suse.com>
|
||||||
|
|
||||||
|
- 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 <moliver@suse.com>
|
||||||
|
|
||||||
|
- 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 <mcepl@suse.com>
|
||||||
|
|
||||||
|
- 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)
|
||||||
|
|
154
python-rtslib-fb.spec
Normal file
154
python-rtslib-fb.spec
Normal file
@ -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
|
96
rbd-support-disable_emulate_legacy_capacity.patch
Normal file
96
rbd-support-disable_emulate_legacy_capacity.patch
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
From 4e633572ef8a9b07d1ae1252cf4c2b2daf673998 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mykola Golub <mgolub@suse.com>
|
||||||
|
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 <ddiss@suse.de>
|
||||||
|
Signed-off-by: Mykola Golub <mgolub@suse.com>
|
||||||
|
---
|
||||||
|
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
|
||||||
|
|
154
rbd-support.patch
Normal file
154
rbd-support.patch
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
From 9496352d515b9f440b68c8534e41899cf1a9570e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mike Christie <mchristi@redhat.com>
|
||||||
|
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 <ddiss@suse.de>
|
||||||
|
---
|
||||||
|
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 = {}
|
@ -0,0 +1,65 @@
|
|||||||
|
From 10f23379b2d3e2226782e2d6185bee22cc586170 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lee Duncan <lduncan@suse.com>
|
||||||
|
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
|
||||||
|
|
18
rtslib-target-service-for-suse.patch
Normal file
18
rtslib-target-service-for-suse.patch
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user