Apres avoir suivi l’excellent tutoriel de Michael sur Pelle la tarte (en copie en bas de ce billet pour archive), je suis parvenu à déboostraper mon synology 1511+.
Pour rappel, le debootstrap permet de faire tourner 2 systèmes en parallèle, dont un qui est le maitre (le linux synology ici), et un esclave qui est chrooté qui est ici une debian classique.
Pour information, il existe maintenant un paquet (mis à disposition par SynoCommunity) qui semble faire tout cela tout seul, j’ai déboostrapé mon syno avant l’apparition de celui ci, peut etre l’avez vous utilisé ? Qu’en pensez vous ?
Cette debian permet de faire tourner, entre autres, Zoneminder sur ce NAS synology, et donc de faire l’économie d’une machine ou d’une VM.
Cependant, Zoneminder necessite un apache et une base de donnée MySQL pour fonctionner. Afin d’éviter de trop perturber la superbe interface web officielle synology, j’ai paramétré un autre apache sur la debian. Il est par contre inutile de multiplier les instances MySQL. Alors comment partager cette base ?
Le serveur apache bavarde avec MySQL à l’aide d’un fichier nommé mysql.sock qui est dans /var/run/mysqld/
Mais le fichier mysql.sock de synology est dans /tmp avec le point de montage / du syno que donc la debian ne peut pas voir puisqu’elle est cantonné au dossier chrooté !
La solution que je propose est la suivante :
- Depuis le syno, on chroot le dossier /tmp du syno vers /tempsyno dans la debian
mount -o bind /tmp $CHROOT/tempsyno
avec $CHROOT l’emplacement CHROOT de votre debian sur le syno bien sur.
- Dans notre debian, on a alors accés au /tmp qui est sur le syno
Il ne reste donc plus qu’a faire le lien du mysql.sock entre le dossier /var/run/mysqld/ et /tempsynoln /tempsyno/mysql.sock /var/run/mysqld/mysqld.sock
Modifications par rapport au tuto de Pelle la tarte :
J’ai paramétré un acces ssh sur les deux instances (syno et debian), mais sur des ports différents.
Vous pouvez changer les ports d’ecoute du serveur ssh sous debian à l’aide du paramètre « port » du fichier de configuration /etc/ssh/sshd_config suivi d’un redemarrage du serveur ssh
/etc/init.d/ssh restart
Voici la copie du tuto issu de Pelle la tarte :
Mise en place de Debian
Il va nous falloir une Debian qui tourne quelque part pour générer un système de base. Si vous n’en avez pas, vous pouvez l’installer dans une machine virtuelle le temps de faire la manip (Debian net-install et Virtualbox font très bien l’affaire). Un fois ceci fait, on va utiliser debootstrap de nous générer une archive minimale pour notre architecture cible, l’ARM :
sudo apt-get install debootstrap mkdir sdebian sudo debootstrap --foreign --arch armel squeeze sdebian sudo tar -cvzfp sdebian.tar.gz sdebian
Transférez l’archive obtenue sur votre NAS, placez la dans /volume1/, connectez vous au NAS grâce à telnet et désarchivez la :
tar -xvzfp sdebian.tar.gz
Mise en place du chroot
Debian aura besoin de faire des appels au noyau linux du DSM. Nous allons donc rendre accessible dans le chroot les répertoires spéciaux comme /proc, /dev …
On va utiliser un petit script shell qui va nous permettre de faire les quelques opérations nécessaires et d’entrer dans le chroot. Éditez un fichier chroot.sh, et copiez y les commandes suivantes:
CHROOT=/volume1/sdebian mount -o bind /dev $CHROOT/dev mount -o bind /proc $CHROOT/proc mount -o bind /dev/pts $CHROOT/dev/pts mount -o bind /sys $CHROOT/sys cp /etc/resolv.conf $CHROOT/etc/resolv.conf # Si installation d'un apache sur le port 80 dans Debian, # voir la suite de l'article # /usr/syno/etc.defaults/rc.d/S97apache-user.sh stop chroot $CHROOT /bin/bash
Executez le en root, et vous serez dans le chroot. Il reste maintenant à finaliser l’installation de Debian :
/debootstrap/debootstrap --second-stage
Générez un fichier sources.list correct grâce à http://debgen.simplylinux.ch, et placez le dans /etc/apt/sources.list.
Une petite mise à jour de Debian:
apt-get update apt-get upgrade
Ajout d’un compte utilisateur:
adduser babar
J’ai du corriger quelques droits d’accès qui se sont perdus dans la bataille. Il y en a probablement d’autres, à vous de corriger si nécessaire.
chmod 777 /tmp chmod +t /tmp
Installation du minimum vital:
apt-get install openssh-server htop most uptimed screen irssi
Pour que la Debian soit fonctionnelle, il faut maintenant faire tourner un certain nombre de services. Sur une Debian normale, ces services sont lancés par init, mais ce n’est pas notre cas. Il faudra donc les lancer manuellement. Éditez un fichier services.sh que vous placerez dans votre $HOME, et placez y le contenu suivant :
/etc/init.d/rsyslog start /etc/init.d/mtab.sh start /etc/init.d/cron start /etc/init.d/ssh start /etc/init.d/uptimed start # Si installation d'apache et de mysql, voir la suite de l'article # /etc/init.d/apache2 start # /etc/init.d/mysqld start
Et voilà, votre Debian est fonctionnelle ! Vous avez virtuellement deux systèmes qui tournent en parallèle. Si votre NAS s’éteint, vous devrez lancer le script chroot.sh, qui vous emmène dans la Debian, puis le script services.sh. Si vous vous connectez en telnet, vous tomberez sur le DSM, et en ssh, sur Debian.
Installation d’apache et de mysql
Le DSM fait déjà tourner deux apache, un pour l’interface web, l’autre pour les web station et photo station. L’un des deux écoute sur le port 80, et redirige vers l’interface web (port 5000/5001) si nécessaire. Si vous voulez faire tourner un apache sur le port par défaut, il va falloir faire deux choses:
- Allez dans l’interface d’administration et activez la web station
- Arrêtez le deuxième apache par telnet:
/usr/syno/etc.defaults/rc.d/S97apache-user.sh stop
Après installation d’apache et de mysql, pensez à dé-commenter les lignes correspondantes dans les deux scripts. On a perdu au passage les web et photo stations, mais si vous voulez un apache personnalisé, c’est probablement que vous n’en avez pas besoin. Si vous changez d’avis, vous pouvez toujours réactiver le service apache du DSM, la configuration est restée intacte.
bonjour je souhaite installer aussi zoneminder sur mon syno. c’est donc fait cependant je ne comprends pas la partie installation apache , mysql
webstation activé. passage en telnet, j arrete le 2e apache. j’ai deja decommenté. je relance services.sh: Mount point ‘/volume1’ does not exist. Skipping mount. … (warning) sachant que je suis passé par synocommunauty
cordialement
Bonjour ketchoupi,
Attention à ne pas confondre les deux systèmes qui tournent en même temps sur votre syno.
Le premier système est celui du synology proprement dit (où /volume1 existe).
Le deuxième est le debian deboostrapé qui tourne dans le système du syno. Ce dernier est cantonné dans un sous repertoire du syno et ne peut voir ce qu’il y a ailleurs que ce repertoire. (et donc /volume1 n’existe pas)
En se connectant en ssh, on se connecte au système du syno.
En se connectant en telnet, on se connecte au debian deboostrapé.
Merci pour cette réponse. J ai bien compris cependant je n’ arrive pas a installer zoneminder. J ai laissé un message sur nas forum si vous voulez bien y faire un tour. Mode extra débutant pour me guider. Je vous remercie d’avance. Cordialement.
en fait c’est mtab.sh qui donne ce message
Bonjour,
J’ai trouvé cette page en cherchant le problème précis de ce tutoriel, une Debian chroot sur Synology (DS213J) qui ne trouve pas mysqld.sock pour lancer le service MySQL. Cependant lorsque j’essaye de faire un hard link de /tempsyno/mysql.sock dans /var/run/mysqld/mysqld.sock, je me fais envoyer péter :
ln: failed to create hard link `/var/run/mysqld/mysqld.sock’ => `/tmpsyno/mysqld.sock’: Invalid cross-device link
en faisant un lien symbolique cela ne semble pas fonctionner bien que le lien soit créé.
En revanche un point n’est pas clair pour moi (je suis noob en mysql), mysql-server est-il censé être installé sur le chroot quand même ? Si oui, son installation plante chez moi, dpkg ne parvient pas à configurer mysql-server-5.5. J’ai pas mal potassé le web, et trouvé aucune réponse. Si vous avez une aide à apporter, je suis preneur…
apt-get install mysql-server-5.5
[paramétrage du mot de passe]
Setting up mysql-server-5.5 (5.5.41-0+wheezy1) ...
[ ok ] Stopping MySQL database server: mysqld.
150216 12:41:39 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
150216 12:41:39 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
150216 12:41:39 [Note] Plugin 'FEDERATED' is disabled.
150216 12:41:39 InnoDB: The InnoDB memory heap is disabled
150216 12:41:39 InnoDB: Mutexes and rw_locks use GCC atomic builtins
150216 12:41:39 InnoDB: Compressed tables use zlib 1.2.7
150216 12:41:39 InnoDB: Using Linux native AIO
150216 12:41:39 InnoDB: Initializing buffer pool, size = 128.0M
150216 12:41:39 InnoDB: Completed initialization of buffer pool
150216 12:41:39 InnoDB: highest supported file format is Barracuda.
150216 12:41:39 InnoDB: Waiting for the background threads to start
150216 12:41:40 InnoDB: 5.5.41 started; log sequence number 1595675
150216 12:41:40 InnoDB: Starting shutdown...
150216 12:41:41 InnoDB: Shutdown completed; log sequence number 1595675
[FAIL] Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing mysql-server-5.5 (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
mysql-server-5.5
E: Sub-process /usr/bin/dpkg returned an error code (1)
Bonjour PA,
Attention, cet article date un peu. Aujourd’hui Synology utilise un fork de MySQL : MariaDB. Je n’ai pas replongé mon nez dedans depuis mais cela implique sans doute des modifications.
Aucune idée de pourquoi ton dpkg mysql râle à l’install par contre.
Bon courage !