[stgt] [PATCH V1] Add the possibility for building a debian package

Roi Dayan roid at mellanox.com
Tue Aug 6 15:32:25 CEST 2013


Added support files needed for building the package.
Updated the rpm build script to build also deb package.

Signed-off-by: Roi Dayan <roid at mellanox.com>
---

Hi Tomo,

I updated the commit as suggested.
The debian files are in scripts/deb and shouldn't interfere anyone.

Thanks,
Roi


 Makefile                  |   14 +++--
 scripts/build-pkg.sh      |  115 +++++++++++++++++++++++++++++++++
 scripts/build-rpm.sh      |   72 ---------------------
 scripts/deb/changelog     |    6 ++
 scripts/deb/compat        |    1 +
 scripts/deb/control       |   15 ++++
 scripts/deb/copyright     |   14 ++++
 scripts/deb/init          |  157 +++++++++++++++++++++++++++++++++++++++++++++
 scripts/deb/rules         |   12 ++++
 scripts/deb/source/format |    1 +
 10 files changed, 330 insertions(+), 77 deletions(-)
 create mode 100755 scripts/build-pkg.sh
 delete mode 100755 scripts/build-rpm.sh
 create mode 100644 scripts/deb/changelog
 create mode 100644 scripts/deb/compat
 create mode 100644 scripts/deb/control
 create mode 100644 scripts/deb/copyright
 create mode 100755 scripts/deb/init
 create mode 100755 scripts/deb/rules
 create mode 100644 scripts/deb/source/format

diff --git a/Makefile b/Makefile
index 95af23a..4913f1f 100644
--- a/Makefile
+++ b/Makefile
@@ -66,14 +66,18 @@ install: install-programs install-doc install-conf install-scripts
 
 .PHONY: rpm
 rpm:
-	@./scripts/build-rpm.sh
+	@./scripts/build-pkg.sh rpm
 
-.PHONY: clean-rpm
-clean-rpm:
-	rm -fr rpmtop
+.PHONY: deb
+deb:
+	@./scripts/build-pkg.sh deb
 
 .PHONY: clean
-clean: clean-programs clean-doc clean-conf clean-scripts clean-rpm
+clean-pkg:
+	rm -fr pkg
+
+.PHONY: clean
+clean: clean-programs clean-doc clean-conf clean-scripts clean-pkg
 
 .PHONY:check
 check: ARCH=$(shell sh script/checkarch.sh)
diff --git a/scripts/build-pkg.sh b/scripts/build-pkg.sh
new file mode 100755
index 0000000..c6776c7
--- /dev/null
+++ b/scripts/build-pkg.sh
@@ -0,0 +1,115 @@
+#!/bin/bash
+#
+# Copyright (C) 2012 Roi Dayan <roid at mellanox.com>
+#
+
+TARGET=$1
+
+usage() {
+    echo "Usage: `basename $0` [rpm|deb]"
+    exit 1
+}
+
+if [ "$TARGET" != "rpm" -a "$TARGET" != "deb" ]; then
+    usage
+fi
+
+DIR=$(cd `dirname $0`; pwd)
+BASE=`cd $DIR/.. ; pwd`
+_TOP="$BASE/pkg"
+SPEC="tgtd.spec"
+LOG=/tmp/`basename $0`-$$.log
+
+# get branch name
+branch=`git branch | grep '^*' | sed 's/^..\(.*\)/\1/'`
+# get version tag
+version=`git describe --tags --abbrev=0 | sed "s/^v//g"`
+# release is number of commits since the version tag
+release=`git describe --tags | cut -d- -f2 | tr - _`
+
+if [ "$version" = "$release" ]; then
+    # no commits and release can't be empty
+    release=0
+fi
+
+if [ "$branch" != "master" ]; then
+    # if not under master branch include hash tag
+    hash=`git rev-parse HEAD | cut -c 1-6`
+    release="$release.$hash"
+fi
+
+echo "Building version: $version-$release"
+
+
+cp_src() {
+    local dest=$1
+    cp -a conf $dest
+    cp -a doc $dest
+    cp -a scripts $dest
+    cp -a usr $dest
+    cp -a README $dest
+    cp -a Makefile $dest
+}
+
+check() {
+    local rc=$?
+    local msg="$1"
+    if (( rc )) ; then
+        echo $msg
+        exit 1
+    fi
+}
+
+build_rpm() {
+    name=scsi-target-utils-$version-$release
+    TARBALL=$name.tgz
+    SRPM=$_TOP/SRPMS/$name.src.rpm
+
+    echo "Creating rpm build dirs under $_TOP"
+    mkdir -p $_TOP/{RPMS,SRPMS,SOURCES,BUILD,SPECS,tmp}
+    mkdir -p $_TOP/tmp/$name
+
+    cp_src $_TOP/tmp/$name
+
+    echo "Creating tgz $TARBALL"
+    tar -czf $_TOP/SOURCES/$TARBALL -C $_TOP/tmp $name
+
+    echo "Creating rpm"
+    sed -r "s/^Version:(\s*).*/Version:\1$version/;s/^Release:(\s*).*/Release:\1$release/" scripts/$SPEC > $_TOP/SPECS/$SPEC
+    rpmbuild -bs --define="_topdir $_TOP" $_TOP/SPECS/$SPEC
+    check "Failed to create source rpm."
+
+    rpmbuild -bb --define="_topdir $_TOP" $_TOP/SPECS/$SPEC > $LOG 2>&1
+    check "Failed to build rpm. LOG: $LOG"
+    # display created rpm files
+    grep ^Wrote $LOG
+
+    rm -fr $LOG
+}
+
+build_deb() {
+    if ! which debuild >/dev/null 2>&1 ; then
+        echo "Missing debuild. Please install devscripts package."
+        exit 1
+    fi
+    name=tgt_$version
+    TARBALL=$name.orig.tar.gz
+
+    echo "Building under $_TOP/$name"
+    mkdir -p $_TOP/$name
+    cp_src $_TOP/$name
+    tar -czf $_TOP/$TARBALL -C $_TOP $name
+
+    mkdir -p $_TOP/$name/debian
+    cp -a scripts/deb/* $_TOP/$name/debian
+    cd $_TOP/$name
+    sed -i -r "s/^tgt \(([0-9.-]+)\) (.*)/tgt \($version-$release\) \2/" debian/changelog
+    debuild -uc -us
+    check "Failed building deb package."
+    cd ../..
+    ls -l $_TOP/$name*.deb
+}
+
+cd $BASE
+build_$TARGET
+echo "Done."
diff --git a/scripts/build-rpm.sh b/scripts/build-rpm.sh
deleted file mode 100755
index 36ef364..0000000
--- a/scripts/build-rpm.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/sh
-#
-# Copyright (C) 2012 Roi Dayan <roid at mellanox.com>
-#
-
-
-DIR=$(cd `dirname $0`; pwd)
-BASE=`cd $DIR/.. ; pwd`
-RPMTOP="$BASE/rpmtop"
-SPEC="tgtd.spec"
-LOG=/tmp/`basename $0`-$$.log
-
-# get branch name
-branch=`git branch | grep '^*' | sed 's/^..\(.*\)/\1/'`
-# get version tag
-version=`git describe --tags --abbrev=0 | sed "s/^v//g"`
-# release is number of commits since the version tag
-release=`git describe --tags | cut -d- -f2 | tr - _`
-
-if [ "$version" = "$release" ]; then
-    # no commits and release can't be empty
-    release=0
-fi
-
-if [ "$branch" != "master" ]; then
-    # if not under master branch include hash tag
-    hash=`git rev-parse HEAD | cut -c 1-6`
-    release+=".$hash"
-fi
-
-echo "Building version: $version-$release"
-
-name=scsi-target-utils-$version-$release
-TARBALL=$name.tgz
-SRPM=$RPMTOP/SRPMS/$name.src.rpm
-
-echo "Creating rpm build dirs under $RPMTOP"
-mkdir -p $RPMTOP/{RPMS,SRPMS,SOURCES,BUILD,SPECS,tmp}
-mkdir -p $RPMTOP/tmp/$name
-
-echo "Creating tgz $TARBALL"
-cd $BASE
-cp -a conf $RPMTOP/tmp/$name
-cp -a doc $RPMTOP/tmp/$name
-cp -a scripts $RPMTOP/tmp/$name
-cp -a usr $RPMTOP/tmp/$name
-cp -a README $RPMTOP/tmp/$name
-cp -a Makefile $RPMTOP/tmp/$name
-
-tar -czf $RPMTOP/SOURCES/$TARBALL -C $RPMTOP/tmp $name
-
-check() {
-    local rc=$?
-    local msg="$1"
-    if (( rc )); then
-        echo $msg
-        exit 1
-    fi
-}
-
-echo "Creating rpm"
-sed -r "s/^Version:(\s*).*/Version:\1$version/;s/^Release:(\s*).*/Release:\1$release/" scripts/$SPEC > $RPMTOP/SPECS/$SPEC
-rpmbuild -bs --define="_topdir $RPMTOP" $RPMTOP/SPECS/$SPEC
-check "Failed to create source rpm."
-
-rpmbuild -bb --define="_topdir $RPMTOP" $RPMTOP/SPECS/$SPEC > $LOG 2>&1
-check "Failed to build rpm. LOG: $LOG"
-# display created rpm files
-grep ^Wrote $LOG
-
-rm -fr $LOG
-echo "Done."
diff --git a/scripts/deb/changelog b/scripts/deb/changelog
new file mode 100644
index 0000000..66534e9
--- /dev/null
+++ b/scripts/deb/changelog
@@ -0,0 +1,6 @@
+tgt (1.0.37-1) UNRELEASED; urgency=low
+  * Non-maintainer upload.
+  *
+  * Initial release. (Closes: #XXXXXX)
+
+ -- Roi Dayan <roid at mellanox.com>  Thu, 18 Jul 2013 09:31:00 +0300
diff --git a/scripts/deb/compat b/scripts/deb/compat
new file mode 100644
index 0000000..45a4fb7
--- /dev/null
+++ b/scripts/deb/compat
@@ -0,0 +1 @@
+8
diff --git a/scripts/deb/control b/scripts/deb/control
new file mode 100644
index 0000000..6a854cf
--- /dev/null
+++ b/scripts/deb/control
@@ -0,0 +1,15 @@
+Source: tgt
+Maintainer: FUJITA Tomonori <fujita.tomonori at lab.ntt.co.jp>
+Section: net
+Priority: optional
+Standards-Version: 3.9.1
+Build-Depends: debhelper (>= 8), dpkg-dev (>= 1.13.19),
+    librdmacm-dev, libibverbs-dev, xsltproc
+Homepage: http://stgt.berlios.de/
+
+Package: tgt
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, librdmacm1, libconfig-general-perl
+Description: The SCSI target daemon and utility programs
+ The SCSI target package contains the daemon and tools to setup a SCSI targets.
+ Currently, software iSCSI targets are supported.
diff --git a/scripts/deb/copyright b/scripts/deb/copyright
new file mode 100644
index 0000000..d2c5a83
--- /dev/null
+++ b/scripts/deb/copyright
@@ -0,0 +1,14 @@
+License:
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or (at
+    your option) any later version.
+
+    This program is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, see http://www.gnu.org/licenses/.
diff --git a/scripts/deb/init b/scripts/deb/init
new file mode 100755
index 0000000..534c9a8
--- /dev/null
+++ b/scripts/deb/init
@@ -0,0 +1,157 @@
+#!/bin/sh
+# This is an example init.d script for stopping/starting/reconfiguring tgtd.
+
+### BEGIN INIT INFO
+# Provides: tgtd
+# Required-Start: $network
+# Required-Stop: $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Starts and stops the generic storage target daemon
+# Description: tgtd provides the SCSI and software transport target state machine daemon.
+### END INIT INFO
+
+TGTD_CONFIG=/etc/tgt/targets.conf
+
+TASK=$1
+
+start()
+{
+	echo "Starting target framework daemon"
+	# Start tgtd first.
+	tgtd &>/dev/null
+	RETVAL=$?
+	if [ "$RETVAL" -ne 0 ] ; then
+	    echo "Could not start tgtd (is tgtd already running?)"
+	    exit 1
+	fi
+        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 it's not ready.
+	tgtadm --op update --mode sys --name State -v offline
+	# Configure the targets.
+	tgt-admin -e -c $TGTD_CONFIG
+	# Put tgtd into "ready" state.
+	tgtadm --op update --mode sys --name State -v ready
+}
+
+stop()
+{
+	if [ -n "$RUNLEVEL" ] && [ "$RUNLEVEL" -eq 0 -o "$RUNLEVEL" -eq 6 ] ; then
+	    forcedstop
+	fi
+	echo "Stopping target framework daemon"
+	# Remove all targets. It only removes targets which are not in use.
+	tgt-admin --update ALL -c /dev/null &>/dev/null
+	# tgtd will exit if all targets were removed
+	tgtadm --op delete --mode system &>/dev/null
+	RETVAL=$?
+	if [ "$RETVAL" -eq 107 ] ; then
+	    echo "tgtd is not running"
+	    [ "$TASK" != "restart" ] && exit 1
+	elif [ "$RETVAL" -ne 0 ] ; then
+	    echo "Some initiators are still connected - could not stop tgtd"
+	    exit 2
+	fi
+	echo -n
+}
+
+forcedstop()
+{
+	# NOTE: Forced shutdown of the iscsi target may cause data corruption
+	# for initiators that are connected.
+	echo "Force-stopping target framework daemon"
+	# 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
+	# working, but the target is gone).
+	tgtadm --op update --mode sys --name State -v offline &>/dev/null
+	RETVAL=$?
+	if [ "$RETVAL" -eq 107 ] ; then
+	    echo "tgtd is not running"
+	    [ "$TASK" != "restart" ] && exit 1
+	else
+	    tgt-admin --offline ALL
+	    # Remove all targets, even if they are still in use.
+	    tgt-admin --update ALL -c /dev/null -f
+	    # It will shut down tgtd only after all targets were removed.
+	    tgtadm --op delete --mode system
+	    RETVAL=$?
+	    if [ "$RETVAL" -ne 0 ] ; then
+		echo "Failed to shutdown tgtd"
+		exit 1
+	    fi
+	fi
+	echo -n
+}
+
+reload()
+{
+	echo "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_CONFIG &>/dev/null
+	RETVAL=$?
+	if [ "$RETVAL" -eq 107 ] ; then
+	    echo "tgtd is not running"
+	    exit 1
+	fi
+}
+
+forcedreload()
+{
+	echo "Force-updating target framework daemon configuration"
+	# Update configuration for targets, even those in use.
+	tgt-admin --update ALL -f -c $TGTD_CONFIG &>/dev/null
+	RETVAL=$?
+	if [ "$RETVAL" -eq 107 ] ; then
+	    echo "tgtd is not running"
+	    exit 1
+	fi
+}
+
+status()
+{
+	# Don't name this script "tgtd"...
+	TGTD_PROC=$(ps -C tgtd | grep -c tgtd)
+	if [ "$TGTD_PROC" -eq 2 ] ; then
+	    echo "tgtd is running. Run 'tgt-admin -s' to see detailed target info."
+	else
+	    echo "tgtd is NOT running."
+	fi
+}
+
+case $1 in
+	start)
+		start
+		;;
+	stop)
+		stop
+		;;
+	forcedstop)
+		forcedstop
+		;;
+	restart)
+		TASK=restart
+		stop && start
+		;;
+	forcedrestart)
+		TASK=restart
+		forcedstop && start
+		;;
+	reload)
+		reload
+		;;
+	force-reload)
+		forcedreload
+		;;
+	status)
+		status
+		;;
+	*)
+		echo "Usage: $0 {start|stop|forcedstop|restart|forcedrestart|reload|forcedreload|status}"
+		exit 2
+		;;
+esac
+
diff --git a/scripts/deb/rules b/scripts/deb/rules
new file mode 100755
index 0000000..3a06b3d
--- /dev/null
+++ b/scripts/deb/rules
@@ -0,0 +1,12 @@
+#!/usr/bin/make -f
+
+DEB_MAKE_ENVVARS += ISCSI_RDMA=1
+
+%:
+	dh $@
+
+override_dh_auto_build:
+	dh_auto_build -- $(DEB_MAKE_ENVVARS)
+
+override_dh_auto_install:
+	dh_auto_install -- $(DEB_MAKE_ENVVARS)
diff --git a/scripts/deb/source/format b/scripts/deb/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/scripts/deb/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
-- 
1.7.8.2

--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list