diff --git a/0002-remove-check-for-xsltproc.patch b/0002-remove-check-for-xsltproc.patch new file mode 100644 index 0000000..48e588f --- /dev/null +++ b/0002-remove-check-for-xsltproc.patch @@ -0,0 +1,67 @@ +From 0eb1f18cda01673eb3661641351ab6e7ac2644e2 Mon Sep 17 00:00:00 2001 +From: Andy Grover +Date: Wed, 2 Nov 2011 22:15:32 -0700 +Subject: [PATCH] remove check for xsltproc + +It should always be there, since we added libxslt as a BuildRequires. + +Use local stylesheet. + +Signed-off-by: Andy Grover +--- + doc/Makefile | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +diff --git a/doc/Makefile b/doc/Makefile +index 0516dc8..91a51f6 100644 +--- a/doc/Makefile ++++ b/doc/Makefile +@@ -33,35 +33,38 @@ clean: + rm -f $(XMLMAN) $(XMLHTML) + -rm -f manpages htmlpages + ++STYLEMAN = /usr/share/sgml/docbook/xsl-stylesheets/manpages/docbook.xsl ++STYLEHTML = /usr/share/sgml/docbook/xsl-stylesheets/html/docbook.xsl ++ + manpages/tgtd.8: tgtd.8.xml +- -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< ++ $(XSLTPROC) -o $@ $(STYLEMAN) $< + + htmlpages/tgtd.8.html: tgtd.8.xml +- -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< ++ $(XSLTPROC) -o $@ $(STYLEHTML) $< + + manpages/tgtadm.8: tgtadm.8.xml +- -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< ++ $(XSLTPROC) -o $@ $(STYLEMAN) $< + + htmlpages/tgtadm.8.html: tgtadm.8.xml +- -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< ++ $(XSLTPROC) -o $@ $(STYLEHTML) $< + + manpages/tgt-admin.8: tgt-admin.8.xml +- -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< ++ $(XSLTPROC) -o $@ $(STYLEMAN) $< + + htmlpages/tgt-admin.8.html: tgt-admin.8.xml +- -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< ++ $(XSLTPROC) -o $@ $(STYLEHTML) $< + + manpages/tgtimg.8: tgtimg.8.xml +- -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< ++ $(XSLTPROC) -o $@ $(STYLEMAN) $< + + htmlpages/tgtimg.8.html: tgtimg.8.xml +- -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< ++ $(XSLTPROC) -o $@ $(STYLEHTML) $< + + manpages/targets.conf.5: targets.conf.5.xml +- -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< ++ $(XSLTPROC) -o $@ $(STYLEMAN) $< + + htmlpages/targets.conf.5.html: targets.conf.5.xml +- -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $< ++ $(XSLTPROC) -o $@ $(STYLEHTML) $< + + manpages/tgt-setup-lun.8: tgt-setup-lun.8.xml + -test -z "$(XSLTPROC)" || $(XSLTPROC) -o $@ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< diff --git a/0003-default-config.patch b/0003-default-config.patch new file mode 100644 index 0000000..81f88e8 --- /dev/null +++ b/0003-default-config.patch @@ -0,0 +1,44 @@ +From e09e0138d87107298d7ac233f234ca5ff4fd4fa9 Mon Sep 17 00:00:00 2001 +From: Andy Grover +Date: Tue, 18 Jun 2013 13:43:22 -0700 +Subject: [PATCH] default-config + +--- + scripts/initd.sample | 2 +- + scripts/tgt-admin | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/scripts/initd.sample b/scripts/initd.sample +index 9ca86ce..7b67722 100755 +--- a/scripts/initd.sample ++++ b/scripts/initd.sample +@@ -13,7 +13,7 @@ + # Description: tgtd provides the SCSI and software transport target state machine daemon. + ### END INIT INFO + +-TGTD_CONFIG=/etc/tgt/targets.conf ++TGTD_CONFIG=/etc/tgt/tgtd.conf + + TASK=$1 + +diff --git a/scripts/tgt-admin b/scripts/tgt-admin +index 8f6fb7f..b9c9658 100755 +--- a/scripts/tgt-admin ++++ b/scripts/tgt-admin +@@ -1,6 +1,6 @@ + #!/usr/bin/perl + # +-# This tools parses /etc/tgt/targets.conf file and configures tgt ++# This tools parses /etc/tgt/tgtd.conf file and configures tgt + # + # Author: Tomasz Chmielewski + # License: GPLv2 +@@ -11,7 +11,7 @@ use Config::General qw(ParseConfig); + use Getopt::Long; + + # Our config file +-my $configfile = "/etc/tgt/targets.conf"; ++my $configfile = "/etc/tgt/tgtd.conf"; + + sub usage { + print < +# backing-store /dev/LVM/somedevice +# + + +# Similar, but we use "direct-store" instead of "backing-store". +# "direct-store" reads drive parameters with sg_inq command and sets them to +# the target. +# Parameters fatched with sg_inq are: +# - Vendor identification +# - Product identification +# - Product revision level +# - Unit serial number (if present) +# We also specify "incominguser". + +# +# direct-store /dev/sdd +# incominguser someuser secretpass12 +# + + +# An example with multiple LUNs, disabled write-cache (tgtd enables write-cache +# by default) and vendor identification set to "MyVendor" + +# +# backing-store /dev/LVM/somedevice1 # Becomes LUN 1 +# backing-store /dev/LVM/somedevice2 # Becomes LUN 2 +# backing-store /dev/LVM/somedevice3 # Becomes LUN 3 +# write-cache off +# vendor_id MyCompany Inc. +# + + +# Similar to the one above, but we fetch vendor_id, product_id, product_rev and +# scsi_sn from the disks. +# Vendor identification (vendor_id) is replaced in all disks by "MyVendor" + +# +# direct-store /dev/sdb # Becomes LUN 1 +# direct-store /dev/sdc # Becomes LUN 2 +# direct-store /dev/sdd # Becomes LUN 3 +# write-cache off +# vendor_id MyCompany Inc. +# + + +# Note that "first-device-first-lun numbering" will work only for simple +# scenarios above, where _only_ direct-store _or_ backing-store is used. +# If you mix backing-store and direct-store, then all backing-store entries +# are processed before direct-store-entries. + +# +# direct-store /dev/sdb # Becomes LUN 3 +# backing-store /dev/sdc # Becomes LUN 1 +# direct-store /dev/sdd # Becomes LUN 4 +# backing-store /dev/sde # Becomes LUN 2 +# + + +# Even more complicated example - each device has different parameters. +# You can use indentation to make the config file more readable. +# Note that LUNs will be assigned more or less randomly here (and still +# backing-store get LUNs assigned before drect-store). +# You can specify multiple mode_page parameters (they are commented out +# in this example). +# Note that some parameters (write-cache, scsi_sn) were specified "globally". +# "Global" parameters will be applied to all LUNs; they can be overwritten +# "locally", per LUN. +# If lun is not specified, it will be allocated automatically (first available). + +# + +# +# vendor_id VENDOR1 +# removable 1 +# device-type cd +# lun 1 +# + +# +# vendor_id VENDOR2 +# lun 2 +# + +# +# vendor_id back1 +# scsi_sn SERIAL +# write-cache on + # lun 3 # lun is commented out - will be allocated automatically +# + +# +# vendor_id back2 + #mode_page 8:0:18:0x10:0:0xff.... + #mode_page 8:0:18:0x10:0:0xff.... + #bs-type aio +# lun 15 +# + + # Some more parameters which can be specified locally or globally: + #scsi_id ... + #scsi_sn ... + #vendor_id ... + #product_id ... + #product_rev ... + #sense_format ... + #removable ... + #online ... + #path ... + #mode_page 8:0:18:0x10:0:0xff.... + #mode_page 8:0:18:0x10:0:0xff.... + #device-type ... + #bs-type ... # backing store type - default rdwr, can be aio, mmap, etc... + #allow-in-use yes # if specified globally, can't be overwritten locally + +# write-cache off +# scsi_sn multipath-10 + + # Parameters below are only global. They can't be configured per LUN. + # Only allow connections from 192.168.100.1 and 192.168.200.5 +# initiator-address 192.168.100.1 +# initiator-address 192.168.200.5 + + # Tuning parameters (global, per target) + #MaxRecvDataSegmentLength 8192 + #MaxXmitDataSegmentLength 8192 + #HeaderDigest None + #DataDigest None + #InitialR2T Yes + #MaxOutstandingR2T 1 + #ImmediateData Yes + #FirstBurstLength 65536 + #MaxBurstLength 262144 + #DataPDUInOrder Yes + #DataSequenceInOrder Yes + #ErrorRecoveryLevel 0 + #IFMarker No + #OFMarker No + #DefaultTime2Wait 2 + #DefaultTime2Retain 20 + #OFMarkInt Reject + #IFMarkInt Reject + #MaxConnections 1 + + # Allowed incoming users +# incominguser user1 secretpass12 +# incominguser user2 secretpass23 + + # Outgoing user +# outgoinguser userA secretpassA + +# + + +# The device will have lun 1 unless you specify something else +# +# backing-store /dev/LVM/somedevice +# lun 10 +# + + +# Devices which are in use (by system: mounted, for swap, part of RAID, or by +# userspace: dd, by tgtd for another target etc.) can't be used, unless you use +# --force flag or add 'allow-in-use yes' option +# +# backing-store /dev/LVM/somedevice +# allow-in-use yes +# + +# +# +# scsi_sn serial1 +# + +# +# scsi_sn serial2 +# + +# allow-in-use yes +# + + + + + +# Not supported configurations, and therefore, commented out: + +# +# backing-store /dev/LVM/somedevice1 +# backing-store /dev/LVM/somedevice2 +# lun 10 +# lun 11 +# + +# +# +# vendor_id VENDOR1 +# +# +# direct-store /dev/sdc +# + +# This one will break the parser: + +# +# +# vendor_id VENDOR1 +# +# +# direct-store /dev/sdc +# +# +# vendor_id VENDOR1 +# +# + diff --git a/scsi-target-utils.spec b/scsi-target-utils.spec new file mode 100644 index 0000000..7c7e7de --- /dev/null +++ b/scsi-target-utils.spec @@ -0,0 +1,121 @@ +%global oname tgt +%global with_rdma 1 +%global with_rbd 1 +%global with_glfs 1 + +Summary: The SCSI target daemon and utility programs +Name: scsi-target-utils +Version: 1.0.79 +Release: 1 +License: GPLv2 +URL: http://stgt.sourceforge.net/ +Source0: https://github.com/fujita/tgt/archive/v%{version}/tgt-v%{version}.tar.gz +Source1: tgtd.service +Source2: sysconfig.tgtd +Source3: targets.conf +Source4: sample.conf +Source5: tgtd.conf +Patch1: 0002-remove-check-for-xsltproc.patch +Patch2: 0003-default-config.patch +Patch3: tgt-1.0.79-Adapt-to-glusterfs-api-7.6.3.patch + +BuildRequires: docbook-style-xsl gcc libaio-devel libxslt perl-generators pkgconfig systemd-devel systemd-units +%if 0%{?with_rdma} +BuildRequires: libibverbs-devel librdmacm-devel +Requires: libibverbs librdmacm +%endif +Requires: lsof sg3_utils +Requires(post): systemd-units + +%description +The SCSI target package contains the daemon and tools to setup a SCSI targets. +Currently, software iSCSI targets are supported. + +%if 0%{?with_rbd} +%package rbd +Summary: Support for the Ceph rbd backstore to scsi-target-utils +BuildRequires: librbd-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description rbd +Adds support for the Ceph rbd backstore to scsi-target-utils. +%endif + +%if 0%{?with_glfs} +%package gluster +Summary: Support for the Gluster backstore to scsi-target-utils +BuildRequires: glusterfs-api-devel +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description gluster +Adds support for the Gluster glfs backstore to scsi-target-utils. +%endif + +%package_help + +%prep +%autosetup -n %{oname}-%{version} -Sgit -p1 + +%build +%{__sed} -i -e 's|-g -O2 -fno-strict-aliasing|%{optflags} -fcommon|' -e 's| -Werror | |' usr/Makefile +%{__make} %{?_smp_mflags} %{?with_rdma:ISCSI_RDMA=1} %{?with_rbd:CEPH_RBD=1} %{?with_glfs:GLFS_BD=1} SD_NOTIFY=1 libdir=%{_libdir}/tgt + +%install +install -D -p -m 0755 scripts/tgt-setup-lun %{buildroot}%{_sbindir}/tgt-setup-lun +install -D -p -m 0755 %{SOURCE1} %{buildroot}%{_unitdir}/tgtd.service +install -p -m 0755 scripts/tgt-admin %{buildroot}/%{_sbindir}/tgt-admin +install -D -p -m 0644 doc/manpages/targets.conf.5 %{buildroot}/%{_mandir}/man5/targets.conf.5 +install -D -p -m 0644 doc/manpages/tgtadm.8 %{buildroot}/%{_mandir}/man8/tgtadm.8 +install -p -m 0644 doc/manpages/tgt-admin.8 %{buildroot}/%{_mandir}/man8 +install -p -m 0644 doc/manpages/tgt-setup-lun.8 %{buildroot}/%{_mandir}/man8 +install -D -p -m 0600 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/tgtd +install -D -p -m 0600 %{SOURCE3} %{buildroot}%{_sysconfdir}/tgt/targets.conf +install -D -p -m 0600 %{SOURCE4} %{buildroot}%{_sysconfdir}/tgt/conf.d/sample.conf +install -p -m 0600 %{SOURCE5} %{buildroot}%{_sysconfdir}/tgt/tgtd.conf + +pushd usr +%{__make} install %{?with_rdma:ISCSI_RDMA=1} %{?with_rbd:CEPH_RBD=1} %{?with_glfs:GLFS_BD=1} SD_NOTIFY=1 DESTDIR=%{buildroot} sbindir=%{_sbindir} libdir=%{_libdir}/tgt + +%post +%systemd_post tgtd.service + +%preun +%systemd_preun tgtd.service + +%postun +%systemd_postun tgtd.service + +%files +%doc README doc/README.iscsi doc/README.iser doc/README.lu_configuration doc/README.mmc doc/README.ssc +%{_sbindir}/tgtd +%{_sbindir}/tgtadm +%{_sbindir}/tgt-setup-lun +%{_sbindir}/tgt-admin +%{_sbindir}/tgtimg +%{_unitdir}/tgtd.service +%{_sysconfdir}/tgt +%{_sysconfdir}/tgt/conf.d +%attr(0600,root,root) %config(noreplace) %{_sysconfdir}/sysconfig/tgtd +%attr(0600,root,root) %config(noreplace) %{_sysconfdir}/tgt/targets.conf +%attr(0600,root,root) %config(noreplace) %{_sysconfdir}/tgt/tgtd.conf +%attr(0600,root,root) %config(noreplace) %{_sysconfdir}/tgt/conf.d/sample.conf + +%if 0%{?with_rbd} +%files rbd +%{_libdir}/tgt/backing-store/bs_rbd.so +%doc doc/README.rbd +%endif + +%if 0%{?with_glfs} +%files gluster +%{_libdir}/tgt/backing-store/bs_glfs.so +%doc doc/README.glfs +%endif + +%files help +%{_mandir}/man5/* +%{_mandir}/man8/* + +%changelog +* Fri Dec 13 2019 openEuler Buildteam - 1.0.79-1 +- Package init diff --git a/sysconfig.tgtd b/sysconfig.tgtd new file mode 100644 index 0000000..012dd16 --- /dev/null +++ b/sysconfig.tgtd @@ -0,0 +1,5 @@ +# options for tgtd +TGTD_OPTS="" + +# configuration file +TGTD_CONFIG=/etc/tgt/tgtd.conf diff --git a/targets.conf b/targets.conf new file mode 100644 index 0000000..41e8ddc --- /dev/null +++ b/targets.conf @@ -0,0 +1,17 @@ +# This is a sample config file for tgt-admin. +# +# The "#" symbol disables the processing of a line. + +# Set the driver. If not specified, defaults to "iscsi". +default-driver iscsi + +# Set iSNS parameters, if needed +#iSNSServerIP 192.168.111.222 +#iSNSServerPort 3205 +#iSNSAccessControl On +#iSNS On + +# Continue if tgtadm exits with non-zero code (equivalent of +# --ignore-errors command line option) +#ignore-errors yes + diff --git a/tgt-1.0.79-Adapt-to-glusterfs-api-7.6.3.patch b/tgt-1.0.79-Adapt-to-glusterfs-api-7.6.3.patch new file mode 100644 index 0000000..aa94823 --- /dev/null +++ b/tgt-1.0.79-Adapt-to-glusterfs-api-7.6.3.patch @@ -0,0 +1,100 @@ +From ee3456567a639fbff8ce33c5fe166efaed5cee26 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Thu, 4 Jul 2019 18:30:28 +0200 +Subject: [PATCH] Adapt to glusterfs-api 7.6.3 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Glusterfs API has changed. Some functions as can be seen in glusterfs-6.3 got +new arguments. + +Samba dealt with it by using NULL arguments +. This patch mimics it. + +Not tested. + +Signed-off-by: Petr Písař +--- + usr/bs_glfs.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/usr/bs_glfs.c b/usr/bs_glfs.c +index 93984b4..9da30e1 100644 +--- a/usr/bs_glfs.c ++++ b/usr/bs_glfs.c +@@ -110,7 +110,7 @@ static void bs_glfs_request(struct scsi_cmd *cmd) + break; + } + +- ret = glfs_pread(gfd, tmpbuf, length, offset, lu->bsoflags); ++ ret = glfs_pread(gfd, tmpbuf, length, offset, lu->bsoflags, NULL); + + if (ret != length) { + set_medium_error(&result, &key, &asc); +@@ -147,7 +147,7 @@ static void bs_glfs_request(struct scsi_cmd *cmd) + break; + } + +- ret = glfs_pread(gfd, tmpbuf, length, offset, SEEK_SET); ++ ret = glfs_pread(gfd, tmpbuf, length, offset, SEEK_SET, NULL); + + if (ret != length) { + set_medium_error(&result, &key, &asc); +@@ -190,7 +190,7 @@ static void bs_glfs_request(struct scsi_cmd *cmd) + key = ILLEGAL_REQUEST; + asc = ASC_INVALID_FIELD_IN_CDB; + } else { +- glfs_fdatasync(gfd); ++ glfs_fdatasync(gfd, NULL, NULL); + } + break; + case WRITE_VERIFY: +@@ -204,7 +204,7 @@ static void bs_glfs_request(struct scsi_cmd *cmd) + length = scsi_get_out_length(cmd); + write_buf = scsi_get_out_buffer(cmd); + write: +- ret = glfs_pwrite(gfd, write_buf, length, offset, lu->bsoflags); ++ ret = glfs_pwrite(gfd, write_buf, length, offset, lu->bsoflags, NULL, NULL); + + if (ret == length) { + struct mode_pg *pg; +@@ -222,7 +222,7 @@ write: + } + if (((cmd->scb[0] != WRITE_6) && (cmd->scb[1] & 0x8)) || + !(pg->mode_data[0] & 0x04)) +- glfs_fdatasync(gfd); ++ glfs_fdatasync(gfd, NULL, NULL); + } else + set_medium_error(&result, &key, &asc); + +@@ -258,7 +258,7 @@ write: + } + + ret = glfs_pwrite(gfd, tmpbuf, blocksize, +- offset, lu->bsoflags); ++ offset, lu->bsoflags, NULL, NULL); + + if (ret != blocksize) + set_medium_error(&result, &key, &asc); +@@ -273,7 +273,7 @@ write: + case READ_16: + length = scsi_get_in_length(cmd); + ret = glfs_pread(gfd, scsi_get_in_buffer(cmd), +- length, offset, SEEK_SET); ++ length, offset, SEEK_SET, NULL); + + if (ret != length) { + eprintf("Error on read %x %x", ret, length); +@@ -299,7 +299,7 @@ verify: + break; + } + +- ret = glfs_pread(gfd, tmpbuf, length, offset, lu->bsoflags); ++ ret = glfs_pread(gfd, tmpbuf, length, offset, lu->bsoflags, NULL); + + if (ret != length) + set_medium_error(&result, &key, &asc); +-- +2.20.1 + diff --git a/tgt-v1.0.79.tar.gz b/tgt-v1.0.79.tar.gz new file mode 100644 index 0000000..7bff549 Binary files /dev/null and b/tgt-v1.0.79.tar.gz differ diff --git a/tgtd.conf b/tgtd.conf new file mode 100644 index 0000000..6c339d1 --- /dev/null +++ b/tgtd.conf @@ -0,0 +1,5 @@ +# The default config file +include /etc/tgt/targets.conf + +# Config files from other packages etc. +include /etc/tgt/conf.d/*.conf diff --git a/tgtd.service b/tgtd.service new file mode 100644 index 0000000..6a12511 --- /dev/null +++ b/tgtd.service @@ -0,0 +1,33 @@ +[Unit] +Description=tgtd iSCSI target daemon +After=network.target + +[Service] +EnvironmentFile=/etc/sysconfig/tgtd + +ExecStart=/usr/sbin/tgtd -f $TGTD_OPTS +# see bz 848942. workaround for a race for now. +ExecStartPost=/bin/sleep 5 +# Put tgtd into "offline" state until all the targets are configured. +# We don't want initiators to (re)connect and fail the connection +# if it's not ready. +ExecStartPost=/usr/sbin/tgtadm --op update --mode sys --name State -v offline +# Configure the targets. +ExecStartPost=/usr/sbin/tgt-admin -e -c $TGTD_CONFIG +# Put tgtd into "ready" state. +ExecStartPost=/usr/sbin/tgtadm --op update --mode sys --name State -v ready + +# Update configuration for targets. Only targets which +# are not in use will be updated. +ExecReload=/usr/sbin/tgt-admin --update ALL -c $TGTD_CONFIG + +# NOTE: Shutdown of the iscsi target may cause data corruption +# for initiators that are connected. +ExecStop=/usr/sbin/tgtadm --op update --mode sys --name State -v offline +# Remove all targets. It only removes targets which are not in use. +ExecStop=/usr/sbin/tgt-admin --update ALL -c /dev/null +# tgtd will exit if all targets were removed +ExecStop=/usr/sbin/tgtadm --op delete --mode system + +[Install] +WantedBy=multi-user.target