#!/bin/sh

shout() { echo "${0}: $@" >&2; }
barf() { shout "fatal: $@"; exit 111; }
safe() { "$@" || barf "cannot $@"; }

safe umask 022
here=`env - PATH=$PATH pwd`
mypwd=${here%package}
mypwd=${mypwd%/}
home=`head -1 $mypwd/conf-home`
logdir=`head -1 $mypwd/conf-log`
svcdir=`head -1 $mypwd/conf-svcdir`
[ -d $home/control ] || barf "no control directory"

nofiles=`grep auxiliar $mypwd/conf-ids | awk -F: '{print $2}'`
qmaill=`grep Log $mypwd/conf-ids | awk -F: '{print $2}'`

[ -d ${svcdir} ] || barf "No /service directory available."
[ `which supervise` ] || barf "No supervise available. Skipping"
[ `which multilog` ] || log=0

for i in `sed -e '/^svc:/!d' -e 's/^svc://' < package/services=d`
do
  all="$all $i"
done

# Generate log service dir

[ "X$logdir" = "X" ] || safe mkdir -p $logdir 
[ -d $logdir ] && log=1

# Walks thru all configured services

for i in $all
do 
  service=`echo $i | awk -F: '{print $1}'`
  svcname=`echo $i | awk -F: '{print $2}'`
  svc_run=`echo $i | awk -F: '{print $3}'`

# Generate $home/svc dirs and populate

  [ ! -d /$home/svc/$svcname ] && \
    safe mkdir -p $home/svc/$svcname && \
    safe cat $mypwd/service/$svc_run \
      | eval sed -e 's}/var/qmail}$home}g' \
      > $home/svc/$svcname/run && \
    safe chmod +x $home/svc/$svcname/run && \
    safe touch $home/svc/$svcname/down && \
    shout "Created '$home/svc/$svcname' dir" 

# Generate logdir for services and set permissions

   [ ! -d $logdir/$svcname -a $log -eq 1 ] && \
    safe mkdir -p $logdir/$svcname && \
    shout "Created '$logdir/$svcname' dir" 

  [ -d $logdir/$svcname -a $log -eq 1 ] && \
    safe chown $qmaill:$nofiles $logdir/$svcname && \
    shout "Set permissions for '$logdir/$svcname' dir" 

# Include log services

  [ ! -d /$home/svc/$svcname/log -a -d $logdir/$svcname -a $log -eq 1 ] && \
    safe mkdir -p $home/svc/$svcname/log && \
    safe cat $mypwd/service/run_log \
      | eval sed -e 's}qmaill}$qmaill}g' \
                 -e 's}nofiles}$nofiles}g' \
      > $home/svc/$svcname/log/run && \
    safe chmod +x $home/svc/$svcname/log/run && \
    safe ln -s $logdir/$svcname $home/svc/$svcname/log/main && \
    shout "Created '$home/svc/$svcname/log' dir" 

# Put the service under supervise (/$svcdir)

  [ ! -d /$svcdir/$svcname ] && \
    safe ln -s $home/svc/$svcname $svcdir/$svcname && \
    safe ln -s $home/control $svcdir/$svcname/ctl && \
    shout "Created '/$svcdir/$svcname' dir -- still 'down'" 

done

exit 0
