From 12b22256f2430dbdbb59a6119eb7732ba942fca1 Mon Sep 17 00:00:00 2001 From: Daniel Joseph Barnhart Clark Date: Thu, 24 Aug 2006 03:03:41 +0000 Subject: EncapPackages: Restructuring directory layout git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@2102 ce84e21b-d406-0410-9b95-82705330c041 --- encap/src/encap-profiles/daemontools-0.76.ep | 444 +++++++++++++++++++++++++++ 1 file changed, 444 insertions(+) create mode 100644 encap/src/encap-profiles/daemontools-0.76.ep (limited to 'encap/src/encap-profiles/daemontools-0.76.ep') diff --git a/encap/src/encap-profiles/daemontools-0.76.ep b/encap/src/encap-profiles/daemontools-0.76.ep new file mode 100644 index 000000000..c09b67a72 --- /dev/null +++ b/encap/src/encap-profiles/daemontools-0.76.ep @@ -0,0 +1,444 @@ + + + + + + + + + + + + + +PLATFORM_IF_MATCH(linux) +PLATFORM_ELSE + +PLATFORM_ENDIF + + + + + + extern int error_intr; + extern int error_nomem; +diff -ru daemontools-0.76/src/svscan.c daemontools-0.76.new/src/svscan.c +--- daemontools-0.76/src/svscan.c 2001-07-12 12:49:49.000000000 -0400 ++++ daemontools-0.76.new/src/svscan.c 2004-02-08 01:50:27.000000000 -0500 +@@ -1,6 +1,7 @@ + #include + #include + #include ++#include + #include "direntry.h" + #include "strerr.h" + #include "error.h" +@@ -14,6 +15,11 @@ + + #define SERVICES 1000 + ++#ifndef SVSCANINFO ++#define SVSCANINFO ".svscan" /* must begin with dot ('.') */ ++#endif ++ ++#define INFO "svscan: info: " + #define WARNING "svscan: warning: " + #define FATAL "svscan: fatal: " + +@@ -38,7 +44,7 @@ + int i; + const char *args[3]; + +- if (fn[0] == '.') return; ++ if (fn[0] == '.' && str_diff(fn,SVSCANINFO)) return; + + if (stat(fn,&st) == -1) { + strerr_warn4(WARNING,"unable to stat ",fn,": ",&strerr_sys); +@@ -59,7 +65,8 @@ + } + x[i].ino = st.st_ino; + x[i].dev = st.st_dev; +- x[i].pid = 0; ++ /*(fn[0]=='.' here only if SVSCANINFO; if so only supervise log/ subdir)*/ ++ x[i].pid = (fn[0] != '.') ? 0 : -1; + x[i].pidlog = 0; + x[i].flaglog = 0; + +@@ -190,12 +197,39 @@ + } + } + ++static void open_svscan_log(void) ++{ ++ const int i = numx; ++ struct stat st; ++ static char fn[] = SVSCANINFO; /* avoid compiler warning on const string */ ++ ++ /* (semi-paranoid; could be moreso) */ ++ if (fstat(STDIN_FILENO,&st) != 0 && errno == EBADF) ++ (void) open("/dev/null", O_RDONLY); ++ if (fstat(STDOUT_FILENO,&st) != 0 && errno == EBADF) ++ (void) open("/dev/null", O_WRONLY); ++ if (fstat(STDERR_FILENO,&st) != 0 && errno == EBADF) ++ (void) open("/dev/null", O_WRONLY); ++ ++ if (stat(fn,&st) == 0) { ++ start(fn); ++ if (i+1 == numx && x[i].pidlog != 0) { ++ (void) dup2(x[i].pi[1], STDOUT_FILENO); ++ (void) dup2(x[i].pi[1], STDERR_FILENO); ++ strerr_warn1("",0); ++ strerr_warn2(INFO,"*** Starting svscan",0); ++ } ++ } ++} ++ + int main(int argc,char **argv) + { + if (argv[0] && argv[1]) + if (chdir(argv[1]) == -1) + strerr_die4sys(111,FATAL,"unable to chdir to ",argv[1],": "); + ++ open_svscan_log(); ++ + for (;;) { + doit(); + sleep(5); + +]]> + + + + + + +: + + + +./package/compile + + + +test -d ${ENCAP_SOURCE} || mkdir ${ENCAP_SOURCE} +test -d ${ENCAP_SOURCE}/${ENCAP_PKGNAME} || mkdir ${ENCAP_SOURCE}/${ENCAP_PKGNAME} +test -d ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/bin || mkdir ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/bin +test -d ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/src || mkdir ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/src +test -d ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package || mkdir ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package +cp command/* ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/bin +cp package/run ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package +cp package/commands ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package +cp package/boot.inittab ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package +cp package/boot.rclocal ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package +cp package/run.inittab ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package +cp package/run.rclocal ${ENCAP_SOURCE}/${ENCAP_PKGNAME}/package + + + +: + + + + + +mv package/run package/run.orig +mv package/run.inittab package/run.inittab.orig +mv package/boot.inittab package/boot.inittab.orig +mv package/run.rclocal package/run.inittab.orig +mv package/boot.rclocal package/boot.inittab.orig +mkdir var 2>/dev/null || exit 1 +mkdir var/svc.d 2>/dev/null || exit 1 +mkdir var/svc.d/svscan 2>/dev/null || exit 1 +mkdir var/svc.d/svscan/log 2>/dev/null || exit 1 +mkdir var/encap 2>/dev/null || exit 1 +touch var/encap/${ENCAP_PKGNAME} + + +&1 +exec /command/multilog t /usr/local/var/multilog/svscan +]]> + + + +/dev/null 2>&1 + +for log_dir in "$SERVICES"/*/log "$SERVICES"/.svscan/log; do + if [ -d "$log_dir" ] \ + && svok "$log_dir" \ + && svstat "$log_dir" | grep -q ": up" + then + svc -ox "$log_dir" + fi +done + +for service_dir in "$SERVICES"/*; do + if [ -d "$service_dir" ] \ + && svok "$service_dir" \ + && svstat "$service_dir" | grep -q ": up" + then + [ -x "$service_dir"/shutdown ] && "$service_dir"/shutdown + svc -dx "$service_dir" + fi +done + +[ "$1" = "start" ] && exec env - PATH=$PATH svscan "$SERVICES" +]]> + + /usr/local/var/svc.d/svscan ...' +ln -s /usr/local/var/svc.d/svscan /service/.svscan + +if test -r /etc/inittab +then + /command/setlock /etc/inittab package/run.inittab +else + /command/setlock /etc/rc.local package/run.rclocal +fi +]]> + +/dev/null +then + echo 'inittab contains an svscan.rc line. I assume that svscan is already running. +' +else + echo 'Adding svscan.rc to inittab...' + rm -f /etc/inittab'{new}' + cat /etc/inittab package/boot.inittab > /etc/inittab'{new}' + mv -f /etc/inittab'{new}' /etc/inittab + kill -HUP 1 + echo 'init should start svscan now.' +fi +]]> + + + +/dev/null +then + echo 'rc.local contains an svscan.rc line. I assume that svscan is already running +.' +else + echo 'Adding svscan.rc to /etc/rc.local...' + rm -f /etc/rc.local'{new}' + cat /etc/rc.local package/boot.rclocal > /etc/rc.local'{new}' + mv -f /etc/rc.local'{new}' /etc/rc.local + echo 'Reboot now to start svscan.' +fi +]]> + + + + $LOG 2>&1 +printf "Running daemontools postinstall script...\n" +date +test -d /usr/local/var || mkdir /usr/local/var +test -d /usr/local/var/multilog || mkdir /usr/local/var/multilog +test -d /usr/local/var/multilog/svscan || mkdir /usr/local/var/multilog/svscan +test -h /command || ln -s /usr/local/encap/daemontools-0.76/bin /command +cd /usr/local/encap/daemontools-0.76 && ./package/run +printf "Finished daemontools postinstall script.\n" +]]> + + +description daemontools - a collection of tools for managing UNIX services +exclude src +exclude package + + + -- cgit v1.2.3-1-g7c22