summaryrefslogtreecommitdiff
path: root/content/cgit.md
diff options
context:
space:
mode:
authorLuke Smith <Luke Smith>2022-06-25 10:56:36 -0400
committerLuke Smith <Luke Smith>2022-06-25 10:56:36 -0400
commit7e74a039122aef922d1619e636de3497ffcf7c60 (patch)
tree6029d4f3bd5496acd15e81ad5babb367f8836d60 /content/cgit.md
parent967594150f011456cde5965d48cbf0e64f39d31e (diff)
convert to hugo
Diffstat (limited to 'content/cgit.md')
-rw-r--r--content/cgit.md135
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/)