diff options
| author | Luke Smith <Luke Smith> | 2022-06-25 10:56:36 -0400 |
|---|---|---|
| committer | Luke Smith <Luke Smith> | 2022-06-25 10:56:36 -0400 |
| commit | 7e74a039122aef922d1619e636de3497ffcf7c60 (patch) | |
| tree | 6029d4f3bd5496acd15e81ad5babb367f8836d60 /content/cgit.md | |
| parent | 967594150f011456cde5965d48cbf0e64f39d31e (diff) | |
convert to hugo
Diffstat (limited to 'content/cgit.md')
| -rw-r--r-- | content/cgit.md | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/content/cgit.md b/content/cgit.md new file mode 100644 index 0000000..8f239c6 --- /dev/null +++ b/content/cgit.md @@ -0,0 +1,135 @@ +--- +title: "Cgit" +date: 2021-09-14 +short_desc: 'A hyperfast web frontend for git repositories.' +icon: 'cgit.svg' +tags: ['service'] +--- +Once you have your server hosting your git repositories, you might want +to allow others to browse your repositories on the web. Cgit is a Free +Software that allows browsing git repositories through the web. + +Note that Cgit is a read-only frontend for Git repositories and doesn\'t +have issues, pull requests or user management. If that\'s what you want, +consider installing Gitea instead. + +## Installing cgit and fcgiwrap + +### Install fcgiwrap + +NGINX doesn\'t have the capability to run CGI scripts by itself, it +depends on an intermediate layer like fcgiwrap to run CGI scripts like +cgit: + +```sh +apt install fcgiwrap +``` + +And now we can install cgit itself with: + +```sh +apt install cgit +``` + +## Setting up NGINX + +You should have an NGINX server running with a TLS certificate by now. +Add the following configuration to your server to pass the requests to +Cgit, while serving static files directly: + +```nginx +server { + listen 443 ssl; + listen [::]:443 ssl; + ssl_certificate /etc/ssl/nginx/git.example.org.crt; + ssl_certificate_key /etc/ssl/nginx/git.example.org.key; + server_name git.example.org; + + root /usr/share/cgit ; + try_files $uri @cgit ; + + location @cgit { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi; + fastcgi_param PATH_INFO $request_uri; + fastcgi_param QUERY_STRING $query_string; + fastcgi_pass unix:/run/fcgiwrap.socket; + } +} +``` + +Then get NGINX to reload your configuration. + +## Configuring cgit + +You\'ve got cgit up and running now, but you\'ll probably see it without +any style and without any repository. To change this, we need to +configure Cgit to our liking, by editing `/etc/cgitrc`. + +```txt +css=/cgit.css +logo=/cgit.svg +virtual-root=/ + +# Title and description shown on top of each page +root-title=Chad's git server +root-desc=A web interface to LandChad's git repositories, powered by Cgit + +# The location where git repos are stored on the server +scan-path=/srv/git/ +``` + +This configuration assumes you followed the [git hosting guide](/git) +and store your repositories on the `/srv/git/` directory. + +Cgit\'s configuration allows changing many settings, as documented on +the cgitrc(5) manpage installed with Cgit. + +### Changing the displayed repository owner + +Cgit\'s main page shows each repo\'s owner, which is \"git\" in case you +followed the git hosting guide, but you might want to change the name to +yours. Cgit shows the owner\'s system name, so you need to modify the +git user to give it your name: + +```sh +usermod -c "Your Name" git +``` + +### Changing the repository description + +Navigate to your bare repository on the server and edit the +`description` file inside it + +### Displaying the repository idle time + +To do this, we need to create a post-receive hook for each repository +that updates the file cgit uses to determine the idle time. Inside your +repository, create a file `hooks/post-receive` and add the following +contents: + +```sh +#!/bin/sh + +agefile="$(git rev-parse --git-dir)"/info/web/last-modified + +mkdir -p "$(dirname "$agefile")" && +git for-each-ref \ + --sort=-authordate --count=1 \ + --format='%(authordate:iso8601)' \ + >"$agefile" +``` + +And give it execution permissions with: + +```sh +chmod +x hooks/post-receive +``` + +Next time you push to that repository, the idle time should reset and +show the correct value. + +## Contribution + +- Ariel Costas -- [website](https://costas.dev), + [donations](https://costas.dev/donations/) |
