(Français) NAS Synology: Debian en chroot, apache et mysql

Sorry, this entry is only available in Français.

52 Responses to “(Français) NAS Synology: Debian en chroot, apache et mysql”

  • je me demande si y a un pas une alternative au init custom services.sh ?

    • Michael:

      Pourquoi une alternative ? Le lancement de la Debian se fait en 2 commandes. Rapide, et efficace.

      Mais si tu as une autre solution, je suis curieux de l’entendre =)

  • extenue:

    Merci!

    j’ai reussi a derouler le tuto sans soucis , cependant je me casse les dents a vouloir partager le contenu de /volume1 dans le chroot

    je pense que cela doit etre possible car j’y arrive sur un dlink dns-320 avec le script ci dessous (j’ai essayer de l’adapter sans succes pour le syno)

    est il possible donc de partager les données contenues dans /volume1 dans une debian chrooté et si oui comment ?

    Merci bcp par avance …

    #!/bin/sh

    # Root DISK1
    export DISK1=/mnt/HD/HD_a2
    export DISTDIR=squeeze

    cd $DISK1

    mount –bind $DISK1 $DISTDIR$DISK1
    mount –bind / $DISTDIR/mnt/root
    mount –bind /dev $DISTDIR/dev
    mount –bind /sys $DISTDIR/sys
    #mount –bind /sys/crfs $DISTDIR/sys/crfs
    #mount –bind /web $DISTDIR/web
    mount –bind /proc $DISTDIR/proc

    cp -f /proc/mounts $DISTDIR/etc/mtab
    rm -f $DISTDIR/etc/fstab
    touch $DISTDIR/etc/fstab
    cp -f /etc/resolv.conf $DISTDIR/etc
    hostname >$DISTDIR/etc/hostname
    cp -f /etc/hosts $DISTDIR/etc

    $DISK1/$DISTDIR/boot/chroot $DISK1/$DISTDIR /boot/linuxrc

    • Michael:

      Hello,

      Tu peux parfaitement monter le volume1 au complet pour qu’il soit accessible de la debian, grâce à un montage de type bind. Depuis l’écriture de cet article, j’ai rajouter une ligne dans mon script chroot.sh qui fait ça:

      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

      mount -o bind /volume1/ /volume1/sdebian/media/volume1/ # <– celle là

      cp /etc/resolv.conf $CHROOT/etc/resolv.conf

      /usr/syno/etc.defaults/rc.d/S97apache-user.sh stop

      chroot $CHROOT /bin/bash

      • extenue:

        j’ai trouvé (et me sens un peu moins idiot …)

        mount -o bind /dir/outside/chroot /dir/inside/chroot

        j’ai realisé que cela ne marchait que si /dir/inside/chroot existait :)

        donc

        mkdir /dir/inside/chroot
        mount -o bind /dir/outside/chroot /dir/inside/chroot
        fonctionne a merveille :)

  • extenue:

    oopss sorry j’avais pas vu que tu avais répondu entre temps :)

  • Bonjour Mickaël,

    J’ai appliqué à la lettre ton tuto ce WE. Ça marche du feu de dieu sur un DS211.
    J’aurais quelques remarques à ajouter pour améliorer la chose.

    Premièrement, définir le mdp root de la debian. Parce que tu créées un user babar, donc tu définis son mdp. Tu as ajouté SSH, c’est donc que tu souhaite te connecter à distance sur le sous-système. Tu te connectes comment ? Par babar ? Tu laisses la console du chroot en permanence ouverte ? Non !
    Tu te connectes forcément via SSH/babar. Mais si par la suite tu as un su à faire (installer un packet par apt, ou consulter les logs), tu n’as aucun mdp root.

    Deuxièmement, le coup des scripts à lancer, ça me plait moyen :/ Bah oui, flemme inside. Je me dis déjà qu’on pourrait lancer le chroot au lancement du DSM. Je viens de faire un petit tour du web, et j’ai trouvé ça :
    http://forum.synology.com/enu/viewtopic.php?f=66&t=6945
    Je testerai un de ces soirs, ya moyen de moyenner, mais aucun service ne serait lancé. Faut aussi s’occuper de services.sh.

    Déjà, que fait ta commande chroot ? Elle lance un bash. Ce bash sert à lancer tes services. Est-ce qu’on ne peut pas tout simplement faire
    chroot $CHROOT /chemin_vers/services.sh
    avec un #! /bin/bash en haut du script.
    Je testerai aussi un de ces soirs.

    Comme ça, à chaque reboot du nas, tout serait fonctionnel :)

    Merci encore pour ce petit tuto bien sympa.

    • Michael:

      Merci pour ce retour !

      La réponse à la première question est simple, j’ai installé sudo, je n’est donc pas besoin d’un mot de passe root.

      Pour les scripts, c’est probablement possible, mais je ne l’ai pas fait pour deux raisons:
      - je n’en ai pas ressenti le besoin, mon NAS tourne 24/7, j’ai juste besoin de lancer les scripts manuellement quand EDF fait une blague, ce qui est rare ici.
      - je voulais limiter au maximum l’interaction avec le DSM, pour ne pas avoir quelque chose qui saute au moment d’une mise à jour.

      Si tu trouve une solution élégante, ça serait sympatique de la partager dans un commentaire, d’autre lecteurs semblaient interessés =)

  • [...] http://pellelatarte.fr/2011/06/nas-synology-debian-en-chroot-apache-et-mysql/ Cette entrée a été publiée dans Linux, Nas, avec comme mot(s)-clef(s) chroot, debian, DS210+, Nas, PowerPC SPE, serveur, Synology, web. Vous pouvez la mettre en favoris avec ce permalien. ← Créer un miroir debian pour l’architecture PowerPC SPE [...]

  • Bass:

    Bonjour
    un tuto vraiment sympa.
    Je n’est malheureusement pas le temps de le dérouler en ce moment, même pas finit de le lire, mais 2 petites remarque pour ma contribution aussi mince soit-elle.

    1- pour la partie

    sudo tar -cvzf sdebian.tar.gz sdebian

    ajouter l’option p devrait résoudre les problèmes de droit, comme ça

    sudo tar -cvpzf sdebian.tar.gz sdebian

    bien entedu il faut aussi ajouter cette option au moment du desarchivage

    sudo tar -xzpvf sdebian.tar.gz

    2- ça me fais mal de devoir faire du telnet de nos jours. Surtout sur mon beau nas qui contient toutes mes data.
    Pourquoi ne pas configurer le sshd de la debien sur un autre port genre le Port 23 si vous l’aimez bien
    “Port 23″ dans le fichier /etc/ssh/sshd_config a la place de “Port 22″

    Et encore merci et bravos pour ce tuto et votre site web
    Je l’ajoute dans mes favoris ;-)

    • Michael:

      Hello,

      1- Un man tar m’indique:
      “-p, –preserve-permissions, –same-permissions
      extract information about file permissions (default for superuser)”
      Donc c’est peut-être déjà le cas, puisque utilisé avec sudo. C’est quand même une bonne idée, donc je le rejoute !

      2- Il y a encore telnet, mais il tombe sur le DSM. SSH tombe sur la Debian, c’est parfait, non ? ;)

  • Yann:

    Bonsoir, Je viens de finir de mettre en route mon syno et avant de m’attaquer à votre tuto (très bien fait en tout cas), je voulais savoir s’il y avait un moyen d’accéder facilement au répertoire mysql afin d’y coller mes données de mon ancien serveur apache. Merci d’avance. J’ai cherché sur la toile sans rien trouver et je desespère.

  • Xavier:

    Merci bien pour ce tuto. Je cherchais depuis longtemps à faire cohabiter une debian avec la busybox et ses limitations. Encore merci.

  • Bingo:

    Hello,

    tu dis que tu consommes 170 Mo de ram / 512, mais je croyais que le DS411j n’en possèdait que 128 d’après les specs. Tu as travaillé sur un autre matériel ici ?

    http://www.synology.com/products/spec.php?product_name=DS411j&lang=fre#p_submenu

    Merci pour les tutos intéressants, a+

    • Michael:

      Il y a deux auteurs dur ce blog, Jidey, qui possède un DS411j, et moi, qui possède un DS211+ avec 512Mo de RAM.

      Pour info, avec un uptime de 90 jours, j’ai une consommation mémoire de 220Mo.

  • Jon:

    Salut,
    J’ai bien suivi ton tuto concernant le chroot d’une debian et tout fonctionne bien.
    J’ai une question, je n’arrive pas à avoir accès à mon stockage depuis la debian. J’aimerais mettre en place un système de download automatique sur le nas et je veux le faire dans la debian. Sais-tu comment monter la partition /dev/vg1/lv dans la debian ? Quand je tape mount -o /dev/vg1/lv $CHROOT/mnt/volume1 dans le script chroot.sh pour lancer le chroot et j’ai une erreur …
    Merci A+
    Jon

    • Michael:

      La bonne commande est probablement mount -o bind /dev/vg1/lv $CHROOT/mnt/volume1

      Note le “bind” que tu n’avais pas dans ta commande.

      Mais sans l’erreur précise, c’est tout ce que je peux te dire =)

  • Jon:

    Oups désolé je viens de voir que c’était dans les commentaires.
    Merci quand même :D

  • rhuax:

    Merci pour ce très bon tuto!!!

    Ça marche parfaitement sur mon DS 209!

    Perso je ne l’utilise pas pour apache et mysql, mais pour JDownloader :) Car malheureusement pas implémenté sur les Syno, car il faut disposer d’un compte premium avec Download Manager!

    Encore merci!!!

  • Dominique:

    Bonjour,

    J’ai suivi ce tutoriel sans difficulté merci beaucoup.

    J’ai une application java à laquelle on accède sous la forme http://localhost:1234 (localhost du chroot sur le NAS et pas le localhost du NAS (DSM).

    Je suis évidement sur un poste de travail distant et je ne sais pas comment configurer le NAS pour que soit le chroot aie une adresse ip propre, soit je puisse effectuer une redirection de http://ip_du_NAS:xyzt sur le localhost du chroot.

    Excellente journée

    • Michael:

      Il est inutile d’avoir une adresse IP spécifique pour la Debian en chroot. Le port que vous indiquez n’est écouté que par votre application java sur la Debian, donc la connection devrait marcher.

  • extenue:

    bonsoir

    est ce qqun a trouvé comment lancer le chroot au démarrage du syno ? et voir tout lancer en automatique ?

  • cerberus:

    J’ai suivi ton tuto à la lettre me je tombe sur une erreur lors de “sudo tar -cvzfp sdebian.tar.gz sdebian”
    L’erreur qui s’affiche est la suivante ” tar: Arrêt avec code d’échec à cause des erreurs précédentes ”
    Est-ce que tu aurais la gentillesse d’éclairer ma lanterne ?

    Merci d’avance.

  • cerberus:

    j’ai trouvé tout seul
    dans “sudo tar -cvzfp sdebian.tar.gz sdebian” mettre le P entre v et z

  • cerberus:

    Est ce que vous savez comment installer java sur le chroot ?

  • meLIanTQ:

    Bonsoir,

    Petite contribution … pour lancer ma debian sur mon syno au boot:

    cd /usr/syno/etc/rc.d
    touch S99zchrootDebian.sh
    chmod 755 S99zchrootDebian.sh
    chmod +x S99zchrootDebian.sh
    vi S99zchrootDebian.sh

    et le lanceur:

    #!/bin/sh
    #
    # Define where is the chroot on filesystem
    CHROOT=/volume1/debootstrap-arm-debian
    # local necessary
    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
    cp /etc/hosts $CHROOT/etc/hosts
    # Stop Apache User on Host Synology, brocken the launch of apache on *:80
    /usr/syno/etc.defaults/rc.d/S97apache-user.sh stop
    # Start Services, you want …
    chroot $CHROOT /etc/init.d/rsyslog start
    chroot $CHROOT /etc/init.d/mtab.sh start
    #chroot $CHROOT /etc/init.d/cron start
    #chroot $CHROOT /etc/init.d/ssh start
    chroot $CHROOT /etc/init.d/uptimed start
    chroot $CHROOT /etc/init.d/apache2 start
    chroot $CHROOT /etc/init.d/mysqld start

    si sa peut aider …

  • Tauxmat:

    Bonjour à tous?
    J’ai réussi les étapes jusqu’à la désarchivation du script.
    Après j’essaie de lancer le script schroot.sh et je me heurte à un problème de permission : ./chroot.sh: Permission denied

    Que faire pour m’éviter ce problème ?
    Cordialement, Thomas.

  • Tauxmat:

    Bonjour, il faudrait que je configure un proxy ?
    Parce que je ne peut pas faire de apt-get update sinon…

    Quelqu’un sait comment faire ?

  • perming:

    Bonjour,
    D’abord, super ce tuto très clair… et encore merci.
    Installation sans problème et j’ai enfin réussi à faire fonctionner “Domogik” sur mon DS209. Je vais pouvoir enfin faire un peu de domotique pour le moindre coût.
    Par contre depuis, il y a effets de bord que je n’ai pas encore résolu. Le bouton pour éteindre le Nas ne fonctionne plus et je ne peux plus rebooter à distance. Je suis obligé de débrancher le serveur.
    J’imagine qu’il faut stopper le Chroot avant de rebooter le serveur ?

  • Popawu:

    Hello,
    Comme perming, impossible de rebooter une fois que les services sont lancés.
    Savez-vous comment créer un script d’arrêt des services à ajouter dans la séquence d’arrêt ? Je ne sais pas où se trouvent les K… normalement sous rc0X.d.

  • Popawu:

    Re,

    Je me réponds à moi même :) en fait au shutdown, les scripts présents dans /usr/syno/etc/rc.d sont exécutés avec le paramètre stop.
    Il faut donc créer un script qui prend en compte ce paramètre :

    #!/bin/sh
    vChRoot=/volume1/debian
    vOutput=/var/log/messages
    vTimeStamp=`date “+%b %e %H:%M:%S”`

    # start services
    case $1 in
    start)
    chroot $vChRoot /etc/init.d/rsyslog start
    chroot $vChRoot /etc/init.d/mtab.sh start
    chroot $vChRoot /etc/init.d/cron start
    chroot $vChRoot /etc/init.d/ssh start
    chroot $vChRoot /etc/init.d/uptimed start
    ;;
    stop)
    chroot $vChRoot /etc/init.d/rsyslog stop
    chroot $vChRoot /etc/init.d/mtab.sh stop
    chroot $vChRoot /etc/init.d/cron stop
    chroot $vChRoot /etc/init.d/ssh stop
    chroot $vChRoot /etc/init.d/uptimed stop
    ;;
    *)
    echo “Usages: $0 [start|stop]”
    ;;
    esac

    Les services seront alors arrêtés au shutdown ce qui ne bloqura la séquence d’arrêt.

    • Popawu:

      Edit: mes variables vOutput et vTimeStamp sont pour logguer les start/stop dans var/log/messages…

      à utiliser comme suit si vous le souhaitez :
      echo -n “$vTimeStamp chroot: ” >> $vOutput && chroot $vChRoot /etc/init.d/rsyslog start >> $vOutput 2>&1

  • dax:

    Personnellement, je préfère conserver le script responsable du lancement des services de la Debian à l’intérieur du système chrooté.

    Au démarrage du NAS, j’ai un script chroot.sh appelé depuis /etc/rc.local (DSM) :

    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

    mount -o bind /volume1 $CHROOT/mnt/volume1

    cp /etc/resolv.conf $CHROOT/etc/resolv.conf

    chroot $CHROOT /root/services.pl

    /root/services.pl sur la Debian chrootée:

    #!/usr/bin/perl -W

    use strict;

    my @services = ('/etc/init.d/rsyslog',
                    '/etc/init.d/sudo',
                    '/etc/init.d/uptimed',
                    '/etc/init.d/cron',
                    '/etc/init.d/ssh');

    $SIG{'INT'} = $SIG{'TERM'} = 'kill_running_services';

    my @running_services = ();

    foreach my $s (@services) {
            print "Starting $s ... ";
            `$s start`;
            if ($? == 0) {
                    push @running_services, $s;
                    print "done.\n";
            }
            else {
                    print "failed.\n";
            }
    }
    while(my $in = <STDIN>) {};
    exit;


    sub kill_running_services
    {
            my @services = reverse @running_services;
            while (my $s = shift @services) {
                    print "Stopping $s ... ";
                    `$s stop`;
                    print "done.\n";
            }
            exit;
    }
  • dax:

    Pour info, l’histoire des signaux fonctionne pas en l’état, mais vous comprenez certainement l’idée…

  • CoolRaoul:

    ne voulant pas mourir idiot j’ai décidé de tester cette manip.

    Bien qu’ayant suivi scrupuleusement le tuto, l’exécution du debootstrap plante:

    I have no name!@fserv:/# /debootstrap/debootstrap –second-stage
    /debootstrap/debootstrap: 425: id: not found
    [: 425: -ne: unexpected operator
    I: Installing core packages…
    W: Failure trying to run: dpkg –force-depends –install /var/cache/apt/archives/base-files_6.0squeeze5_armel.deb /var/cache/apt/archives/base-passwd_3.5.22_armel.deb

    si quelqu’un a une idée…

    • CoolRaoul:

      j’ai un peu avancé,
      le PATH apres une fois entré dans le chroot n’etait pas correct, manquait “/usr/bin”

      J’ai corrigé la derniere ligne de chroot.sh comme suit
      chroot $CHROOT /usr/bin/env PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash
      et ça m’a l’air bon maintenant

  • kaza7:

    Bonjour,
    quelle commande pr installer debian sur un ds412+ (intel x86 atom)?quoi mettre à la place de armel ?

    sudo debootstrap –foreign –arch ??? squeeze sdebian

    Merci

  • kaza7:

    pour la commande pour un synology avec un process intel x86 atom, il suffit de mettre i386 à a place de armel :
    sudo debootstrap –foreign –arch i386 squeeze sdebian

  • Rodolphe84:

    Bonjour.

    j’ai une erreur en exécutant le script “chroot.sh”
    Je ne sais pas ou je dois mettre le script
    Et voici l’erreur :

    Syno> ./chroot.sh
    failed: No such file or directorydebian
    failed: No such file or directorysdebian
    failed: No such file or directorye1/sdebian
    failed: No such file or directorydebian
    : not found: line 6:
    mount: mounting /volume1/ on /volume1/sdebian/media/volume1/ failed: No such file or directory
    : not found: line 8:
    ‘: No such file or directorydebian
    : not found: line 10:
    Usage: /usr/syno/etc.defaults/rc.d/S97apache-user.sh [start|stop|restart]
    : not found: line 12:
    : No such file or directoryirectory to /volume1/sdebian

    Merci d’avance pour votre aide

  • GM:

    Bonjour,

    Je viens de lire ce fil intéressant.

    Un an et demi après le premier message… et 6 mois après le message précédent est-il possible de savoir si quelqu’un déplore des effets secondaires à la méthode préconisée ? Merci.

    Je pose la question avant de me lancer dans la manipulation sur un SYNO DS412+ (interface DSM 4.1-2668) tout neuf. :-)

    L’intérêt pour moi serait de pouvoir installer une distribution LaTeX et le logiciel Asymptote… pour me servir de leurs compilateurs sur un site en php.

    Merci.

  • [...] 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 [...]

  • s0x:

    J’ai installé une debian chrooté sur un NAS (D-LINK DNS 320) avec succès, grâce a ce tuto, il y a quelques mois.
    Pas d’effets de bord constaté, tout roule.
    Merci.

  • I think this is one of the most important information for me. And i’m glad reading your article. But wanna remark on some general things, The web site style is great, the articles is really excellent : D. Good job, cheers Claud http://tinychat.com/qnphel

  • That is very fascinating, You’re a very skilled blogger.
    I’ve joined your feed and stay up for in the hunt for extra of your excellent post.

    Also, I’ve shared your web site in my social networks

  • Vincs:

    Bonjour,

    Pour ma part, j’ai un soucis pour faire lancer le fichier sh au démarrage dans le rc.local.

    Pourriez vous me dire ce que vous avez mis ?
    Merci.

    • Vincs:

      J’ai résolu mes problèmes. J’avais des warnings avec perl :
      http://ubuntuforums.org/showthread.php?t=1346581

      Dans mon fichier /etc/rc.local j’ai mis :
      ######################################################################
      cat /etc/rc.local
      #!/bin/sh -e
      mount -o bind /volume1/@optware /opt

      # Optware setup
      [ -x /etc/rc.optware ] && /etc/rc.optware start

      sh /volume1/sdebian/chroot.sh

      exit 0
      ######################################################################

      Le chroot en question :
      ######################################################################
      cat /volume1/sdebian/chroot.sh
      #!/bin/sh
      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

      chroot $CHROOT /root/.services.pl
      ######################################################################

      Le .service.pl de notre amis ci dessus un peu adapté, pcq je ne veux pas le ssh et que je lance privoxy:
      ######################################################################
      cat .services.pl
      #!/usr/bin/perl -W

      use strict;

      my @services = (‘/etc/init.d/rsyslog’,
      ‘/etc/init.d/sudo’,
      ‘/etc/init.d/uptimed’,
      ‘/etc/init.d/cron’,
      ‘/etc/init.d/privoxy’
      # ,’/etc/init.d/ssh’
      );

      $SIG{‘INT’} = $SIG{‘TERM’} = ‘kill_running_services’;

      my @running_services = ();

      foreach my $s (@services) {
      print “Starting $s … “;
      `$s start`;
      if ($? == 0) {
      push @running_services, $s;
      print “done.\n”;
      }
      else {
      print “failed.\n”;
      }
      }
      #while(my $in = ) {};
      exit;

      sub kill_running_services
      {
      my @services = reverse @running_services;
      while (my $s = shift @services) {
      print “Stopping $s … “;
      `$s stop`;
      print “done.\n”;
      }
      exit;
      }
      ######################################################################

      Ensuite, j’ai un autre fichier chroot_user cette fois pour lancer uniquement la console en utilisateur
      ######################################################################
      cat /volume1/sdebian/chroot_user.sh
      #!/bin/sh
      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

      chroot $CHROOT /bin/bash
      ######################################################################

      Que je lance dans un screen via un fichier debian.sh
      ######################################################################
      cat debian.sh
      screen -x -R debian /volume1/sdebian/chroot_user.sh
      ######################################################################

      Voilà !
      En plus, je me suis crée un utilisateur, et lorsqu’on se log en tant que root sur le système, j’ai modifié le .bashrc pour qu’il me log avec cet utilisateur.
      Cela en faisaint su nomutilistateur

      En espérant que cela vous aura aider !

  • Menestrel:

    Tout d’abord, merci pour le tuto, je testerai ce soir :)

    Question : Et si je veux mettre un pgsql en plus de celui qui est installé de base ? Est qu’il y aura des conflits ? si oui, comment faire pour les éviter sans avoir à arréter le pgsql de syno ?

  • Menestrel:

    Bon, j’ai trouvé :
    pg_createcluster 9.1 main va créer les fichiers de confs comme il faut et attribuer le port qui va bien :)

Leave a Reply