From: Mark Wooding Date: Fri, 16 Mar 2012 00:01:55 +0000 (+0000) Subject: contrib: Add the Maemo init config for upstart. X-Git-Tag: 1.0.0pre11~32 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/commitdiff_plain/2e35470f549072426bf493c73dceff108a05f3b1 contrib: Add the Maemo init config for upstart. --- diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 5d713137..8802b62a 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -43,4 +43,13 @@ ipif-peers: ipif-peers.in Makefile $(SUBST) $(srcdir)/ipif-peers.in >$@.new $(SUBSTITUTIONS) && \ mv $@.new $@ +## Upstart fragment. This forks with Maemo's ancient upstart. +noinst_DATA += tripe-upstart +EXTRA_DIST += tripe-upstart.in +CLEANFILES += tripe-upstart + +tripe-upstart: tripe-upstart.in Makefile + $(SUBST) $(srcdir)/tripe-upstart.in >$@.new $(SUBSTITUTIONS) && \ + mv $@.new $@ + ###----- That's all, folks -------------------------------------------------- diff --git a/contrib/README b/contrib/README index c055145d..deeba1f5 100644 --- a/contrib/README +++ b/contrib/README @@ -8,3 +8,8 @@ What is there? tripe-ipif ipif-peers Glue for attaching tripe to Ian Jackson's `userv-ipif' service. + +tripe-upstart + A configuration fragmwnt for starting Tripe under Maemo's ancient + version of upstart. It might work with other versions but it hasn't + been tested. diff --git a/contrib/tripe-upstart.in b/contrib/tripe-upstart.in new file mode 100644 index 00000000..aa6e4193 --- /dev/null +++ b/contrib/tripe-upstart.in @@ -0,0 +1,239 @@ +### -*-conf-*- +### +### Upstart control script for tripe. + +###-------------------------------------------------------------------------- +### Identification. + +description "TrIPE virtual private network server" +author "Mark Wooding " + +###-------------------------------------------------------------------------- +### Trigger conditions. + +start on stopped pymaemo-optify +stop on starting shutdown + +respawn + +###-------------------------------------------------------------------------- +### Process environment. + +console none + +###-------------------------------------------------------------------------- +### Pre-flight check. + +pre-start script + + [ -f @initconfig@ ] && . @initconfig@ + + : ${prefix=@prefix@} ${exec_prefix=@exec_prefix@} + : ${bindir=@bindir@} ${sbindir=@sbindir@} + : ${TRIPEDIR=@configdir@} ${TRIPESOCK=@socketdir@/tripesock} + : ${pidfile=@pidfile@} + : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl} + + PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir + export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF + + ## Give up if there's no binary. + if test ! -x "$tripe" || test ! -x "$tripectl"; then + echo >&2 "Not starting/stopping TrIPE: binary files missing" + exit 1 + fi + + ## Give up if there's no key. + if test ! -f "$TRIPEDIR/keyring" || + test ! -f "$TRIPEDIR/keyring.pub"; then + echo >&2 "Not starting/stopping TrIPE: keyring files missing" + exit 1 + fi + + ## Check it will work, or at least stands a fighting chance. + ## + ## (Having loads of different tunnel types doesn't help any.) + case ${tunnel-`$tripe --tunnels | head -1`},`uname -s` in + + ## Linux TUN/TAP. + linux,Linux) + if { test -f /proc/misc && grep -q tun /proc/misc; } || + modprobe -q tun; then + : good + else + echo >&2 "$tripe needs the Linux TUN/TAP driver to run." + exit 1 + fi + if test -c /dev/net/tun; then + : good + else + echo >&2 "$tripe needs /dev/net/tun, which is missing." + exit 1 + fi + ;; + + ## Linux Unet (obsolete). + unet,Linux) + if { test -f /proc/devices && grep -q unet /proc/devices; } || + modprobe -q unet; then + : good + else + echo >&2 "$tripe needs the Linux UNET driver to run." + exit 1 + fi + if test -c /dev/unet; then + : good + else + echo >&2 "$tripe needs /dev/unet, which is missing." + exit 1 + fi + ;; + + ## BSD tun. + bsd,*BSD) + ## Don't know how to check the device is working. Check the + ## device file exists and hope for the best. + if test -c /dev/tun0; then + : good + else + echo >&2 "$tripe needs /dev/tun0, which is missing." + exit 1 + fi + ;; + + ## SLIP. + slip,*) + if test "$TRIPE_SLIPIF" = ""; then + echo >&2 "$tripe needs SLIP interfaces set up!" + exit 1 + fi + ;; + + ## Various kinds of misconfiguration. + linux,* | unet,*) + echo >&2 "CONFIGURATION ERROR" + echo >&2 " $tripe is compiled to use a Linux tunnel device, but" + echo >&2 " this system is `uname -s`" + exit 1 + ;; + bsd,*) + echo >&2 "CONFIGURATION ERROR" + echo >&2 " $tripe is compiled to use a BSD tunnel device, but" + echo >&2 " this system is `uname -s`" + exit 1 + ;; + esac + +end script + +###-------------------------------------------------------------------------- +### Main startup. + +script + + [ -f @initconfig@ ] && . @initconfig@ + + : ${prefix=@prefix@} ${exec_prefix=@exec_prefix@} + : ${bindir=@bindir@} ${sbindir=@sbindir@} + : ${TRIPEDIR=@configdir@} ${TRIPESOCK=@socketdir@/tripesock} + : ${pidfile=@pidfile@} + : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl} + + PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir + export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF + + ## Start the server, passing lots of arguments. + $tripectl -s -p$tripe \ + -f${logfile-/var/log/tripe.log} \ + -P$pidfile \ + ${keytag+-S-t}$keytag \ + ${addr+-S-b}$addr \ + ${port+-S-p}${port} \ + ${user+-U}${user} \ + ${group+-G}${group} \ + ${trace+-S-T}${trace} \ + ${tunnel+-S-n}${tunnel} \ + ${miscopts} + +end script + +post-start script + + [ -f @initconfig@ ] && . @initconfig@ + + : ${prefix=@prefix@} ${exec_prefix=@exec_prefix@} + : ${bindir=@bindir@} ${sbindir=@sbindir@} + : ${TRIPEDIR=@configdir@} ${TRIPESOCK=@socketdir@/tripesock} + : ${pidfile=@pidfile@} + : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl} + + PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir + export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF + + ## Wait for the server to start up. This doesn't usually take long. + for i in 1 2 3 4 give-up; do + $tripectl help >/dev/null 2>/dev/null && break + sleep 1 + done + + if [ $i = give-up ]; then + echo >&2 "Tripe server wouldn't start" + exit 1 + fi + + ## Start up the ancillary services. + [ -d $TRIPEDIR/services ] && for i in $TRIPEDIR/services/*; do + [ -x $i ] || continue + name=`basename $i` + case $name in *~|\#*) continue;; esac + $i --daemon --startup || : + done + + ## Start up the statically configured peers. + [ -d $TRIPEDIR/peers ] && for i in $TRIPEDIR/peers/*; do + [ -x $i ] || continue + name=`basename $i` + case $name in *~|\#*) continue;; esac + $i || : + done + +end script + +###-------------------------------------------------------------------------- +### Shutdown. + +pre-stop script + + [ -f /etc/default/tripe ] && . /etc/default/tripe + + : ${prefix=/usr} ${exec_prefix=/usr} + : ${bindir=/usr/bin} ${sbindir=/usr/sbin} + : ${TRIPEDIR=/etc/tripe} ${TRIPESOCK=/var/run/tripesock} + : ${pidfile=/var/run/tripectl.pid} + : ${tripe=$sbindir/tripe} ${tripectl=$bindir/tripectl} + + PATH=/usr/bin:/usr/sbin:/bin:/sbin:$bindir + export PATH TRIPEDIR TRIPESOCK TRIPE_SLIPIF + + ## If there's no socket, it must have quit (probably nonviolently). + if test ! -S $TRIPESOCK; then + : + + ## Ask it to die nicely. + elif $tripectl quit >/dev/null 2>&1; then + : + + ## If there's no pidfile then tripectl presumably deleted it. + elif test ! -f $pidfile; then + rm -f $TRIPESOCK + + ## Otherwise kill the process unpleasantly. + elif kill `cat $pidfile`; then + : + else + exit 1 + fi + +end script + +###------ That's all, folks -------------------------------------------------