Introduction▲
Quand je me suis acheté un NAS il y a quelques années déjà , j'ai choisi un Synology DS101 (maintenant remplacé par les 107, 207 ou 407 selon le nombre de disques durs que l'on veut), car le code source était sous GPL. Naturellement, le fabricant a mis des protections, mais au fur et à mesure, des outils sont apparus pour débrider la bête (et maintenant, le fabricant autorise officieusement ce genre de pratiques). Un autre avantage du DS101 par rapport à d'autres NAS est qu'il n'a pas de ventilateur et est donc silencieux (à l'époque, le disque était tout de même dans ma chambre), malheureusement, le disque interne est en IDE. Maintenant, les DSx0x possèdent des ventilateurs et supportent uniquement les disques SATA.
Récemment, j'ai découvert Trac et son intégration avec Subversion, idéal pour développer, mais il faut un serveur dédié, et ne voulant pas de nouvelle machine consommatrice d'électricité, je me suis retourné vers mon NAS. C'est ce que je vais décrire dans cet article, du débridage à la configuration des outils.
I. Accès au système du NAS▲
Par défaut, il n'y a aucun accès au système d'exploitation, pas de SSH, pas de telnet. Mais dès le départ, cette protection a été contournée et maintenant il est très facile d'activer telnet sur le NAS (il vaut mieux avoir la dernière version du firmware pour être sûr que Synology a bien supprimé le mot de passe Synology qui varie selon les jours). À l'aide des fichiers disponibles ici, il est possible d'activer ou de désactiver telnet à l'aide de l'interface de mise à jour du NAS sur le serveur Web.
Une fois l'opération effectuée, il est possible de se connecter en root, le mot de passe étant le mot de passe administrateur de la machine.
II. Installation des outils de gestion des paquets▲
Les Synology tournent sur deux plateformes, ARM et PPC, selon les versions. Il faut alors utiliser un boostrap pour installer un gestionnaire de paquets. Les fichiers sont ici pour les ARM et ici pour les PPC. Ce fichier doit être copié sur le Synology puis exécuté grâce à telnet.
Pour les derniers NAS de Synology, la série DS-x07, il n'y a pas encore de bootstrap, car les processeurs ARM ne fonctionnent plus dans le même mode que pour les précédents. Il faut donc encore un peu patienter.
Une fois installé et redémarré, il est possible que les services ne redémarrent pas (Apache et Samba). Le disque n'est plus accessible, la configuration Web déclenche une erreur. Cela est dû à une ligne manquante dans /etc/ld.so.conf : il faut y ajouter /lib. Une fois ajouté, il faut lancer la commande ldconfig et redémarrer le serveur.
III. Configuration du serveur Subversion▲
Apache 2 vient directement avec un module DAV SVN. L'avantage en outre est que le serveur est directement lancé au démarrage sur le port 8000 (le port 80 est réservé au serveur Apache natif du système).
Il faut tout d'abord installer les paquets adéquats :
ipkg svn
ipkg apache2
Une fois installé, on peut créer un repository n'importe où (par exemple sur le disque accessible de l'extérieur, donc sur /volume1/svn entre autres) et configurer comme on le désire ce repository.
Après, il faut démarrer le serveur et ajouter une ligne dans le fichier /opt/etc/apache2/httpd.conf afin de lui ajouter la configuration du module DAV :
Include /opt/etc/apache2/conf.d/mod_dav_svn.conf
Pour plus de renseignements sur la configuration du serveur, je vous renvoie au tutoriel dédié à Subversion pour adapter le fichier mod_dav.svn.conf.
L'intérêt de mettre le repository sur un dossier accessible de l'extérieur est qu'il sera facile de modifier ainsi les fichiers de configuration.
Une fois le repository paramétré, il faut redémarrer le serveur pour l'activer.
Dans le fichier de configuration d'Apache httpd.conf, une grande liste de modules est chargée au démarrage du service. Ils ne sont pas nécessaires et sont désactivables (il suffit de commenter les lignes LoadModule).
Il faut changer les propriétés du repository pour que l'utilisateur nobody puisse y accéder en écriture. Le plus simple est donc de lui donner la propriété des dossiers ainsi qu'au groupe users. Ainsi, en permettant un accès en lecture/écriture à l'utilisateur et au groupe, le serveur Apache pourra modifier le repository ainsi que vous depuis l'explorateur de fichiers.
IV. Installation et utilisation de TRAC▲
IV-A. Installation des modules nécessaires▲
TRAC est un module Python qui peut être exécuté par plusieurs modules, comme mod_fastcgi qui s'interface avec plusieurs serveurs, ou mod_python ou mod_wsgi. Il faut tout de même commencer par récupérer les paquets TRAC :
ipkg install py25-trac
ipkg install svn-py
IV-B. Initialisation de TRAC▲
Une fois installé, un environnement TRAC peut être créé :
trac-admin /volume1/trac/ initenv
Une série de questions sont posées, la seule importante est le chemin vers le repository Subversion qui n'est pas le bon par défaut (si vous désirez une autre base de données, pas la peine d'installer py-sqlite).
Il est possible d'utiliser TRAC directement à l'aide de tracd :
tracd --port 800 /volume1/trac/
IV-C. Chargement automatique de TRAC au démarrage▲
Trac ne peut malheureusement pas encore être chargé à partir d'Apache. La raison est que Python est bogué sur les DS (il n'est pas capable de gérer les flottants, ce qui est utilisé d'une manière ou d'une autre dans les mods Apache). Il faut donc charger tracd au démarrage en mode daemon.
À nouveau, l'utilisateur nobody devra avoir accès au dossier trac en lecture, en écriture et exécution.
Pour lancer tracd automatiquement au démarrage, le plus simple est d'utiliser un script de démarrage placé dans /opt/etc/init.d. Normalement, il y a un script S80Apache dans ce même dossier. Le but est de créer un fichier presque identique, mais qui lancera le daemon tracd.
L'option -d permet de lancer tracd en mode daemon
V. Communication entre TRAC et Subversion▲
Le principal avantage de Subversion est la possibilité d'avoir des postcommit hooks. Il s'agit d'un script exécuté après le commit sur le repository (il en existe d'autres qui peuvent se déclencher avant le commit pour une vérification par exemple des fichiers).
Dans le dossier hooks se trouvent des patrons pour ces scripts. Par exemple le script suivant appellera trac-postcommit-hook.py placé dans /volume1/trac :
#!/bin/sh
REPOS="$1
"
REV="$2
"
LOG=`/opt/bin/svnlook log -r $REV $REPOS`
AUTHOR=`/opt/bin/svnlook author -r $REV $REPOS`
TRAC_ENV='/volume1/trac'
TRAC_URL='http://trac.mysite.com/project/'
/opt/bin/python2.5
/volume1/trac/trac-post-commit-hook \
-p "$TRAC_ENV" \
-r "$REV" \
-u "$AUTHOR" \
-m "$LOG" \
-s "$TRAC_URL"
VI. Conclusion▲
Même si les NAS de Synology ne permettent pas un fonctionnement correct de Python, il est possible de les utiliser pour la gestion de projet. Même s'il y a deux serveurs en réalité, Apache et mod_proxy peuvent rediriger une nouvelle page vers le serveur tracd.