---
name: "gotd"
section: "8"
platform: "linux"
package: "gotd"
version: "0.111-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/gotd"
---

# gotd(8)

Game of Trees Daemon

## NAME

**gotd** – Game of Trees Daemon

## SYNOPSIS

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

## DESCRIPTION

**gotd** is a Git repository server which listens on a [unix(4)](/unix/4.md) socket and relies on its companion tool [gotsh(1)](/gotsh/1.md) to handle Git-protocol communication over the network, via [ssh(1)](/ssh/1.md).

The Git repository format is described in [git-repository(5)](/git-repository/5.md).

**gotd** requires a configuration file in order to run. The configuration file format is described in [gotd.conf(5)](/gotd.conf/5.md).

It is recommended to restrict [ssh(1)](/ssh/1.md) features available to users of **gotd**. See [gotsh(1)](/gotsh/1.md) for details.

The options for **gotd** are as follows:

- **-d**

  Do not daemonize. Send log output to stderr.

- **-f** *config-file*

  Set the path to the configuration file. If not specified, the file */etc/gotd.conf* will be used.

- **-n**

  Configtest mode. Only check the configuration file for validity.

- **-s** *secrets*

  Set the path to the secrets file. If not specified, the file */etc/gotd-secrets.conf* will be used if it exists.

- **-v**

  Verbose mode. Verbosity increases if this option is used multiple times.

## FILES

- */etc/gotd.conf*

  Default location of the configuration file.

- */var/run/gotd.sock*

  Default location of the unix socket which **gotd** is listening on. This path can be configured in [gotd.conf(5)](/gotd.conf/5.md).

## EXAMPLES

Create an empty repository to be served by **gotd**, ensuring that 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'
```

Add the new repository to [gotd.conf(5)](/gotd.conf/5.md) 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
```

The flan\_hacker user can now populate the empty repository with **got** **send**.

## SEE ALSO

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

## AUTHORS

Stefan Sperling ⟨*stsp@openbsd.org*⟩

## CAVEATS

At present, **gotd** cannot serve repositories that use the sha256 object ID hashing algorithm because **gotd** does not yet support version 2 of the Git network protocol.

**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. The configuration of a running **gotd** instance can be reloaded by running **gotctl** **reload** as root.
