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
This commit is contained in:
Dirk Meyer 2003-06-01 05:45:34 +00:00
parent 92109db5a2
commit 044a2ff8cf
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=81858
9 changed files with 594 additions and 87 deletions

View File

@ -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:

View File

@ -1 +1 @@
MD5 (setiathome-3.03.i386-unknown-freebsd2.2.8.tar) = 2dd4c9016059b7532ae721c7b92be821
MD5 (setiathome-3.08.i386-unknown-freebsd4.0.tar) = f6ba42a3bd93313cf61df62cde3c262e

View File

@ -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

View File

@ -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/

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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