GOTD(8)
π 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 π)-fconfig-file β set the path to the configuration file. if you don't specify it,/etc/gotd.confgets used instead.-nβ Configtest mode. only check the configuration file for validity. no commit, just vibes β¨-ssecrets β set the path to the secrets file. if you don't specify it,/etc/gotd-secrets.confwill be used if it exists.-vβ Verbose mode. and the way that verbosity increases if you use this option multiple times?? yes. stack them.-vvvvera π₯
β¨ 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 thatgotdis listening on. and guess what, you can change this path β it's configurable ingotd.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
- alpine 3.24: got-doc 0.126-r0 Β· ISC
- nixos 26.05: got 0.125
- ubuntu stonking: gotd 0.126-1build1 Β· ISC
- Copyright (c) 2022 Stefan Sperling
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms