From 4f49b16079b27d7ce633619e4cddfdf2bffbc952 Mon Sep 17 00:00:00 2001 From: cashmere Date: Fri, 4 Sep 2026 09:05:24 +0200 Subject: initial commit --- www/server/openbsd/service.wiki | 118 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 www/server/openbsd/service.wiki (limited to 'www/server/openbsd/service.wiki') diff --git a/www/server/openbsd/service.wiki b/www/server/openbsd/service.wiki new file mode 100644 index 0000000..8729eb0 --- /dev/null +++ b/www/server/openbsd/service.wiki @@ -0,0 +1,118 @@ +Serving via rc on OpenBSD + +OpenBSD provides [https://man.openbsd.org/rc.subr.8|rc.subr(8)], +a framework for writing [https://man.openbsd.org/rc.8|rc(8)] scripts. + +

Creating the daemon

+ +Create the file /etc/rc.d/fossil with contents like the following. + +
+#!/bin/ksh
+daemon="/usr/local/bin/fossil" # fossil executable
+daemon_user="_fossil" # user to run fossil as
+daemon_flags="server /home/_fossil/example --repolist --port 8888" # fossil command
+
+. /etc/rc.d/rc.subr
+# pexp="$daemon server .*" # See below.
+rc_reload=NO # Unsupported by Fossil; 'rcctl reload fossil' kills the process.
+rc_bg=YES # Run in the background, since fossil serve does not daemonize itself
+rc_cmd $1
+
+ +

pexp

+ +You may need to uncomment the "pexp=". rc.subr typically +finds the daemon process based by matching the process name and argument list. +Without the "pexp=" line, rc.subr would look for this exact command: + +
+/usr/local/bin/fossil server /home/_fossil/example --repolist --port 8888
+
+ +Depending on the arguments and their order, fossil may rewrite the arguments +for display in the process listing ([https://man.openbsd.org/ps.1|ps(1)]), +so rc.subr may fail to find the process through the default match. The example +above does not get rewritten, but the same commands in a different order can +be rewritten. +For example, when I switch the order of the arguments in "daemon_flags", + +
+/usr/local/bin/fossil server --repolist --port 8888 /home/_fossil/example
+
+ +the process command is changed to this. + +
+/usr/local/bin/fossil server /home/_fossil/example /home/_fossil/example 8888 /home/_fossil/example
+
+ +The commented "pexp=" line instructs rc.subr to choose the process whose +command and arguments text starts with this: + +
+/usr/local/bin/fossil server 
+
+ +

Enabling the daemon

+ +Once you have created /etc/rc.d/fossil, run these commands. + +
+rcctl enable fossil # add fossil to pkg_scripts in /etc/rc.conf.local
+rcctl start fossil # start the daemon now
+
+ +The daemon should now be running and set to start at boot. + +

Multiple daemons

+ +You may want to serve multiple fossil instances with different options. +For example, + + * If different users own different repositories, you may want different users + to serve different repositories. + * You may want to serve different repositories on different ports so you can + control them differently with, for example, HTTP reverse proxies or + [https://man.openbsd.org/pf.4|pf(4)]. + +To run multiple fossil daemons, create multiple files in /etc/rc.d, and +enable each of them. Here are two approaches for creating +the files in /etc/rc.d: Symbolic links and copies. + +

Symbolic links

+ +Suppose you want to run one fossil daemon as user "user1" on port 8881 +and another as user "user2" on port 8882. Create the files with +[https://man.openbsd.org/ln.1|ln(1)], and configure them to run different +fossil commands. + +
+cd /etc/rc.d
+ln -s fossil fossil1
+ln -s fossil fossil2
+rcctl enable fossil1 fossil2
+rcctl set fossil1 user user1
+rcctl set fossil2 user user2
+rcctl set fossil1 flags 'server /home/user1/repo1.fossil --port 8881'
+rcctl set fossil2 flags 'server /home/user2/repo2.fossil --port 8882'
+rcctl start fossil1 fossil2
+
+ +

Copies

+ +You may want to run fossil daemons that are too different to configure +just with [https://man.openbsd.org/rcctl.8|rcctl(8)]. +In particular, you can't change the "pexp" with rcctl. + +If you want to run fossil commands that are more different, +you may prefer to create separate files in /etc/rc.d. +Replace "ln -s" above with "cp" to accomplish this. + +
+cp /etc/rc.d/fossil /etc/rc.d/fossil-user1
+cp /etc/rc.d/fossil /etc/rc.d/fossil-user2
+
+ +You can still use commands like "rcctl set fossil-user1 flags", but you +can also edit the "/etc/rc.d/fossil-user1" file. -- cgit v1.3.1