The main tasks of this script:
- Allow choice of another 'service' directory than the default hardcoded '/service' by modifying the SERVICEDIR variable.
- Patching of 'svscanboot' script to allow this choice
- Installation of the daemontools executables
- Adding start-up code to '/etc/rc.local'
Code:
#!/bin/sh +e
# $Id: new_daemontools_install,v 1.4 2009/11/13 03:52:31 root Exp $
# --- adjust these if needed
# Destination directory for the daemontools programs
DESTDIR='/usr/local/bin'
# The directory montored by svscan
SERVICEDIR=/var/service
DAEMONTOOLS='daemontools-0.76'
# -----------------------------
CURDIR=$(pwd)
cd admin/${DAEMONTOOLS}/src/
FILE=svscanboot
echo $0: ------ Modifying ${FILE} to remove '/command' from PATH
cp -p ${FILE} ${FILE}.orig
# --- inline patch !!!
cat <<'END' | patch -l ${FILE}
--- svscanboot.orig Sun Jan 22 05:40:17 2006
+++ svscanboot Sun Jan 22 06:04:07 2006
@@ -1,13 +1,16 @@
#!/bin/sh
# WARNING: This file was auto-generated. Do not edit!
-PATH=/command:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
+PATH=/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
+SERVICEDIR=$1
+[ "X$1" = "X" ] && SERVICEDIR=/service
+
exec </dev/null
exec >/dev/null
exec 2>/dev/null
-/command/svc -dx /service/* /service/*/log
+/usr/local/bin/svc -dx $SERVICEDIR/* $SERVICEDIR/*/log
-env - PATH=$PATH svscan /service 2>&1 | \
+env - PATH=$PATH svscan $SERVICEDIR 2>&1 | \
env - PATH=$PATH readproctitle service errors: ...........................................................
...........................................................................................................
...........................................................................................................
...........................................................................................................
....................
END
echo
echo Modified/patched svscanboot file :
echo ----------------------------------------------------------
cat $FILE
echo ----------------------------------------------------------
echo "About to install. Press Cntrl-C to not install " ; read a
for prog in $(cat $CURDIR/admin/${DAEMONTOOLS}/package/commands) ; do
echo Installing $prog
cp -p $CURDIR/admin/${DAEMONTOOLS}/src/$prog $DESTDIR
done
echo
echo $0: Creating "$SERVICEDIR" directory
mkdir -p $SERVICEDIR
# ---- add svscanboot startup to /etc/rc.local
echo
echo $0: Modifying "/etc/rc.local" to start up $DESTDIR/svscanboot at boot time
echo $0: $DESTDIR/svscanboot will monitor the service directory $SERVICEDIR
cat <<END >>/etc/rc.local
# -------- svscanboot of daemontools
SERVICEDIR=${SERVICEDIR}
if [ -x $DESTDIR/svscanboot ] ; then
echo -n "Starting svscanboot to monitor \$SERVICEDIR"
csh -cf "$DESTDIR/svscanboot \$SERVICEDIR &"
fi
END
echo
echo Contents of '/etc/rc.local':
cat /etc/rc.local
echo =========================v
echo $0: finished!
echo
Please note that I modified the script to use "/var/service".
Produced output:
Code:
# ./new_daemontools_install
./new_daemontools_install: ------ Modifying svscanboot to remove /command from PATH
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- svscanboot.orig Sun Jan 22 05:40:17 2006
|+++ svscanboot Sun Jan 22 06:04:07 2006
--------------------------
Patching file svscanboot using Plan A...
Hunk #1 succeeded at 1.
done
Modified/patched svscanboot file :
----------------------------------------------------------
#!/bin/sh
# WARNING: This file was auto-generated. Do not edit!
PATH=/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
SERVICEDIR=$1
[ "X$1" = "X" ] && SERVICEDIR=/service
exec </dev/null
exec >/dev/null
exec 2>/dev/null
/usr/local/bin/svc -dx $SERVICEDIR/* $SERVICEDIR/*/log
env - PATH=$PATH svscan $SERVICEDIR 2>&1 | \
env - PATH=$PATH readproctitle service errors: ............................................................
...........................................................................................................
...........................................................................................................
...........................................................................................................
...................
----------------------------------------------------------
About to install. Press Cntrl-C to not install
Installing svscan
Installing svscanboot
Installing supervise
Installing svc
Installing svok
Installing svstat
Installing fghack
Installing pgrphack
Installing readproctitle
Installing multilog
Installing tai64n
Installing tai64nlocal
Installing softlimit
Installing setuidgid
Installing envuidgid
Installing envdir
Installing setlock
./new_daemontools_install: Creating /var/service directory
./new_daemontools_install: Modifying /etc/rc.local to start up /usr/local/bin/svscanboot at boot time
./new_daemontools_install: /usr/local/bin/svscanboot will monitor the service directory /var/service
Contents of /etc/rc.local:
# $OpenBSD: rc.local,v 1.39 2006/07/28 20:19:46 sturm Exp $
# Site-specific startup actions, daemons, and other things which
# can be done AFTER your system goes into securemode. For actions
# which should be done BEFORE your system has gone into securemode
# please see /etc/rc.securelevel.
echo -n 'starting local daemons:'
# Add your local startup actions here.
echo '.'
# -------- svscanboot of daemontools
SERVICEDIR=/var/service
if [ -x /usr/local/bin/svscanboot ] ; then
echo -n "Starting svscanboot to monitor $SERVICEDIR"
csh -cf "/usr/local/bin/svscanboot $SERVICEDIR &"
fi
=========================v
./new_daemontools_install: finished!
The installed daemontools programs:
Code:
# ls -l /usr/local/bin
total 436
-rwxr-xr-x 1 root wheel 13844 Nov 13 10:53 envdir
-rwxr-xr-x 1 root wheel 13812 Nov 13 10:53 envuidgid
-rwxr-xr-x 1 root wheel 13812 Nov 13 10:53 fghack
-rwxr-xr-x 1 root wheel 22196 Nov 13 10:53 multilog
-rwxr-xr-x 1 root wheel 13812 Nov 13 10:53 pgrphack
-rwxr-xr-x 1 root wheel 5588 Nov 13 10:53 readproctitle
-rwxr-xr-x 1 root wheel 13844 Nov 13 10:53 setlock
-rwxr-xr-x 1 root wheel 13812 Nov 13 10:53 setuidgid
-rwxr-xr-x 1 root wheel 13844 Nov 13 10:53 softlimit
-rwxr-xr-x 1 root wheel 16436 Nov 13 10:53 supervise
-rwxr-xr-x 1 root wheel 11956 Nov 13 10:53 svc
-rwxr-xr-x 1 root wheel 11572 Nov 13 10:53 svok
-rwxr-xr-x 1 root wheel 17940 Nov 13 10:53 svscan
-r-xr-xr-x 1 root wheel 800 Nov 13 10:56 svscanboot
-rwxr-xr-x 1 root wheel 13844 Nov 13 10:53 svstat
-rwxr-xr-x 1 root wheel 5652 Nov 13 10:53 tai64n
-rwxr-xr-x 1 root wheel 9716 Nov 13 10:53 tai64nlocal
To start daemontools you either reboot or execute the startup code in "/etc/rc.local'.
The following processes will now be running:
Code:
8594 C0- I 0:00.00 /bin/sh /usr/local/bin/svscanboot /var/service
21025 C0- S 0:00.01 svscan /var/service
17921 C0- I 0:00.00 readproctitle service errors: .........................