GOTD(8)

πŸ“¦
version 0.126 Β· 4 versions
, in alpine 3.24, nixos 26.05, ubuntu stonking

πŸ’– GOTD β€” the Game of Trees Daemon, but make it make sense πŸ’–

okay so bestie, you're holding gotd(8) from the System Manager's Manual, and I'm gonna walk you through it like we're texting at 2am. it's giving serverussy. let's go 🧚


✨ NAME ✨

gotd β€” Game of Trees Daemon πŸŽ€


✨ SYNOPSIS ✨

gotd [-dnv] [-f config-file] [-s secrets]

✨ DESCRIPTION ✨

so gotd is a Git repository server. it listens on a unix(4) socket, right, and it does not talk Git over the network by itself β€” nope, it leans on its companion tool gotsh(1) to handle all the Git-protocol communication over the network, via ssh(1). teamwork, babes πŸ’…

the Git repository format itself is described over in git-repository(5), if you're nosy like that.

gotd requires a configuration file to run. there is no "just run it and see" era here. the config file format lives in gotd.conf(5).

it is recommended to restrict ssh(1) features available to users of gotd. see gotsh(1) for the deets. safety first, always 🫢

the options for gotd are as follows:

  • -d β€” do not daemonize. send log output to stderr. (translation: it stays in your terminal and yells at you directly. lowkey useful for debugging πŸ‘€)
  • -f config-file β€” set the path to the configuration file. if you don't specify it, /etc/gotd.conf gets used instead.
  • -n β€” Configtest mode. only check the configuration file for validity. no commit, just vibes ✨
  • -s secrets β€” set the path to the secrets file. if you don't specify it, /etc/gotd-secrets.conf will be used if it exists.
  • -v β€” Verbose mode. and the way that verbosity increases if you use this option multiple times?? yes. stack them. -vvvv era πŸ”₯

✨ FILES ✨

  • /etc/gotd.conf β€” the default location of the configuration file. king of defaults πŸ‘‘
  • /var/run/gotd.sock β€” the default location of the unix socket that gotd is listening on. and guess what, you can change this path β€” it's configurable in gotd.conf(5) πŸ¦‹

✨ EXAMPLES ✨

🌸 make an empty repo, keep it private

create an empty repository to be served by gotd, ensuring it can only be accessed by the _gotd user:

# mkdir -p /git/myrepo.git
# chmod 700 /git/myrepo.git
# chown _gotd /git/myrepo.git
# su -m _gotd -c 'gotadmin init /git/myrepo.git'

lock it down, bestie. 700 is the moment. πŸ’…

🌸 wire it up and restart

add the new repository to gotd.conf(5) granting read-write access to the flan_hacker user account, and restart gotd:

# cat >> /etc/gotd.conf <<EOF
repository 'myrepo' {
path '/git/myrepo.git'
permit rw flan_hacker
}
EOF
# rcctl restart gotd

🌸 and now we push

the flan_hacker user can now populate the empty repository with got send. periodt. πŸŽ€


✨ SEE ALSO ✨

got(1), gotsh(1), git-repository(5), gotd.conf(5) gotd-secrets.conf(5), gotctl(8)


✨ AUTHORS ✨

Stefan Sperling <stsp@openbsd.org> πŸ’œ


✨ CAVEATS ✨

bestie read this part, fr fr, it's the important bit 😭

at present, gotd cannot serve repositories that use the sha256 object ID hashing algorithm, because gotd does not yet support the object-format capability of the Git network protocol. so if you were about to try that β€” don't. it's not a vibe.

gotd cannot honour the SIGHUP signal because the /etc/gotd-secrets.conf file is only readable by root, and gotd runs entirely without root privileges after initial startup. so how do you reload?? the configuration of a running gotd instance can be reloaded by running gotctl reload as root. (as root. don't forget the root part πŸ™ˆ)


okay that's the whole page babes, no skips, no summaries, we ate and left no crumbs πŸ“πŸ’–

signing off: this one's from the Debian build, version $Mdocdate$, and you read the GOTD(8) page β€” section 8, system manager's manual, exactly where it belongs. mwah. πŸ’œβœ¨

πŸ“¦ where this page comes from