git: 0de6f87f3fa8 - main - biology/linux-foldingathome: Add manual page fahclient(8) and clean up

From: Mateusz Piotrowski <0mp_at_FreeBSD.org>
Date: Tue, 09 Jun 2026 14:59:18 UTC
The branch main has been updated by 0mp:

URL: https://cgit.FreeBSD.org/ports/commit/?id=0de6f87f3fa8e48fa695d4ed3bca09c9e479aab2

commit 0de6f87f3fa8e48fa695d4ed3bca09c9e479aab2
Author:     Mateusz Piotrowski <0mp@FreeBSD.org>
AuthorDate: 2026-06-09 13:54:13 +0000
Commit:     Mateusz Piotrowski <0mp@FreeBSD.org>
CommitDate: 2026-06-09 14:58:33 +0000

    biology/linux-foldingathome: Add manual page fahclient(8) and clean up
    
    Move all documentation to fahclient.8.
    
    Reference the new manual page from pkg-message and the rc script.
    
    Remove outdated --chdir handling. The flag is gone from fah-client and
    rc(8) handles that automatically.
    
    Remove an incorrect description of what fahclient_flags does.
    
    Allow fahclient_team and fahclient_donor to be empty. This way we avoid
    warnings when the configuration file overrides the command-line flags,
    e.g.:
    
        14:25:24:W :Option 'user' already set to 'Anonymous' reseting to '0mp'.
        14:25:24:W :Option 'team' already set to '11743' reseting to '11743'.
    
    Pass --log-to-screen=true to showconfig's flags. This way we can
    see again the configuration.
    
    Improve quoting of variables in fahclient.
    
    Update to the v8.5 branch is currently blocked by some missing
    libraries. It seems that we would need to add a Rocky Linux 9.7 version
    of bzip2 to proceed.
---
 biology/linux-foldingathome/Makefile             |   4 +-
 biology/linux-foldingathome/files/fahclient.8.in | 181 +++++++++++++++++++++++
 biology/linux-foldingathome/files/fahclient.in   |  71 ++-------
 biology/linux-foldingathome/files/pkg-message.in |  84 +----------
 biology/linux-foldingathome/pkg-plist            |   1 +
 5 files changed, 198 insertions(+), 143 deletions(-)

diff --git a/biology/linux-foldingathome/Makefile b/biology/linux-foldingathome/Makefile
index 6b8c70ff3e5d..85ecf868cc1c 100644
--- a/biology/linux-foldingathome/Makefile
+++ b/biology/linux-foldingathome/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	foldingathome
 DISTVERSION=	8.4.9
+PORTREVISION=	1
 CATEGORIES=	biology linux
 MASTER_SITES=	https://download.foldingathome.org/releases/public/fah-client/
 PKGNAMEPREFIX=	linux-
@@ -27,7 +28,7 @@ ETCDIR=		${PREFIX}/etc/fahclient
 DOCSDIR=	${PREFIX}/share/doc/fahclient
 NO_BUILD=	yes
 
-SUB_FILES=	pkg-message
+SUB_FILES=	fahclient.8 pkg-message
 SUB_LIST=	FAHCLIENT_CONFIG_XML=${_FAHCLIENT_CONFIG_XML} \
 		FAHCLIENT_PROGRAM=${_FAHCLIENT_PROGRAM} \
 		FAHCLIENT_WORK_DIR=${_FAHCLIENT_WORK_DIR}
@@ -60,6 +61,7 @@ do-install:
 	${INSTALL_DATA} ${FILESDIR}/config.xml.sample \
 		${STAGEDIR}${_FAHCLIENT_CONFIG_XML}.sample
 	@${MKDIR} ${STAGEDIR}${_FAHCLIENT_WORK_DIR}
+	${INSTALL_MAN} ${WRKDIR}/fahclient.8 ${STAGEDIR}${PREFIX}/share/man/man8
 
 post-install-DOCS-on:
 	@${MKDIR} ${STAGEDIR}${DOCSDIR}
diff --git a/biology/linux-foldingathome/files/fahclient.8.in b/biology/linux-foldingathome/files/fahclient.8.in
new file mode 100644
index 000000000000..042d1ecd99ca
--- /dev/null
+++ b/biology/linux-foldingathome/files/fahclient.8.in
@@ -0,0 +1,181 @@
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.\" Copyright (c) 2020-2026 Mateusz Piotrowski <0mp@FreeBSD.org>
+.\"
+.Dd June 9, 2026
+.Dt FAHCLIENT 8
+.Os
+.Sh NAME
+.Nm fahclient
+.Nd service daemon for the Folding@home Client
+.Sh SYNOPSIS
+.Nm
+.Ar command Op Ar args ...
+.Nm
+.Cm log
+.Nm
+.Cm showconfig
+.Sh DESCRIPTION
+.Nm
+is an
+.Xr rc 8
+daemon for the Folding@home Client.
+.Pp
+Configure
+.Nm
+with the following
+.Xr rc.conf 5
+variables:
+.Bl -tag -width fahclient_extra_flags -offset 2n
+.It Va fahclient_enable
+Toggle to enable
+.Nm .
+Default:
+.Dq NO .
+.It Va fahclient_chdir
+Working directory of
+.Nm .
+Default:
+.Dq Pa %%FAHCLIENT_WORK_DIR%% .
+.It Va fahclient_config
+Configuration file.
+Default:
+.Dq Pa %%ETCDIR%%/config.xml .
+.It Va fahclient_donor
+Donor to attribute work units to.
+Settings in the configuration file take precedence.
+Default:
+.Dq Anonymous .
+.It Va fahclient_extra_flags
+Extra flags passed to the Folding@home Client after other flags.
+Default: empty.
+.It Va fahclient_flags
+Extra flags passed to
+.Xr daemon 8
+before any other flags.
+Default: empty.
+.It Va fahclient_logfile
+Log file.
+Takes precedence over settings in the configuration file.
+Default:
+.Dq Pa %%FAHCLIENT_WORK_DIR%%/log.txt .
+.It Va fahclient_team
+Folding@home team to join and attribute work units to.
+Settings in the configuration file take precedence.
+Default:
+.Ql 11743 ,
+Team
+.Fx .
+.It Va fahclient_pidfile
+PID file.
+Default:
+.Dq Pa %%FAHCLIENT_WORK_DIR%%/fahclient.pid .
+.It Va fahclient_user
+System user to run
+.Nm fahclient
+as.
+Default:
+.Ql fahclient .
+.El
+.Pp
+.Nm
+supports the following extra commands:
+.Bl -tag -width showconfig -offset 2n
+.It Cm log
+View
+.Nm Ap s
+folding logs.
+.It Cm showconfig
+Show the final configuration of
+.Nm
+after all configuration files and command-line flags are processed.
+.El
+.Pp
+The Web Dashboard is available at
+.Lk https://v8-4.foldingathome.org/
+and
+.Lk http://localhost:7396/
+when
+.Nm
+is running.
+Visit the Web Dashboard to connect
+.Nm
+to a Folding@home Account and manage folding work.
+.Pp
+Link
+.Nm
+to an existing account with an Account Token.
+Generate it on the Web Dashboard.
+Add the Account Token to either the configuration file
+or specify it a command-line argument to
+.Nm :
+.Dl sysrc fahclient_extra_flags+=" --account-token=<Account-Token>"
+.Pp
+Refer to the Folding@home Client's help message for more usage
+information:
+.Dl %%FAHCLIENT_PROGRAM%% --help
+.Sh FILES
+.Bl -tag -width "%%FAHCLIENT_PROGRAM%%"
+.It Pa %%FAHCLIENT_PROGRAM%%
+Folding@home Client program invoked by the
+.Nm
+daemon.
+.Sh EXAMPLES
+.Ss Example 1: Quick Start
+Start
+.Nm
+by executing the following steps:
+.Bd -literal -offset indent
+# Mount linprocfs(5) at /compat/linux/proc:
+mount -t linprocfs linprocfs /compat/linux/proc
+# Mount linsysfs(5) at /compat/linux/proc:
+mount -t linsysfs linsysfs /compat/linux/sys
+# Enable fahclient:
+service fahclient enable
+# Optionally, set the desired donor name:
+sysrc fahclient_donor="Anonymous"
+# Start fahclient:
+service fahclient start
+.Ed
+.Pp
+Open the Folding@home Web Dashboard to finish the setup.
+.Pp
+Add
+.Xr linprocfs 5
+and
+.Xr linsysfs 5
+entries to
+.Xr fstab 5
+to make the setup persistent across reboots.
+.Sh SEE ALSO
+.Lk https://foldingathome.org/guides/v8-4-client-guide/ "Folding@home v8.4 Client Guide"
+.Pp
+.Lk https://foldingathome.org/faq/ "Folding@home FAQ"
+.Pp
+.Lk https://foldingforum.org/ "Folding Forum"
+.Pp
+.Lk https://stats.foldingathome.org/team/11743 "Team FreeBSD Statistics"
+.Sh HISTORY
+Team
+.Fx
+was founded by
+.An Frank Mayhar .
+.Sh AUTHORS
+The
+.Nm
+manual page was written by
+.An Mateusz Piotrowski Aq Mt 0mp@FreeBSD.org .
+.Sh CAVEATS
+The working directory of
+.Nm
+must have the execute permissions enabled to function properly.
+For example, on a
+.Xr zfs 4
+dataset where
+.Pa %%FAHCLIENT_WORK_DIR%%
+is located the
+.Ql exec
+property
+must be set to
+.Ql on .
diff --git a/biology/linux-foldingathome/files/fahclient.in b/biology/linux-foldingathome/files/fahclient.in
index 8cc7e80e0d7d..b7933e380b74 100644
--- a/biology/linux-foldingathome/files/fahclient.in
+++ b/biology/linux-foldingathome/files/fahclient.in
@@ -2,59 +2,15 @@
 
 # SPDX-License-Identifier: BSD-2-Clause
 #
-# Copyright (c) 2020 Mateusz Piotrowski <0mp@FreeBSD.org>
+# Copyright (c) 2020-2026 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.
+# Refer to to the fahclient(8) manual page for the configuration instructions.
+#
 
 . /etc/rc.subr
 
@@ -66,11 +22,13 @@ load_rc_config 'fahclient'
 # Default settings.
 : "${fahclient_enable:=NO}"
 : "${fahclient_user:=fahclient}"
+# The program is going to create a lot of files in its working directory,
+# so make sure that they all land in a sensible place.
 : "${fahclient_chdir:=%%FAHCLIENT_WORK_DIR%%}"
 : "${fahclient_svcj_options:=net_basic}"
 
-: "${fahclient_donor:=Anonymous}"
-: "${fahclient_team:=11743}"
+: "${fahclient_donor=Anonymous}"
+: "${fahclient_team=11743}"
 
 : "${fahclient_pidfile:=%%FAHCLIENT_WORK_DIR%%/fahclient.pid}"
 : "${fahclient_config:=%%ETCDIR%%/config.xml}"
@@ -81,35 +39,28 @@ procname="%%FAHCLIENT_PROGRAM%%"
 command="/usr/sbin/daemon"
 command_args="-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} ${fahclient_donor:+--user=${fahclient_donor}}"
+_fahclient_command_args="${_fahclient_command_args} ${fahclient_team:+--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} --log=${fahclient_logfile}"
-_fahclient_command_args="${_fahclient_command_args} --log-rotate-dir=$(dirname ${fahclient_logfile})"
+_fahclient_command_args="${_fahclient_command_args} --log-rotate-dir=$(dirname "${fahclient_logfile}")"
 _fahclient_command_args="${_fahclient_command_args} --log-to-screen=false"
 _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"
+showconfig_cmd="${procname} ${_fahclient_command_args} --log-to-screen=true --print"
 if [ -n "$fahclient_user" ]; then
 	showconfig_cmd="su -m $fahclient_user -c 'sh -c \"$showconfig_cmd\"'"
 fi
 required_modules='linprocfs linsysfs linux64:linux64elf'
 
-cd ${fahclient_chdir}
 run_rc_command "$1"
diff --git a/biology/linux-foldingathome/files/pkg-message.in b/biology/linux-foldingathome/files/pkg-message.in
index 3df201f3a973..12239a7c1488 100644
--- a/biology/linux-foldingathome/files/pkg-message.in
+++ b/biology/linux-foldingathome/files/pkg-message.in
@@ -1,88 +1,8 @@
 [
 { type: install
   message: <<EOM
-Quick start
-===========
-
-Here is a list of steps to quickly get started with Folding@home on FreeBSD:
-
-1.	Mount linprocfs(5) in /compat/linux/proc.
-
-2.	Mount linsysfs(5) in /compat/linux/sys.
-
-3.	Enable the fahclient service:
-
-		sysrc fahclient_enable=YES
-
-4.	Consider setting Folding@home donor name and team ID:
-
-		sysrc fahclient_donor=my_fah_username
-		sysrc fahclient_team=0
-
-	Team 0 means "no team", by default fahclient joins team FreeBSD
-	(11743).
-
-5.	Start the service:
-
-		service fahclient start
-
-At this point, the daemon should be up. By default it listens on http://localhost:7396
-for incoming HTTP connections. There you can login and configure and/or
-register/connect with your F@H account. If you have already an existing account you
-can join by getting the account-token from there and adding it either to a config
-file or by running
-	sysrc fahclient_extra_flags+=" --account-token=<your-token>"
-
-Additional notes
-================
-
--	The current status of folding can be inspected by running
-	the following command:
-
-		service fahclient log
-
--	The default working directory for fahclient is %%FAHCLIENT_WORK_DIR%%.
-	In order to function properly, fahclient requires its working directory
-	to be on a partition/dataset with execute permissions on.  For example
-	if /var/db is on a ZFS dataset with exec=off, then %%FAHCLIENT_WORK_DIR%%
-	needs to have exec=on.
-
-	Note, that usually the permissions are on unless the system
-	configuration was modified by the administrator.
-
--	By default the FreeBSD team (team id 11743) is joined.
-	This can be overridden by changing the configuration in rc.conf:
-
-		sysrc fahclient_team=0
-
-	The service has to be restarted to pick up the change.
-
-	Statistics for the FreeBSD team can be viewed here:
-	https://stats.foldingathome.org/team/11743
-
--	Team and donor configuration values in %%FAHCLIENT_CONFIG_XML%% take
-	precedence over those configured in rc.conf using sysrc.
-
--	It's possible to specify additional flags in rc.conf. Those take
-	precedence over what is configured in the config file, e.g., setting
-	the maximum number of cpus to be used:
-
-		sysrc fahclient_flags+=" --cpus=7"
-
-	Flags that are set this way will be overridden by settings in
-	%%FAHCLIENT_CONFIG_XML%%. You can set fahclient_extra_flags
-	to override settings in %%FAHCLIENT_CONFIG_XML%%:
-
-		sysrc fahclient_extra_flags+=" --cpus=7"
-
--	You can check the actual configuration values applied with:
-
-		service fahclient showconfig
-
--	More information about configuring and running the Folding@home
-	software is available on those websites:
-	-	https://foldingforum.org/
-	-	https://foldingathome.org/support/faq/
+Refer to the fahclient(8) manual page for instructions
+on how to get started with Folding@home on FreeBSD.
 EOM
 }
 ]
diff --git a/biology/linux-foldingathome/pkg-plist b/biology/linux-foldingathome/pkg-plist
index 4079af2c2b99..bda628f03930 100644
--- a/biology/linux-foldingathome/pkg-plist
+++ b/biology/linux-foldingathome/pkg-plist
@@ -1,4 +1,5 @@
 bin/fah-client
+share/man/man8/fahclient.8.gz
 @dir(fahclient,fahclient,) %%ETCDIR%%
 @sample(fahclient,fahclient,) %%ETCDIR%%/config.xml.sample
 @dir(fahclient,fahclient,) %%FAHCLIENT_WORK_DIR%%