summaryrefslogtreecommitdiffstats
path: root/main/scstadmin
diff options
context:
space:
mode:
authorCarlo Landmeter <clandmeter@gmail.com>2012-01-26 16:24:27 +0000
committerCarlo Landmeter <clandmeter@gmail.com>2012-01-26 16:24:27 +0000
commit06c07ee2227a0cc1a9743dcfe6f044c27fcb32ee (patch)
tree153129c2267948d27d94bf111d6096c5723af86b /main/scstadmin
parent6160b20b4f9a1cb388556228aecb583f0da590b2 (diff)
downloadaports-06c07ee2227a0cc1a9743dcfe6f044c27fcb32ee.tar.bz2
aports-06c07ee2227a0cc1a9743dcfe6f044c27fcb32ee.tar.xz
main/scstadmin: update to 2.2.0
Diffstat (limited to 'main/scstadmin')
-rw-r--r--main/scstadmin/APKBUILD17
-rw-r--r--main/scstadmin/scst-init-ash-comapt.patch35
-rw-r--r--main/scstadmin/scstadmin.initd232
3 files changed, 240 insertions, 44 deletions
diff --git a/main/scstadmin/APKBUILD b/main/scstadmin/APKBUILD
index cdf22d12d..912a31daf 100644
--- a/main/scstadmin/APKBUILD
+++ b/main/scstadmin/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Carlo Landmeter
# Maintainer:
pkgname=scstadmin
-pkgver=2.1.0
+pkgver=2.2.0
pkgrel=0
pkgdesc="SCST administration tool written in perl"
url="http://scst.sourceforge.net"
@@ -11,28 +11,27 @@ depends="perl"
makedepends="perl-dev"
install=
subpackages="$pkgname-doc"
-source="http://downloads.sourceforge.net/scst/$pkgname-$pkgver.tar.gz
- scst-init-ash-comapt.patch
+source="http://downloads.sourceforge.net/scst/$pkgname-$pkgver.tar.bz2
+ scstadmin.initd
"
_builddir="$srcdir/$pkgname-$pkgver"
prepare() {
- cd "$_builddir"/scstadmin.sysfs/scst-0.9.00
+ cd "$_builddir"/scstadmin.sysfs/scst-0.9.10
PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
cd "$_builddir"
- patch -p1 < "$srcdir"/scst-init-ash-comapt.patch
}
package() {
- cd "$_builddir"/scstadmin.sysfs/scst-0.9.00
+ cd "$_builddir"/scstadmin.sysfs/scst-0.9.10
make DESTDIR="$pkgdir" install || return 1
cd "$_builddir"
mkdir -p "$pkgdir"/var/lib/scst/pr
install -Dm755 scstadmin.sysfs/scstadmin "$pkgdir"/usr/sbin/scstadmin || return 1
- install -Dm755 init.d/scst.gentoo "$pkgdir"/etc/init.d/scstadmin || return 1
+ install -Dm755 "$srcdir"/scstadmin.initd "$pkgdir"/etc/init.d/scstadmin || return 1
}
-md5sums="df5a914c80dfe167163a4da6f6044d86 scstadmin-2.1.0.tar.gz
-061580b8ec84b5f7da0b1332601f505a scst-init-ash-comapt.patch"
+md5sums="ab990f8eaf74c20f89e1c7b154c61d25 scstadmin-2.2.0.tar.bz2
+0c5eb336ec325533145ea739a7dea82f scstadmin.initd"
diff --git a/main/scstadmin/scst-init-ash-comapt.patch b/main/scstadmin/scst-init-ash-comapt.patch
deleted file mode 100644
index 67cd7adf1..000000000
--- a/main/scstadmin/scst-init-ash-comapt.patch
+++ /dev/null
@@ -1,35 +0,0 @@
---- scstadmin/init.d/scst.gentoo
-+++ scstadmin/init.d/scst.gentoo
-@@ -12,13 +12,11 @@
- # Note: on most Linux distributions /bin/sh is a soft link to /bin/bash, while
- # on a default Ubuntu setup /bin/sh is a soft link to /bin/dash !
-
--opts="${opts} try-restart reload force-reload"
-+opts="${opts} try_restart reload force_reload"
- depend() {
- use logger
- }
-
--PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin
--
- DEFAULTFILE="/etc/conf.d/scst"
- SCST_CFG=/etc/scst.conf
- MODPROBE="/sbin/modprobe"
-@@ -121,7 +119,7 @@
- start
- }
-
--try-restart() {
-+try_restart() {
- ## Restart the service if the service is already running.
- status >/dev/null 2>&1 && restart
- }
-@@ -140,7 +138,7 @@
- fi
- }
-
--force-reload() {
-+force_reload() {
- ## Cause the configuration to be reloaded if the service supports this,
- ## otherwise restart the service if it is running.
- einfo "Reloading SCST configuration"
diff --git a/main/scstadmin/scstadmin.initd b/main/scstadmin/scstadmin.initd
new file mode 100644
index 000000000..af5cdd985
--- /dev/null
+++ b/main/scstadmin/scstadmin.initd
@@ -0,0 +1,232 @@
+#!/sbin/runscript
+#
+# Copyright (C) 2008 Mark Buechler <mark.buechler@gmail.com>
+# Copyright (C) 2009-2011 Bart Van Assche <bvanassche@acm.org>
+# This software is made available under the GPLv2 license.
+#
+# System startup script for SCST.
+#
+# See also:
+# * http://refspecs.freestandards.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html
+# * http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html
+#
+
+SCST_CFG=/etc/scst.conf
+
+if [ ! -e /lib/lsb/init-functions ]; then
+ # Slackware and Gentoo.
+rc_status() {
+ _rc_status_ret=$?
+ for i; do
+ case "$i" in
+ -v)
+ case "${_rc_status_ret}" in
+ 0) echo "OK";;
+ *) echo "Not running";;
+ esac
+ ;;
+ esac
+ done
+ return ${_rc_status_ret}
+}
+start_daemon() {
+ "$@" >/dev/null 2>&1 &
+}
+killproc() {
+ local exe="`basename "$1"`"
+ killall $exe
+ rm -f "/var/run/$exe.pid"
+}
+fi
+
+# Whether or not there is a "TARGET_DRIVER iscsi" section in scst.conf.
+using_iscsi() {
+ for m in $SCST_MODULES; do
+ if [ $m = "iscsi_scst" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+# Parse scst.conf and assign the list of associated kernel modules to
+# SCST_MODULES.
+parse_scst_conf() {
+ SCST_MODULES="scst"
+ SCST_OPT_MODULES=""
+ SCST_DAEMONS=""
+ if [ ! -e $SCST_CFG ]; then
+ return 0
+ fi
+ local nonblanks="[^ ]\{1,\}"
+ local blanks="[ ]\{1,\}"
+ SCST_MODULES="$SCST_MODULES `sed -n -e 's/^HANDLER'"$blanks"'\('"$nonblanks"'\)'"$blanks"'{$/\1/p' \
+ -e 's/^\[HANDLER'"$blanks"'\('"$nonblanks"'\)\]$/\1/p' $SCST_CFG \
+ | while read h; do
+ case "$h" in
+ dev_cdrom) echo scst_cdrom;;
+ dev_changer) echo scst_changer;;
+ dev_disk*) echo scst_disk;;
+ dev_modisk*) echo scst_modisk;;
+ dev_processor) echo scst_processor;;
+ dev_raid) echo scst_raid;;
+ dev_tape*) echo scst_tape;;
+ dev_user) echo scst_user;;
+ vdisk*|vcdrom) echo scst_vdisk;;
+ *) echo "$h";;
+ esac
+ done | sort -u` \
+ `sed -n 's/^TARGET_DRIVER'"$blanks"'\('"$nonblanks"'\)'"$blanks"'{$/\1/p' $SCST_CFG | while read d; do
+ case "$d" in
+ iscsi) echo iscsi_scst;;
+ qla2x00t) echo qla2x00tgt;;
+ *) echo "$d";;
+ esac
+ done | sort -u` \
+ $SCST_TARGET_MODULES"
+ if using_iscsi; then
+ case "`uname -m`" in
+ x86_64|i686)
+ SCST_OPT_MODULES="crc32c-intel $SCST_OPT_MODULES";;
+ esac
+ SCST_OPT_MODULES="crc32c $SCST_OPT_MODULES"
+ SCST_DAEMONS="/usr/local/sbin/iscsi-scstd $SCST_DAEMONS"
+ fi
+}
+
+# Unload SCST. parse_scst_conf must already have been invoked.
+unload_scst() {
+ for d in $SCST_DAEMONS; do
+ killproc $d
+ done
+
+ reverse_list=""
+ for m in $SCST_MODULES; do
+ reverse_list="$m $reverse_list"
+ done
+ for m in $reverse_list; do
+ refcnt="`cat /sys/module/$m/refcnt 2>/dev/null`"
+ if [ ! -z "$refcnt" ] && [ "$refcnt" -gt 0 ]; then
+ # Apparently it can happen that the iscsi_scst refcnt is only
+ # decremented a short time after killproc finished. If that
+ # occurs, sleep for a short time.
+ sleep 1
+ fi
+ if [ -e /sys/module/$m/refcnt ] && ! rmmod $m; then
+ return 1
+ fi
+ done
+ for m in $SCST_OPT_MODULES; do
+ reverse_list="$m $reverse_list"
+ done
+ for m in $reverse_list; do
+ rmmod $m >/dev/null 2>&1
+ done
+
+ # Clear the config in case unloading failed or SCST has been built into the
+ # kernel
+ if [ -e /sys/module/scst ]; then
+ scstadmin -noprompt -force -clear_config >/dev/null 2>&1
+ fi
+
+ return 0
+}
+
+start_scst() {
+ if [ -e /sys/module/scst -a -e /sys/module/scst/refcnt ]; then
+ echo Already started
+ return 1
+ fi
+
+ parse_scst_conf
+
+ for m in $SCST_OPT_MODULES; do
+ modprobe $m >/dev/null 2>&1
+ done
+
+ for m in $SCST_MODULES; do
+ if [ ! -e /sys/module/$m ]; then
+ if ! modprobe $m; then
+ echo modprobe $m failed.
+ unload_scst
+ return 5
+ fi
+ fi
+ done
+
+ for d in $SCST_DAEMONS; do
+ options=""
+ if [ "$(basename "$d")" = "iscsi-scstd" ]; then
+ options="${ISCSID_OPTIONS}"
+ fi
+ if ! start_daemon $d $options; then
+ echo "Starting $d failed"
+ unload_scst
+ return 1
+ fi
+ done
+
+ if [ -f $SCST_CFG ]; then
+ scstadmin -force -noprompt -clear_config >/dev/null 2>&1
+ tmpout=/tmp/scstadmin-output-$$
+ if scstadmin -config $SCST_CFG >$tmpout 2>&1; then
+ rm -f $tmpout
+ return 0
+ else
+ cat $tmpout
+ rm -f $tmpout
+ unload_scst
+ return 1
+ fi
+ else
+ echo "SCST configuration file $SCST_CFG missing"
+ return 0
+ fi
+}
+
+stop_scst() {
+ if ! parse_scst_conf; then
+ return 1
+ fi
+
+ unload_scst
+}
+
+scst_status() {
+ # Status has a slightly different meaning for the status command:
+ # 0 - service running
+ # 1 - service dead, but /var/run/ pid file exists
+ # 2 - service dead, but /var/lock/ lock file exists
+ # 3 - service not running
+
+ parse_scst_conf
+
+ for m in $SCST_MODULES; do
+ if [ ! -e /sys/module/$m ]; then
+ echo "$m: not loaded"
+ return 3
+ fi
+ done
+ return 0
+}
+
+depend() {
+ need localmount
+ need net
+}
+
+checkconfig() {
+ true
+}
+
+start() {
+ ebegin "Starting SCST"
+ start_scst
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping SCST"
+ stop_scst
+ eend $?
+}