Skip to content

Commit

Permalink
Add LSB style init script to build system
Browse files Browse the repository at this point in the history
This patch adds an LSB style init script to the build system.  It also
installs it within the created RPM file.

Signed-off-by: Steven Dake <sdake@redhat.com>
Signed-off-by: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
  • Loading branch information
Steven Dake authored and kazum committed Aug 24, 2010
1 parent 50443fe commit 4d4d2a9
Show file tree
Hide file tree
Showing 4 changed files with 171 additions and 0 deletions.
1 change: 1 addition & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,7 @@ AC_SUBST([OS_DYFLAGS])

AM_CONDITIONAL(BUILD_HTML_DOCS, test -n "${GROFF}")

AC_SUBST([INITDDIR])
AC_SUBST([LINT_FLAGS])

AC_DEFINE_UNQUOTED([LOCALSTATEDIR], "$(eval echo ${localstatedir})", [localstate directory])
Expand Down
28 changes: 28 additions & 0 deletions script/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,3 +1,31 @@
MAINTAINERCLEANFILES = Makefile.in

EXTRA_DIST = generic.in

noinst_HEADERS = bash_completion_collie checkarch.sh check-dog.pl start-sheepdog stop-sheepdog vditest

target_INIT = generic

%: %.in Makefile
rm -f $@-t $@
sed \
-e 's#@''SBINDIR@#$(sbindir)#g' \
-e 's#@''SYSCONFDIR@#$(sysconfdir)#g' \
-e 's#@''INITDDIR@#$(INITDDIR)#g' \
-e 's#@''LOCALSTATEDIR@#$(localstatedir)#g' \
$< > $@-t
chmod 0755 $@-t
mv $@-t $@

all-local: $(target_INIT)

clean-local:
rm -rf $(target_INIT)

install-exec-local:
$(INSTALL) -d $(DESTDIR)/$(INITDDIR)
$(INSTALL) -m 755 generic $(DESTDIR)/$(INITDDIR)/sheepdog

uninstall-local:
cd $(DESTDIR)/$(INITDDIR) && \
rm -f sheepdog
141 changes: 141 additions & 0 deletions script/generic.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
#!/bin/bash
# chkconfig: - 21 21
# description: Sheepdog
# processname: sheep
#
### BEGIN INIT INFO
# Provides: sheepdog
# Required-Start: $network
# Should-Start: $syslog
# Required-Stop: $network
# Default-Start:
# Default-Stop:
# Short-Description: Starts and stops Sheepdog.
# Description: Starts and stops Sheepdog.
### END INIT INFO
desc="Sheepdog QEMU/KVM Block Storage"
prog="sheep"

# set secure PATH
PATH="/sbin:/bin:/usr/sbin:/usr/bin:@SBINDIR@"
SHEEPDOGD=@SBINDIR@/sheep

success()
{
echo -ne "[ OK ]\r"
}

failure()
{
echo -ne "[FAILED]\r"
}

status()
{
pid=$(pidof $1 2>/dev/null)
rtrn=$?
if [ $rtrn -ne 0 ]; then
echo "$1 is stopped"
else
echo "$1 (pid $pid) is running..."
fi
return $rtrn
}

# rpm based distros
if [ -d @SYSCONFDIR@/sysconfig ]; then
[ -f @INITDDIR@/functions ] && . @INITDDIR@/functions
[ -f @SYSCONFDIR@/sysconfig/$prog ] && . @SYSCONFDIR@/sysconfig/$prog
[ -z "$LOCK_FILE" ] && LOCK_FILE="@LOCALSTATEDIR@/lock/subsys/$prog"
fi

# deb based distros
if [ -d @SYSCONFDIR@/default ]; then
[ -f @SYSCONFDIR@/default/$prog ] && . @SYSCONFDIR@/default/$prog
[ -z "$LOCK_FILE" ] && LOCK_FILE="@LOCALSTATEDIR@/lock/$prog"
fi

# The version of __pids_pidof in /etc/init.d/functions calls pidof with -x
# This means it matches scripts, including this one.
# Redefine it here so that status (from the same file) works.
# Otherwise simultaneous calls to stop() will loop forever
__pids_pidof() {
pidof -c -o $$ -o $PPID -o %PPID "$1" || \
pidof -c -o $$ -o $PPID -o %PPID "${1##*/}"
}

start()
{
echo -n "Starting $desc ($prog): "

# most recent distributions use tmpfs for @LOCALSTATEDIR@/run
# to avoid to clean it up on every boot.
# they also assume that init scripts will create
# required subdirectories for proper operations
mkdir -p @LOCALSTATEDIR@/run

if status $prog > /dev/null 2>&1; then
success
else
$prog -p 7000 @LOCALSTATEDIR@/lib/sheepdog > /dev/null 2>&1

# give it time to fail
sleep 2
if status $prog > /dev/null 2>&1; then
touch $LOCK_FILE
success
else
failure
rtrn=1
fi
fi
echo
}

stop()
{
! status $prog > /dev/null 2>&1 && return

echo -n "Stopping $desc ($prog): "
killproc $prog
RETVAL=$?
rm -f $LOCK_FILE
success
echo
}

restart()
{
stop
start
}

rtrn=0

case "$1" in
start)
start
;;
restart|reload|force-reload)
restart
;;
condrestart|try-restart)
if status $prog > /dev/null 2>&1; then
restart
fi
;;
status)
status $prog
rtrn=$?
;;
stop)
stop
;;
*)
echo "usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status}"
rtrn=2
;;
esac


exit $rtrn
1 change: 1 addition & 0 deletions sheepdog.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ This package contains the Sheepdog server, and command line tool.
%doc COPYING README
%{_sbindir}/sheep
%{_sbindir}/collie
%{_initddir}/sheepdog
%dir %{_localstatedir}/lib/sheepdog

%changelog
Expand Down

0 comments on commit 4d4d2a9

Please sign in to comment.