Synology Debian debootstrap : partage de la base MySQL

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 :

  1. 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.

  2. 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 /tempsyno 

    ln /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.

6 thoughts to “Synology Debian debootstrap : partage de la base MySQL”

  1. 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

    1. 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é.

  2. 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.

  3. 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)

    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 !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *