View Single Post
  #2   (View Single Post)  
Old 13th November 2009
J65nko J65nko is offline
Administrator
 
Join Date: May 2008
Location: Budel - the Netherlands
Posts: 4,131
Default new_daemontools_install

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: .........................
__________________
You don't need to be a genius to debug a pf.conf firewall ruleset, you just need the guts to run tcpdump

Last edited by J65nko; 13th November 2009 at 10:27 AM. Reason: Upgrading placeholder to the 'Real Thing (tm)'
Reply With Quote