Tutorial: Git hosting
In this tutorial, we will follow root as she configures her GNU Guix server to
host git repositories.
1. Add Beaver Labs' channel
root follows the instructions in Tutorial: Add Beaver Labs' Channel to Guix. She runs:
guix describe
She checks in the output that Beaver Lab's channel is here (as shown above).
2. Configure SSH
Accessing git repositories requires SSH access1. This is outside the scope of this tutorial. root checks
that the intended users are able to connect through SSH.
3. Private or public repos
root must now decide between two mutually exclusive options:
- Private and semi-public only
 - repositories will writable or readable only by authenticated users
 - Private and public
 - allow, on a per-repository basis, read access to anonymous users.
 
3.1. Private and semi-public only
root just has to make sure git is installed on her server. She can do so by
editing her /etc/config.scm file and adding a (packages git) form to it.
Here is a complete minimal configuration example:
(use-modules
 (beaver system)
 (beaver functional-services)
 (gnu packages version-control))
(-> (minimal-ovh)
    (.openssh)
    (packages git))
3.2. Private and public
root can use Beaver Labs' os/git function to create a special git user on
her server. A complete minimal configuration example is:
(use-modules
 (beaver system)
 (beaver functional-services)
 (gnu packages version-control))
(-> (minimal-ovh)
    (.openssh)
    (os/git))
4. Follow-up
Congratulations ! root can now tell her users that they have the ability to
host private repositories on the server, by following the "host a git
repository" tutorial.
5. Advertisement
Did you like what you read ?
You can help me write more by:
- renting a guix VPS from me,
 - hiring me for a consulting gig: software development, cybersecurity audit and training, cryptocurrency forensics, etc. see my personal page,
 - letting me teach you Python, or spreading the word about this course,
 - or buying a very, very secure laptop from me.
 
Footnotes:
Or file access, or HTTP, or git protocol (see https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols, but SSH is the easiest to set up).