Howto GitIt
- Site/dépôt officiel : https://github.com/jgm/gitit/tree/master/
Gitit est un wiki basé sur Git et écrit en Haskell. Il permet l’édition de pages en utilisant la syntaxe Markdown, directement via Git ou via une interface web. Au niveau rendu, il génère des pages HTML avec un style personnalisable via des templates, et permet aussi l’export en TXT/ODT/etc ; il intègre également un moteur de recherche (regardez en haut à droite !). https://wiki.evolix.org utilise fièrement Gitit !
Installation
Paquet Debian
# apt install gitit
$ gitit --version
gitit version 0.10.4 +plugins
Copyright (C) 2008 John MacFarlane
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.
Compilation classique
Attention, la compilation est assez longue.
# apt install cabal-install ghc zlib1g-dev
# adduser --disabled-password gitit
# sudo -u gitit -i
Note : /tmp
doit être en EXEC pour
l’installation
$ cabal update
$ cabal --reorder-goals install gitit
$ echo PATH="$HOME/.cabal/bin:$PATH" > ~/.profile
$ gitit --version
gitit version 0.12.3 -plugins
Compilation avec patch pour la recherche de mots partiels
Par défaut, Gitit ne recherche que les mots entiers.
Voici un patch pour pouvoir rechercher aussi les mots partiels.
Attention, la compilation est assez longue.
# adduser --disabled-password gitit
# sudo -u gitit -i
Note : /tmp
doit être en EXEC pour
l’installation
$ git clone https://github.com/jgm/gitit.git src/gitit
$ cd src/gitit
Mettre le patch suivant dans un fichier patch
:
--- src/Network/Gitit/Handlers.hs→ 2024-10-10 17:38:54.599750889 +0200
+++ src/Network/Gitit/Handlers.hs→ 2024-10-10 17:21:30.964162724 +0200
@@ -274,5 +274,5 @@
else liftIO $ E.catch (search fs SearchQuery{
queryPatterns = patterns
- , queryWholeWords = True
+ , queryWholeWords = False
, queryMatchAll = True
, queryIgnoreCase = True })
--- data/static/js/search.js→ 2024-10-10 17:38:54.599750889 +0200
+++ data/static/js/search.js→ 2024-10-10 17:21:30.960162606 +0200
@@ -1,14 +1,4 @@
jQuery.fn.highlightPattern = function (patt, className)
{
- // check if patt starts or ends with non-word character
- // and set regex boundary accordingly.
- var start = '\\b(';
- var end = ')\\b';
- if (/\W/.test(patt.charAt(0))) {
- var start = '\(?=\\W\)(';
- };
- if (/\W/.test(patt.charAt(patt.length - 1))) {
- var end = ')\(?!\\w\)';
- }
// escape regex metacharacters that may be in the patt
var epatt = patt.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1")
@@ -16,5 +6,5 @@
// patt is a space separated list of strings - we want to highlight
// an occurrence of any of these strings as a separate word.
- var regex = new RegExp(start + epatt.replace(/ /g, '| ') + end, 'gi');
+ var regex = new RegExp('(' + epatt.replace(/ /g, '| ') + ')', 'gi');
return this.each(function ()
Et appliquer le patch :
$ patch -p0 < patch
patching file src/Network/Gitit/Handlers.hs
patching file data/static/js/search.js
Puis compiler GitIt :
$ nice -n19 cabal install exe:gitit
$ ~/.cabal/bin/gitit --version
Faire le ménage :
$ cd ~
$ rm -r src
Configuration
Configuration de Gitit
$ gitit --print-default-config > gitit.conf
Exemple de configuration pour gitit.conf
:
address: 127.0.0.1
repository-type: Git
repository-path: git
session-timeout: 36000
default-extension: md
default-page-type: Markdown
front-page: index
no-delete: index, Help
use-cache: yes
Pour voir la liste des langages supportés pour le highlighting :
$ pandoc -v
Configuration du reverse proxy Nginx
Exemple de configuration Nginx
/etc/nginx/sites-available/gitit.conf
:
server {
server_name gitit.example.com;
listen 0.0.0.0:80;
listen [::]:80;
location /_register {
allow 192.0.2.42;
deny all;
proxy_pass http://127.0.0.1:5001/_register;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
}
location / {
proxy_pass http://127.0.0.1:5001/;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
}
access_log /var/log/nginx/gitit/access.log;
error_log /var/log/nginx/gitit/error.log;
}
Lancement
On peut lancer manuellement :
$ gitit -f gitit.conf
Exemple d’unité systemd mono-instance
/etc/systemd/system/gitit.service
avec
gitit
installé manuellement
dans $HOME/.cabal
:
[Unit]
Description=Wiki gitit
After=network.target
[Service]
User=gitit
Group=gitit
UMask=0027
WorkingDirectory=/home/gitit
PrivateTmp=true
ExecStart=/home/gitit/.cabal/bin/gitit -f /home/gitit/gitit.conf
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=wiki.service
Exemple d’unité systemd multi-instances
Installer Gitit manuellement comme indiqué ci-dessus pour l’utilisateur USER
(nommé gitit
dans la section mono-instance).
/etc/systemd/system/gitit@.service
avec
gitit
installé manuellement dans
/home/USER/.cabal
:
[Unit]
Description=Gitit %i
After=network.target
[Service]
WorkingDirectory=/home/%i/
ExecStart=/home/%i/.cabal/bin/gitit -f /home/%i/gitit.conf
Type=simple
User=%i
Group=%i
UMask=0027
PrivateTmp=true
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
Pour activer et démarrer l’instance de USER :
# systemctl enable gitit@USER.service
# systemctl start gitit@USER.service
Mise-à-jour
Pour la mise-à-jour d’une installation manuelle, on fera simplement :
$ cabal update
$ cabal install gitit
# systemctl restart gitit
Troubleshooting
Page en markdown non interprétée
Si Gitit affiche certaines pages en markdown sans l’interpréter, il
faut supprimer le contenu du répertoire cache
dans son
répertoire racine :
# rm -rf <GITIT_ROOT>/cache/*
Hooks Git non exécutés
Attentions, les hooks ./.git/hooks/
du dépôt doivent
être exécutables.