Java Programm auf Raspberry Pi server

Hallo
Ich möchte einen Server erstellen, der 24/7 läuft und für ein Programm von mir Dateien aktualisiert, dazu habe ich meinen Raspberry Pi verwendet, da er ständig laufen kann. Mit BerryBoot habe ich das Betriebssystem BerryWebserver aufgespielt, das auch wunderbar funktionierte(nur war es nur innerhalb meines Netzwerkes erreichbar, was nicht gut ist, aber das ist eine andere Sache). Darauf habe ich nun Dateien mit einem FTP-Programm draufgemacht, eine index.html und ein Java Programm, sowie den “bin”-Ordner, meines Javaverzeichnisses, da ist ja auch die java.exe drin(ich weiß, das ist vielleicht etwas leichtgläubig, man könne auf einem Server so etwas mit java.exe starten, aber dafür ist dieser Thread ja da). Dies ist das Programm, das die index.html umschreibt, sodass ich überprüfen kann, ob es funktioniert:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Main {

	public static void main(String[] args){
		new Main();
	}

	private boolean closed = false;
	private int durchläufe = 1;
	
	public Main(){
		while(!closed ){
			try {
				StringBuilder sb = new StringBuilder();
				sb.append("<html><head><title>Hallo</title></head><body>");
				for(int i = 0; i < durchläufe; i++){
					sb.append("Hallo");
					sb.append(System.lineSeparator());
				}
				sb.append("</body></html>");
				BufferedWriter bw = new BufferedWriter(new FileWriter(new File(Main.class.getResource("index.html").getFile()), true));
				bw.write(sb.toString());
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			durchläufe++;
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

Ich möchte nun dieses Programm zum laufen bringen(Der Server hat auch eine Konsole, damit kenn ich mich aber überhaupt nicht aus)

jetzt mal ganz blöd gefragt - schonmal kompilieren und ausführen probiert?..

Nebenbei: Body, Head, Title benötigst du gar nicht!

Von der Sache her könntest du deine Anwendung bestimmt verwenden, um Webseiten zu generieren. Stichwort: CGI.
Eine Java-Anwendung als CGI-Anwendung einzusetzen, erscheint mir nicht so sinnvoll, da Java seine Stärken (Optimierung zur Laufzeit) nicht ausspielen kann und die Nachteile des langsamen Starts zum Tragen kommen.
Um das zum Laufen zu bekommen, benötigst du übrigens noch einen Webserver wie Apache, nginx oder lighttpd.

Besser wäre es, eine einfache Servletanwendung zu schreiben und diese in einem Tomcat oder Jetty zu deployen. Vom Quellcode wird das nicht viel länger als das, was du oben schon hast.

Ich muss leider die böse Frage stellen, und entschuldige mich schon mal vorher falls du dich angegriffen fühlen solltest, aber : Weist du überhaupt wovon du sprichst ? Es macht mir nämlich nicht so den Eindruck als wüsstest du wie man mit einem Remote-Linux normalerweise umgeht. Da ist ein RasPi zum lernen erstmal diegenau richtige Wahl bevor du dich an größeres oder gar an etwas aus dem Netz erreichbares machst.
Viele lassen auf ihrem RasPi eine spezielle Debian-Variante laufen : Raspbian
Mach dich damit (bzw. mit der Grundlage Debian selbst) erstmal vertraut, zieh dass dann auf den RasPi (dürfte recht einfach sein) und du kannst loslegen.
Klar sind wir gern bereit dir hier und da zu helfen, aber wie auch in der Java-Programmierung gilt : Die Grundlagen musst du selbst lernen.

Download → Downloads – Oracle VM VirtualBox
Download → https://wiki.ubuntuusers.de/Downloads/Trusty_Tahr (ich empfehle Xubuntu oder Lubuntu, frisst in der VM weniger Speicher)
Üben → Bash › Wiki › ubuntuusers.de / Bash scripting Tutorial / BashFAQ - Greg’s Wiki

Java.exe ist die Windows-Version, die wird unter Linux nicht laufen (max. mit Wine). Dann kommt erschwerend hinzu das der RPI einen ARM-Prozessor hat, selbst ein Linux-Binary wird da nicht laufen. Du benötigst schon mal ARM-Binarys, wobei ich nicht weis ob das einfach so funktionieren wird. http://www.oracle.com/technetwork/java/javase/downloads/index.html

Du wirst das OpenJDK installieren drüfen - apt-get › apt › Wiki › ubuntuusers.de

Also ich lasse auf meinem Raspberry sogar Spring-Boot Anwendungen laufen. Ist der Hammer :slight_smile: Der Start einer Java Anwendung ist generell etwas Bescheiden, aber sonst läuft es echt super. :slight_smile: Fix nen RestFull Controller geschrieben oder worauf man immer Bock hat… Für die Datenbank muss ne H2 herhalten. Läuft prima :slight_smile:

viele Grüße
Steven

*** Edit ***

Einfach Java auf dem Raspberry installieren. Du wirst um die Konsolenzugriffe nicht drum herum kommen.
Raspberry Pi Blog: Installing Oracle JDK 8 on Raspberry Pi

Das mit der Konsole funktioniert nicht richtig, beispielsweise habe ich mal dieses apt-get [QUOTE=mogel]https://wiki.ubuntuusers.de/apt/apt-get?redirect=no[/QUOTE], aber er macht nichts und gibt -sh: apt-get: not found aus (wie gesagt ich kenn mich mit dieser Art Konsole nicht aus, aber das kann ja nichts gutes bedeuten).

[quote=cmrudolph;118435]benötigst du übrigens noch einen Webserver wie Apache, nginx oder lighttpd.[/quote] dieses Server Programm basiert auf lighttpd, das steht dabei.

Und zu Sen-Mithrarin: Du hast recht ich kenn mich damit wirklich nicht aus und dieses Raspbian hatte ich schon mal drauf, aber das hat auf mich eher wie ein “Desktopbetriebsystem” so ähnlich wie Windows gewirkt und hat keine Ähnlichkeit mit dem konsolenbasierten BerryWebserver.

Ich hab jetzt mal mithilfe dies Links von StevenHachel versucht, Java zu installieren, aber diese ganzen Befehle mit sudo funktionieren nicht(-sh: sudo: not found), außerdem weiß ich nicht, wohin auf der Pi SD Karte ich die gz-Datei packen soll, und wie ich dann von der Serverkonsole aus ich darauf zugreifen kann, da ich ja nicht weiß in welchem Verzeichnis sich die Konsole befindet.

Die Empfehlung lautet eigentlich klar und deutlich:

  • Installiere dir Raspbian auf deinem Raspberry PI


Raspbian ist ein auf den Raspberry PI angepasstes Debian Linux. Damit gibt es die wenigsten Schwierigkeiten.
Ubuntu und Debian sind sich sehr ähnlich.
Das sind so die verbreitetsten Vertreter und dadurch finden sich hier die meisten Informationen/Tutorials/Hilfen.
Damit kann man dann auch so gut wie alles machen.

BerryWebserver ist eine wohl sehr abgespeckte Speziallösung und wenn es nicht nur das machen soll, was es macht, dann wird es wohl sehr schwierig.

Und mit einem Raspbian funktionieren auch die Links die dir genannt wurden.

Raspbian lässt sich auch Headless starten, ohne Tastatur Maus Monitor und über ssh über einen anderen Rechner bedienen.
Oder man startet ohne grafische Oberfläche. Dann kann man sich auch im Terminal austoben und hat ein wenig mehr Ressourcen zur Verfügung.

@TO
Das Raspbian normalerweise im Runlevel 5 läuft ist mir bewusst, aber für das was du willst dürfte es auch Runlevel 3 tun.
Das die von dir genutzte “Distribution” Standard-Kommandos wie sudo nicht unterstützt oder keinen Paketmanager wie Aptitude oder Zypper dabei hat zeigt dass es für das was du vorhast ungeeignet ist.
Mach dich grundsätzlich erstmal mit Linux an sich vertraut und guck dir an was SSH ist (wäre im Runlevel 3 die bevorzugte Methode um “von außen” auf dem Raspi zu arbeiten, also nicht lokal).

Wenn man halt mit Windows aufgewachsen ist und sich noch nie wirklich mit Linux befasst hat ist ein Raspi wie gesagt schon mal ein guter Einstieg, aber man sollte dann doch eher Abstand von solchen spezialisierten Tweaks nehmen und sich halt erstmal mit einem “vollwertigen” Linux z.B. in einer VM vertraut machen. Welche Distribution man wählt ist eigentlich ziemlich egal, aber es macht schon Sinn mit einer aus der Familie anzufangen mit der man später auch arbeiten will.

Kann mich den beiden Vorrednern nur anschliessen. Investiere die Zeit zum ausprobieren um wenigsten ein Grundverständnis dafür zu bekommen. Ich bin auch ein Windowskind und mit Linux zu arbeiten macht schon Spaß und würde dir die Arbeit und dein Vorhaben wesentlich vereinfachen. So schwer ist das eigtl. nicht. :slight_smile:

Und um von Windows auf deinen Raspberry zuzugreifen, nutze einfach dieses Tool "mobaxterm"hier. Ist echt super! Vergiss Putty und Co. Das ist Oldscool und für dich evtl. zuviel fummelei. :slight_smile:

@StevenHachel
Hab mir mobaxterm mal angesehen. Naja, hat sicher seine Vorzüge, gerade wenn man mal bedenkt wie ur-alt das letzte Update für Putty ist, aber als “einfacher” SSH-Client doch etwas overblown, da tuts auch heute immer noch Putty.

Jau, ist n mächtiges Tool… Das coole daran ist aber, dass du dann, nachdem du dich per SSH eingewählt hast, man kann auch Profile erstellen und das Passwort wird gleich gespeichert… heisst, du musst nächstes Mal nicht wieder die Einlogprozedur wiederholen, per integriertem FTP Viewer durch die Verzeichnisse gehen kannst, ohne umständlich per Commandozeile zu navigieren. Du kannst über diesen FTP Viewer halt alles machen, sei es Dateien vom Desktop in deinen Raspberry schieben, löschen oder was auch immer. Das müsstest du sonst alles mit Putty und die dir bekannten Befehle machen. Das enfällt damit.

War ja nur n Vorschlag. Was besseres gibs für Windows leider nicht :slight_smile: Ist auch n guter CMD ersatz. :slight_smile: Bei der Vollversiion jedenfalls.

viele Grüße
Steven

Falscher Ansatz. Wenn man Autologin mit SSH möchte, dann bitte per Zertifikat. Ggf. mit Passphrase und einem Agenten, der für die Authentifizierung verwendet wird (wie bspw. pageant aus der PuTTY-Suite).

Mein „Toolset“ besteht aus PuTTY und FileZilla. PuTTY kann alles, was man über SSH braucht, inkl. X11 forwarding. Für einen komfortableren Dateiaustausch ist FileZilla die richtige Wahl.

SSH-Login mit Kennwort ? OUCH!
Grundsätzlich nur mit key-files, und diese zur Sicherheit mit Passphrase verschlüsselt > ei Kennwort muss ich so zwar immer noch eingeben, jedoch nur jenes für den Key, nicht für den Login.
Und für Datenaustausch nutze ich WinSCP (was übrigens, wenn im System vorhanden, Putty als “Terminal” mit einbindet; also quasi genau andersrum). Braucht zwar durch den SSH-Tunnel etwas mehr overhead als plain FTP, aber dafür läuft dann alles über eine einzige Tunnel-Verbindung.

Ok, ich habe jetzt Java installiert und es funktioniert auch, nur, dass er meine Programme nicht startet:

pi@raspberrypi ~ $ java /home/pi/test
Error: Could not find or load main class .home.pi.test

Die Klasse test ist auf jedenfall vorhanden, die habe ich nämlich direkt auf dem Raspberry kompiliert
Auf dem PC, mit der java.exe aus dem jre1.8.0_45 Ordner gehts.

auf PC auch mit /home oder Windows? :wink:
zu ClassPath Kenntnisse?
ist home ein package-Name oder User-Verzeichnis?

Klassennamen übrigens besser groß

welcher javac-Befehl hat funktioniert?

der klassische Weg dürfte nach wie vor sein, für den Fall dass es die Klasse test im package pi ist,
ins Grundverzeichnis zu wechseln, dort wo das Verzeichnis pi liegt, und dort
java pi.test aufzurufen,
vielleicht java pi/test falls es Grund zur Annahme gibt, dass dies sinnvoll sein könnte,
ein / am Anfang sieht dabei aber besonders komisch aus,
Test aller Varianten schadet freilich nicht

hinsichtlich ClassPath kann es helfen java -cp . pi.test zu schreiben, bzw. in anderen Varianten das -cp . hinter ‚java‘ einzufügen

Die Klasse hat gar kein Package, das ist nur die Pfadangabe, wo die Klasse im Dateisystem liegt. Ich habe mich jetzt mit cd in dieses Verzeichnis navigiert und dann hat’s funktioniert.

Ich will doch nur, dass er es einfach hat… Falscher Ansatz hin und her… darum gehts ja nicht in diesem Thread :slight_smile:

Ich hab beide Programme mal ausprobiert und ich muss sagen, die sind beide ganz gut, nur dass ich bei MobaXterm auch einen Dateimanager des Servers und vieles weitere habe(unter anderem auch Autologin, ich weiß nicht ob Putty das auch kann, es ist mir ein bisschen unübersichtlich).