freebsd-ports/biology/linux-foldingathome/files/fahclient.in
Mateusz Piotrowski 3716d1981f biology/linux-foldingathome: Update to 7.6.21
Unfortunately, this version of FAHClient is not able to daemonize
successfully anymore. Even though the --daemon flag is passed, FAHClient
does not detach from the controlling terminal. In addition to that it
does not go into background. The --log seems to be broken as well as
since all the logs are printed to the terminal instead of the log file.

In order to alleviate those problems, use daemon(8).

PR:		250463
Changes:	https://foldingforum.org/viewtopic.php?t=36307
2021-06-25 19:13:19 +02:00

110 lines
4.6 KiB
Bash

#! /bin/sh -
# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Mateusz Piotrowski <0mp@FreeBSD.org>
#
# 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.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
# PROVIDE: fahclient
# REQUIRE: DAEMON LOGIN NETWORKING linux
#
# Add the following lines to /etc/rc.conf to enable nginx:
# fahclient_enable (bool): Set to "NO" by default.
# Set it to "YES" to enable fahclient.
# fahclient_user (str): Default: "fahclient"
# User to run fahclient as.
# fahclient_chdir (str): Default: "%%FAHCLIENT_WORK_DIR%%"
# Directory to chdir before starting fahclient.
# fahclient_config (str): Default: "%%ETCDIR%%/config.xml"
# Path to fahclient configuration file.
# fahclient_donor (str): Default: "Anonymous"
# Donor to attribute work units to.
# Settings in fahclient_config take precedence.
# fahclient_team (str): Default: "11743" (FreeBSD Team)
# Team to attribute work units to.
# Settings in fahclient_config take precedence.
# fahclient_pidfile (str): Default: "%%FAHCLIENT_WORK_DIR%%/fahclient.pid"
# Path to PID file.
# fahclient_logfile (str): Default: "%%FAHCLIENT_WORK_DIR%%/log.txt"
# Path to log file. Takes precedence over
# settings in fahclient_config.
# fahclient_flags (str): Default: ""
# Extra flags passed to start command *before*
# other options.
# fahclient_extra_flags (str): Defaults to ""
# Extra flags passed to start command *after*
# other options.
. /etc/rc.subr
name='fahclient'
rcvar='fahclient_enable'
load_rc_config 'fahclient'
# Default settings.
: "${fahclient_enable:=NO}"
: "${fahclient_user:=fahclient}"
: "${fahclient_chdir:=%%FAHCLIENT_WORK_DIR%%}"
: "${fahclient_donor:=Anonymous}"
: "${fahclient_team:=11743}"
: "${fahclient_pidfile:=%%FAHCLIENT_WORK_DIR%%/fahclient.pid}"
: "${fahclient_config:=%%ETCDIR%%/config.xml}"
: "${fahclient_logfile:=%%FAHCLIENT_WORK_DIR%%/log.txt}"
pidfile="${fahclient_pidfile}"
procname="%%FAHCLIENT_PROGRAM%%"
command="/usr/sbin/daemon"
command_args="-o ${fahclient_logfile} -p ${pidfile} -- ${procname}"
# Some notes on the specified options:
# - fahclient_flags are passed in before other options by the rc
# framework.
# - --user sets the donor work units are attributed to (config file takes
# precedence).
# - --team sets the team work units are attributed to (cfg file takes
# precedence).
# - --config is necessary to point the program to the correct configuration
# file.
# - --chdir is used to switch to a desired work directory. The program is going
# to create a lot of files in its current working directory so should not be
# just any directory on the system.
# - fahclient_extra_flags are passed in after all other options.
_fahclient_command_args=
_fahclient_command_args="${_fahclient_command_args} --user=${fahclient_donor}"
_fahclient_command_args="${_fahclient_command_args} --team=${fahclient_team}"
_fahclient_command_args="${_fahclient_command_args} --config=${fahclient_config}"
_fahclient_command_args="${_fahclient_command_args} --chdir=${fahclient_chdir}"
_fahclient_command_args="${_fahclient_command_args} ${fahclient_extra_flags}"
command_args="${command_args} ${_fahclient_command_args}"
extra_commands="log showconfig"
log_cmd="tail -F -- ${fahclient_logfile}"
showconfig_cmd="${procname} ${fahclient_flags} ${_fahclient_command_args} --print"
if [ -n "$fahclient_user" ]; then
showconfig_cmd="su -m $fahclient_user -c 'sh -c \"$showconfig_cmd\"'"
fi
required_modules='linprocfs linsysfs linux64:linux64elf'
run_rc_command "$1"