Installer Java sur un NAS Synology DS210+

UPDATE: 25/09/2011 – Corrections des paths

WARNING: On the right side, you can translate this article with « Google Translate »,
BE CAREFUL, Google modify paths and names. For good scripts, thank you for using the French original.

But:

Installer Java sur un NAS Synology DS210+ et équivalent avec processeur PowerPC SPE également connu sous le nom de « e500″/ »MPC8500 » et « e200″/ »MPC5xx ».

Problèmes:

  • Synology ne fourni pas de package java compatible ou fonctionnel.
  • Toucher le moins possible à la configuration du nas.

Solution possible:

Trouver une distribution linux compatible PowerPC SPE avec par exemple OpenJDK et l’installer en chroot sur le nas.

Prérequis:

  • Un NAS à base de PowerPC SPE
  • une connexion ssh configurer vers le NAS.

Version rapide:

Télécharger l’ archive du répertoire préconfiguré avec OpenJdk d’une distribution linux Debian pour architecture PowerPC SPE:

[Téléchargement non trouvé]

ou

À propos (un téléchargement)

Décompresser cette archive sur votre nas sous le répertoire /volume1/@local/debian et créer les points de montages correspondant:

NAS> mkdir -p /volume1/@debian
NAS> cp chrootgnuspe_OpenJDKPublic.tgz /volume1/@debian
NAS> cd /volume1/@local/debian
NAS> tar xzvf chrootgnuspe_OpenJDKPublic.tgz
NAS> mkdir -p /opt/debian

vous devez donc avoir /volume1/@debian/chrootgnuspe/bin, /volume1/@debian/chrootgnuspe/boot, …etc.
le ‘@’ évite que ce répertoire soit visible dans des partages réseaux.

il ne nous reste plus qu’à monter ce répertoire en chroot…

Pour nous simplifier la tâche, 2 scripts.
initDebChroot.sh sert à initialiser cette nouvelle installation au démarrage.

#!/bin/ash
mount -o bind /volume1/@debian /opt/debian
mount -o bind /dev /opt/debian/chrootgnuspe/dev
mount -o bind /proc /opt/debian/chrootgnuspe/proc
chroot /opt/debian/chrootgnuspe /bin/bash

loadDebChroot.sh permettant de se reconnecter en chroot, on aurait pu faire un alias, mais un des buts est de ne pas modifier le nas.

#!/bin/ash

chroot /opt/debian/chrootgnuspe /bin/bash

Nous allons maintenant tester notre plateforme.

Commençons par monter tout le nécessaire et changer de répertoire racine (chroot):

Nas>./initDebChroot.sh

Nous voici dans notre environnement debian.
Dans l’archive précédemment téléchargée se trouve un hello world en java, testons-le.

#cd /root
~# ll
total 12
-rw-r--r-- 1 root root  421 Nov 11 22:13 FirstApp.class
-rw-r--r-- 1 root root  109 Oct 19 22:06 FirstApp.java
~# javac FirstApp.java
~# java FirstApp
Hello World
~#

Voilà, vous avez un kit de développement java fonctionnel sur votre nas !!

Etant basé sur une distribution debian, vous pouvez utiliser toutes les commandes de gestion de paquet, apt-*. Vous pourrez ainsi en faire un serveur web avec jetty, tomcat, installez svn, git, un serveur dns, et que sais-je.

Amusez-vous bien.

Remerciements:
Rien n’aurait été possible sans le travail de Sebastian Andrzej Siewior pour son portage vers PowerPC SPE et de ces posts sur http://lists.debian.org/debian-powerpc/2009/02/msg00128.html . Il m’a permis de bénéficier d’une distribution complète sur ce nas et d’en faire une plateforme de dev utilisable.

Références:
http://wiki.debian.org/PowerPCSPEPort

A venir, une version plus détaillée de ce tutorial expliquant comment générer soit-même ce répertoire.

37 Responses

  1. My French is not that good, so I will do this in English 😉

    Thank you very much for your chroot image and explanation!!!! And for still having the repository online!

    I got through very much trouble to compile the software « tvheadend » for my Synology DS209+II (also has the SPE enabled e500v2 cpu). The tvheadend software needs at least GCC 4.1 to compile while the Synology toolchain contains too old a version. Building a cross-compile toolchain using « crosstool-ng » worked but I still got trouble due to the library hell.

    Using your Debian, compiling tvheadend and running it from the chroot works!!! 😉

  2. Salut et merci pour le tuto.

    je viens d’investir dans un DS211+ et je voudrais savoir si la manip’ peut être faite sur ce modèle.
    De plus, pourrais tu m’indiquer l’invasion faites par l’installation d’un os concurrent sur le NAS (utilisation RAM, DD) et si la garantie est perdue après l’installation ?

    Merci

    • 1. Oui cette manipulation peut être réalisée sur un DS211+, par contre tu ne pourras pas utiliser le bootstrap que je fourni. Ton processeur est de type ARM donc il te faut des binaires compilés pour de l’ARM.

      Pour connaître l’architecture d’un modèle :
      Quel processeur pour quel modèle ?

      2. Cette technique est non invasive, car tu ne fais que lancer des binaires qui sont sur tes disques, et non sur ta rom.

      3. Vu que tu ne modifie pas le matériel ni le soft, je ne vois pas pourquoi la garantie ne fonctionnerait plus. Un simple formatage de tes disques remet tout à 0. Par contre les exécutables que tu installes peuvent endommager ton matériel. Pour précision, je ne fourni pas de garantie avec cette manip.

  3. Thanks for the tutorial. I had some isseus but got it to work eventually. Still, if this is the fast version, would the slow version be to compile openjdk yourself. I’d like to try that but can’t find a way to do it the right way anywhere. My ds508 doesn’t have the right libc library either which in this chroot version is 2.7 I believe. Anyways, what the slow version?

    • Full version is to explain how to generate the bootstrap from a debian repository rather than downloading an archive ready that does not necessarily correspond to your processor architecture.
      When I have a little more time … I write it…

      To be short, you need:
      _on computer with ubuntu or debian or anything else, create a bootstrap for your synology processor architecture (see debian tutorial for that).
      _transfert your small bootstrap on your nas.
      _finish process by downloading all package you need.

      the only difficult part is choosing the right target architecture.

  4. Bonsoir,

    Je rencontre une erreur :
    DS210:~# java -v
    java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

    quelle est la solution?

  5. re,
    Pourquoi faire un montage sur les partitions?
    #!/bin/ash
    mount -o bind /volume1/@local /opt
    mount -o bind /dev /opt/debian/chrootgnuspe/dev
    mount -o bind /proc /opt/debian/chrootgnuspe/proc
    chroot /opt/debian/chrootgnuspe /bin/bash

    J’ai réussi à compiler mais obliger de faire ce montage en partitions.
    Un tuto sur java et un ds101 avait déjà été fait sans l’installation d’un autre OS.
    http://www.nslu2-linux.org/wiki/DS101/JavaOnDS101G

    Cdlt

    • Les montages sont fait pour avoir un environnement complétement viable.
      Si ces derniers ne sont pas fait, après le chroot, votre environnement n’a pas accès, par exemple, au périphérique du système ou aux processus actifs.
      Le tuto cité, de mémoire, ne fonctionne pas sur ce modèle. La version ppc fournit pas ibm est incompatible.

      Un autre avantage de la technique décrite, est qu’elle ne limite pas seulement à Java, mais permet d’avoir accès à la suite complète des applications Debian ou autre.

  6. Bonjour,

    1) une problèmatique survient à mon esprit concernant l’environnement actuelle de synology : Ces montages ne sont pas compatibles avec « Optware et ses Packages », pouvons nous faire en sorte que la compatibilité soit assuré?

    2) Comment lancer le script « initDebChroot.sh » au démarrage ? Si on le place dans /usr/syno/etc/rc.d/ cela fonctionne?
    Comment faire éventuellement le NOGO (revenir à l’état précédent)?

    3) Pourquoi avoir localisé les sources dans « /volume1/@local » et « /opt/debian/chrootgnuspe/ »? Pourquoi pas un seul dossier? Pourquoi pas un lien symbolique à l’aide de la commande « ln -s … »?

    4) J’ai un problème de mise à jour des sources en effectuant un « apt-get update ». Le lien des sources est-il toujours valide? Une clef d’identification est expirée comment en récupérer une nouvelle?

    Merci pour cette super contribution.

    ps: projet installer jetty et garder intact les données et les application ou services installés sur le serveur synology ds210+.

    Romain

    • 1) une problèmatique survient à mon esprit concernant l’environnement actuelle de synology : Ces montages ne sont pas compatibles avec « Optware et ses Packages », pouvons nous faire en sorte que la compatibilité soit assuré?

      Mon but est d’avoir une alternative à « Optware et ses Packages » que je trouve trop limité. En chroot une debian « presque » complète est dispo.

      2) Comment lancer le script « initDebChroot.sh » au démarrage ? Si on le place dans /usr/syno/etc/rc.d/ cela fonctionne?
      Comment faire éventuellement le NOGO (revenir à l’état précédent)?

      Pour cela il faut améliorer le script et se référer au docs de Synology

      3) Pourquoi avoir localisé les sources dans « /volume1/@local » et « /opt/debian/chrootgnuspe/ »? Pourquoi pas un seul dossier? Pourquoi pas un lien symbolique à l’aide de la commande « ln -s … »?

      @local n’est pas visible en partage réseau, et /opt est plus « pratique », évite de modifier la structure DSM, les goûts et les couleurs….

      4) J’ai un problème de mise à jour des sources en effectuant un « apt-get update ». Le lien des sources est-il toujours valide? Une clef d’identification est expirée comment en récupérer une nouvelle?

      la source de la version debian est assez ancienne, il faut maintenant faire repointer les repositories sur les officiels.

      Merci.

  7. bon j’ai modifié le script pour enlever « debian » et ca fonctionne presque : maintenant j’ai juste un petit soucis d’apt-get…
    mais je ne sais pas le résoudre 🙁

    apt-get update
    Get:1 http://download.breakpoint.cc lenny Release.gpg [197B]
    Get:2 http://download.breakpoint.cc lenny Release [5358B]
    Ign http://download.breakpoint.cc lenny Release
    Get:3 http://download.breakpoint.cc lenny/main Packages/DiffIndex [509B]
    Ign http://download.breakpoint.cc lenny/contrib Packages
    Ign http://download.breakpoint.cc lenny/non-free Packages
    Err http://download.breakpoint.cc lenny/contrib Packages
    404 Not Found
    Err http://download.breakpoint.cc lenny/non-free Packages
    404 Not Found
    Fetched 6064B in 1s (4921B/s)
    W: GPG error: http://download.breakpoint.cc lenny Release: The following signatures were invalid: KEYEXPIRED 1286964596 KEYEXPIRED 1286964596 KEYEXPIRED 1286964596
    W: Failed to fetch http://download.breakpoint.cc/debian/linutronix-lenny-gnuspe/dists/lenny/contrib/binary-gnuspe/Packages 404 Not Found

    W: Failed to fetch http://download.breakpoint.cc/debian/linutronix-lenny-gnuspe/dists/lenny/non-free/binary-gnuspe/Packages 404 Not Found

  8. Hi, first I have to thank you for this tutorial! It really kick me on to try and play with.

    There is small inaccurancy in presented script initDebChroot.sh. Right version according to your tutorial might look like this:

    #!/bin/ash
    mount -o bind /volume1/@local /opt
    mount -o bind /dev /opt/dev
    mount -o bind /proc /opt/proc
    chroot /opt /bin/bash
    

    There is still one problem to full portability of your solution. How can I get back to original NAS environment? If I use « exit » I get back to original ash but can’t use anything like « reboot », « mount » etc. I get an error like this:

    reboot: /lib/libc.so.6: version `GLIBC_2.4′ not found (required by reboot)

    Any idea how to get things back without manual reboot of the NAS?

  9. Lorsque je suis dans l’environnement de chrootgnuspe (en appelant un des 2 scripts), le jdk fonctionne bien. Cependant, j’aurais besoin d’avoir accès aux packages gcc et binutils. Lorsque je demande de l’info à propos de ces packages (avec ‘aptitude show x’ ou ‘apt-get -s install x’), il semble y avoir des conflits.

    Est-ce possible d’installer les bonnes versions de gcc et binutils sans déranger le setup de environnement? Ce qu’il me faudrait alors c’est un url où trouver ces packages.

    Ou bien, est-ce quand même possible d’installer les versions disponibles de gcc et binutils (i.e. en solutionnant les conflits un par un) sans que cela dérange le setup java de l’environnement au final?

    Est-ce que d’autres usagers ont eu à faire face à cette situation?

  10. Bonsoir,
    Lorsque j’essaie sur mon nas 410, j’ai une erreur pour touver libjli.so

    nas410:/# /usr/lib/jvm/java-6-openjdk/jre/bin/java
    /usr/lib/jvm/java-6-openjdk/jre/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

    Cette erreur apparait lorsque /proc est vide.
    Pour un raison que je ne comprend pas la double indirection ne fonctionne pas.

    /proc -> /volume1/@debian/chrootgnuspe/proc
    /volume1/@debian/chrootgnuspe /opt/debian

    Donc dans mon cas /volume1/@debian/chrootgnuspe/proc/ est correct, mais /opt/debian/chrootgnuspe/proc/ est vide ! ( mais pas le /dev )

    Donc j’ai simplifié un peu le script, et la ca marche.

    mount -o bind /dev /volume1/@debian/chrootgnuspe/dev
    mount -o bind /proc /volume1/@debian/chrootgnuspe/proc
    chroot /volume1/@debian/chrootgnuspe /bin/bash

  11. Hi Alex
    I solved the problem with JAVA_HOME not defined, but do I put the cripts:
    initDebChroot.sh and loadDebChroot.sh in /volume1/@debian/?

    And this is what i got after
    Nas> ./initDebChroot.sh
    Nas:~# ls -1
    FirstApp.class
    FirstApp.java
    jetty
    Nas:~#

    Thanks

Laisser un commentaire