--- title: "Installer Gitea sur un NAS Synology" date: 2021-01-04T11:16:36+01:00 tags: ["SysAdmin", "Synology", "Git", "Gitea", "NAS", "SSH"] --- Je vous propose un tutoriel sur l'installation de la forge Libre Gitea sur un NAS Synology avec une petite nuance par rapport à ce qu'on trouve habituellement sur le sujet: on n'utilisera pas Docker... En effet, j'ai à ma disposition un [DS216play](https://global.download.synology.com/download/Document/Hardware/DataSheet/DiskStation/16-year/DS216play/enu/Synology_DS216play_Data_Sheet_enu.pdf), basé sur un processeur STM Monaco [STiH412](https://www.st.com/resource/en/data_brief/stih412.pdf), processeur ARM à double-coeur à 1.5GHz (plus quatre coeurs dédiés à la vidéo). Un bon NAS pour un usage courant, mais qui ne supporte malheureusement pas Docker, ce qui aurait considérablement simplifié l'installation et la maintenance de logiciels tiers, en particulier celui qui nous intéresse aujourd'hui: [Gitea](https://gitea.io/en-us/). La méthode que je vais décrire ici pourrait également être appliquée avec un NAS où l'on pourrait (techniquement) utiliser Docker, mais sans le vouloir. Je pars du principe que votre NAS est à jour (version 6.2.3 au moment d'écrire ce tutoriel), mais il est probable que cela fonctionne pour des versions antérieures. ## Installation de paquets supplémentaires ## Notre procédure exige l'installation de paquets Synology supplémentaires. Allez dans le _Centre de paquets_, et installez: - Git Server - MariaDB 10 - phpMyAdmin Tous trois se trouvent dans les paquets _Tierce partie_. Notez le mot de passe que vous allez saisir dans MariaDB, vous en aurez besoin plus tard. Ouvrez ensuite MariaDB via le lien présent dans le menu principal, afin de cocher la case "Activer la connexion TCP/IP", sur le port 3307. ## Activer SSH sur le NAS ## Connectez-vous à l'interface d'administration de votre NAS, puis allez dans le _Panneau de configuration_. Activez le _Mode avancé_ en cliquant sur le lien en haut à droite, puis ouvrez _Terminal & SNMP_. Activez _SSH_, et laissez-le sur le port 22 pour le moment. Cliquez sur _Appliquer_. ## Créez un dossier dédié à Gitea ## Allez maintenant dans _Dossier partagé_, et créez un partage _Gitea_. - [x] Cacher ce dossier partagé dans "Mes emplacements réseaux". - [x] Masquer les sous-dossiers et les fichiers des utilisateurs sans autorisations. - [ ] Activer la corbeille. Ne donnez aucun accès à personne pour le moment (c'est-à-dire, laissez tous les autres paramètres à leurs valeurs par défaut). ## Créer un utilisateur pour Gitea ## Toujours dans le _Panneau de configuration_, ouvrez la page _Utilisateur_, et créez-en un nouveau, appelé comme vous le souhaitez, mais partons pour _gitea_. Affectez-lui un mot de passe dont vous vous souviendrez. Laissez-le dans le groupe _users_. Par contre, donnez-lui les accès en lecture et en écriture dans le dossier partagé _gitea_ que vous venez de créer. Vous pouvez éventuellement attribuer des quotas, mais laissez tout le reste aux valeurs par défaut. ## Se connecter en SSH au NAS ## Depuis votre terminal préféré, initiez une connection SSH vers votre NAS, avec l'utilisateur _admin_. ```bash {linenos=false,class=not-prose} ssh admin@nas ``` Une fois votre mot de passe saisi, vous devriez être connecté. ## Télécharger Gitea ## On va stocker Gitea dans son propre répertoire, dans le dossier partagé créé précédemment. ```bash {linenos=false,class=not-prose} cd /volume1/gitea/ mkdir bin cd bin/ wget https://dl.gitea.io/gitea/1.13.1/gitea-1.13.1-linux-arm-6 ln -s gitea-1.13.1-linux-arm-6 gitea ls -alh ``` Vous devriez voir la sortie suivante, qui vous montre la création d'un lien symbolique _gitea_ vers le binaire téléchargé _gitea-1.13.1-linux-arm-6_, ce qui simplifiera les commandes futures. ```plaintext {linenos=false,class=not-prose} lrwxrwxrwx+ 1 gitea users 24 Jan 4 00:12 gitea -> gitea-1.13.1-linux-arm-6 -rwxrwxrwx+ 1 gitea users 96M Dec 28 19:50 gitea-1.13.1-linux-arm-6 ``` ## Tester ## ```bash {linenos=false,class=not-prose} chmod +x gitea export GITEA_ROOT="/volume1/gitea" ./gitea --port 13000 --custom-path $GITEA_ROOT/custom --config $GITEA_ROOT/custom/conf/app.ini ``` Le port 3000 étant déjà utilisé, on demande à Gitea de démarrer sur le port 13000, et on lui indique où stocker ses données. La dernière ligne de la sortie provoquée par cette commande devrait ressembler à ça: ```plaintext {linenos=false,class=not-prose} 2021/01/04 00:19:43 ...s/graceful/server.go:55:NewServer() [I] Starting new server: tcp:0.0.0.0:13000 on PID: 26230 ``` Confirmez en ouvrant votre navigateur, puis en allant à l'adresse de votre NAS, sur le port 13000: > http://nas:13000/ En théorie, vous devriez voir la page d'accueil de votre instance Gitea. N'y faites rien pour l'instant, on ne l'a pas démarré avec le bon utilisateur: c'était juste une _proof-of-concept_, il est maintenant temps de lancer Gitea avec son utilisateur attitré. Retournez dans votre terminal, puis stoppez le processus avec CTRL+C. ## Démarrage de Gitea ## Allez dans le _Panneau de configuration_, puis dans le _Planificateur de tâches_. Créez une nouvelle _Tâche déclenchée_. Nommez-la "Gitea", affectez l'utilisateur _gitea_, à l'évènement "Démarrage". Allez ensuite dans l'onglet "Paramètres de tâche". Le temps des tests, je vous recommande de cocher la case permettant d'envoyer les détails d'exécution par email. Une fois qu'on se sera assuré que tout fonctionne, on pourra aussi cocher la case "Envoyer les détails d'exécution uniquement lorsque le script se termine de manière anormale". Dans la zone de texte du bas, "Script défini par l'utilisateur", copiez-collez ceci: ```bash {linenos=false,class=not-prose} export HOME="/volume1/homes/gitea" export GITEA_ROOT="/volume1/gitea" $GITEA_ROOT/bin/gitea --port 13000 --custom-path $GITEA_ROOT/custom --config $GITEA_ROOT/custom/conf/app.ini ``` Enregistrez, puis faites un clic droit sur la tâche et _Exécuter_. Si vous pouvez accéder à l'interface web de Gitea, comme pendant le test précédent, et qu'aucun mail ne vous est envoyé avec une sortie de programme, c'est qu'on peut passer à la configuration... ## Base de données ## Dans le menu principal de DSM, ouvrez _phpMyAdmin_. Connectez-vous au compte _root_, avec le mot de passe spécifié pendant l'installation du paquet MariaDB. Dans la barre en haut, cliquez sur _Comptes utilisateurs_, puis _Ajouter un compte d'utilisateur_. Donnez-lui un nom (par exemple, _gitea_), un mot de passe, puis cochez les cases: - [x] Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base. - [x] Accorder tous les privilèges à un nom passe-partout (utilisateur\_%). Puis cliquez sur le bouton _Exécuter_ tout en bas à droite. ## Configuration de Gitea ## De retour dans l'interface de Gitea, on peut remplir les champs liés à la base de données. Le serveur MariaDB sur le NAS écoute sur le port 3307, au lieu du 3306 habituel. Le nom d'utilisateur et le nom de la base de données devraient être _gitea_ si vous avez suivi mes indications, et le mot de passe est celui que vous venez de donner à l'utilisateur _gitea_ dans MariaDB. Il est important maintenant de définir les chemins d'accès aux fichiers: - Emplacement racine des dépôts: /volume1/gitea/gitea-repositories - Répertoire racine Git LFS: /volume1/gitea/bin/data/lfs - Chemin des fichiers log: /volume1/gitea/log Vous devez aussi vous assurer que les noms de domaines mentionnés correspondent à celui utilisé pour accéder à votre NAS. Placez le port d'écoute SSH sur le port 10022, puis continuez la configuration avec les paramètres facultatifs. ## Tester ## Allez dans la configuration de Gitea, une fois que vous y serez connecté, puis dans "Clés SSH/GPG". Récupérez votre clé publique depuis une autre machine: ```bash {linenos=false,class=not-prose} ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub ``` La clé aura cette forme: ```plaintext {linenos=false,class=not-prose} ssh-rsa @ ``` Dans Gitea, faites un copier-coller de cette clé publique dans "Ajouter une clé". Créez maintenant un dépôt de test qui sera supprimé ensuite. Gitea vous donne même la marche à suivre: ```bash {linenos=false,class=not-prose} touch README.md git init git add README.md git commit -m "first commit" git remote add origin ssh://gitea@:13000//test.git git push -u origin master ``` Arrivé là, il est fort à parier qu'un nom d'utilisateur et un mot de passe vous sera demandé, à la place de l'identification à clé publique. C'est tout simplement parce que les permissions du dossier _.ssh_ de l'utilisateur _gitea_ ne sont pas les bonnes, et parce que Gitea n'a pas lancé son propre serveur SSH. Dans votre terminal, toujours en tant qu'_admin_, exécutez les commandes suivantes: ```bash {linenos=false,class=not-prose} sudo su cd /volume1/homes/gitea chmod 0711 ./ chmod 0711 ./.ssh/ chmod 0600 ./.ssh/authorized_keys ``` Vous devez également ajouter un paramètre à la configuration de Gitea, située dans le fichier _/volume1/gitea/custom/conf/app.ini_. Dans la section `[server]`, rajoutez: ```ini {linenos=false,class=not-prose} START_SSH_SERVER = true ``` Arrêtez Gitea en faisant: ```bash {linenos=false,class=not-prose} killall gitea ``` Et relancez la tâche planifiée créée plus tôt. Gitea doit démarrer et un _push_ ou un _pull_ vers votre dépôt de test devrait fonctionner. ## Mise à jour de Gitea ## À chaque nouvelle version, il vous suffit de télécharger le fichier binaire, et de changer le lien symbolique vers lui, comme on l'a fait avant. Vous stoppez ensuite Gitea, sauvegardez les données comme vous le faites d'habitude avec DSM, et relancer la tâche planifiée.