diff options
author | lonkaars <loek@pipeframe.xyz> | 2021-04-28 13:09:38 +0200 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2021-04-28 13:09:38 +0200 |
commit | f303314070f3261018e9b6c7c6f2a07aec31f346 (patch) | |
tree | 033dabf14781d55e01eaaf26814888f80d3abdf1 /posts | |
parent | 77edafd033bcd8cad04747b3cfb8ae73f2b2a1c8 (diff) |
git setup post
Diffstat (limited to 'posts')
-rw-r--r-- | posts/git.md | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/posts/git.md b/posts/git.md new file mode 100644 index 0000000..7d3ddbe --- /dev/null +++ b/posts/git.md @@ -0,0 +1,161 @@ +[meta]: <title> (My git setup) +[meta]: <subtitle> (How I use git on my server) +[meta]: <author> (Loek) +[meta]: <date> (April 28 2021) +[meta]: <tags> (git, server, software) +[meta]: <cover> (/img/git.png) + +## Overview + +I have two mechanisms set up for accessing my git server. I use gitolite for +ssh access and permission management. I also have cgit set up which generates +html pages for viewing your repositories and also hosts your repositories over +http, or https if you have it set up. + +## SSH Access with gitolite + +Gitolite was a pain in the ass to set up because I didn't understand umasks +before I started trying to set it up. A *umask* is like the opposite of what +you'd enter when running `chmod`. For example: if I run `touch test`, I will +now have a file with the same permissions as `chmod 644`. That looks something +like this: + +```sh +$ touch test +$ ls -l +total bla bla +-rw-r--r-- 1 loek users 0 Apr 28 12:28 test +$ chmod 644 test +$ ls -l +total bla bla +-rw-r--r-- 1 loek users 0 Apr 28 12:28 test +$ # notice the same permissions on the 'test' file +``` + +If I want gitolite to create repositories with default permissions so other +users can read the repositories, I have to set my umask to the opposite of 644. +Here's a quick explanation of `ls -l`'s output: + +```sh +-rw-r--r-- * user group size date time filename +|└┬┘└┬┘└┬┘ +| | | └all users +| | └owner group +| └owner user +└type +``` + +Each digit in a `chmod` command sets the permission for the file owner, file +group, then everyone. That looks something like this: + +```sh +$ chmod 644 test + +decimal: 6 4 4 +binary: 110 100 100 +ls -l: - rw- r-- r-- +``` + +Then we take the opposite of this to get the umask: + +```sh +$ chmod 755 directory -R + +ls -l: d rwx r-x r-x +binary: 000 010 010 +decimal: 0 2 2 +``` + +And now my `.gitolite.rc`: + +```perl +%RC = ( + UMASK => 0022, + ROLES => { + READERS => 1, + WRITERS => 1, + }, + + ENABLE => [ + 'ssh-authkeys', + 'git-config', + 'daemon', + 'gitweb', + ], +); + +1; +``` + +## HTTP(S) Access with cgit + +Cgit is probably the easiest thing to set up. It has great built-in +documentation (`man 5 cgitrc`). Pretty much all configuration is in +`/etc/cgitrc` (css/syntax highlighting isn't in there). The only reason I'm +posting my config here is because for some reason, the order of the options in +cgit's config matters: + +```rc +# +# cgit config +# see cgitrc(5) for details + +cache-size=0 +enable-commit-graph=1 + +css=/cgit.css +logo=/cgit.png + +virtual-root=/ +remove-suffix=1 + +root-title=git :tada: + +## +## List of common mimetypes +## +mimetype.gif=image/gif +mimetype.html=text/html +mimetype.jpg=image/jpeg +mimetype.jpeg=image/jpeg +mimetype.pdf=application/pdf +mimetype.png=image/png +mimetype.svg=image/svg+xml + +# Highlight source code with python pygments-based highlighter +source-filter=/usr/lib/cgit/filters/syntax-highlighting.py + +# Format markdown, restructuredtext, manpages, text files, and html files +# through the right converters +about-filter=/usr/lib/cgit/filters/about-formatting.sh + +## +## Search for these files in the root of the default branch of repositories +## for coming up with the about page: +## +readme=:README.md +readme=:readme.md +readme=:README.rst +readme=:readme.rst +readme=:README.txt +readme=:readme.txt +readme=:README +readme=:readme +readme=:INSTALL.md +readme=:install.md +readme=:INSTALL.mkd +readme=:install.mkd +readme=:INSTALL.rst +readme=:install.rst +readme=:INSTALL.html +readme=:install.html +readme=:INSTALL.htm +readme=:install.htm +readme=:INSTALL.txt +readme=:install.txt +readme=:INSTALL +readme=:install + +scan-path=/mnt/scf/git/repositories +``` + |