PI GitLab

De knowledge
Aller à la navigation Aller à la recherche

Installation

La base

On crée une carte standard avec Raspberry Pi Imager (Dernière version sans desktop et en activant l'acces ssh).

Plus un petit :

sudo apt update
sudo apt upgrade

Pour rattraper le retard de l'image sur le dépots.

Ensuite un sudo raspi-config pour :

  • Activer l'autologin que l'on utilisera en urgence si le frontal plante ou si on a oublie le mot de passe.
  • Le "expand file system" être sur de ne rien perdre.

On lui ajoute une adresse IP fixe sur le routeur : IP FIXE.

La partie spécifique

On commence par la base:

sudo apt install -y git 
sudo apt install -y cgit
sudo apt install -y fcgiwrap spawn-fcgi
  • fcgiwrap : un petit démon qui “wrappe” les scripts CGI pour les exécuter via le protocole FastCGI. → C’est ce qui permet à un serveur web (lighttpd, nginx, Caddy via reverse proxy) de lancer cgit.cgi proprement.
  • spawn-fcgi : un utilitaire pour démarrer fcgiwrap facilement (en créant un socket Unix ou TCP).

Config de fcgiwrap

Créer une fichier fcgiwrap.service :

[Unit]
Description=fcgiwrap FastCGI server
After=network.target

[Service]
ExecStart=/usr/bin/spawn-fcgi -s /var/run/fcgiwrap.socket -M 0660 -u www-data -g www-data /usr/sbin/fcgiwrap
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target

Et utiliser le fichier d'installation install.sh :

#!/bin/bash
sudo cp fcgiwrap.service /etc/systemd/system/.
sudo systemctl daemon-reload
sudo systemctl enable fcgiwrap.service
sudo systemctl start fcgiwrap.service

l'installation donne :

Synchronizing state of fcgiwrap.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable fcgiwrap
Created symlink '/etc/systemd/system/multi-user.target.wants/fcgiwrap.service' → '/etc/systemd/system/fcgiwrap.service'.

Et on peut vérifier par :

systemctl status fcgiwrap.service

Qui nous réponds par un beau:

Fcgiwrap.socket.status.png

J'ai pas pu résister à mettre une jolie copie d'écran avec du vert partout.

On a GIT installé sur le serveur et on a fcgi qui propose un acces a git en cgi-bin. Il faut maintenant installer un serveur http pour gérer le lien http avec le programme CGI.

Installation lighthttp

sudo apt install -y lighttpd
sudo lighttpd-enable-mod fastcgi

L'installation se fait normalement et ensuite le module fastcgi est activé:

Enabling fastcgi: ok
Run "service lighttpd force-reload" to enable changes

Connexion avec cgit.

On modifie /etc/lighttpd/lighttpd.conf :

Dans les modules on doit trouver :

server.modules = (
        "mod_indexfile",
        "mod_access",
        "mod_alias",
        "mod_redirect",
        "mod_fastcgi"
)

et la définition du serveur :

server.document-root        = "/usr/share/cgit"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
server.port                 = 8080

Dans /etc/lighttpd/conf-available on crée 50-cgit.conf :

# Activer les modules nécessaires (en extension, pas en redéfinition)
server.modules += ( "mod_fastcgi", "mod_alias" )

# Déclarer cgit via FastCGI (socket systemd fcgiwrap)
# On mappe l'URL /cgit vers le CGI cgit.cgi
fastcgi.server += ( "/cgit" =>
  ((
    "socket"       => "/run/fcgiwrap.socket",
    "bin-path"     => "/usr/lib/cgit/cgit.cgi",
    "check-local"  => "disable",
    "mode"         => "responder"
  ))
)

# Servir les assets CSS / logo
alias.url += ( "/cgit-css/" => "/usr/share/cgit/" )

# Permettre que cgit soit servi comme page d'index
index-file.names += ( "cgit.cgi" )

On active le fichier de conf :

sudo lighttpd-enable-mod cgit

On vérifie la syntaxe:

sudo lighttpd -t -f /etc/lighttpd/lighttpd.conf

Qui doit nous répondre : Syntax OK On crée le répertoire :

sudo mkdir -p /srv/git
sudo chown -R www-data:www-data /srv/git


sudo mkdir -p /var/log/lighttpd
sudo chown www-data:www-data /var/log/lighttpd

Et on redémarre lighthttpd:

sudo systemctl restart lighttpd

Et on teste: