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.
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.
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.
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.
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 dossiercd "$_"
→ 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.
- Création du dossier
remote-repo
visant à accueillir le dépôt distant. - Initialisation du dépôt distant.
- Lister les branches qui ont été poussées sur le dépôt distant. Aucune branche pour le moment.
- Initialiser le dépôt local.
- Ajouter
ssh://pi@192.168.1.10/home/pi/remote-repo
comme dépôt distant. - Création d’un commit afin que la branche
master
pointe sur ce commit. - Pousser la branche
master
sur le dépôt distant. - 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.