commit:     3a5c6ac8c88119c492a4a4dadcfce9aceb44b9a5
Author:     Matthew Thode <prometheanfire <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 15 18:53:02 2023 +0000
Commit:     Matthew Thode <prometheanfire <AT> gentoo <DOT> org>
CommitDate: Tue Aug 15 18:53:02 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3a5c6ac8

sys-block/tgt: make init scripts posix compliant

Thanks to Forza-tng for the new scripts

Closes: https://bugs.gentoo.org/911680
Closes: https://bugs.gentoo.org/836690

Signed-off-by: Matthew Thode <prometheanfire <AT> gentoo.org>

 sys-block/tgt/files/tgtd.confd-new |   7 ++
 sys-block/tgt/files/tgtd.initd-new | 136 +++++++++++++++++++++++++++++++++++++
 sys-block/tgt/tgt-1.0.87-r1.ebuild |  61 +++++++++++++++++
 3 files changed, 204 insertions(+)

diff --git a/sys-block/tgt/files/tgtd.confd-new 
b/sys-block/tgt/files/tgtd.confd-new
new file mode 100644
index 000000000000..99a8f8db02fd
--- /dev/null
+++ b/sys-block/tgt/files/tgtd.confd-new
@@ -0,0 +1,7 @@
+# Here you can specify options that are passed directly to tgt daemon
+#tgtd_opts=""
+
+# Config file for automatic configuration with tgt-admin
+#tgtd_conf="/etc/tgt/targets.conf"
+
+# vim: ft=gentoo-conf-d

diff --git a/sys-block/tgt/files/tgtd.initd-new 
b/sys-block/tgt/files/tgtd.initd-new
new file mode 100644
index 000000000000..7941f1a7e974
--- /dev/null
+++ b/sys-block/tgt/files/tgtd.initd-new
@@ -0,0 +1,136 @@
+#!/sbin/openrc-run
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# shellcheck shell=sh
+
+# Default configuration fike
+: "${tgtd_conf:=/etc/tgt/targets.conf}"
+
+pidfile="/var/run/${RC_SVCNAME}.pid"
+command="/usr/sbin/tgtd"
+command_args_background="--pid-file ${pidfile}"
+extra_commands="forcedstop"
+extra_started_commands="forcedreload reload"
+
+depend() {
+  use net
+}
+
+start_post() {
+  # We need to wait for 1 second before do anything with tgtd.
+   sleep 1
+    # Put tgtd into "offline" state until all the targets are configured.
+  # We don't want initiators to (re)connect and fail the connection
+  # if configuration is not ready.
+  tgtadm --op update --mode sys --name State -v offline
+
+  # Configure the targets.
+  if [ ! -r  "${tgtd_conf}" ]; then
+    ewarn "Configuration file '${tgtd_conf}' not found!"
+    ewarn "Leaving ${SVCNAME} running in 'offline' state."
+    eend 0
+  else
+    ebegin "Loading target configuration"
+      tgt-admin --update ALL -c "${tgtd_conf}"
+        retval=$?
+      if [ $retval -ne 0 ]; then
+        eerror "Could not load configuration!"
+        stop
+        exit $?
+      fi
+    eend $retval
+
+    # Put tgtd into "ready" state.
+    ebegin "Onlining targets. Accepting connections"
+      tgtadm --op update --mode sys --name State -v ready
+    eend $?
+  fi
+}
+
+stop() {
+  ebegin "Stopping ${SVCNAME}"
+    # We need to force shutdown if system is restarting
+    # or shutting down.
+    if [ "$RC_RUNLEVEL" = "shutdown" ] ; then
+        forcedstop
+    else
+      # Remove all targets. Only remove targets which are not in use.
+      tgt-admin --update ALL -c /dev/null >/dev/null 2>&1
+      retval=$?
+      if [ $retval -eq 107 ] ; then
+          einfo "tgtd is not running"
+      else
+        # tgtd will exit if all targets were removed.
+        tgtadm --op delete --mode system >/dev/null 2>&1
+        retval=$?
+        if [ $retval -ne 0 ] ; then
+            eerror "WARNING: Some initiators are still connected - could not 
stop tgtd"
+        fi
+      fi
+    fi
+  eend $retval
+}
+
+forcedstop() {
+  # NOTE: Forced shutdown of the iscsi target may cause data corruption
+  # for initiators that are connected.
+  ewarn "WARNING: Force-stopping target framework daemon"
+  for i in 5 4 3 2 1; do
+    einfo "Continuing in $i seconds..."
+    sleep 1
+  done
+
+  # Offline everything first. May be needed if we're rebooting, but
+  # expect the initiators to reconnect cleanly when we boot again
+  # (i.e. we don't want them to reconnect to a tgtd which is still
+  # onlineg, but the target is gone).
+  tgtadm --op update --mode sys --name State -v offline >/dev/null 2>&1
+  retval=$?
+  if [ $retval -eq 107 ] ; then
+      einfo "tgtd is not running"
+  else
+    # Offline all targets
+      tgt-admin --offline ALL
+
+      # Remove all targets, even if they are still in use.
+      tgt-admin --update ALL -c /dev/null -f
+
+      # tgtd shuts down after all targets are removed.
+      tgtadm --op delete --mode system
+      retval=$?
+      if [ $retval -ne 0 ] ; then
+      eerror "Failed to shutdown tgtd"
+      eend 1
+      fi
+  fi
+  eend $retval
+}
+
+reload() {
+  ebegin "Updating target framework daemon configuration"
+    # Update configuration for targets. Only targets which
+    # are not in use will be updated.
+    tgt-admin --update ALL -c "${tgtd_conf}" >/dev/null 2>&1
+    retval=$?
+    if [ $retval -eq 107 ]; then
+        ewarn "WARNING: tgtd is not running"
+    fi
+  eend $retval
+}
+
+forcedreload() {
+  ebegin "Updating target framework daemon configuration"
+    ewarn "WARNING: Force-updating running configuration!"
+    # Update configuration for targets, even those in use.
+    tgt-admin --update ALL -f -c "${tgtd_conf}" >/dev/null 2>&1
+    retval=$?
+    if [ $retval -eq 107 ]; then
+      ewarn "WARNING: tgtd is not running"
+    fi
+  eend $retval
+}
+
+status_post() {
+  einfo "Run 'tgt-admin -s' to see detailed target info."
+}

diff --git a/sys-block/tgt/tgt-1.0.87-r1.ebuild 
b/sys-block/tgt/tgt-1.0.87-r1.ebuild
new file mode 100644
index 000000000000..559e0ae2c41b
--- /dev/null
+++ b/sys-block/tgt/tgt-1.0.87-r1.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+inherit toolchain-funcs systemd
+
+DESCRIPTION="Linux SCSI target framework (tgt)"
+HOMEPAGE="https://github.com/fujita/tgt";
+SRC_URI="https://github.com/fujita/tgt/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm64 ~hppa ~ia64 ~loong ~ppc ~ppc64 ~riscv ~sparc 
~x86"
+IUSE="fcoe fcp ibmvio infiniband rbd selinux"
+
+DEPEND="
+       app-text/docbook-xsl-stylesheets
+       dev-libs/libxslt
+       dev-perl/Config-General
+       rbd? ( sys-cluster/ceph )
+       infiniband? ( sys-cluster/rdma-core )
+"
+RDEPEND="
+       ${DEPEND}
+       dev-libs/libaio
+       sys-apps/sg3_utils
+       selinux? ( sec-policy/selinux-tgtd )
+"
+
+pkg_setup() {
+       tc-export CC
+}
+
+src_prepare() {
+       default
+       sed -i -e 's:\($(CC)\) $^:\1 $(LDFLAGS) $^:' usr/Makefile || die
+       # make sure xml docs are generated before trying to install them
+       sed -i -e "s@install: @& all @g" doc/Makefile || die
+       sed -i -e 's|-Werror||g' usr/Makefile || die
+}
+
+src_compile() {
+       local myconf
+       use ibmvio && myconf="${myconf} IBMVIO=1"
+       use infiniband && myconf="${myconf} ISCSI_RDMA=1"
+       use fcp && myconf="${myconf} FCP=1"
+       use fcoe && myconf="${myconf} FCOE=1"
+       use rbd && myconf="${myconf} CEPH_RBD=1"
+
+       emake -C usr/ KERNELSRC="${KERNEL_DIR}" ISCSI=1 ${myconf}
+       emake -C doc
+}
+
+src_install() {
+       emake  install-programs install-scripts install-doc DESTDIR="${D}" 
docdir=/usr/share/doc/${PF}
+       newinitd "${FILESDIR}"/tgtd.initd-new tgtd
+       newconfd "${FILESDIR}"/tgtd.confd-new tgtd
+       systemd_dounit "${S}"/scripts/tgtd.service
+       dodir /etc/tgt
+       keepdir /etc/tgt
+}

Reply via email to