summaryrefslogtreecommitdiff
path: root/astro
diff options
context:
space:
mode:
authorDirk Meyer <dinoex@FreeBSD.org>2003-06-01 05:45:34 +0000
committerDirk Meyer <dinoex@FreeBSD.org>2003-06-01 05:45:34 +0000
commit044a2ff8cf2fd5f4864a3e696d549a7570d607d9 (patch)
tree279a3ec4d9ff546ca3ca7afbcd6a95c992ea2dd7 /astro
parent- Update to 1.1.0 (diff)
version bump to 3.08 w/ the following enhancements :
- only one master shell to monitor multiple setiathome instances - wait some time for setiathome server to come up between restarts - xsetiathome comes back - -graphics is now the default (so xsetiathome may be launched) - registration heuristic changed (see comments below) - take care, some variable names have changed (see comments below) - manual page reviewed The setiathome manual page refer to setiathome.conf while it is now named rc.setiathome.conf. also, the manual page has been completed (variables, start/stop scripts, etc.) - gracefull startup script option added Makefile PORTVERSION bumped PORTREVISION deleted FORBIDDEN deleted BROKEN bumped to 4.0 NO_XBIN deleted except for linux_base-6 wrapper added pkg-install registration heuristic changed (don't register if already registered, then automatically start setiathome in either case) pkg-list $FreeBSD$ added libexec/setiathome.bin added pkg-message FreeBSD 5.x a.out comment changed to FreeBSD 4.x comment files/rc.setiathome.conf seti_std_args defaulted to "-email -graphics" seti_proxy_args changed to seti_proxy_server seti_socks_server, seti_socks_user, seti_socks_passwd added seti_sleep changed to seti_sleep_time files/setiathome.1 /usr/local changed to %%PREFIX%% above and below changes described files/setiathome.sh same changes as files/rc.setiathome.conf don't start setiathome if already started su heuristic changed to call an external wrapper gracefull (aka apachectl :) option added using stop_after_send.txt PR: 50723,51759,52297,52709 Submitted by: cyrille.lefevre@laposte.net
Diffstat (limited to 'astro')
-rw-r--r--astro/setiathome/Makefile45
-rw-r--r--astro/setiathome/distinfo2
-rw-r--r--astro/setiathome/files/rc.setiathome.conf15
-rw-r--r--astro/setiathome/files/setiathome.153
-rw-r--r--astro/setiathome/files/setiathome.bin426
-rw-r--r--astro/setiathome/files/setiathome.sh86
-rw-r--r--astro/setiathome/pkg-install43
-rw-r--r--astro/setiathome/pkg-message9
-rw-r--r--astro/setiathome/pkg-plist2
9 files changed, 594 insertions, 87 deletions
diff --git a/astro/setiathome/Makefile b/astro/setiathome/Makefile
index 171bf0498158..785e32430deb 100644
--- a/astro/setiathome/Makefile
+++ b/astro/setiathome/Makefile
@@ -5,8 +5,7 @@
# $FreeBSD$
PORTNAME= setiathome
-PORTVERSION?= 3.03
-PORTREVISION?= 7
+PORTVERSION?= 3.08
CATEGORIES?= astro
MASTER_SITES= ftp://ftp.cdrom.com/pub/setiathome/ \
ftp://alien.ssl.berkeley.edu/pub/
@@ -16,10 +15,6 @@ EXTRACT_SUFX= .tar
MAINTAINER?= cyrille.lefevre@laposte.net
COMMENT?= Donate idle cycles to the search for space aliens
-.if ${PORTVERSION} == "3.03"
-FORBIDDEN= 'Exploitable buffer overflow. http://spoor12.edup.tudelft.nl/'
-.endif
-
.include <bsd.port.pre.mk>
# Global variables
@@ -34,8 +29,8 @@ ONLY_FOR_ARCHS?= alpha i386
NO_BUILD= binary distribution
NO_CDROM= interactive install
-.if ${OSVERSION} <= 226000
-BROKEN= "currently supports only FreeBSD 2.2.6 and above"
+.if ${OSVERSION} < 400000
+BROKEN= "currently supports only FreeBSD 4.0 and above"
.endif
EXTRACT_CMD= ${CAT}
@@ -63,7 +58,7 @@ PORT_OSREL= v4.0d
.else
PORT_VENDOR?= unknown
PORT_OSNAME?= freebsd
-PORT_OSREL?= 2.2.8
+PORT_OSREL?= 4.0
.endif
PORT_OS= ${PORT_OSNAME}${PORT_OSREL}
PORT_HOST= ${PORT_CPU}-${PORT_VENDOR}-${PORT_OS}
@@ -82,15 +77,13 @@ DESCR= ${.CURDIR}/pkg-descr
.if !exists(${LINUXBASE}/usr/X11R6/lib/libXaw.so.7)
NO_XBIN= libXaw.so.7 is missing from linux_base-6
.endif
-NO_XBIN?= xsetiathome is broken
.endif
-.elif ${OSVERSION} >= 300000
-NO_XBIN= xsetiathome is broken
.endif
# Local variables
#
+LBIN_DIR= ${PREFIX}/libexec
SBIN_DIR= ${PREFIX}/sbin
CONF_DIR= ${PREFIX}/etc
RC_DIR= ${PREFIX}/etc/rc.d
@@ -100,18 +93,8 @@ SAMP_SUFX= .sample
BIN_FILE= setiathome
RC_FILES= setiathome
-# i386 NOTES:
-# xsetiathome is currently broken at 4.2. should work at 2.x,
-# don't know between 3.0 and 4.2 ? so, be conservative...
-# diagnostic messages are :
-# Warning: Cannot convert string "doneB" to type Widget
-# Floating point exception (core dumped)
# Linux NOTES:
# xsetiathome requires libXawk.so.7 which is missing from linux_base-6.
-# using linux_base-7, diagnostic messages are :
-# Warning: Cannot convert string "doneB" to type Widget
-# Shared memory segment doesn't exist. errno=2
-# Couldn't attach to the science process!
.if !defined(NO_XBIN)
MAN1+= x${PORTNAME}.1
@@ -125,7 +108,7 @@ X11PORTS= "@comment "
# Post-patch
#
-post-patch: patch-pkgmessage
+post-patch: patch-pkgmessage patch-man
patch-pkgmessage:
@${SED} 's|%%PREFIX%%|${PREFIX}|g; \
@@ -133,6 +116,16 @@ patch-pkgmessage:
s|%%SUFX%%|${PKGNAMESUFFIX}|g' \
${MSG_FILE} > ${PKGMESSAGE}
+patch-man:
+.for mansect in 1
+.for man in ${MAN${mansect}}
+ @${SED} 's|%%PREFIX%%|${PREFIX}|g; \
+ s|%%PREFX%%|${PKGNAMEPREFIX}|g; \
+ s|%%SUFX%%|${PKGNAMESUFFIX}|g' \
+ ${FILESDIR}/${man} > ${WRKDIR}/${man}
+.endfor
+.endfor
+
# Install
#
@@ -151,7 +144,7 @@ install-program:
install-man:
.for mansect in 1
.for man in ${MAN${mansect}}
- @${INSTALL_MAN} ${FILESDIR}/${man} \
+ @${INSTALL_MAN} ${WRKDIR}/${man} \
${MAN${mansect}PREFIX}/man/man${mansect}
.endfor
.endfor
@@ -178,6 +171,10 @@ install-startup-files:
@${INSTALL_SCRIPT} ${FILESDIR}/${file}.sh \
${RC_DIR}/${PKGNAMEPREFIX}${file}${PKGNAMESUFFIX}.sh
.endif
+.if exists(${FILESDIR}/${file}.bin)
+ @${INSTALL_SCRIPT} ${FILESDIR}/${file}.bin \
+ ${LBIN_DIR}/${PKGNAMEPREFIX}${file}${PKGNAMESUFFIX}.bin
+.endif
.endfor
configure-package:
diff --git a/astro/setiathome/distinfo b/astro/setiathome/distinfo
index abbf450f439e..2409a3f71c12 100644
--- a/astro/setiathome/distinfo
+++ b/astro/setiathome/distinfo
@@ -1 +1 @@
-MD5 (setiathome-3.03.i386-unknown-freebsd2.2.8.tar) = 2dd4c9016059b7532ae721c7b92be821
+MD5 (setiathome-3.08.i386-unknown-freebsd4.0.tar) = f6ba42a3bd93313cf61df62cde3c262e
diff --git a/astro/setiathome/files/rc.setiathome.conf b/astro/setiathome/files/rc.setiathome.conf
index f7049c5855b2..209917e17e36 100644
--- a/astro/setiathome/files/rc.setiathome.conf
+++ b/astro/setiathome/files/rc.setiathome.conf
@@ -4,11 +4,14 @@
#
# seti_wrkdir=/var/db/${rc_file%.sh} # primary working directory
-# seti_std_args=-email # command arguments for standard mode
-# seti_reg_args=-login # command arguments for register mode
-# seti_proxy_args= # proxy arguments
-# seti_user=setiathome # user id to run as
-# seti_group=${seti_user} # group id to run as
+# seti_std_args="-email -graphics" # startup command line arguments
+# seti_reg_args=-login # command line arguments to register
+# seti_proxy_server= # HTTP proxy server (hostname:port)
+# seti_socks_server= # SOCKS proxy server (hostname:port)
+# seti_socks_user= # SOCKS proxy user name
+# seti_socks_passwd= # SOCKS proxy password
+# seti_user=setiathome # user name to run as
+# seti_group=${seti_user} # group name to run as
# seti_nice=15 # nice level to run at
# seti_maxprocs=$(sysctl -n hw.ncpu) # max. number of processes to start
-# seti_sleep=21600 # time to sleep between restarts
+# seti_sleep_time=21600 # time to sleep between restarts
diff --git a/astro/setiathome/files/setiathome.1 b/astro/setiathome/files/setiathome.1
index 4ac329052633..3ad84bf3fd53 100644
--- a/astro/setiathome/files/setiathome.1
+++ b/astro/setiathome/files/setiathome.1
@@ -118,22 +118,51 @@ This
.Fx
port includes a start-up script that starts
.Nm
-at system start-up.
+at system start-up and stop it at system shut-down.
+.Ss Stopping setiathome
+There is two way to stop
+.Nm ,
+gracefully (See
+.Pa stop_after_send.txt
+mentioned in
+.Sx FILES
+below) and urgently (using kill as done at system shut-down time).
+To do so, respectively run
+.Pp
+.Dl %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh gracefull
+or
+.Dl %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh stop
.Ss Configuration File
The optional configuration file
-.Pa /usr/local/etc/setiathome.conf
-can contain one or more of the following variable assignments to override
+.Pa %%PREFIX%%/etc/rc.%%PREFX%%setiathome%%SUFX%%.conf
+may contain one or more of the following variable assignments to override
their default values:
.Bl -tag -width seti_wrkdir
.It Pa seti_wrkdir=/var/db/setiathome
The working directory where
.Nm
will store it's temporary files.
-.It Pa seti_user=nobody
+.It Pa seti_std_args=-email and/or -graphics
+The command line arguments for normal start-up.
+.It Pa seti_reg_args=-login
+The command line arguments for registration.
+.It Pa seti_proxy_server=hostname:port
+The HTTP proxy server and port to connect through.
+.It Pa seti_socks_server=hostname:port
+The SOCKS server and port to connect through.
+.It Pa seti_socks_user=username
+The SOCKS user name to connect with.
+.It Pa seti_socks_passwd=password
+The SOCKS password to connect with.
+.It Pa seti_user=setiathome
The user to run
.Nm
as.
-.It Pa seti_nice=1
+.It Pa seti_group=setiathome
+The group to run
+.Nm
+as (only used at registration time).
+.It Pa seti_nice=15
The
.Xr nice 1
value to run
@@ -146,6 +175,10 @@ processes to run concurrently. Defaults to the number of CPUs installed.
Running more than one instance per CPU is not useful, as
.Nm
is almost completely CPU-bound.
+.It Pa seti_sleep_time=21600
+The time to sleep (in seconds) between restarts if the
+.Nm
+data server is unresponsive.
.El
.Pp
If you change values in the configuration file, you need to stop and start
@@ -153,9 +186,9 @@ If you change values in the configuration file, you need to stop and start
and possibly reconfigure the working directory for the changes to take
effect. Run
.Pp
-.Dl /usr/local/etc/rc.d/setiathome.sh stop
-.Dl /usr/local/etc/rc.d/setiathome.sh register
-.Dl /usr/local/etc/rc.d/setiathome.sh start
+.Dl %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh stop
+.Dl %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh register
+.Dl %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh start
.Pp
to do that.
.Ss Setting up setiathome
@@ -210,10 +243,10 @@ will query you.
.El
.Sh FILES
.Bl -tag -width /var/db -compact
-.It Pa /usr/local/etc/rc.d/setiathome.sh
+.It Pa %%PREFIX%%/etc/rc.d/%%PREFX%%setiathome%%SUFX%%.sh
Start-up script.
.Pp
-.It Pa /usr/local/etc/setiathome.conf
+.It Pa %%PREFIX%%/etc/rc.%%PREFX%%setiathome%%SUFX%%.conf
Optional configuration file for the start-up script.
.Pp
.It Pa /var/db/setiathome/
diff --git a/astro/setiathome/files/setiathome.bin b/astro/setiathome/files/setiathome.bin
new file mode 100644
index 000000000000..3aff3acff02b
--- /dev/null
+++ b/astro/setiathome/files/setiathome.bin
@@ -0,0 +1,426 @@
+#!/bin/sh -T
+
+# $FreeBSD$
+
+# Copyright (c) 2003 Cyrille Lefevre. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. The name of the authors and contributors may not be used to
+# endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+setistart () { # dir
+ local dir
+ dir=$1
+
+ # goto the startup dir
+ cd ${dir} || return
+
+ # don't start a dying client
+ [ -f stop_after_send.txt ] && return
+
+ # fire up a setiathome client
+ ${program_path} ${program_args} > /dev/null &
+
+ # memorize the startup dir
+ eval pid_$!=${dir}
+ # and the client process ID
+ setipids="${setipids} $!"
+}
+
+setikill () { # SIGTERM handler
+ local pids pid
+
+ # save pids to kill
+ pids="${sleeppid} ${setipids}"
+ # avoid futher setiathome startup
+ unset setipids
+
+ # kill'em all if any
+ for pid in ${pids}; do
+ ps p ${pid} > /dev/null && kill ${pid}
+ done
+}
+
+setirestart () { # SIGCHLD handler
+ local pids pid dir
+
+ # killing in progress
+ [ -n "${setipids}" ] || return
+ # restart in process
+ [ -n "${sleeppids}" ] && return
+
+ # wait for setiathome servers to come up
+ sleep ${seti_sleep_time} &
+
+ # wait even if more than one setiathome client dies
+ sleeppid=$!
+ while ps p ${sleeppid} > /dev/null; do
+ wait ${sleeppid}
+ done
+ unset sleeppid
+
+ # killing while sleeping
+ [ -n "${setipids}" ] || return
+
+ # save pids to restart
+ pids=${setipids}
+ # reset the process ID list
+ unset setipids
+
+ for pid in ${pids}; do
+ if ps p ${pid} > /dev/null; then
+ # still alive
+ setipids="${setipids} ${pid}"
+ else
+ # backup the startup dir
+ eval dir=\${pid_${pid}}
+ # clean the old one
+ unset pid_${pid}
+ # launch the dead client
+ eval setistart ${dir}
+ fi
+ done
+}
+
+if [ -z "${program_path}" ]; then
+ case $0 in
+ /*) rc_dir=${0%/*} ;;
+ *) rc_dir=${PWD:-$(pwd)} ;;
+ esac
+ rc_file=${0##*/}
+ rc_path=${rc_dir}/${rc_file}
+
+ if ! PREFIX=$(expr ${rc_path} : "\(/.*\)/libexec/${rc_file}\$"); then
+ echo "${rc_file}: Cannot determine PREFIX." >&2
+ echo "Please use the complete pathname." >&2
+ exit 64
+ fi
+
+ echo "Don't use this script directly, uses the following one instead :" >&2
+ echo " ${PREFIX}/etc/rc.d/${rc_file%.bin}.sh start" >&2
+ exit 1
+fi
+
+# save this shell process ID
+echo $$ > ${seti_wrkdir}/shpid.sah
+
+# setup handlers
+trap setikill TERM
+trap setirestart CHLD
+
+# startup setiathome client(s)
+for dir in ${seti_wrksuff}; do
+ setistart ${seti_wrkdir}/${dir}
+done
+
+# wait for them until death
+while [ -n "${setipids}" ]; do
+ wait
+done
+#!/bin/sh -T
+
+# $FreeBSD$
+
+# Copyright (c) 2003 Cyrille Lefevre. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. The name of the authors and contributors may not be used to
+# endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+setistart () { # dir
+ local dir
+ dir=$1
+
+ # goto the startup dir
+ cd ${dir} || return
+
+ # don't start a dying client
+ [ -f stop_after_send.txt ] && return
+
+ # fire up a setiathome client
+ ${program_path} ${program_args} > /dev/null &
+
+ # memorize the startup dir
+ eval pid_$!=${dir}
+ # and the client process ID
+ setipids="${setipids} $!"
+}
+
+setikill () { # SIGTERM handler
+ local pids pid
+
+ # save pids to kill
+ pids="${sleeppid} ${setipids}"
+ # avoid futher setiathome startup
+ unset setipids
+
+ # kill'em all if any
+ for pid in ${pids}; do
+ ps p ${pid} > /dev/null && kill ${pid}
+ done
+}
+
+setirestart () { # SIGCHLD handler
+ local pids pid dir
+
+ # killing in progress
+ [ -n "${setipids}" ] || return
+ # restart in process
+ [ -n "${sleeppids}" ] && return
+
+ # wait for setiathome servers to come up
+ sleep ${seti_sleep_time} &
+
+ # wait even if more than one setiathome client dies
+ sleeppid=$!
+ while ps p ${sleeppid} > /dev/null; do
+ wait ${sleeppid}
+ done
+ unset sleeppid
+
+ # killing while sleeping
+ [ -n "${setipids}" ] || return
+
+ # save pids to restart
+ pids=${setipids}
+ # reset the process ID list
+ unset setipids
+
+ for pid in ${pids}; do
+ if ps p ${pid} > /dev/null; then
+ # still alive
+ setipids="${setipids} ${pid}"
+ else
+ # backup the startup dir
+ eval dir=\${pid_${pid}}
+ # clean the old one
+ unset pid_${pid}
+ # launch the dead client
+ eval setistart ${dir}
+ fi
+ done
+}
+
+if [ -z "${program_path}" ]; then
+ case $0 in
+ /*) rc_dir=${0%/*} ;;
+ *) rc_dir=${PWD:-$(pwd)} ;;
+ esac
+ rc_file=${0##*/}
+ rc_path=${rc_dir}/${rc_file}
+
+ if ! PREFIX=$(expr ${rc_path} : "\(/.*\)/libexec/${rc_file}\$"); then
+ echo "${rc_file}: Cannot determine PREFIX." >&2
+ echo "Please use the complete pathname." >&2
+ exit 64
+ fi
+
+ echo "Don't use this script directly, uses the following one instead :" >&2
+ echo " ${PREFIX}/etc/rc.d/${rc_file%.bin}.sh start" >&2
+ exit 1
+fi
+
+# save this shell process ID
+echo $$ > ${seti_wrkdir}/shpid.sah
+
+# setup handlers
+trap setikill TERM
+trap setirestart CHLD
+
+# startup setiathome client(s)
+for dir in ${seti_wrksuff}; do
+ setistart ${seti_wrkdir}/${dir}
+done
+
+# wait for them until death
+while [ -n "${setipids}" ]; do
+ wait
+done
+#!/bin/sh -T
+
+# $FreeBSD$
+
+# Copyright (c) 2003 Cyrille Lefevre. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. The name of the authors and contributors may not be used to
+# endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS''
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+setistart () { # dir
+ local dir
+ dir=$1
+
+ # goto the startup dir
+ cd ${dir} || return
+
+ # don't start a dying client
+ [ -f stop_after_send.txt ] && return
+
+ # fire up a setiathome client
+ ${program_path} ${program_args} > /dev/null &
+
+ # memorize the startup dir
+ eval pid_$!=${dir}
+ # and the client process ID
+ setipids="${setipids} $!"
+}
+
+setikill () { # SIGTERM handler
+ local pids pid
+
+ # save pids to kill
+ pids="${sleeppid} ${setipids}"
+ # avoid futher setiathome startup
+ unset setipids
+
+ # kill'em all if any
+ for pid in ${pids}; do
+ ps p ${pid} > /dev/null && kill ${pid}
+ done
+}
+
+setirestart () { # SIGCHLD handler
+ local pids pid dir
+
+ # killing in progress
+ [ -n "${setipids}" ] || return
+ # restart in process
+ [ -n "${sleeppids}" ] && return
+
+ # wait for setiathome servers to come up
+ sleep ${seti_sleep_time} &
+
+ # wait even if more than one setiathome client dies
+ sleeppid=$!
+ while ps p ${sleeppid} > /dev/null; do
+ wait ${sleeppid}
+ done
+ unset sleeppid
+
+ # killing while sleeping
+ [ -n "${setipids}" ] || return
+
+ # save pids to restart
+ pids=${setipids}
+ # reset the process ID list
+ unset setipids
+
+ for pid in ${pids}; do
+ if ps p ${pid} > /dev/null; then
+ # still alive
+ setipids="${setipids} ${pid}"
+ else
+ # backup the startup dir
+ eval dir=\${pid_${pid}}
+ # clean the old one
+ unset pid_${pid}
+ # launch the dead client
+ eval setistart ${dir}
+ fi
+ done
+}
+
+if [ -z "${program_path}" ]; then
+ case $0 in
+ /*) rc_dir=${0%/*} ;;
+ *) rc_dir=${PWD:-$(pwd)} ;;
+ esac
+ rc_file=${0##*/}
+ rc_path=${rc_dir}/${rc_file}
+
+ if ! PREFIX=$(expr ${rc_path} : "\(/.*\)/libexec/${rc_file}\$"); then
+ echo "${rc_file}: Cannot determine PREFIX." >&2
+ echo "Please use the complete pathname." >&2
+ exit 64
+ fi
+
+ echo "Don't use this script directly, uses the following one instead :" >&2
+ echo " ${PREFIX}/etc/rc.d/${rc_file%.bin}.sh start" >&2
+ exit 1
+fi
+
+# save this shell process ID
+echo $$ > ${seti_wrkdir}/shpid.sah
+
+# setup handlers
+trap setikill TERM
+trap setirestart CHLD
+
+# startup setiathome client(s)
+for dir in ${seti_wrksuff}; do
+ setistart ${seti_wrkdir}/${dir}
+done
+
+# wait for them until death
+while [ -n "${setipids}" ]; do
+ wait
+done
diff --git a/astro/setiathome/files/setiathome.sh b/astro/setiathome/files/setiathome.sh
index 57b4a55d22aa..4e6b7e7fe061 100644
--- a/astro/setiathome/files/setiathome.sh
+++ b/astro/setiathome/files/setiathome.sh
@@ -14,15 +14,20 @@ rc_path=${rc_dir}/${rc_file}
rc_arg=$1
# override these variables in ${PREFIX}/etc/rc.setiathome.conf
+set -a
seti_wrkdir=/var/db/${rc_file%.sh} # primary working directory
-seti_std_args=-email # command arguments for standard mode
-seti_reg_args=-login # command arguments for register mode
-seti_proxy_args= # proxy arguments
-seti_user=setiathome # user id to run as
-seti_group=${seti_user} # group id to run as
+seti_std_args="-email -graphics" # startup command line arguments
+seti_reg_args=-login # command line arguments to register
+seti_proxy_server= # HTTP proxy server (hostname:port)
+seti_socks_server= # SOCKS proxy server (hostname:port)
+seti_socks_user= # SOCKS proxy user name
+seti_socks_passwd= # SOCKS proxy password
+seti_user=setiathome # user name to run as
+seti_group=${seti_user} # group name to run as
seti_nice=15 # nice level to run at
seti_maxprocs=$(sysctl -n hw.ncpu) # max. number of processes to start
-seti_sleep=21600 # time to sleep between restarts
+seti_sleep_time=21600 # time to sleep between restarts
+set +a
if ! PREFIX=$(expr ${rc_path} : "\(/.*\)/etc/rc\.d/${rc_file}\$"); then
echo "${rc_file}: Cannot determine PREFIX." >&2
@@ -35,12 +40,30 @@ rcconf_file=rc.${rc_file%.sh}.conf
rcconf_path=${rcconf_dir}/${rcconf_file}
if [ -f ${rcconf_path} ]; then
+ set -a
. ${rcconf_path}
+ set +a
fi
program_dir=${PREFIX}/sbin
program_file=${rc_file%.sh}
program_path=${program_dir}/${program_file}
+export program_path
+
+program_args="\
+${seti_std_args} \
+${seti_proxy_server:+-proxy} ${seti_proxy_server} \
+${seti_socks_server:+-socks_server} ${seti_socks_server} \
+${seti_socks_user:+-socks_user} ${seti_socks_user} \
+${seti_socks_passwd:+-socks_passwd} ${seti_socks_passwd} \
+${seti_nice:+-nice} ${seti_nice} \
+"
+export program_args
+
+
+wrapper_dir=${PREFIX}/libexec
+wrapper_file=${rc_file%.sh}.bin
+wrapper_path=${wrapper_dir}/${wrapper_file}
syslog_facility=daemon.err
@@ -50,6 +73,7 @@ while [ ${i} -gt 1 ]; do
seti_wrksuff="${seti_wrksuff} ${i}"
i=$((${i} - 1))
done
+export seti_wrksuff
case "$rc_arg" in
start)
@@ -73,38 +97,44 @@ start)
exit 72
fi
done
- for i in ${seti_wrksuff}; do
- su -fm ${seti_user} -c "exec /bin/sh -T" << EOF > /dev/null &
- cd ${seti_wrkdir}/${i} || exit
- echo \$\$ > shpid.sah
- trap 'kill \$pid;exit' 15
- while :; do
- ${program_path} \
- ${seti_std_args} ${seti_proxy_args} \
- ${seti_nice:+-nice} ${seti_nice} &
- pid=\$!; wait \$pid
- sleep ${seti_sleep} &
- pid=\$!; wait \$pid
- done
-EOF
- done
+ if ps axo comm | egrep ${program_file}; then
+ logger -sp ${syslog_facility} -t ${program_file} \
+ "unable to start: ${program_file} is already running."
+ exit 72
+ fi
+ su -fm ${seti_user} -c "exec ${wrapper_path} > /dev/null &"
echo -n " SETI@home"
;;
stop)
+ pid_path=${seti_wrkdir}/shpid.sah
+ if [ -f ${pid_path} ]; then
+ pid=$(cat ${pid_path})
+ [ -n "${pid}" ] && ps p ${pid} > /dev/null && kill ${pid}
+ rm -f ${pid_path}
+ fi
for i in ${seti_wrksuff}; do
- for pid_path in ${seti_wrkdir}/${i}/pid.sah \
- ${seti_wrkdir}/${i}/shpid.sah; do
- if [ -f ${pid_path} ]; then
- kill $(cat ${pid_path}) 2> /dev/null
- fi
- done
+ pid_path=${seti_wrkdir}/${i}/pid.sah
+ if [ -f ${pid_path} ]; then
+ pid=$(cat ${pid_path})
+ [ -n "${pid}" ] && ps p ${pid} > /dev/null && kill ${pid}
+ fi
done
if [ ! -f ${seti_wrkdir}/pid.sah ]; then
killall ${program_file} 2> /dev/null
fi
;;
+gracefull)
+ for i in ${seti_wrksuff}; do
+ pid_path=${seti_wrkdir}/${i}/pid.sah
+ stop_path=${seti_wrkdir}/${i}/stop_after_send.txt
+ if [ -f ${pid_path} ]; then
+ touch ${stop_path}
+ fi
+ done
+ ;;
+
restart)
$0 stop
$0 start
@@ -187,7 +217,7 @@ register)
;;
*)
- echo "usage: ${rc_file} {start|stop|restart|status|register}" >&2
+ echo "usage: ${rc_file} {start|stop|gracefull|restart|status|register}" >&2
exit 64
;;
esac
diff --git a/astro/setiathome/pkg-install b/astro/setiathome/pkg-install
index f77e51636a02..f8a894900587 100644
--- a/astro/setiathome/pkg-install
+++ b/astro/setiathome/pkg-install
@@ -33,37 +33,54 @@ ncpu=$(sysctl -n hw.ncpu)
case "${PKG_ACTION}" in
POST-INSTALL)
-
+ if [ -f ${seti_wrkdir}/user_info.sah ]; then
+echo "**** SETI@home already has a working directory for temporary files and"
+echo " you seem to be already registered with SETI@home."
+echo
+echo -n " Would you like repeat the registration with SETI@home? [y/N] "
+ read ans
+echo
+ if [ "X${ans}" = "XY" -o "X${ans}" = "Xy" ]; then
+ register=yes
+ else
+ register=no
+ fi
+ else
echo "**** SETI@home requires a working directory for temporary files and a"
echo " brief registration process."
echo
echo " Would you like to set up a working directory in ${seti_wrkdir},"
- if [ ${seti_maxprocs} -gt 1 ]; then
+ if [ ${seti_maxprocs} -gt 1 ]; then
echo " register with SETI@home, and let me arrange for ${ncpu} setiathome"
- if [ ${ncpu} -eq ${seti_maxprocs} ]; then
+ if [ ${ncpu} -eq ${seti_maxprocs} ]; then
echo " processes (one for each of your ${ncpu} CPUs) to be started"
echo -n " automatically as user \`${seti_user}'? [Y/n] "
- else
+ else
echo " processes (as configured) to be started automatically as user"
echo -n " \`${seti_user}'? [Y/n] "
- fi
- else
+ fi
+ else
echo " register with SETI@home, and let me arrange for setiathome to be"
echo -n " started automatically as user \`${seti_user}'? [Y/n] "
- fi
- read a
+ fi
+ read ans
echo
- if [ "X$a" = "XN" -o "X$a" = "Xn" ]; then
+ if [ "X${ans}" = "XN" -o "X${ans}" = "Xn" ]; then
echo "**** Please set up the working directory yourself. You may use"
echo " ${rc_path} register"
echo " to do so. See setiathome(1) for details."
- exit 0
+ exit 0
+ else
+ register=yes
+ fi
fi
- ${rc_path} register
- if [ ! -f ${seti_wrkdir}/user_info.sah ]; then
+ if [ "${register}" = "yes" ]; then
+ ${rc_path} register
+ if [ ! -f ${seti_wrkdir}/user_info.sah ]; then
echo "unable to start setiathome: it seems registration or login failed."
echo "See setiathome(1) for details."
- exit 0
+ exit 0
+ fi
fi
${rc_path} start > /dev/null
echo
diff --git a/astro/setiathome/pkg-message b/astro/setiathome/pkg-message
index 1188ce50da02..b3f0e0f96ffd 100644
--- a/astro/setiathome/pkg-message
+++ b/astro/setiathome/pkg-message
@@ -1,8 +1,7 @@
**** %%PREFIX%%/etc/rc.%%PREFX%%setiathome%%SUFX%%.conf may be edited
to tune some startup variables such as `seti_nice' defaulted to
15 and `seti_maxprocs' defaulted to your number of processors.
-**** NOTE: unlike previous versions, FreeBSD 5.x for i386 doesn't
- support a.out binaries by default. To run setiathome, you have
- to add the following line to your kernel configuration file
- (/sys/i386/conf/<YOUR_KERNEL>) :
- options COMPAT_AOUT # Enable i386 a.out binary support
+**** NOTE: FreeBSD 5.x does support FreeBSD 4.0 binaries by default.
+ To run setiathome, you must have the following line to your
+ kernel configuration file (/sys/i386/conf/<YOUR_KERNEL>) :
+ options COMPAT_FREEBSD4 # Compatible with FreeBSD 4.x
diff --git a/astro/setiathome/pkg-plist b/astro/setiathome/pkg-plist
index 61991ecca6da..8ce3de3307e0 100644
--- a/astro/setiathome/pkg-plist
+++ b/astro/setiathome/pkg-plist
@@ -1,3 +1,5 @@
+@comment $FreeBSD$
+libexec/%%PREFX%%setiathome%%SUFX%%.bin
sbin/%%PREFX%%setiathome%%SUFX%%
@unexec if cmp -s %D/etc/rc.%%PREFX%%setiathome%%SUFX%%.conf %D/etc/rc.%%PREFX%%setiathome%%SUFX%%.conf.sample; then rm -f %D/etc/rc.%%PREFX%%setiathome%%SUFX%%.conf; fi
etc/rc.%%PREFX%%setiathome%%SUFX%%.conf.sample