Configuring gotd
gotd(8) can help serve git repositories over ssh.
Install
Although gotd(8) is written by OpenBSD developers, it is not part of the base system:
# pkg_add gotd
Next, we create the folder /var/git to hold the repos:
# mkdir /var/git
Next, we copy our git repo into /var/git
and set the proper permissions:
# cp -R /path/to/repo/example.git /var/git/ # chmod 755 /var/git/example.git # chown -R _gotd /var/git/example.git
NOTE: got clone may have difficulty cloning repos not created with got init and import or gotd(8) may have issues with serving them.
Next, configure gotd.conf(5) to
grant read-write access. In /etc/gotd.conf
:
repository 'example' { path '/var/git/example.git' permit rw :commit }
Now, any user in the group commit
will be allowed both read and write
access remotely.
To create the commit group:
# groupadd commit
To assign username
to the group commit
:
# usermod -G commit username
Restart gotd(8):
# rcctl restart gotd
Now the user can clone (read) the repository:
$ got clone ssh://example.com/example.git Connecting to ssh://example.com/example.git The authenticity of host 'example.com (203.0.113.2)' can't be established. ED25519 key fingerprint is SHA256:nyvhQOUX9YJr8DAHW9o0tA9549wYUeXRISRxIgOyC3k. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes ...
The user can checkout a working tree, make some changes, commit them, then send the changes to the remote repository using got send:
$ got send -r example.git
Anonymous login
To permit anonymous login, first create the user and group anonymous:
# groupadd anonymous # useradd -d /var/git -g anonymous -s /usr/local/bin/gotsh -c 'Anonymous read-only git' -p '' anonymous
This creates an anonymous account with no password whose home folder is
/var/git
. We set the login shell to
gotsh(8) to prevent interactive shell
access. Append a block similar to below to sshd.conf:
Match User anonymous PasswordAuthentication yes PermitEmptyPasswords yes DisableForwarding yes PermitTunnel no PermitTTY no
Update gotd.conf(5):
repository 'example' { path '/var/git/example.git' permit rw :commit permit ro anonymous }
Email notifications
To provide email notifications upon new commits or tags, use the email to
directive:
repository 'example' { path '/var/git/example.git' permit rw :commit permit ro anonymous notify { email to support@example.com email to root } }
This sends an email to support@example.com
and the root user with every new
commit or tag.
NOTE: This requires a properly configured mail server.
gotctl
gotd(8) can be controlled with gotctl(8).
Login credentials
Normally, login credentials can be handled with passwd(1). An alternative method is to use gotd-secrets.conf(5).