Commit Diff


commit - d073d3f60f917a66668a92017476c06a397d486d
commit + f96f8ec1ff084359c6bfac2340274c608a46100c
blob - 5e33bc0ee069b151d1b27dbb3d468a34214bab3b
blob + 50e0dd82cd72677cbe351f1088f2643126122517
--- git-repository.5.html
+++ git-repository.5.html
@@ -215,7 +215,7 @@
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - 21579685020a15a499e032ccbb75d2e716603f3f
blob + 6c71739282b60bc0b3631fb7915dd626687cc8aa
--- gitwrapper.1.html
+++ gitwrapper.1.html
@@ -142,7 +142,7 @@
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - 1ef15f1cac40c76f943067cfa3136d7757c3890e
blob + 5d88a220f172d44fef4448d9543af7dd2a350305
--- got-worktree.5.html
+++ got-worktree.5.html
@@ -187,7 +187,7 @@
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - c055824c1c5dac4a80d98d10483555eeae3355c7
blob + 1c061b37bfb88a39b9173edc19c735aa4956aa39
--- got.1.html
+++ got.1.html
@@ -3659,7 +3659,7 @@ remote &quot;origin&quot; {
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - e781d863e4573f7712764bda8072ebdd6caa6292
blob + 01c141e915d81b3a3e3458ade3476712a2c38640
--- got.conf.5.html
+++ got.conf.5.html
@@ -325,7 +325,7 @@
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - 569bec9adfe527a96c118f4dd0c133f33e9e0961
blob + d6ac463f48a47207fff2a634ffa76745e56f8436
--- gotadmin.1.html
+++ gotadmin.1.html
@@ -439,7 +439,7 @@
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - 55d09dc50b63fe586fc6dfdc2863fd1bea44e5d1
blob + a08e8d85eb04e13db66c17007696b09401b8d0fe
--- gotctl.8.html
+++ gotctl.8.html
@@ -71,6 +71,33 @@
   <dt id="stop"><a class="permalink" href="#stop"><code class="Cm">stop</code></a></dt>
   <dd>Stop a running <a class="Xr" aria-label="gotd, section 8">gotd(8)</a>
       instance. This operation requires root privileges.</dd>
+  <dt id="reload"><a class="permalink" href="#reload"><code class="Cm">reload</code></a>
+    [<code class="Fl">-c</code> <var class="Ar">config-file</var>]
+    [<code class="Fl">-n</code>] [<code class="Fl">-s</code>
+    <var class="Ar">secrets</var>]</dt>
+  <dd>Reload a running <a class="Xr" aria-label="gotd, section 8">gotd(8)</a>
+      instance. <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> will
+      relaunch with an updated configuration read from the provided
+      configuration files. The previous instance of
+      <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> will continue to
+      serve existing client connections and then exit.
+    <p class="Pp">This operation requires root privileges.</p>
+    <p class="Pp">The options for <code class="Cm">gotctl reload</code> are as
+        follows:</p>
+    <dl class="Bl-tag">
+      <dt id="f~2"><a class="permalink" href="#f~2"><code class="Fl">-f</code></a>
+        <var class="Ar">config-file</var></dt>
+      <dd>Set the path to the configuration file. If not specified, the file
+          <span class="Pa">/etc/gotd.conf</span> will be used.</dd>
+      <dt id="n"><a class="permalink" href="#n"><code class="Fl">-n</code></a></dt>
+      <dd>Only check the configuration files for validity.</dd>
+      <dt id="s"><a class="permalink" href="#s"><code class="Fl">-s</code></a>
+        <var class="Ar">secrets</var></dt>
+      <dd>Set the path to the secrets file. If not specified, the file
+          <span class="Pa">/etc/gotd-secrets.conf</span> will be used if it
+          exists.</dd>
+    </dl>
+  </dd>
 </dl>
 </section>
 <section class="Sh">
@@ -86,7 +113,7 @@
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - 536274a37c082b3c13fcde345ac3f977e9d83b32
blob + 2a2e66577c192eef4968869e22d20f85a9973d0d
--- gotd-secrets.conf.5.html
+++ gotd-secrets.conf.5.html
@@ -112,7 +112,7 @@ repository &quot;openbsd/src&quot; {
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - 9679b17f0199552d0a3f8f8c8525945716c6934c
blob + bd5a32dbb3a7047484c8b303c04317edcb257fc3
--- gotd.8.html
+++ gotd.8.html
@@ -127,7 +127,8 @@
     <a class="Xr" aria-label="git-repository, section 5">git-repository(5)</a>,
     <a class="Xr" aria-label="gotd.conf, section 5">gotd.conf(5)</a>
     <a class="Xr" aria-label="gotd-secrets.conf, section
-    5">gotd-secrets.conf(5)</a></p>
+    5">gotd-secrets.conf(5)</a>, <a class="Xr" aria-label="gotctl, section
+    8">gotctl(8)</a></p>
 </section>
 <section class="Sh">
 <h2 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h2>
@@ -140,10 +141,16 @@
     that use the sha256 object ID hashing algorithm because
     <code class="Nm">gotd</code> does not yet support version 2 of the Git
     network protocol.</p>
+<p class="Pp"><code class="Nm">gotd</code> cannot honour the SIGHUP signal
+    because the <span class="Pa">/etc/gotd-secrets.conf</span> file is only
+    readable by root, and <code class="Nm">gotd</code> runs entirely without
+    root privileges after initial startup. The configuration of a running
+    <code class="Nm">gotd</code> instance can be reloaded by running
+    <code class="Cm">gotctl reload</code> as root.</p>
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - 4db32bcfdcd80210f923f45bf6c2c4eda47c43f9
blob + 145badb241270ccf4b3191b112de41fe47135988
--- gotd.conf.5.html
+++ gotd.conf.5.html
@@ -499,7 +499,7 @@ connection {
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - c2f938054d79808d62298be53d9d214744b9a44a
blob + fe77c71b732a2dc08f3d4f12861823feec144e46
--- gotsh.1.html
+++ gotsh.1.html
@@ -157,7 +157,7 @@
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - 9119c73f3a75f1676f0c2e4e12f65b89fde502ba
blob + 94fd997f9780754d96106acf354e7baedf2f3ab8
--- gotwebd.8.html
+++ gotwebd.8.html
@@ -87,16 +87,15 @@
   <li>Optionally, the run-time behaviour of <code class="Nm">gotwebd</code> can
       be configured via the <a class="Xr" aria-label="gotwebd.conf, section
       5">gotwebd.conf(5)</a> configuration file.</li>
-  <li id="not">Git repositories must be created at a suitable location inside
-      the web server's <a class="Xr" aria-label="chroot, section
-      2">chroot(2)</a> environment. These repositories should
-      <a class="permalink" href="#not"><i class="Em">not</i></a> be writable by
-      the user ID shared between <code class="Nm">gotwebd</code> and
-      <a class="Xr" aria-label="httpd, section 8">httpd(8)</a>. The default
-      location for repositories published by <code class="Nm">gotwebd</code> is
+  <li id="not">Git repositories must be created. These repositories may reside
+      anywhere in the filesystem and must be readable, but should
+      <a class="permalink" href="#not"><i class="Em">not</i></a> be writable, by
+      the user <code class="Nm">gotwebd</code> runs as. The default location for
+      repositories published by <code class="Nm">gotwebd</code> is
       <span class="Pa">/var/www/got/public</span>.</li>
-  <li>Git repositories served by <code class="Nm">gotwebd</code> should be kept
-      up-to-date with a mechanism such as <code class="Cm">got fetch</code>,
+  <li>If the Git repositories served by <code class="Nm">gotwebd</code> do not
+      receive changes from committers directly, they need to be kept up-to-date
+      with a mechanism such as <code class="Cm">got fetch</code>,
       <a class="Xr" aria-label="git-fetch, section 1">git-fetch(1)</a>, or
       <a class="Xr" aria-label="rsync, section 1">rsync(1)</a>, scheduled by
       <a class="Xr" aria-label="cron, section 8">cron(8)</a>.</li>
@@ -191,7 +190,7 @@ server &quot;example.com&quot; {
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - /dev/null
blob + ae9d8dd4e23144df7c27cff91656b1d53b6aa07f (mode 644)
--- /dev/null
+++ gotsys.1.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
+  <title>GOTSYS(1)</title>
+</head>
+<!-- This is an automatically generated file.  Do not edit.
+   Copyright (c) 2025 Stefan Sperling
+  
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+  
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+   -->
+<body>
+<div class="head" role="doc-pageheader" aria-label="Manual header
+  line"><span class="head-ltitle">GOTSYS(1)</span>
+  <span class="head-vol">General Commands Manual</span>
+  <span class="head-rtitle">GOTSYS(1)</span></div>
+<main class="manual-text">
+<section class="Sh">
+<h2 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h2>
+<p class="Pp"><code class="Nm">gotsys</code> &#x2014;
+    <span class="Nd" role="doc-subtitle">manage
+    <a class="Xr" aria-label="gotsys.conf, section
+  5">gotsys.conf(5)</a></span></p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h2>
+<table class="Nm">
+  <tr>
+    <td><code class="Nm">gotsys</code></td>
+    <td>[<code class="Fl">-hV</code>] <var class="Ar">command</var>
+      [<var class="Ar">arg ...</var>]</td>
+  </tr>
+</table>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h2>
+<p class="Pp"><code class="Nm">gotsys</code> performs tasks involving the
+    <a class="Xr" aria-label="gotsys.conf, section 5">gotsys.conf(5)</a>
+    configuration file consumed by <a class="Xr" aria-label="gotsysd, section
+    8">gotsysd(8)</a>.</p>
+<p class="Pp">The options for <code class="Nm">gotsys</code> are as follows:</p>
+<dl class="Bl-tag">
+  <dt id="h"><a class="permalink" href="#h"><code class="Fl">-h</code></a></dt>
+  <dd>Display usage information and exit immediately.</dd>
+  <dt id="V"><a class="permalink" href="#V"><code class="Fl">-V</code></a>,
+    <code class="Fl">--version</code></dt>
+  <dd>Display program version and exit immediately.</dd>
+</dl>
+<p class="Pp">The commands for <code class="Nm">gotsys</code> are as
+  follows:</p>
+<dl class="Bl-tag">
+  <dt id="apply"><a class="permalink" href="#apply"><code class="Cm">apply</code></a>
+    [<code class="Fl">-c</code> <var class="Ar">commit</var>]
+    [<code class="Fl">-f</code> <var class="Ar">socket</var>]
+    [<code class="Fl">-r</code> <var class="Ar">repository-path</var>]
+    [<var class="Ar">file</var>]</dt>
+  <dd>Trigger system configuration tasks based on the
+      <a class="Xr" aria-label="gotsys.conf, section 5">gotsys.conf(5)</a>
+      configuration <var class="Ar">file</var> found in the
+      <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> system
+      repository. If no <var class="Ar">file</var> argument is specified, the
+      file path <span class="Pa">gotsys.conf</span> will be used.
+    <p class="Pp" id="system">Usually, <a class="Xr" aria-label="gotd, section
+        8">gotd(8)</a> will trigger system configuration tasks whenever a new
+        version of <a class="Xr" aria-label="gotsys.conf, section
+        5">gotsys.conf(5)</a> is sent to the <a class="Xr" aria-label="gotsysd,
+        section 8">gotsysd(8)</a>
+        <a class="permalink" href="#system"><i class="Em">system
+        repository</i></a>. If system configuration fails or causes problems for
+        any reason, system administrators with shell access to the server can
+        use <code class="Ic">gotsys apply</code> to reconfigure the system back
+        into a working state.</p>
+    <p class="Pp"><code class="Ic">gotsys apply</code> requires on-disk read
+        access to the <a class="Xr" aria-label="gotsysd, section
+        8">gotsysd(8)</a> system repository, as well as access to the
+        <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> unix
+        socket. By default, only the root and _gotd users have the required
+        access permissions.</p>
+    <p class="Pp">The options for <code class="Cm">gotsys apply</code> are as
+        follows:</p>
+    <dl class="Bl-tag">
+      <dt id="c"><a class="permalink" href="#c"><code class="Fl">-c</code></a>
+        <var class="Ar">commit</var></dt>
+      <dd>Obtain the <a class="Xr" aria-label="gotsys.conf, section
+          5">gotsys.conf(5)</a> configuration <var class="Ar">file</var> from
+          the specified <var class="Ar">commit</var>.
+        <p class="Pp">The expected <var class="Ar">commit</var> argument is a
+            commit ID, or a reference name or a keyword which will be resolved
+            to a commit ID. An abbreviated hash argument will be expanded to a
+            full commit ID automatically, provided the abbreviation is
+          unique.</p>
+        <p class="Pp">If no <var class="Ar">commit</var> is specified, a commit
+            corresponding to the repository's HEAD reference will be used.</p>
+      </dd>
+      <dt id="f"><a class="permalink" href="#f"><code class="Fl">-f</code></a>
+        <var class="Ar">socket</var></dt>
+      <dd>Set the path to the unix <var class="Ar">socket</var> which
+          <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> is
+          listening on. If not specified, the path
+          <span class="Pa">/var/run/gotsysd.sock</span> will be used.</dd>
+      <dt id="r"><a class="permalink" href="#r"><code class="Fl">-r</code></a>
+        <var class="Ar">repository-path</var></dt>
+      <dd>Use the repository at the specified path. If not specified, the
+          repository path <span class="Pa">/git/gotsys.git</span> will be
+        used.</dd>
+    </dl>
+  </dd>
+  <dt id="check"><a class="permalink" href="#check"><code class="Cm">check</code></a>
+    [<code class="Fl">-q</code>] [<code class="Fl">-f</code>
+    <var class="Ar">file</var>]</dt>
+  <dd>Read a <a class="Xr" aria-label="gotsys.conf, section
+      5">gotsys.conf(5)</a> configuration <var class="Ar">file</var> and report
+      any errors. If no <var class="Ar">file</var> is specified, the file
+      <span class="Pa">gotsys.conf</span> in the current working directory will
+      be read.
+    <p class="Pp"><code class="Ic">gotsys check</code> is intended to be used by
+        administrators who manage a <a class="Xr" aria-label="gotd, section
+        8">gotd(8)</a> server remotely by committing changes to
+        <a class="Xr" aria-label="gotsys.conf, section 5">gotsys.conf(5)</a>.
+        Files which do not pass <code class="Ic">gotsys check</code> will be
+        rejected by the server. Running <code class="Ic">gotsys check</code>
+        before committing changes to <a class="Xr" aria-label="gotsys.conf,
+        section 5">gotsys.conf(5)</a> is therefore recommended.</p>
+    <p class="Pp">The options for <code class="Cm">gotsys check</code> are as
+        follows:</p>
+    <dl class="Bl-tag">
+      <dt id="f~2"><a class="permalink" href="#f~2"><code class="Fl">-f</code></a>
+        <var class="Ar">file</var></dt>
+      <dd>The path to the configuration <var class="Ar">file</var> to read. A
+          hyphen (-) can be used to read standard input: <code class="Cm">gotsys
+          check -f -</code></dd>
+      <dt id="q"><a class="permalink" href="#q"><code class="Fl">-q</code></a></dt>
+      <dd>Stay silent on standard output. Only report errors.</dd>
+    </dl>
+  </dd>
+</dl>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="EXIT_STATUS"><a class="permalink" href="#EXIT_STATUS">EXIT
+  STATUS</a></h2>
+<p class="Pp">The <code class="Nm">gotsys</code> utility exits&#x00A0;0 on
+    success, and&#x00A0;&gt;0 if an error occurs.</p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
+  ALSO</a></h2>
+<p class="Pp"><a class="Xr" aria-label="gotsys.conf, section
+    5">gotsys.conf(5)</a>, <a class="Xr" aria-label="gotd, section
+    8">gotd(8)</a>, <a class="Xr" aria-label="gotsysd, section
+  8">gotsysd(8)</a></p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h2>
+<p class="Pp"><span class="An">Stefan Sperling</span>
+    &lt;<a class="Mt" href="mailto:stsp@openbsd.org">stsp@openbsd.org</a>&gt;</p>
+</section>
+</main>
+<div class="foot" role="doc-pagefooter" aria-label="Manual footer
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
+</body>
+</html>
blob - ad69c4f642071037a54fcb1fe1e8e428af05d7c6
blob + 629185abf19409d7972d8b30d28f1c4b537c9410
--- gotwebd.conf.5.html
+++ gotwebd.conf.5.html
@@ -52,10 +52,6 @@
 <pre>lan_addr = &quot;192.168.0.1&quot;
 listen on $lan_addr port 9090</pre>
 </div>
-<p class="Pp">Paths mentioned in <code class="Nm">gotwebd.conf</code> must be
-    relative to <span class="Pa">/var/www</span>, the
-    <a class="Xr" aria-label="chroot, section 2">chroot(2)</a> environment of
-    <a class="Xr" aria-label="httpd, section 8">httpd(8)</a>.</p>
 </section>
 <section class="Sh">
 <h2 class="Sh" id="GLOBAL_CONFIGURATION"><a class="permalink" href="#GLOBAL_CONFIGURATION">GLOBAL
@@ -67,7 +63,9 @@ listen on $lan_addr port 9090</pre>
   <dd>Set the path to the <a class="Xr" aria-label="chroot, section
       2">chroot(2)</a> environment of <a class="Xr" aria-label="httpd, section
       8">httpd(8)</a>. If not specified, it defaults to
-      <span class="Pa">/var/www</span>, the home directory of the www user.</dd>
+      <span class="Pa">/var/www</span>, the home directory of the www user.
+      Setting the <var class="Ar">path</var> to <span class="Pa">/</span>
+      effectively disables chroot.</dd>
   <dt id="listen"><a class="permalink" href="#listen"><code class="Ic">listen
     on</code></a> <var class="Ar">address</var> <code class="Ic">port</code>
     <var class="Ar">number</var></dt>
@@ -81,7 +79,11 @@ listen on $lan_addr port 9090</pre>
     on socket</code></a> <var class="Ar">path</var></dt>
   <dd>Configure a <span class="Ux">UNIX</span>-domain socket for incoming
       FastCGI connections. May be specified multiple times to build up a list of
-      listening sockets.</dd>
+      listening sockets.
+    <p class="Pp">While the specified <var class="Ar">path</var> must be
+        absolute, it should usually point inside the web server's chroot
+        directory such that the web server can access the socket.</p>
+  </dd>
   <dt id="prefork"><a class="permalink" href="#prefork"><code class="Ic">prefork</code></a>
     <var class="Ar">number</var></dt>
   <dd>Run the specified number of server processes.
@@ -91,6 +93,13 @@ listen on $lan_addr port 9090</pre>
     <var class="Ar">user</var></dt>
   <dd>Set the <var class="Ar">user</var> which will run
       <a class="Xr" aria-label="gotwebd, section 8">gotwebd(8)</a>. If not
+      specified, the user _gotwebd will be used.</dd>
+  <dt id="www"><a class="permalink" href="#www"><code class="Ic">www
+    user</code></a> <var class="Ar">user</var></dt>
+  <dd>Set the <var class="Ar">user</var> which runs
+      <a class="Xr" aria-label="httpd, section 8">httpd(8)</a>. Needed to ensure
+      that the web server can access UNIX-domain sockets created by
+      <a class="Xr" aria-label="gotwebd, section 8">gotwebd(8)</a>. If not
       specified, the user www will be used.</dd>
 </dl>
 <p class="Pp">If no <code class="Ic">listen</code> directive is used,
@@ -119,11 +128,17 @@ listen on $lan_addr port 9090</pre>
     <var class="Ar">path</var></dt>
   <dd>Set the path to a custom Cascading Style Sheet (CSS) to be used. If this
       option is not specified then the default style sheet
-      &#x2018;gotweb.css&#x2019; will be used.</dd>
+      &#x2018;gotweb.css&#x2019; will be used.
+    <p class="Pp">This path must be valid in the web server's URL space since
+        browsers will attempt to fetch it.</p>
+  </dd>
   <dt id="logo"><a class="permalink" href="#logo"><code class="Ic">logo</code></a>
     <var class="Ar">path</var></dt>
   <dd>Set the path to an image file containing a logo to be displayed. Defaults
-      to &#x2018;got.png&#x2019;.</dd>
+      to &#x2018;got.png&#x2019;.
+    <p class="Pp">This path must be valid in the web server's URL space since
+        browsers will attempt to fetch it.</p>
+  </dd>
   <dt id="logo_url"><a class="permalink" href="#logo_url"><code class="Ic">logo_url</code></a>
     <var class="Ar">url</var></dt>
   <dd>Set a hyperlink for the logo. Defaults to
@@ -140,8 +155,12 @@ listen on $lan_addr port 9090</pre>
   <dt id="repos_path"><a class="permalink" href="#repos_path"><code class="Ic">repos_path</code></a>
     <var class="Ar">path</var></dt>
   <dd>Set the path to the directory which contains Git repositories that the
-      server should publish. Defaults to <span class="Pa">/got/public</span>
-      under the chroot.</dd>
+      server should publish. This path is absolute. Repositories can be served
+      even if they reside outside the web server's chroot directory.
+    <p class="Pp">Defaults to <span class="Pa">/got/public</span> inside the web
+        server's chroot directory. The <code class="Cm">chroot</code> directive
+        must be used before the server declaration in order to take effect.</p>
+  </dd>
   <dt id="respect_exportok"><a class="permalink" href="#respect_exportok"><code class="Ic">respect_exportok</code></a>
     <var class="Ar">on</var> | <var class="Ar">off</var></dt>
   <dd>Set whether to display the repository only if it contains the magic
@@ -214,20 +233,24 @@ owner = &quot;Your Name&quot;</pre>
 <h2 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h2>
 <p class="Pp">A sample configuration:</p>
 <div class="Bd Pp Bd-indent Li">
-<pre>server &quot;localhost&quot; {
+<pre>www user &quot;www&quot;   # www username needs quotes since www is a keyword
+
+server &quot;localhost&quot; {
 	site_name	&quot;my public repos&quot;
 	site_owner	&quot;Flan Hacker&quot;
 	site_link	&quot;Flan' Projects&quot;
 }</pre>
 </div>
 <p class="Pp">Another example, this time listening on a local port instead of
-    the implicit <span class="Ux">UNIX</span> socket.</p>
+    the implicit <span class="Ux">UNIX</span> socket, and serving repositories
+    located outside the web server's chroot:</p>
 <div class="Bd Pp Bd-indent Li">
 <pre>listen on 127.0.0.1 port 9000
 listen on ::1 port 9000
 
 server &quot;localhost&quot; {
-	site_name &quot;my public repos&quot;
+	site_name	&quot;my public repos&quot;
+	repos_path	&quot;/var/git&quot;
 }</pre>
 </div>
 </section>
@@ -242,7 +265,7 @@ server &quot;localhost&quot; {
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>
blob - /dev/null
blob + 1533d4ae7d0064b07c5ebef2554084c377d4c227 (mode 644)
--- /dev/null
+++ gotsys.conf.5.html
@@ -0,0 +1,271 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
+  <title>GOTSYS.CONF(5)</title>
+</head>
+<!-- This is an automatically generated file.  Do not edit.
+   Copyright (c) 2024 Stefan Sperling <stsp@openbsd.org>
+  
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+  
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+   -->
+<body>
+<div class="head" role="doc-pageheader" aria-label="Manual header
+  line"><span class="head-ltitle">GOTSYS.CONF(5)</span>
+  <span class="head-vol">File Formats Manual</span>
+  <span class="head-rtitle">GOTSYS.CONF(5)</span></div>
+<main class="manual-text">
+<section class="Sh">
+<h2 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h2>
+<p class="Pp"><code class="Nm">gotsys.conf</code> &#x2014;
+    <span class="Nd" role="doc-subtitle">gotsys configuration file</span></p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h2>
+<p class="Pp"><code class="Nm">gotsys.conf</code> provides system configuration
+    information to <a class="Xr" aria-label="gotsysd, section
+  8">gotsysd(8)</a>.</p>
+<p class="Pp" id="system"><code class="Nm">gotsys.conf</code> allows remote
+    administrators to configure aspects of Git repository services without
+    having shell access to the Git server's operating system. Remote
+    administrators merely need to be granted write access to a special-purpose
+    <a class="permalink" href="#system"><i class="Em">system repository</i></a>
+    hosted by <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> in order to
+    configure Git repository services.</p>
+<p class="Pp">The file format is line-based, with one configuration directive
+    per line. Any lines beginning with a &#x2018;#&#x2019; are treated as
+    comments and ignored.</p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="GLOBAL_CONFIGURATION"><a class="permalink" href="#GLOBAL_CONFIGURATION">GLOBAL
+  CONFIGURATION</a></h2>
+<br/>
+<p class="Pp"> The available global configuration directives are as follows:</p>
+<dl class="Bl-tag">
+  <dt id="group"><a class="permalink" href="#group"><code class="Ic">group</code></a>
+    <var class="Ar">name</var></dt>
+  <dd>Declare a group with the given <var class="Ar">name</var>. Users can then
+      be granted membership of this group in order to manage repository access
+      rules on a per-group basis.
+    <p class="Pp">Group names may only contain alphabetic ASCII characters (a-z,
+        A-Z), non-leading digits (0-9), non-leading hyphens (-), non-leading
+        underscores (_), and non-leading periods (.).</p>
+    <p class="Pp">The <var class="Ar">name</var> &#x201C;anonymous&#x201D; is
+        reserved for use with the <code class="Ic">permit</code> directive and
+        cannot be used with the <code class="Ic">group</code> directive.</p>
+    <p class="Pp">User and group names which are used for special purposes by
+        the <span class="Ux">OpenBSD</span> system cannot be used in
+        <code class="Nm">gotsys.conf</code>. The current list of reserved names
+        is &#x201C;build&#x201D;, &#x201C;root&#x201D;, &#x201C;wheel&#x201D;,
+        &#x201C;daemon&#x201D;, &#x201C;kmem&#x201D;, &#x201C;sys&#x201D;,
+        &#x201C;tty&#x201D;, &#x201C;operator&#x201D;, &#x201C;bin&#x201D;,
+        &#x201C;wsrc&#x201D;, &#x201C;users&#x201D;, &#x201C;auth&#x201D;,
+        &#x201C;games&#x201D;, &#x201C;staff&#x201D;, &#x201C;wobj&#x201D;,
+        &#x201C;sshd&#x201D;, &#x201C;guest&#x201D;, &#x201C;utmp&#x201D;,
+        &#x201C;crontab&#x201D;, &#x201C;www&#x201D;, &#x201C;network&#x201D;,
+        &#x201C;authpf&#x201D;, &#x201C;dialer&#x201D;, &#x201C;nogroup&#x201D;,
+        and &#x201C;nobody&#x201D;.</p>
+  </dd>
+  <dt id="user"><a class="permalink" href="#user"><code class="Ic">user</code></a>
+    <var class="Ar">name</var></dt>
+  <dd>Declare a user which can then be granted access to specific repositories.
+    <p class="Pp">A user must be declared with a unique
+        <var class="Ar">name</var>, followed by user-specific configuration
+        directives inside curly braces:</p>
+    <p class="Pp"><code class="Ic">user</code> <var class="Ar">name</var>
+      {...}</p>
+    <p class="Pp">User names may only contain alphabetic ASCII characters (a-z,
+        A-Z), non-leading digits (0-9), non-leading hyphens (-), non-leading
+        underscores (_), and non-leading periods (.).</p>
+    <p class="Pp">The <var class="Ar">name</var> &#x201C;anonymous&#x201D; is
+        reserved for use with the <code class="Ic">permit</code> directive and
+        cannot be used with the <code class="Ic">user</code> directive.</p>
+    <p class="Pp">User and group names used for special purposes by the
+        <span class="Ux">OpenBSD</span> system cannot be used in
+        <code class="Nm">gotsys.conf</code>. The list of reserved user names is
+        the same as documented above for the <code class="Ic">group</code>
+        directive.</p>
+    <p class="Pp">When a user's declaration is removed from
+        <code class="Nm">gotsys.conf</code> the server account password will be
+        locked, and any previously installed authorized keys will be removed,
+        rendering the account inaccessible. The account can be made accessible
+        again by restoring the user's <code class="Nm">gotsys.conf</code>
+      entry.</p>
+    <p class="Pp">The available <code class="Cm">user</code> parameters are as
+        follows:</p>
+    <dl class="Bl-tag">
+      <dt id="group~2"><a class="permalink" href="#group~2"><code class="Ic">group</code></a>
+        <var class="Ar">group</var></dt>
+      <dd>Make the user a member of the given <var class="Ar">group</var>. This
+          directive may be specified multiple times to add the user to multiple
+          groups. All groups listed here must already have been declared with
+          the <code class="Ic">group</code> directive.</dd>
+      <dt id="password"><a class="permalink" href="#password"><code class="Ic">password</code></a>
+        <var class="Ar">string</var></dt>
+      <dd>Set a password for the user. The <var class="Ar">string</var> argument
+          must be an encrypted password string, as generated by OpenBSD's
+          <a class="Xr" aria-label="encrypt, section 1">encrypt(1)</a> command.
+          If not specified, password-based authentication will be disabled for
+          this user.</dd>
+      <dt id="authorized"><a class="permalink" href="#authorized"><code class="Ic">authorized</code></a>
+        <code class="Ic">key</code> <var class="Ar">type</var>
+        <var class="Ar">key</var> [<var class="Ar">comment</var>]</dt>
+      <dd>Allow the user to authenticate with an SSH public key.
+        <p class="Pp">The list of arguments consist of the following
+            space-separated fields: the key <var class="Ar">type</var>, the
+            base64-encoded <var class="Ar">key</var>, and an optional
+            <var class="Ar">comment</var>. These arguments will usually
+            correspond to the contents of an
+            <span class="Pa">id_ecdsa.pub</span>,
+            <span class="Pa">id_ecdsa_sk.pub</span>,
+            <span class="Pa">id_ed25519.pub</span>,
+            <span class="Pa">id_ed25519_sk.pub</span>, or
+            <span class="Pa">id_rsa.pub</span> file provided by the user.</p>
+        <p class="Pp">The supported key types are:</p>
+        <p class="Pp"></p>
+        <ul class="Bl-item Bd-indent Bl-compact">
+          <li>sk-ecdsa-sha2-nistp256@openssh.com</li>
+          <li>ecdsa-sha2-nistp256</li>
+          <li>ecdsa-sha2-nistp384</li>
+          <li>ecdsa-sha2-nistp521</li>
+          <li>sk-ssh-ed25519@openssh.com</li>
+          <li>ssh-ed25519</li>
+          <li>ssh-rsa</li>
+        </ul>
+        <p class="Pp">The optional <var class="Ar">comment</var> is not used for
+            anything, but may be convenient for the user to identify the
+          key.</p>
+        <p class="Pp">The <code class="Ic">authorized</code>
+            <code class="Ic">key</code> directive may be specified multiple
+            times to allow the user to authenticate with any of the specified
+            keys.</p>
+        <p class="Pp" id="sk-ssh-ed25519@openssh.com">Two-factor authentication
+            with FIDO keys can be enforced by only adding keys of type
+            <a class="permalink" href="#sk-ssh-ed25519@openssh.com"><i class="Em">sk-ssh-ed25519@openssh.com</i></a>
+            or
+            <a class="permalink" href="#sk-ecdsa-sha2-nistp256@openssh.com"><i class="Em" id="sk-ecdsa-sha2-nistp256@openssh.com">sk-ecdsa-sha2-nistp256@openssh.com</i></a>.</p>
+      </dd>
+    </dl>
+  </dd>
+</dl>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="REPOSITORY_CONFIGURATION"><a class="permalink" href="#REPOSITORY_CONFIGURATION">REPOSITORY
+  CONFIGURATION</a></h2>
+<p class="Pp">Repositories declared in <code class="Nm">gotsys.conf</code> will
+    be created on the server if they do not already exist. Each repository must
+    be given a unique <var class="Ar">name</var>, followed by
+    repository-specific configuration directives inside curly braces:</p>
+<p class="Pp"><code class="Ic">repository</code> <var class="Ar">name</var>
+    {...}</p>
+<p class="Pp">Repository names may only contain alphabetic ASCII characters
+    (a-z, A-Z), non-leading digits (0-9), non-leading hyphens (-), non-leading
+    underscores (_), and non-leading periods (.).</p>
+<p class="Pp">For each repository, access rules must be configured using the
+    <code class="Ic">permit</code> and <code class="Ic">deny</code>
+    configuration directives. Multiple access rules can be specified, and the
+    last matching rule determines the action taken. If no rule matches, access
+    to the repository is denied.</p>
+<p class="Pp">The available repository configuration directives are as
+  follows:</p>
+<dl class="Bl-tag">
+  <dt id="head"><a class="permalink" href="#head"><code class="Ic">head</code></a>
+    <var class="Ar">branch</var></dt>
+  <dd>Point the repository's symbolic <span class="Pa">HEAD</span> reference at
+      the specified <var class="Ar">branch</var>. If not specified,
+      <span class="Pa">HEAD</span> will point at the branch
+      &#x201C;main&#x201D;, regardless of whether this branch actually exists in
+      the repository.
+    <p class="Pp">If <span class="Pa">HEAD</span> points at a non-existent
+        branch then clients may fail to clone the repository because they rely
+        on <span class="Pa">HEAD</span> to determine which branch to fetch by
+        default.</p>
+  </dd>
+  <dt id="deny"><a class="permalink" href="#deny"><code class="Ic">deny</code></a>
+    <var class="Ar">identity</var></dt>
+  <dd>Deny repository access to users with the username
+      <var class="Ar">identity</var>. Group names may be matched by prepending a
+      colon (&#x2018;:&#x2019;) to <var class="Ar">identity</var>.</dd>
+  <dt id="permit"><a class="permalink" href="#permit"><code class="Ic">permit</code></a>
+    <var class="Ar">mode</var> <var class="Ar">identity</var></dt>
+  <dd>Permit repository access to users with the username
+      <var class="Ar">identity</var>. The <var class="Ar">mode</var> argument
+      must be set to either <code class="Ic">ro</code> for read-only access, or
+      <code class="Ic">rw</code> for read-write access. Group names may be
+      matched by prepending a colon (&#x2018;:&#x2019;) to
+      <var class="Ar">identity</var>.
+    <p class="Pp">The special user <var class="Ar">identity</var>
+        &#x201C;anonymous&#x201D; can be used when public read-only access to
+        repositories over SSH is desired. The anonymous user has an empty
+        password, cannot use an SSH public key, and can only be granted
+        read-only access.</p>
+  </dd>
+</dl>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h2>
+<div class="Bd Bd-indent Li">
+<pre>group developers
+group porters
+
+user flan_hacker {
+	password &quot;$2b$08$CFWp/ZC.DQi34.iHBgRzBerTzEGB9WY9tDN1CLCbPUpGC.fmNi4Ea&quot;
+	group developers
+}
+
+user flan_squee {
+	group porters
+	authorized key ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAQ2ZWscmMeCYLwm07gDSf0jApFJ58bMNxiErDqUrFz4
+}
+
+repository &quot;src&quot; {
+	permit rw :developers
+	permit ro anonymous
+}
+
+repository &quot;openbsd/ports&quot; {
+	permit rw :porters
+	permit ro anonymous
+	deny flan_hacker
+
+}
+
+repository &quot;secret&quot; {
+	permit rw flan_hacker
+	head &quot;refs/heads/private&quot;
+}</pre>
+</div>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
+  ALSO</a></h2>
+<p class="Pp"><a class="Xr" aria-label="got, section 1">got(1)</a>,
+    <a class="Xr" aria-label="gotsys, section 1">gotsys(1)</a>,
+    <a class="Xr" aria-label="gotd, section 8">gotd(8)</a>,
+    <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a></p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h2>
+<p class="Pp">There is no way to rename or delete repositories via
+    <code class="Nm">gotsys.conf</code>. Existing repositories that are no
+    longer mentioned in <code class="Nm">gotsys.conf</code> will be
+    inaccessible, as if they had been declared without any access rules.</p>
+</section>
+</main>
+<div class="foot" role="doc-pagefooter" aria-label="Manual footer
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
+</body>
+</html>
blob - /dev/null
blob + c9a90f7e25f17dd40dfeaae3616a67d26209819c (mode 644)
--- /dev/null
+++ gotsysctl.8.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
+  <title>GOTSYSCTL(8)</title>
+</head>
+<!-- This is an automatically generated file.  Do not edit.
+   Copyright (c) 2025 Stefan Sperling
+  
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+  
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+   -->
+<body>
+<div class="head" role="doc-pageheader" aria-label="Manual header
+  line"><span class="head-ltitle">GOTSYSCTL(8)</span>
+  <span class="head-vol">System Manager's Manual</span>
+  <span class="head-rtitle">GOTSYSCTL(8)</span></div>
+<main class="manual-text">
+<section class="Sh">
+<h2 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h2>
+<p class="Pp"><code class="Nm">gotsysctl</code> &#x2014;
+    <span class="Nd" role="doc-subtitle">control the Game of Trees System
+    Daemon</span></p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h2>
+<table class="Nm">
+  <tr>
+    <td><code class="Nm">gotsysctl</code></td>
+    <td>[<code class="Fl">-hV</code>] [<code class="Fl">-f</code>
+      <var class="Ar">path</var>] <var class="Ar">command</var>
+      [<var class="Ar">arg ...</var>]</td>
+  </tr>
+</table>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h2>
+<p class="Pp"><code class="Nm">gotsysctl</code> controls the
+    <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> daemon.</p>
+<p class="Pp"><code class="Nm">gotsysctl</code> connects to the
+    <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> unix socket,
+    sends a command, and displays the response from
+    <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a>. Access to the
+    <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> unix socket is
+    restricted to specific user accounts, see
+    <a class="Xr" aria-label="gotsysd.conf, section 5">gotsysd.conf(5)</a>.</p>
+<p class="Pp">The options for <code class="Nm">gotsysctl</code> are as
+  follows:</p>
+<dl class="Bl-tag">
+  <dt id="h"><a class="permalink" href="#h"><code class="Fl">-h</code></a></dt>
+  <dd>Display usage information and exit immediately.</dd>
+  <dt id="f"><a class="permalink" href="#f"><code class="Fl">-f</code></a>
+    <var class="Ar">path</var></dt>
+  <dd>Set the <var class="Ar">path</var> to the unix socket which
+      <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> is listening
+      on. If not specified, the path
+      <span class="Pa">/var/run/gotsysd.sock</span> will be used.</dd>
+  <dt id="V"><a class="permalink" href="#V"><code class="Fl">-V</code></a>,
+    <code class="Fl">--version</code></dt>
+  <dd>Display program version and exit immediately.</dd>
+</dl>
+<p class="Pp">The commands for <code class="Nm">gotsysctl</code> are as
+  follows:</p>
+<dl class="Bl-tag">
+  <dt id="info"><a class="permalink" href="#info"><code class="Cm">info</code></a></dt>
+  <dd>Display information about a running <a class="Xr" aria-label="gotsysd,
+      section 8">gotsysd(8)</a> instance.</dd>
+</dl>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
+  ALSO</a></h2>
+<p class="Pp"><a class="Xr" aria-label="gotsys.conf, section
+    5">gotsys.conf(5)</a>, <a class="Xr" aria-label="gotsysd.conf, section
+    5">gotsysd.conf(5)</a>, <a class="Xr" aria-label="gotsysd, section
+    8">gotsysd(8)</a></p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h2>
+<p class="Pp"><span class="An">Stefan Sperling</span>
+    &lt;<a class="Mt" href="mailto:stsp@openbsd.org">stsp@openbsd.org</a>&gt;</p>
+</section>
+</main>
+<div class="foot" role="doc-pagefooter" aria-label="Manual footer
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
+</body>
+</html>
blob - /dev/null
blob + 58d5196966920f2cf37b9acc646db59272109f54 (mode 644)
--- /dev/null
+++ gotsysd.8.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
+  <title>GOTSYSD(8)</title>
+</head>
+<!-- This is an automatically generated file.  Do not edit.
+   Copyright (c) 2024 Stefan Sperling <stsp@openbsd.org>
+  
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+  
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+   -->
+<body>
+<div class="head" role="doc-pageheader" aria-label="Manual header
+  line"><span class="head-ltitle">GOTSYSD(8)</span>
+  <span class="head-vol">System Manager's Manual</span>
+  <span class="head-rtitle">GOTSYSD(8)</span></div>
+<main class="manual-text">
+<section class="Sh">
+<h2 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h2>
+<p class="Pp"><code class="Nm">gotsysd</code> &#x2014;
+    <span class="Nd" role="doc-subtitle">Game of Trees System Daemon</span></p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h2>
+<table class="Nm">
+  <tr>
+    <td><code class="Nm">gotsysd</code></td>
+    <td>[<code class="Fl">-dnv</code>] [<code class="Fl">-f</code>
+      <var class="Ar">config-file</var>]</td>
+  </tr>
+</table>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h2>
+<p class="Pp"><code class="Nm">gotsysd</code> manages the system configuration
+    of a Git repository server running <a class="Xr" aria-label="gotd, section
+    8">gotd(8)</a>.</p>
+<p class="Pp" id="system"><code class="Nm">gotsysd</code> allows remote
+    administrators to configure aspects of Git repository services without
+    having shell access to the Git server's operating system. Remote
+    administrators merely need to be granted write access to a special-purpose
+    <a class="permalink" href="#system"><i class="Em">system repository</i></a>
+    called <span class="Pa">gotsys.git</span> in order to configure Git
+    repository services.</p>
+<p class="Pp">Tasks carried out by <code class="Nm">gotsysd</code> include the
+    creation of Git repositores to be served by <a class="Xr" aria-label="gotd,
+    section 8">gotd(8)</a>, and the creation of user accounts which use the
+    <a class="Xr" aria-label="gotsh, section 1">gotsh(1)</a> shell to access
+    <a class="Xr" aria-label="gotd, section 8">gotd(8)</a>. The desired system
+    configuration is described by the file
+    <a class="Xr" aria-label="gotsys.conf, section 5">gotsys.conf(5)</a> in the
+    system repository.</p>
+<p class="Pp">The <code class="Nm">gotsysd</code> configuration file format is
+    described in <a class="Xr" aria-label="gotsysd.conf, section
+    5">gotsysd.conf(5)</a>. <code class="Nm">gotsysd</code> can be run without a
+    configuration file, using default settings.</p>
+<p class="Pp"><code class="Nm">gotsysd</code> listens on a
+    <a class="Xr" aria-label="unix, section 4">unix(4)</a> socket for
+    notifications issued by <a class="Xr" aria-label="gotd, section
+    8">gotd(8)</a>, and for commands issued via
+    <a class="Xr" aria-label="gotsysctl, section 8">gotsysctl(8)</a>.
+    <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> notifications are
+    sent when a remote administrator modifies the file
+    <a class="Xr" aria-label="gotsys.conf, section 5">gotsys.conf(5)</a> in the
+    system repository.</p>
+<p class="Pp">Only the users root and _gotd are granted access to the
+    <code class="Nm">gotsysd</code> unix socket by default. Alternative access
+    rules can be configured in <a class="Xr" aria-label="gotsysd.conf, section
+    5">gotsysd.conf(5)</a>.</p>
+<p class="Pp">The options for <code class="Nm">gotsysd</code> are as
+  follows:</p>
+<dl class="Bl-tag">
+  <dt id="d"><a class="permalink" href="#d"><code class="Fl">-d</code></a></dt>
+  <dd>Do not daemonize. Send log output to stderr.</dd>
+  <dt id="f"><a class="permalink" href="#f"><code class="Fl">-f</code></a>
+    <var class="Ar">config-file</var></dt>
+  <dd>Set the path to the configuration file. If not specified, the file
+      <span class="Pa">/etc/gotsysd.conf</span> will be used. This file is not
+      required to exist.</dd>
+  <dt id="n"><a class="permalink" href="#n"><code class="Fl">-n</code></a></dt>
+  <dd>Configtest mode. Only check the configuration file for validity.</dd>
+  <dt id="v"><a class="permalink" href="#v"><code class="Fl">-v</code></a></dt>
+  <dd>Verbose mode. Verbosity increases if this option is used multiple
+    times.</dd>
+</dl>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h2>
+<dl class="Bl-tag Bl-compact">
+  <dt><span class="Pa">/etc/gotsysd.conf</span></dt>
+  <dd>Default location of the configuration file.</dd>
+  <dt><span class="Pa">/git</span></dt>
+  <dd>Default directory containing Git repositories managed by
+      <code class="Nm">gotsysd</code>. This path can be configured in
+      <a class="Xr" aria-label="gotsysd.conf, section
+    5">gotsysd.conf(5)</a>.</dd>
+  <dt><span class="Pa">/var/db/gotsysd</span></dt>
+  <dd>The directory where <code class="Nm">gotsysd</code> stores persistent
+      state. Files in this directory are opened with exclusive locks, ensuring
+      that only one instance of <code class="Nm">gotsysd</code> runs on a given
+      <span class="Ux">OpenBSD</span> system.</dd>
+  <dt><span class="Pa">/var/run/gotsysd.sock</span></dt>
+  <dd>Default location of the unix socket which <code class="Nm">gotsysd</code>
+      is listening on. This path can be configured in
+      <a class="Xr" aria-label="gotsysd.conf, section
+    5">gotsysd.conf(5)</a>.</dd>
+</dl>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
+  ALSO</a></h2>
+<p class="Pp"><a class="Xr" aria-label="got, section 1">got(1)</a>,
+    <a class="Xr" aria-label="gotsh, section 1">gotsh(1)</a>,
+    <a class="Xr" aria-label="gotsys, section 1">gotsys(1)</a>,
+    <a class="Xr" aria-label="gotsys.conf, section 5">gotsys.conf(5)</a>,
+    <a class="Xr" aria-label="gotsysd.conf, section 5">gotsysd.conf(5)</a>,
+    <a class="Xr" aria-label="gotd, section 8">gotd(8)</a>,
+    <a class="Xr" aria-label="gotsysctl, section 8">gotsysctl(8)</a></p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h2>
+<p class="Pp"><span class="An">Stefan Sperling</span>
+    &lt;<a class="Mt" href="mailto:stsp@openbsd.org">stsp@openbsd.org</a>&gt;</p>
+</section>
+</main>
+<div class="foot" role="doc-pagefooter" aria-label="Manual footer
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
+</body>
+</html>
blob - /dev/null
blob + e22dbbebf09658a95b99c06fbd6de581aaf4f8d4 (mode 644)
--- /dev/null
+++ gotsysd.conf.5.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+  <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
+  <title>GOTSYSD.CONF(5)</title>
+</head>
+<!-- This is an automatically generated file.  Do not edit.
+   Copyright (c) 2024 Stefan Sperling <stsp@openbsd.org>
+  
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+  
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+   -->
+<body>
+<div class="head" role="doc-pageheader" aria-label="Manual header
+  line"><span class="head-ltitle">GOTSYSD.CONF(5)</span>
+  <span class="head-vol">File Formats Manual</span>
+  <span class="head-rtitle">GOTSYSD.CONF(5)</span></div>
+<main class="manual-text">
+<section class="Sh">
+<h2 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h2>
+<p class="Pp"><code class="Nm">gotsysd.conf</code> &#x2014;
+    <span class="Nd" role="doc-subtitle">gotsysd configuration file</span></p>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h2>
+<p class="Pp"><code class="Nm">gotsysd.conf</code> is the run-time configuration
+    file for <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a>.</p>
+<p class="Pp">nhe file format is line-based, with one configuration directive
+    per line. Comments can be put anywhere in the file using a hash mark
+    (&#x2018;#&#x2019;), and extend to the end of the current line. Arguments
+    names not beginning with a letter, digit or underscore, as well as reserved
+    words (such as <code class="Ic">listen</code>,
+    <code class="Ic">repository</code> <span class="No">or</span>
+    <code class="Ic">user</code>), must be quoted. Arguments containing
+    whitespace should be surrounded by double quotes (&quot;).</p>
+<p class="Pp">Macros can be defined that are later expanded in context. Macro
+    names must start with a letter, digit, or underscore, and may contain any of
+    those characters, but may not be reserved words. Macros are not expanded
+    inside quotes. For example:</p>
+<div class="Bd Pp Bd-indent Li">
+<pre>path = &quot;/var/run/gotsysd.sock&quot;
+listen on $path</pre>
+</div>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="GLOBAL_CONFIGURATION"><a class="permalink" href="#GLOBAL_CONFIGURATION">GLOBAL
+  CONFIGURATION</a></h2>
+<br/>
+<p class="Pp"> The available global configuration directives are as follows:</p>
+<dl class="Bl-tag">
+  <dt id="gotd"><a class="permalink" href="#gotd"><code class="Ic">gotd</code></a>
+    <code class="Ic">user</code> <var class="Ar">user</var></dt>
+  <dd>The name of the <a class="Xr" aria-label="gotd, section 8">gotd(8)</a>
+      user account. Defauls to &#x201C;_gotd&#x201D;.
+      <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> will switch
+      to this user account as needed.</dd>
+  <dt id="listen"><a class="permalink" href="#listen"><code class="Ic">listen
+    on</code></a> <var class="Ar">path</var></dt>
+  <dd>Set the path to the unix socket which <a class="Xr" aria-label="gotsysd,
+      section 8">gotsysd(8)</a> should listen on. If not specified, the path
+      <span class="Pa">/var/run/gotsysd.sock</span> will be used.</dd>
+  <dt id="permit"><a class="permalink" href="#permit"><code class="Ic">permit</code></a>
+    <var class="Ar">identity</var></dt>
+  <dd>Permit <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> unix
+      socket access to users with the username <var class="Ar">identity</var>.
+      Group names may be matched by prepending a colon (&#x2018;:&#x2019;) to
+      <var class="Ar">identity</var>. Numeric IDs are also accepted.
+    <p class="Pp">Multiple <code class="Ic">permit</code> rules can be
+        specified.</p>
+    <p class="Pp">If no <code class="Ic">permit</code> rule is specified, the
+        users root and _gotd are granted access by default.</p>
+  </dd>
+  <dt id="repository"><a class="permalink" href="#repository"><code class="Ic">repository</code></a>
+    <code class="Ic">directory</code> <var class="Ar">path</var></dt>
+  <dd>Set the path to the repository directory within which Git repositories
+      will be created and managed by <a class="Xr" aria-label="gotsysd, section
+      8">gotsysd(8)</a>. This repository directory must be owned by and be
+      exclusively accessible to the <a class="Xr" aria-label="gotd, section
+      8">gotd(8)</a> user.
+    <p class="Pp">If not specified, the path <span class="Pa">/git</span> will
+        be used.</p>
+  </dd>
+  <dt id="uid"><a class="permalink" href="#uid"><code class="Ic">uid
+    range</code></a> <var class="Ar">start</var> <var class="Ar">end</var></dt>
+  <dd>Set the start and end (inclusive) of the range from which
+      <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> will allocate
+      user and group IDs when creating user accounts specified in
+      <a class="Xr" aria-label="gotsys.conf, section 5">gotsys.conf(5)</a>. The
+      <var class="Ar">start</var> of this range must be greater than 1000 and
+      must be smaller than the <var class="Ar">end</var>.
+    <p class="Pp">The default range is 5000 to 5999.</p>
+  </dd>
+  <dt id="user"><a class="permalink" href="#user"><code class="Ic">user</code></a>
+    <var class="Ar">user</var></dt>
+  <dd>Set the <var class="Ar">user</var> which will run
+      <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a>. Initially,
+      <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a> requires root
+      privileges. Afterwards, <a class="Xr" aria-label="gotsysd, section
+      8">gotsysd(8)</a> partly drops privileges to its own
+      <var class="Ar">user</var> and to the <a class="Xr" aria-label="gotd,
+      section 8">gotd(8)</a> user. If not specified, the user _gotsysd will be
+      used. Numeric user IDs are also accepted.</dd>
+</dl>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h2>
+<p class="Pp">The following example shows default settings:</p>
+<div class="Bd Pp Bd-indent Li">
+<pre>user _gotsysd
+gotd user _gotd
+listen on &quot;/var/run/gotsysd.sock&quot;
+repository directory &quot;/git&quot;
+uid range 5000 5999</pre>
+</div>
+</section>
+<section class="Sh">
+<h2 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
+  ALSO</a></h2>
+<p class="Pp"><a class="Xr" aria-label="got, section 1">got(1)</a>,
+    <a class="Xr" aria-label="gotd, section 8">gotd(8)</a>,
+    <a class="Xr" aria-label="gotsysd, section 8">gotsysd(8)</a></p>
+</section>
+</main>
+<div class="foot" role="doc-pagefooter" aria-label="Manual footer
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
+</body>
+</html>
blob - 00a4a0957eadf47f6a8a7abe9c37189abb8aa0bd
blob + b2fb5d89179d7cdd96f0184f420e363c893418b7
--- manual.html
+++ manual.html
@@ -22,6 +22,8 @@ Manual pages installed by the <code>got</code> package
 <li><a href="got.conf.5.html">got.conf</a> &mdash; Game of Trees configuration file
 <li><a href="got-worktree.5.html">got-worktree</a> &mdash; Got work tree format
 <li><a href="git-repository.5.html">git-repository</a> &mdash; Git repository format
+<li><a href="gotsys.1.html">got</a> &mdash; manage gotsys.conf
+<li><a href="gotsys.conf.5.html">got</a> &mdash; gotsys configuration file
 </ul>
 Manual pages installed by the <code>gotwebd</code> package:
 <ul>
@@ -36,6 +38,12 @@ Manual pages installed by the <code>gotd</code> packag
 <li><a href="gotctl.8.html">gotctl</a> &mdash; control the Game of Trees Daemon
 <li><a href="gotsh.1.html">gotsh</a> &mdash; Game of Trees Shell
 </ul>
+Manual pages installed by the <code>gotsysd</code> package:
+<ul>
+<li><a href="gotsysd.conf.5.html">gotctl</a> &mdash; gotsysd configuration file
+<li><a href="gotsysd.8.html">gotctl</a> &mdash; Game of Trees System Daemon
+<li><a href="gotsysctl.8.html">gotctl</a> &mdash; control the Game of Trees System Daemon
+</ul>
 Manual pages installed by the <code>gitwrapper</code> package:
 <ul>
 <li><a href="gitwrapper.1.html">gitwrapper</a> &mdash; invoke an appropriate Git repository server
blob - ced357b461836747a86cfe0cdc10369f11496efd
blob + aa9d8da208eb871b28baa1bf280176804f12bf04
--- sync-man.sh
+++ sync-man.sh
@@ -18,6 +18,8 @@ for f in \
     gotsh/gotsh.1 \
     gotctl/gotctl.8 \
     gitwrapper/gitwrapper.1 \
+    gotsysd/gotsysd.8 gotsysd/gotsysd.conf.5 gotsysctl/gotsysctl.8 \
+    gotsys/gotsys.1 gotsys/gotsys.conf.5 \
     ; do
 	mandoc -T html -O style=mandoc.css "$workdir/$f" > ./${f##*/}.html
 done
blob - fbe4a7ba93657ebb7dd095baafbda4e0f5f3bd12
blob + 88f654eeb0ae03cf19858cba35814e0f8e8a83ba
--- tog.1.html
+++ tog.1.html
@@ -887,7 +887,7 @@
 </section>
 </main>
 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
-  line"><span class="foot-left"></span><span class="foot-date">February 14,
-  2025</span> <span class="foot-os">OpenBSD 7.6</span></div>
+  line"><span class="foot-left"></span><span class="foot-date">April 22,
+  2025</span> <span class="foot-os">OpenBSD 7.7</span></div>
 </body>
 </html>