Héberger son dépôt distant sur un Raspberry


Dans cet article nous allons voir comment s’affranchir de Github (ou Gitlab) en hébergeant nous-même notre dépôt distant. Un Raspberry sera utilisé en guise d’exemple, mais la solution présentée est adaptable à d’autres supports physiques.

Architecture

Le schéma ci-dessous représente mon réseau local.

local-network

Le Raspberry n’est relié à aucun écran, ni clavier. Afin d’effectuer les manipulations nécessaires sur le Raspberry, il faut se connecter en SSH depuis le PC.

En plus de la création du dépôt distant nous verrons comment initialiser un Raspberry, et comment activer SSH sur ce dernier.

Configuration du Raspberry

Nous allons avoir besoin de télécharger les 2 éléments suivants :

  • Raspbian → le système d’exploitation officiel pour Raspberry qui est basé sur Debian
  • Balena Etcher → logiciel permettant de flasher une image disque (ex: l’ISO de Raspbian) sur un support physique (clé USB, carte SD)

Flasher la carte microSD

Balena Etcher est très intuitif, il faut sélectionner l’image, Raspbian dans ce cas, et d’indiquer le support physique de destination. Une carte microSD dans le cas du Raspberry.

balena-etcher

Activer le SSH

Une fois votre carte microSD flashée, elle doit contenir divers fichiers. Ouvrer un explorateur de fichier et votre carte SD doit ressembler à cela.

fichiers

Plus haut, j’ai indiqué que nous allions utiliser SSH pour nous connecter au Raspberry. Par défaut, le SSH n’est pas activé sur le Raspberry. Pour l’activer, il suffit de créer un fichier SSH vide.

fichiers-avec-ssh

On peut maintenant insérer la carte microSD dans le Raspberry, connecter un câble Ethernet et brancher l’alimentation.

Se connecter au Raspberry

Pour se connecter en SSH au Raspberry nous allons devoir générer un couple de clés privé/publique. Puis nous partagerons notre clé publique avec le Raspberry.

Générer une clé SSH

Pour générer une clé SSH il faut utiliser le module ssh-keygen. La commande doit être exécutée sur votre machine locale, et non sur le Raspberry.

Si vous avez déjà généré une clé SSH, vous pouvez passer cette étape et utiliser celle préalablement générée.

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jean-smaug/.ssh/id_rsa):
Created directory '/home/jean-smaug/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/jean-smaug/.ssh/id_rsa.
Your public key has been saved in /home/jean-smaug/.ssh/id_rsa.pub.

Nous venons de générer un couple clé privée ~/.ssh/id_rsa, clé publique ~/.ssh/id_rsa.pub.

Partager la clé publique

Afin de s’authentifier auprès du Raspberry, nous allons copier notre clé publique sur ce dernier.

La commande ci-dessous vous demandera un mot de passe. Par défaut, sa valeur est raspberry.

ssh-copy-id -i ~/.ssh/id_rsa.pub pi@192.168.1.10

Désormais, vous n’aurez plus besoin de saisir de mot de passe lorsque vous vous connecterez au Raspberry.

Création du dépôt distant

Sur le Raspberry

Se connecter

ssh pi@192.168.1.10

Créer de dépôt distant

mkdir remote-repo && cd "$_" && git init --bare
  • mkdir remote-repo → création du dossier
  • cd "$_" → on se déplace dans le dossier précédemment créé. Le "$_" fait référence au dernier paramètre de la commande précédente.
  • git init --bare → on initialise un dépôt en spécifiant l’option --bare afin que celui-ci ne contienne pas la zone “espace de travail”.

Sur mon poste

Initialisation d’un dépôt

git init

Ajouter l’URL du dépôt distant

git remote add origin ssh://pi@192.168.1.10:/home/pi/remote-repo

Après avoir créé des commits, vous pouvez envoyer les données via.

git push origin master

Et c’est tout 😄

Nous n’ajouterons pas d’interface graphique. Il faut retenir qu’ un dépôt distant n’est pas synonyme de Github ! Ce genre d’outil est un service web reposant sur Git permettant de faciliter le travail collaboratif.

Résumé

Un résumé en console de toutes les étapes réalisées. À gauche le terminal connecté en SSH au Raspberry et à droite mon terminal local.

remote-repo-interaction

  1. Création du dossier remote-repo visant à accueillir le dépôt distant.
  2. Initialisation du dépôt distant.
  3. Lister les branches qui ont été poussées sur le dépôt distant. Aucune branche pour le moment.
  4. Initialiser le dépôt local.
  5. Ajouter ssh://pi@192.168.1.10/home/pi/remote-repo comme dépôt distant.
  6. Création d’un commit afin que la branche master pointe sur ce commit.
  7. Pousser la branche master sur le dépôt distant.
  8. Lister les branches qui ont été poussées sur le dépôt distant. La branche master est bien présente sur le dépôt distant !

Conclusion

Un dépôt distant n’est pas synonyme de Github ni d’interface web !
C’est le dépôt sur lequel on vient centraliser le travail de l’ensemble des développeurs.

Il est relativement simple d’utiliser un Raspberry pour héberger un dépôt distant. Quelques lignes de commandes suffisent.

Si vous voulez ajouter une interface graphique, vous pouvez utiliser Gitlab, dont la version “communauté” est open source. Il existe aussi Gitea, une alternative plus légère.

Merci de m’avoir lu.

Liens