[Howto] Java 6 und Tomcat auf TS-*19

  • [NAS Typ:] TS-219
    [Firmware:] 3.1.2 build 1014
    [Getestet:] ja
    [Sonstige Modifikationen:] keine


    Diese Anleitung beschreibt die Installation und Konfiguration von Java und Apache Tomcat auf QNap-NAS der Serie TS-*19


    Voraussetzungen: Kenntnisse putty, Linux Basiswissen


    1. Zunächst ist Java zu installieren:


      - Runterladen von http://java.sun.com/javase/downloads/embedded.jsp. Zu wählen ist hier Java SE for Embedded 6 ARMv5 Linux - Headless. Man wird nach Name,... gefragt. Für Privatnutzer aber kein Problem und die 90-Tage Beschränkung lässt sich bei Bedarf auch wieder zurücksetzen.


      - Nach dem Download ist das Archiv zu entpacken. Dafür

    Code
    gunzip DATEINAME

    ausführen.


    - Anschließend am besten mit Midnight-Commander in das gewünschte Verzeichnis enttaren. Bei mir z.B. unter /opt/java.


    - In /etc/profile folgende Variable setzen

    Code
    export JAVA_HOME=/opt/java


    - Ebenso in /etc/profile ganz am Ende den Pfad erweitern

    Code
    export PATH=.......:/opt/java/bin


    - Neu einloggen und testen:

    Code
    java -version

    sollte die eingespielte Java-Version und die Laufzeit anzeigen.


    - Wer die 90-Tage zurücksetzen möchte, spielt bitte aus dem Archiv die Datei

    Code
    lib/arm/.1.6.0_10-ea-b39

    in das Verzeichnis

    Code
    $JAVA_HOME/lib/arm

    neu ein.


  • So, jetzt haben wir schon mal Java am Laufen. Nun zur Kür...


    2. Apache Tomcat installieren und konfigurieren:


      - Tomcat von http://tomcat.apache.org/download-60.cgi runterladen. Ich habe Version 6.0.20 Core als tar.gz runtergeladen.


      - Das Paket entpacken und am Besten wieder mit mc in das gewünschte Verzeichnis kopieren. Bei mir

    Code
    /opt/apache-tomcat-6.0.20


    - Auch hier in der

    Code
    /etc/profile

    noch eine Variable setzen

    Code
    export CATALINA_HOME=/opt/apache-tomcat-6.0.20


    - Da Tomcat per Default auf Port 8080 läuft, dieser aber von der Admin-GUI belegt ist, müssen wir auch hier noch Hand angelgen und die Datei

    Code
    $CATALINA_HOME/conf/server.xml

    editieren.


    - Hier ist folgender Bereich z.B. auf Port 8081 anzupassen:

    Code
    <Connector port="8081" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443" />    <!-- A "Connector" using the shared thread pool-->    <!--    <Connector executor="tomcatThreadPool"               port="8081" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443" />    -->


    - Jetzt können wir testen und in

    Code
    $CATALINA_HOME/bin

    den Befehl

    Code
    ./startup.sh

    ausführen.


    - Es werden einige Meldungen zur Umgebung ausgegeben. Alles weitere findet sich im Log unter

    Code
    $CATALINA_HOME/logs/catalina.DATUM.log


    - Über den Browser jetzt die URL http://MEINNAS:8081 aufrufen und sich freuen, wenn die Tomcat-Seite angezeigt wird. Hier können dann die verschiedenen Beispiele ausprobiert werden.


  • Alles weitere ist nicht mehr NAS abhängig, daher kann dann die entsprechende Anwendungs- oder Tomcat-Dokumentation verwendet werden.


    Einfach durch Kopieren des *.war-Files in das Verzeichnis

    Code
    $CATALINA_HOME/webapps

    läuft z.B.:



    Weitere Anwendungen werden ich nach entsprechenden Tests hier ergänzen.


    Viel Spaß,


    Jan

  • Hi Jan, danke für Die Anleitung. :thumb:


    Für die Leser:
    Java 6 (JRE) und den Tomcat gibt es für bestimmte QNAP NAS Systeme ebenfalls als QPKG zum Downloaden.
    Ob euer NAS dabei ist könnt Ihr hier sehen: http://forum.qnapclub.de/viewtopic.php?f=71&t=2378 (Nach Tomcat suchen).
    Falls euer NAS nicht mit dabei ist, könnt Ihr euch nach diesen HowTo richten. Dieses sollte ebenfalls für andere NAS Systeme funktionieren. Danke nochmals an Jan. :thumb:


    Grüsse, David.

  • Nachdem der Tomcat jetzt läuft, soll er noch mit dem Apache des NAS verheiratet werden...


    Dazu müssen wir nur dem Apache sagen, dass er Anfragen an die Tomcat-Anwendungen auch an diese weiterleitet.


    Und das geht so:



      - Editiere die

    Code
    /etc/config/apache/apache.conf

    und füge folgende Zeilen am Ende ein: (nas-1 bitte durch IP des NAS oder den entsprechenden Namen ersetzen)


    Code
    LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.soLoadModule proxy_http_module modules/mod_proxy_http.so<VirtualHost *:*>    <Proxy *>        AddDefaultCharset Off        Order deny,allow        Allow from all    </Proxy>    ProxyPass /pebble ajp://nas-1:8009/pebble    ProxyPassReverse /pebble ajp://nas-1:8009/pebble    ProxyPass /examples ajp://nas-1:8009/examples    ProxyPassReverse /examples ajp://nas-1:8009/examples    ProxyPass /tomcat ajp://nas-1:8009/    ProxyPassReverse /tomcat ajp://nas-1:8009/    ProxyPass /manager/ ajp://nas-1:8009/manager/    ProxyPassReverse /manager/ ajp://nas-1:8009/manager/    ProxyPass /docs ajp://nas-1:8009/docs    ProxyPassReverse /docs ajp://nas-1:8009/docs</VirtualHost>


    - Speichern und danach den Apache mit

    Code
    /etc/init.d/Qthttpd.sh restart

    neu starten


    - Jetzt sind die Tomcat-Anwendungen parallel und transparent, wie folgt zu erreichen:
    http://MEINNAS/tomcat zeigt die Tomcat-Begrüßungsseite an
    http://MEINNAS/examples zeigt die Beispielanwendungen an
    http://MEINNAS/manager/status zeigt die Managementseite an (Hier muss vorher aber noch ein Benutzer definiert werden. Steht in der tomcat-Doku)
    http://MEINNAS/pebble so installiert, ruft die Blog-Software Pebble auf


  • Eigene Anwendungen können nach dem Schema:

    Code
    ProxyPass /DEPLOYNAME ajp://nas-1:8009/DEPLOYNAME
    ProxyPassReverse /DEPLOYNAME ajp://nas-1:8009/DEPLOYNAME


    hinzugefügt werden.


    Viel Spaß,


    Jan

  • Jetzt soll der Tomcat noch, genauso wie Apache, automatisch gestartet und überwacht werden.


    Dazu dient das Tool daemon_mgr, das automatisch Anwendungen starten und stoppen kann. Ebenso überwacht es die entsprechenden Prozesse und schickt bei Problemen eine Mail. (Siehe "Benachrichtigungen" in der Admin-GUI). Der daemon_mgr ist automatisch installiert.


    Allgemeines


    Der Tomcat wird über Shellskripte im Verzeichnis

    Code
    $CATALINA_HOME/bin

    gesteuert, wobei CATALINA_HOME eine in der /etc/profile gesetzte Systemvariable ist, die auf das Installations (Home-) Verzeichnis von Tomcat zeigt (z.B. /opt/tomcat).


    Ich habe bei mir Tomcat im "Original"-Verzeichnis (apache-tomcat-6.0.20) unter /opt installiert und dann einen Sym-Link auf dieses Verzeichnis gesetzt, damit ich unabhängig von der Versionsnummer bin.

    Code
    ln -s /opt/apache-tomcat-6.0.20 /opt/tomcat


    Von der Shell aus wird Tomcat über:


    Code
    /opt/tomcat/bin/startup.sh


    gestartet und über


    Code
    /opt/tomcat/bin/shutdown.sh


    gestoppt. Das klappt alles wunderbar, solange die Shell, die den Tomcat startet, geöffnet bleibt...


    Die beiden Skripte machen eigentlich nicht anderes als

    Code
    /opt/tomcat/bin/catalina.sh

    mit den entsprechenden Parametern start bzw. stop aufzurufen.


    Anpassen der catalina.sh


    Da Tomcat ja automatisch hochfahren soll und ich den Tomcat trotzdem starten und stoppen können möchte, habe ich in der catalina.sh folgende Zeilen hinzugefügt:


    Code
    elif [ "$1" = "daemon_start" ] ; then  shift  touch "$CATALINA_BASE"/logs/catalina.out  /sbin/daemon_mgr java start " "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \      -Dcatalina.base="$CATALINA_BASE" \      -Dcatalina.home="$CATALINA_HOME" \      -Djava.io.tmpdir="$CATALINA_TMPDIR" \      org.apache.catalina.startup.Bootstrap "$@" start \      >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &"      if [ ! -z "$CATALINA_PID" ]; then        echo $! > $CATALINA_PID      fielif [ "$1" = "daemon_stop" ] ; then  shift  /sbin/daemon_mgr java stop " "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \      -Dcatalina.base="$CATALINA_BASE" \      -Dcatalina.home="$CATALINA_HOME" \      -Djava.io.tmpdir="$CATALINA_TMPDIR" \      org.apache.catalina.startup.Bootstrap "$@" stop \      >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &"  if [ ! -z "$CATALINA_PID" ]; then     /bin/kill -INT `cat $CATALINA_PID` 1>/dev/null 2>/dev/null  fi  RETVAL=$?


    Dieser Codeabschnitt wird in der Datei catalina.sh am besten vor der Zeile


    Code
    elif [ "$1" = "stop" ] ; then


    eingefügt.


    Nach dem Speichern stehen für catalina.sh nun die zusätzlichen Parameter:


    daemon_start


    und


    daemon_stop

    zur Verfügung.


    Der Befehl

    Code
    /opt/tomcat/bin/catalina.sh daemon_start

    startet den Tomcat im Hintergrund und fügt ihn mit dem Prozessnamen "java" der Prozessüberwachung daemon_mgr hinzu. Ich habe bisher leider noch keinen Weg gefunden hier einen anderen Namen zu konfigurieren ohne Probleme mit der Überwachung zu bekommen. In der Datei /etc/daemon_mgr.conf ist jetzt am Ende der Datei ein neuer, langer Eintrag für den Tomcat zu sehen. Beim Ausfall des Tomcat wird dieser jetzt automatisch neu gestartet und eine Mail an den Admin geschickt (so das konfiguriert ist).


    Der Befehl

    Code
    /opt/tomcat/bin/catalina.sh daemon_stop

    beendet den Tomcat und der Status in der /etc/daemon_mgr.conf wird auf "stop" gesetzt.


    Damit der Tomcat jetzt nach einem Reboot automatisch startet (auch, wenn er vorher gestoppt war), kann noch ein neues init-Skript mit folgendem Inhalt erstellt werden:


    Bash
    #!/bin/sh# For Administration# default port: 8081test -f /opt/java/bin/java || exit 0test -f /opt/tomcat/bin/catalina.sh || exit 0test -f /opt/java/.1.6.0_10-ea-b39 || exit 0case "$1" in    start)	echo -n "Starting tomcat services: "	# Reset eval period	cp /opt/java/.1.6.0_10-ea-b39 /opt/java/lib/arm/.1.6.0_10-ea-b39	/opt/tomcat/bin/catalina.sh daemon_start	echo -n " tomcat"	echo "."	;;    stop)	echo -n "Shutting down tomcat services:" 	/opt/tomcat/bin/catalina.sh daemon_stop	echo -n " tomcat"	echo "."	;;    restart)	$0 stop	/bin/sleep 10	$0 start	;;	    *)        echo "Usage: /etc/init.d/tomcat {start|stop|restart}"        exit 1esacexit 0


    Diese Skript kann z.B. im Verzeichnis

    Code
    /opt/etc/init.d

    unter dem Namen tomcat.sh gespeichert und ausführbar gemacht werden. Es prüft, ob die notwendigen Dateien für Tomcat vorhanden sind, kopiert die Lizenzdatei /opt/java/.1.6.0_10-ea-b39 nochmal neu in das /opt/java/lib/arm-Verzeichnis und startet dann den Tomcat über den daemon_mgr.


    Damit das Skript jetzt auch beim Hochfahren ausgeführt wird noch einen Symlink setzten:


    Code
    ln -s /opt/etc/init.d/tomcat.sh /etc/rcS.d/S81tomcat


    Die Dateien in rcS.d sind Symlinks auf die verschiedenen init-Skripte der Anwendungen und werden beim Booten in der Reihenfolge S01, S02, ... aus der Datei /etc/inittab mit dem Parameter "start" ausgeführt. S-Skripte sind Start-Skripte, K-Skripte sind Shutdown (Kill-) Skripte.


    Ich habe bei mir S81tomcat gewählt, da damit sichergestellt ist, dass Tomcat NACH MySQL gestartet wird, damit ggf. Datenbanverbindungen von den Tomcat-Anwendungen verwendet werden können.


    Viel Spaß,


    Jan

  • Danke für die tolle Anleitung,


    aber leider funktioniert die bei mir nicht. Vielleicht kann mir ja jemand helfen.


    Was bisher geschah:
    ich hab die Java 6 embedded Version für ARM5 heruntergeladen.
    Diese habe ich auf meinen rechner mittels 7zip entpakt, auch die .tar Datei. somit hatte ich einen Order den ich jre genannt habe.
    in diesem jre Ordner befindet sich der bin und der lib Ordner und drei Files COPYRIGHT, README und THIRDPARTYLICEN....txt.
    diesen jre ornder habe ich mittels WinSCP auf das Serververzeichnis /mnt/ext/usr/local/jre verschoben.
    Im /etc/profile habe ich die Tags wie oben beschrieben geändert.
    export JAVA_HOME=/mnt/ext/usr/local/jre
    export PATH=$PATH:$JAVA_HOME/bin


    hier habe ich auch mal /user/local/jre probiert jedoch selbes ergebnis


    Mittels Putty wollte ich das ganze dann testen.
    also als admin am Server eingeloggt wenn ich jedoch den befehl "java -version" eingebe bekomme ich:
    "-sh: /mnt/ext/usr/local/jre/bin/java: Permission denied"
    wenn ich einen Java File übersetzen möchte mittels javac schreibt mir dieser Befehl nicht erkannt.


    hab das ganze auch schon mal mit der java Version 1.7 Probiert jedoch selbes ergebnis.


    Ach ja noch zur Hardware, Ich hab eine Qnap TS-419P+


    Vielleicht kann mir ja jemand helfen.
    danke schon mal vorab.

  • Hast du mittlerweile eine Lösung ?


    Habe eine TS 219 P II und das selbe Problem !
    Bekomme auch die Meldung wenn ich probiere die Version abzufragen.
    Ist es egal in welchem Verzeichniss die Java Dateien liegen ?

  • Zitat von "IamDonaldDuck"

    ...
    also als admin am Server eingeloggt wenn ich jedoch den befehl "java -version" eingebe bekomme ich:
    "-sh: /mnt/ext/usr/local/jre/bin/java: Permission denied"


    Wie sind denn die Berechtigungen von java und javac gesetzt?


    ls -l /mnt/ext/usr/local/jre/bin


    Sollte ungefähr so aussehen:


    -rwxr-xr-x 1 admin administ ....... java


    Wenn für java dort z.B. das x bei rwxr-xr-x fehlt, kannst du java nicht ausführen -> Permission denied


    dann:


    chmod 755 /mnt/ext/usr/local/jre/bin/java


    eingeben und nochmal testen.


    Jan

  • Hallo zusammen,


    nach der Installation von JRE und Tomcat auf meiner QNAP TS-259 Pro+ hat die folgende Ergänzung in der "apache.conf" auf Anhieb funktioniert:


    Code
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    ProxyPass /examples ajp://mynas:8009/examples
    ProxyPassReverse /examples ajp://mynas:8009/examples
  • Java an sich läuft.


    Habe ein Verzeichniss in einem Freigabeordner angelegt in dem die Javadateien liegen.
    Wenn ich unter /etc in der Datei Profiles die beiden Zeilen:


    Code
    export JAVA_HOME=/share/HDA_DATA/Verzeichniss/java
    export PATH=$PATH:$JAVA_HOME/bin


    so angepasst habe läuft Java. Abgespeichert ist profile mit :wq
    Nach einem Neustart der TS219 sind die beiden Zeilen jedoch weg, schreibe ich sie wieder rein läuft Java wieder :shock:
    Woran könnte das liegen ?

    Einmal editiert, zuletzt von GorillaBD () aus folgendem Grund: Code Block hinzugefügt! Siehe Forenregeln.

  • Für Java empfehle ich das Tutorial. Scheint zu klappen, zumindest zeigt er mir an das eine Java-Version läuft.


    http://minimserver.com/install-qnap.html


    Zum Tomcat..an dem verzweifle ich etwas, habe alles so gemacht wie angegeben. Tomcat 6 und 7 ausprobiert. Keine Ahnung an was es liegt. Ich werde es morgen weiter probieren.
    Aber vielleicht sieht ja jemand zufällig was?



    Router-Einstellungen, ports geöffnet.


    Java überprüft


    Order, am richtigen Platz.


    Nach diesem Schritt sollte es eigentlich funktionieren?




    btw mein erster Post hier, hi!

  • Hallo,


    super Anleitung, vielen Dank. Auf meiner TS-109 Pro musste ich noch folgende Änderung vornehmen:


    Code
    >chmod ugo+x $CATALINA_HOME/bin/*.sh


    viele Grüße

    Einmal editiert, zuletzt von GorillaBD () aus folgendem Grund: Code Block hinzugefügt! Siehe Forenregeln.

  • Hallo,


    noch eine Ergänzung: beim Starten über den daemon_mgr kann der tomcat-juli.jar nicht geladen werden, im catalina.out steht z.B. :

    Code
    Can't load log handler "1catalina.org.apache.juli.FileHandler" (....)


    Der Grund ist, dass der LOGGING_MANAGER nicht angegeben ist. Ich habe die entsprechende Zeile wie folgt angepasst:


    vorher:

    Code
    /sbin/daemon_mgr java start " "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \


    nacher:

    Code
    /sbin/daemon_mgr java start " "$_RUNJAVA" "$LOGGING_CONFIG" [b]$LOGGING_MANAGER[/b] $JAVA_OPTS $CATALINA_OPTS \



    viele Grüße

    Einmal editiert, zuletzt von GorillaBD () aus folgendem Grund: Code Block hinzugefügt! Siehe Forenregeln.