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:
parent
92109db5a2
commit
044a2ff8cf
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=81858
@ -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:
|
||||
|
@ -1 +1 @@
|
||||
MD5 (setiathome-3.03.i386-unknown-freebsd2.2.8.tar) = 2dd4c9016059b7532ae721c7b92be821
|
||||
MD5 (setiathome-3.08.i386-unknown-freebsd4.0.tar) = f6ba42a3bd93313cf61df62cde3c262e
|
||||
|
@ -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
|
||||
|
@ -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/
|
||||
|
426
astro/setiathome/files/setiathome.bin
Normal file
426
astro/setiathome/files/setiathome.bin
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user