Installation de git et de gogs

Nous allons installer un serveur git sur notre petit serveur. Gogs est un serveur git écrit en go. Nous allons l'installer progressivement, en ajoutant ensuite le démarrage par un service, et l'accès sur un port standard servi par apache et redirigé vers le port 3000 servi par gogs. Je me suis inspiré de la documentation officielle ainsi que de ce tutorial: # How to Install Gogs Go Git Service on Ubuntu 16.04

Commençons par installer git.

Installation de git

root@atom:~# apt-get install git
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
The following additional packages will be installed:
  git-man liberror-perl patch rsync
Paquets suggérés :
  git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn ed diffutils-doc
Les NOUVEAUX paquets suivants seront installés :
  git git-man liberror-perl patch rsync
0 mis à jour, 5 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 6 869 ko dans les archives.
Après cette opération, 35,9 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o
Réception de:1 http://deb.debian.org/debian stretch/main i386 liberror-perl all 0.17024-1 [26,9 kB]
Réception de:2 http://deb.debian.org/debian stretch/main i386 git-man all 1:2.11.0-3+deb9u4 [1 433 kB]
Réception de:3 http://deb.debian.org/debian stretch/main i386 git i386 1:2.11.0-3+deb9u4 [4 879 kB]
Réception de:4 http://deb.debian.org/debian stretch/main i386 patch i386 2.7.5-1+deb9u1 [124 kB]
Réception de:5 http://deb.debian.org/debian stretch/main i386 rsync i386 3.1.2-1+deb9u1 [407 kB]
6 869 ko réceptionnés en 0s (12,4 Mo/s)
Sélection du paquet liberror-perl précédemment désélectionné.
(Lecture de la base de données... 37491 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../liberror-perl_0.17024-1_all.deb ...
Dépaquetage de liberror-perl (0.17024-1) ...
Sélection du paquet git-man précédemment désélectionné.
Préparation du dépaquetage de .../git-man_1%3a2.11.0-3+deb9u4_all.deb ...
Dépaquetage de git-man (1:2.11.0-3+deb9u4) ...
Sélection du paquet git précédemment désélectionné.
Préparation du dépaquetage de .../git_1%3a2.11.0-3+deb9u4_i386.deb ...
Dépaquetage de git (1:2.11.0-3+deb9u4) ...
Sélection du paquet patch précédemment désélectionné.
Préparation du dépaquetage de .../patch_2.7.5-1+deb9u1_i386.deb ...
Dépaquetage de patch (2.7.5-1+deb9u1) ...
Sélection du paquet rsync précédemment désélectionné.
Préparation du dépaquetage de .../rsync_3.1.2-1+deb9u1_i386.deb ...
Dépaquetage de rsync (3.1.2-1+deb9u1) ...
Paramétrage de git-man (1:2.11.0-3+deb9u4) ...
Paramétrage de liberror-perl (0.17024-1) ...
Paramétrage de rsync (3.1.2-1+deb9u1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/rsync.service → /lib/systemd/system/rsync.service.
Paramétrage de patch (2.7.5-1+deb9u1) ...
Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u6) ...
Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
Paramétrage de git (1:2.11.0-3+deb9u4) ...
root@atom:~# 

Installation de la base de données Postgresql

Nous aurions pu utiliser à la place de Postgresql, mysql ou sqlite3.

root@atom:/home/ericadmin# apt install -y postgresql postgresql-client libpq-dev
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
The following additional packages will be installed:
  libpq5 libsensors4 postgresql-9.6 postgresql-client-9.6 postgresql-client-common postgresql-common postgresql-contrib-9.6 sysstat
Paquets suggérés :
  postgresql-doc-9.6 lm-sensors postgresql-doc locales-all libdbd-pg-perl isag
Les NOUVEAUX paquets suivants seront installés :
  libpq-dev libpq5 libsensors4 postgresql postgresql-9.6 postgresql-client postgresql-client-9.6 postgresql-client-common postgresql-common
  postgresql-contrib-9.6 sysstat
0 mis à jour, 11 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 7 398 ko dans les archives.
Après cette opération, 33,7 Mo d'espace disque supplémentaires seront utilisés.
Réception de:1 http://deb.debian.org/debian stretch/main i386 libpq5 i386 9.6.10-0+deb9u1 [142 kB]
Réception de:2 http://deb.debian.org/debian stretch/main i386 libpq-dev i386 9.6.10-0+deb9u1 [224 kB]
Réception de:3 http://deb.debian.org/debian stretch/main i386 libsensors4 i386 1:3.4.0-4 [54,0 kB]
Réception de:4 http://deb.debian.org/debian stretch/main i386 postgresql-client-common all 181+deb9u2 [79,2 kB]
Réception de:5 http://deb.debian.org/debian stretch/main i386 postgresql-client-9.6 i386 9.6.10-0+deb9u1 [1 271 kB]
Réception de:6 http://deb.debian.org/debian stretch/main i386 postgresql-common all 181+deb9u2 [217 kB]
Réception de:7 http://deb.debian.org/debian stretch/main i386 postgresql-9.6 i386 9.6.10-0+deb9u1 [4 395 kB]
Réception de:8 http://deb.debian.org/debian stretch/main i386 postgresql all 9.6+181+deb9u2 [55,8 kB]
Réception de:9 http://deb.debian.org/debian stretch/main i386 postgresql-client all 9.6+181+deb9u2 [55,8 kB]
Réception de:10 http://deb.debian.org/debian stretch/main i386 postgresql-contrib-9.6 i386 9.6.10-0+deb9u1 [531 kB]
Réception de:11 http://deb.debian.org/debian stretch/main i386 sysstat i386 11.4.3-2 [373 kB]
7 398 ko réceptionnés en 0s (11,8 Mo/s)           
Préconfiguration des paquets...
Sélection du paquet libpq5:i386 précédemment désélectionné.
(Lecture de la base de données... 38406 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../00-libpq5_9.6.10-0+deb9u1_i386.deb ...
Dépaquetage de libpq5:i386 (9.6.10-0+deb9u1) ...
Sélection du paquet libpq-dev précédemment désélectionné.
Préparation du dépaquetage de .../01-libpq-dev_9.6.10-0+deb9u1_i386.deb ...
Dépaquetage de libpq-dev (9.6.10-0+deb9u1) ...
Sélection du paquet libsensors4:i386 précédemment désélectionné.
Préparation du dépaquetage de .../02-libsensors4_1%3a3.4.0-4_i386.deb ...
Dépaquetage de libsensors4:i386 (1:3.4.0-4) ...
Sélection du paquet postgresql-client-common précédemment désélectionné.
Préparation du dépaquetage de .../03-postgresql-client-common_181+deb9u2_all.deb ...
Dépaquetage de postgresql-client-common (181+deb9u2) ...
Sélection du paquet postgresql-client-9.6 précédemment désélectionné.
Préparation du dépaquetage de .../04-postgresql-client-9.6_9.6.10-0+deb9u1_i386.deb ...
Dépaquetage de postgresql-client-9.6 (9.6.10-0+deb9u1) ...
Sélection du paquet postgresql-common précédemment désélectionné.
Préparation du dépaquetage de .../05-postgresql-common_181+deb9u2_all.deb ...
Ajout de « détournement de /usr/bin/pg_config en /usr/bin/pg_config.libpq-dev par postgresql-common »
Dépaquetage de postgresql-common (181+deb9u2) ...
Sélection du paquet postgresql-9.6 précédemment désélectionné.
Préparation du dépaquetage de .../06-postgresql-9.6_9.6.10-0+deb9u1_i386.deb ...
Dépaquetage de postgresql-9.6 (9.6.10-0+deb9u1) ...
Sélection du paquet postgresql précédemment désélectionné.
Préparation du dépaquetage de .../07-postgresql_9.6+181+deb9u2_all.deb ...
Dépaquetage de postgresql (9.6+181+deb9u2) ...
Sélection du paquet postgresql-client précédemment désélectionné.
Préparation du dépaquetage de .../08-postgresql-client_9.6+181+deb9u2_all.deb ...
Dépaquetage de postgresql-client (9.6+181+deb9u2) ...
Sélection du paquet postgresql-contrib-9.6 précédemment désélectionné.
Préparation du dépaquetage de .../09-postgresql-contrib-9.6_9.6.10-0+deb9u1_i386.deb ...
Dépaquetage de postgresql-contrib-9.6 (9.6.10-0+deb9u1) ...
Sélection du paquet sysstat précédemment désélectionné.
Préparation du dépaquetage de .../10-sysstat_11.4.3-2_i386.deb ...
Dépaquetage de sysstat (11.4.3-2) ...
Paramétrage de libpq5:i386 (9.6.10-0+deb9u1) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.24-11+deb9u3) ...
Paramétrage de postgresql-client-common (181+deb9u2) ...
Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u6) ...
Paramétrage de postgresql-common (181+deb9u2) ...
Adding user postgres to group ssl-cert

Creating config file /etc/postgresql-common/createcluster.conf with new version

Creating config file /etc/logrotate.d/postgresql-common with new version
Building PostgreSQL dictionaries from installed myspell/hunspell packages...
Removing obsolete dictionary files:
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /lib/systemd/system/postgresql.service.
Paramétrage de libsensors4:i386 (1:3.4.0-4) ...
Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
Paramétrage de libpq-dev (9.6.10-0+deb9u1) ...
Paramétrage de sysstat (11.4.3-2) ...

Creating config file /etc/default/sysstat with new version
update-alternatives: utilisation de « /usr/bin/sar.sysstat » pour fournir « /usr/bin/sar » (sar) en mode automatique
Paramétrage de postgresql-client-9.6 (9.6.10-0+deb9u1) ...
update-alternatives: utilisation de « /usr/share/postgresql/9.6/man/man1/psql.1.gz » pour fournir « /usr/share/man/man1/psql.1.gz » (psql.1.gz) en mode automatique
Paramétrage de postgresql-9.6 (9.6.10-0+deb9u1) ...
Creating new cluster 9.6/main ...
  config /etc/postgresql/9.6/main
  data   /var/lib/postgresql/9.6/main
  locale fr_FR.UTF-8
  socket /var/run/postgresql
  port   5432
update-alternatives: utilisation de « /usr/share/postgresql/9.6/man/man1/postmaster.1.gz » pour fournir « /usr/share/man/man1/postmaster.1.gz » (postmaster.1.gz) en mode automatique
Paramétrage de postgresql (9.6+181+deb9u2) ...
Paramétrage de postgresql-client (9.6+181+deb9u2) ...
Paramétrage de postgresql-contrib-9.6 (9.6.10-0+deb9u1) ...
Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u6) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.24-11+deb9u3) ...
root@atom:/home/ericadmin# 

Lancement du serveur Postgresql et configuration pour un lancement automatique au démarrage de la machine:

systemctl start postgresql systemctl enable postgresql

root@atom:/home/ericadmin# systemctl start postgresql
root@atom:/home/ericadmin# systemctl enable postgresql
Synchronizing state of postgresql.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable postgresql
root@atom:/home/ericadmin#

Nous allons nous connecter sous le user "postgres" pour configurer notre serveur de base de données et créer la base initiale pour gogs, ainsi que l'utilisateur gogs..

Voici les données que nous allons utiliser:

gestionnaire principal de la base de données postgres: postgres mot de passe correspondant : * utilisateur de la base de données postgres: git mot de passe de l'utlisateur git dans postgres: * base de données postgres, appartenant à l'utilisateur git de postgres: gogsdb

root@atom:/home/ericadmin# su - postgres
postgres@atom:~$ 

Nous allons lancer le shell postgres qui nous permettra de configurer notre base:

postgres@atom:~$ psql
psql (9.6.10)
Saisissez « help » pour l'aide.

postgres=#

Création de l'utilisateur git ainsi que le mot de passe pour cet utilisateur:

postgres=# CREATE USER git CREATEDB;
CREATE ROLE
postgres=# \password git
Saisissez le nouveau mot de passe : ****
Saisissez-le à nouveau : ****
postgres=# 

Remplacez bien sûr les **** par un vrai mot de passe et notez le bien soigneusement.

Création de la base de donnée et vérification:

postgres=# CREATE DATABASE gogsdb OWNER git;
CREATE DATABASE
postgres=# \du
                                             Liste des rôles
 Nom du rôle |                                    Attributs                                    | Membre de 
-------------+---------------------------------------------------------------------------------+-----------
 git         | Créer une base                                                                  | {}
 postgres    | Superutilisateur, Créer un rôle, Créer une base, Réplication, Contournement RLS | {}

postgres=#  \l
                                  Liste des bases de données
    Nom    | Propriétaire | Encodage | Collationnement | Type caract. |    Droits d'accès     
-----------+--------------+----------+-----------------+--------------+-----------------------
 gogsdb    | git          | UTF8     | fr_FR.UTF-8     | fr_FR.UTF-8  | 
 postgres  | postgres     | UTF8     | fr_FR.UTF-8     | fr_FR.UTF-8  | 
 template0 | postgres     | UTF8     | fr_FR.UTF-8     | fr_FR.UTF-8  | =c/postgres          +
           |              |          |                 |              | postgres=CTc/postgres
 template1 | postgres     | UTF8     | fr_FR.UTF-8     | fr_FR.UTF-8  | =c/postgres          +
           |              |          |                 |              | postgres=CTc/postgres
(4 lignes)

postgres=# 

Voilà, nous avons installé le serveur de base de données (postgres), la base de données nécessaire à gogs (gogsdb), ainsi que l'utilisateur git (au sein de la base de données) qui pourra gérer les données de gogs.

Création de l'utilisateur git au sein du système

commande adduser Avant, n'oubliez pas de repasser sous utilisateur root en tapant Ctrl D

root@atom:/home/ericadmin# adduser --disabled-login --gecos 'Gogs' git
Ajout de l'utilisateur « git » ...
Ajout du nouveau groupe « git » (1001) ...
Ajout du nouvel utilisateur « git » (1001) avec le groupe « git » ...
Création du répertoire personnel « /home/git »...
Copie des fichiers depuis « /etc/skel »...
root@atom:/home/ericadmin# 

Création d'un répertoire réservé au binaire gogs appartenant à l'utilisateur git

root@atom:/home/ericadmin# su - git
git@atom:~$ mkdir -p /home/git/bin
git@atom:~$ 

Téléchargement du binaire gogs dans notre répertoire nouvellement créé

git@atom:~$ cd bin
git@atom:~/bin$ wget https://dl.gogs.io/0.11.66/gogs_0.11.66_linux_386.tar.gz
--2018-11-29 14:12:26--  https://dl.gogs.io/0.11.66/gogs_0.11.66_linux_386.tar.gz
Résolution de dl.gogs.io (dl.gogs.io)… 68.183.105.37
Connexion à dl.gogs.io (dl.gogs.io)|68.183.105.37|:443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 20296268 (19M) [application/x-gzip]
Sauvegarde en : « gogs_0.11.66_linux_386.tar.gz »

gogs_0.11.66_linux_386.tar.gz        100%[====================================================================>]  19,36M  6,65MB/s    in 2,9s    

2018-11-29 14:12:30 (6,65 MB/s) — « gogs_0.11.66_linux_386.tar.gz » sauvegardé [20296268/20296268]

git@atom:~/bin$ 

Mon serveur est en i386, et pas en amd64: prenez la version qui correspond au système d'exploitation que vous avez installé. Maintenant, c'est quasi exclusivement du amd64 . Mon serveur est vieux .... (mais vaillant :) )

Décompression de l'archive et suppression de l'archive

git@atom:~/bin$ tar vxfz gogs_0.11.66_linux_386.tar.gz && rm gogs_0.11.66_linux_386.tar.gz 

Notez bien que toutes ces dernières étapes se font sous utilisateur git.

Voici le résultat dans le répertoire gogs créé préalablement:

git@atom:~/bin/gogs$ ls
gogs  LICENSE  public  README.md  README_ZH.md  scripts  templates
git@atom:~/bin/gogs$

Bien, tous nos éléments sont en place, base de données, utilisateur git, programme gogs. Il nous reste à connecter le tout. Tapez :

./gogs web

et lancez votre navigateur sur le nom de votre serveur suivi de :3000 Vous arriverez sur la page de configuration de gogs. Remplissez les champs avec les données précédemment entrées et que vous avez bien sûr notées ;). Confirmez votre choix, reconnectez-vous et ça y est:) Créez ensuite un utilisateur avec son mot de passe (à noter précieusement ...) Il nous reste à installer les fichiers de lancement systemd ou init; pour moi, systemd, la redirection apache, les certificats letsencrypt.

Création de l'enregistrement bind

On ajoute un enregistrement CNAME

git IN CNAME atom.yojik.net.

Création du fichier de configuration d'apache

On crée le fichier /etc/apache2/sites-available/git.conf avec le contenu suivant: Il faut activer les modules apache suivants avec a2enmod*:

proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html

<VirtualHost *:80>

    ServerAdmin webmaster@localhost

    ProxyPreserveHost On

    # Servers to proxy the connection, or;
    # List of application servers:
    # Usage:
    # ProxyPass / http://[IP Addr.]:[port]/
    # ProxyPassReverse / http://[IP Addr.]:[port]/
    # Example: 
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

    ServerName git.yojik.net

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

On relance apache*

service apache2 restart

Création du certificat letsencrypt correspondant

On lance la commande suivante:

certbot --apache Et on suit les instructions ...

Création des fichiers de configuration systemd

Il y a un exemple de fichier dans le sous-répertoire scripts/systemd de gogs

root@atom:/etc/systemd/system# cat gogs.service 
[Unit]
 Description=Gogs
 After=syslog.target
 After=network.target
 After=postgresql.service

 [Service]
 # Modify these two values and uncomment them if you have
 # repos with lots of files and get an HTTP error 500 because
 # of that
 ###
 #LimitMEMLOCK=infinity
 #LimitNOFILE=65535
 Type=simple
 User=git
 Group=git
 WorkingDirectory=/home/git/bin/gogs
 ExecStart=/home/git/bin/gogs/gogs web
 Restart=always
 Environment=USER=git HOME=/home/git/

 [Install]
 WantedBy=multi-user.target
root@atom:/etc/systemd/system# 

Pour le lancer automatiquement au démarrage et activer la prise en compte par systemd, lancer:

systemctl daemon-reload systemctl enable gogs

root@atom:/etc/systemd/system# systemctl enable gogs
Created symlink /etc/systemd/system/multi-user.target.wants/gogs.service → /etc/systemd/system/gogs.service.
root@atom:/etc/systemd/system# 

Tests

Lancez les commandes suivantes pour vous assurer que tout est fonctionnel:

root@atom:/etc/systemd/system# service gogs start
root@atom:/etc/systemd/system# tail -f /var/log/daemon.log
Dec 16 17:14:38 atom systemd[1]: Failed to start Gogs.
Dec 16 17:14:38 atom systemd[1]: gogs.service: Unit entered failed state.
Dec 16 17:14:38 atom systemd[1]: gogs.service: Failed with result 'exit-code'.
Dec 16 17:16:09 atom systemd[1]: Reloading.
Dec 16 17:16:09 atom systemd[1]: apt-daily.timer: Adding 6h 12min 40.966652s random time.
Dec 16 17:16:13 atom systemd[1]: Started Gogs.
Dec 16 17:16:13 atom gogs[1991]: 2018/12/16 17:16:13 [TRACE] Custom path: /home/git/bin/gogs/custom
Dec 16 17:16:13 atom gogs[1991]: 2018/12/16 17:16:13 [TRACE] Log path: /home/git/bin/gogs/log
Dec 16 17:16:13 atom gogs[1991]: 2018/12/16 17:16:13 [TRACE] Log Mode: File (Trace)
Dec 16 17:16:13 atom gogs[1991]: 2018/12/16 17:16:13 [ INFO] Gogs on Yojik.net 0.11.66.0916

root@atom:/etc/systemd/system# service gogs stop
root@atom:/etc/systemd/system# service gogs start
root@atom:/etc/systemd/system# tail -f /var/log/daemon.log
Dec 16 17:16:13 atom gogs[1991]: 2018/12/16 17:16:13 [TRACE] Log path: /home/git/bin/gogs/log
Dec 16 17:16:13 atom gogs[1991]: 2018/12/16 17:16:13 [TRACE] Log Mode: File (Trace)
Dec 16 17:16:13 atom gogs[1991]: 2018/12/16 17:16:13 [ INFO] Gogs on Yojik.net 0.11.66.0916
Dec 16 17:16:28 atom systemd[1]: Stopping Gogs...
Dec 16 17:16:28 atom systemd[1]: Stopped Gogs.
Dec 16 17:16:33 atom systemd[1]: Started Gogs.
Dec 16 17:16:33 atom gogs[2053]: 2018/12/16 17:16:33 [TRACE] Custom path: /home/git/bin/gogs/custom
Dec 16 17:16:33 atom gogs[2053]: 2018/12/16 17:16:33 [TRACE] Log path: /home/git/bin/gogs/log
Dec 16 17:16:33 atom gogs[2053]: 2018/12/16 17:16:33 [TRACE] Log Mode: File (Trace)
Dec 16 17:16:33 atom gogs[2053]: 2018/12/16 17:16:33 [ INFO] Gogs on Yojik.net 0.11.66.0916

Le lancement de gogs marche parfaitement.

Connectez-vous à partir de votre navigateur sur git.yojik.net (ou plutôt l'url que vous avez définie auparavant); vous devez vous retrouver sur la page d'accueil de gogs.