Remote - Entwicklung

Für Fragen rund um die Ide und zum Debugger
mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Remote - Entwicklung

Beitrag von mschnell »

Szenario:
Man möchte an einem Windows oder Linux PC sitzen und entwickeln, die zu entwickelnde Software soll auf einem ARM-Linux System laufen. Man möchte natürlich komfortabel die IDE mit dem Debugger nutzen. Also Remote-Debugging verwenden. Die Verbindung zwischen dem PC und dem Ziel-System ist mit TCP/IP aufgebaut.

Nun gibt es mehrere "Ebenen" (Schichten) an denen der Übergang zwischen den IDE-Teilen realisiert werden kann:

1) Remote-GDB:

Bei GDB kann anstelle des normalen Programms auch die Remote-Version verwendet werden. Die Verbindung der Teile kann über TCP/IP oder über serielle Schnittstelle aufgebaut werden. Dabei läuft ein Teil auf dem PC und der andere Teil (extrem Ressourcen-schonend) auf dem Ziel-System. Da die API identisch ist, merkt die IDE nicht viel davon, dass das Ziel-Programm nicht lokal ist.
Ich habe vor einigen Jahren versucht, so ein System (mit LINUX-PC) aufzubauen, bin aber beim Bau der beiden GDB-Teile, die zwingend auf einander angepasst sein müssen(beide müssen die Ziel-Architektur kennen), aber beim linken unterschiedliche Libraries verwenden (PC- und ARM- Architektur), gescheitert.


2) GDB komplett auf dem Ziel-System:

Der Code der IDE enthält einen Abschnitt, der es prinzipiell erlaubt, den Zugriff auf den GDB über SSH statt über einen lokalen Byte-Strom abzuwickeln. Dieser Abschnitt ist aber auskommentiert und funktioniert nicht, wenn man ihn aktiviert. Vermutlich ist es nur ein erster Versuch einer Implementierung. Ich habe nicht versucht, das zu debuggen.


3) Remote-GUI für die IDE:

In MSE kann man die GUI eines FPC-Programms über Netzwerk (oder auch serielle Schnittstelle) "Remote" betreiben, indem ein weiteres Programm, das beim User läuft, die Widgets zeigt, während das "Worker"-Programm den User-Code ausführt. Theoretisch könnte man die IDE auf diese Weise bauen. Diese Methode wäre natürlich auch gut geeignet, dem User-Programm eine Remote-GUI zu geben. Im Lazarus-System ist das aber leider nicht vorgesehen.


4) IDE läuft auf dem Ziel-System

Die Möglichkeiten (1), (2) und (3) würden auch funktionieren, wenn auf einem "Headless" Zielsystem kein X-Server und keine GUI-Widgets etc installiert sind. Ich hatte damals ein Programm gemacht, das auf einem QNAP NAS läuft. Das NAS ist so ein "headless" Linux System und nur mit ssh-Kommando-Zeile und seinem Web-Interface erreichbar. Außerdem hatte ich eigene Netzwerk-"Gadgets" im Kopf, die billig sein sollten und deshalb für X-Server, GUI-Widgets etc nicht genügend Ressourcen haben.

Heute ist aber mit RASPi, BeagleBone und ähnlichen Devices sehr preiswerte und kleine Harwdare verfügbar, die eine eigene GUI bietet. Allerdings würden solche Devices im Betrieb irgendwo in der Landschaft eingebaut, so dass ein direkter Zugriff auf die Monitor, Mouse und Keyboard-Schnittstelle nicht möglich ist.

Um eine Remote-Entwicklung "in realtime" zu machen, müsste also etwas installiert werden, das die komplette GUI des Zielsystems entsprechend weiterleitet. Mir fällt da "Remote X", VNC oder TeamViewer ein.

Hat da jemand Erfahrungen ?

-Michael

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Remote - Entwicklung

Beitrag von Warf »

Du könntest X11 forwarding über SSH versuchen, dabei wird kein X-Server auf dem Zielrechner benötigt, sondern alle Sachen die gezeichnet werden sollen, werden via ssh auf deinen X11 server gesendet (unter windows musst du dann natürlich erst mal nen X server installieren, geht aber sehr einfach).
Das ist aber verdammt langsam.

Ich hab rausgefunden das für mich das angenehmste ist, mit SSHFS die Dateien zu öffnen (SSHFS kann Ordner und Dateien von einem remote server auf deinem Rechner virtuell einbinden, alle Änderungen werden dann auf dem Zielrechner geschrieben), darin dann mit Lazarus zu arbeiten, und zum kompilieren und Debugger benutze ich dann die komandozeile über ssh (also lazbuild zum kompilieren und gdb command line interface zum Debuggen)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Remote - Entwicklung

Beitrag von mschnell »

Warf hat geschrieben:Du könntest X11 forwarding über SSH versuchen, dabei wird kein X-Server auf dem Zielrechner benötigt, sondern alle Sachen die gezeichnet werden sollen, werden via ssh auf deinen X11 server gesendet (unter windows musst du dann natürlich erst mal nen X server installieren, geht aber sehr einfach).
Das ist aber verdammt langsam.

Habe ich früher mal mit einem PC-Linux Server gemacht.
Wenn ich richtig informiert bin, ist die ursprüngliche UNIX-Implementierung von X11 genau so gewesen: ein "X-Terminal" wurde per TCP/IP mit einem "headless" Unix-Rechner verbunden. (Dabei ist das X-Terminal der TCP-Server" und der Unix-Rechner der Client, der sich beim Terminal anmeldet. . Es ist also eigentlich nicht zu erwarten dass es extrem langsam ist.

Heute gibt es auch eine Methode, wo der Ziel-Rechner der Server ist und das "Terminal"-Programm der Client.

Warf hat geschrieben:Ich hab rausgefunden das für mich das angenehmste ist, mit SSHFS die Dateien zu öffnen (SSHFS kann Ordner und Dateien von einem remote server auf deinem Rechner virtuell einbinden, alle Änderungen werden dann auf dem Zielrechner geschrieben), darin dann mit Lazarus zu arbeiten, und zum kompilieren und Debugger benutze ich dann die komandozeile über ssh (also lazbuild zum kompilieren und gdb command line interface zum Debuggen)

So ähnlich habe ich das damals gemacht. Ist aber gegenüber der "normalen" Arbeitsweise mit der Lazarus IDE sehr unkomfortabel.

Außerdem ist es sehr praktisch, dem Ziel-Programm eine GUI zu geben - und sei es nur zur Ausgabe von Status-Meldungen zur Konfiguration und zum Triggern von Tests.

-Michael
Zuletzt geändert von mschnell am Do 16. Mai 2019, 11:44, insgesamt 2-mal geändert.

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Remote - Entwicklung

Beitrag von Warf »

Wenn ich richtig informiert bin, ist die ursprüngliche UNIX-Implementierung von X11 genau so gewesen: ein "X-Terminal" wurde per ICP/IP mit einem "headless" Unix-Rechner verunden. (Dabei ist das XC-Terminal der TCPIP-Server" und der Unix-Rechner der Client, der sich beim Terminal anmeldet. . Es ist also eigentlich nicht zu erwarten dass es extrem langsam ist.

Heute gibt es auch eine Methode, wo der Ziel-Rechner der Server ist und das "Terminal"-Programm der Client.


Genau, der X-Server ist ein richtiger server auf den man via TCP/IP oder lokale dateisystemsockets verbinden kann. SSH wiederum kann als eine art VPN dienen, und tunnel für verbindungen zwischen den beiden Parteien sorgen. Wenn du also via ssh -X addr verbindest (und auf deinem server in der config X11Forwarding yes steht) werden alle X anwendungen die du startest, sich mit deinem lokalen X server verbinden, und es wird auf deinem bildschirm gezeichnet.

Wenn ich auf meinem Server ein Programm kompilieren will, muss ich in lazarus erst alle packages die ich benutze installieren. Über lazbuild ist das ein krampf, da verwende ich X11 forwarding um lazarus zu starten, setze die packages, kompiliere neu, und kompiliere danach das programm über die Kommandozeile via lazbuild.

Eigentlich sollte X11 forwarding auch gar nicht so langsam sein (zumindest in einem lokalen netzwerk), aber selbst bei meinem Raspberry PI im selben netz ist es richtig langsam.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Remote - Entwicklung

Beitrag von af0815 »

Hast du ein spezielles System im Sinn ?

Remote debugging Windows -> RasPi geht mit gdb. Die Lags sind halt bis zu einer Sekunde zwischen IDE und Prüfling. (Getestet vor einem Jahr). Aktuellentwickle ich am PC als Win32 Programm und wenn die App läuft, kompeliere ich die für den RasPi und sende die direkt auf den RasPi und teste dort die Feinheiten ohne GDB.

Bei wirklich komplizieretn Fällen,zB. wenn das Widgetset ärger macht, dann habe ich auf einen RasPi3+ die komplette IDE oben und arbeite mit VNC, da der RasPi auch 'Headless' ist, aber nur kein Monitor angeschlossen, X-Server ist immer aktiv und auf die maximale Auflösung eingestellt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Remote - Entwicklung

Beitrag von six1 »

kann mich da af0815 anschließen.
Habe einen RASPI-3 mit Teamviewer und voller Lazarus Installation. Dieser hat nur seinen Stromanschluss und Netzwerkkabel.
Das unter Lazarus in Windows entwickelte Projekt lade ich per Teamviewer auf den Raspi, starte Lazarus und kompiliere es dort.
Einzig bei Betriebssystem spezifischen Dingen ist es daher nötig, am RASPI zu debuggen.
Zuletzt geändert von six1 am Do 16. Mai 2019, 11:55, insgesamt 1-mal geändert.
Gruß, Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Remote - Entwicklung

Beitrag von mschnell »

Warf hat geschrieben: bei meinem Raspberry PI im selben netz ist es richtig langsam.

Soweit ich weiß läuft das Netzwerk mancher RasPIs über USB. Das ist natürlich wenig performant.
-Michael
Zuletzt geändert von mschnell am Do 16. Mai 2019, 11:52, insgesamt 1-mal geändert.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Remote - Entwicklung

Beitrag von fliegermichl »

Ich hab Lazarus direkt auf dem den Raspberry 3 per WLAN und mit TightVNC Viewer. Das geht fast so schnell wie lokal auf dem PC.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Remote - Entwicklung

Beitrag von mschnell »

af0815 hat geschrieben: dann habe ich auf einen RasPi3+ die komplette IDE oben und arbeite mit VNC,

Das ist eine der Antworten, die ich mir gewünscht hatte !
Auf einem RASP geht also VNC, um die GUI auf einem PC zu sehen.
Anscheinend geht (Netzwerk-) X11 ebenfalls.

Kandidaten für eine zukünftige Entwicklung sind (neuere Versionen von) RASPi und BeagleBone. Vermutlich geht auf beiden also sowohl VNC als auch X11.

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Remote - Entwicklung

Beitrag von mschnell »

fliegermichl hat geschrieben:Ich hab Lazarus direkt auf dem den Raspberry 3 per WLAN und mit TightVNC Viewer. Das geht fast so schnell wie lokal auf dem PC.

SUPER ! :)
-Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Remote - Entwicklung

Beitrag von af0815 »

Bei RasPian ist ein VNC pout of the Box dabei. Braucht man nur zu aktivieren.

Mittlerweile kann ich einen RasPi komplett Headless von 0 weg hochstarten. Man muss nur wissen was man tut :-)

Im neuen Image den SSH gleich mitaktivieren (einfach eine SSH Datei erstellen im Root der Bootpartition) dann Starten. Anschliessend kann man mit der RasPi konfiguration das PW ändern und dann den VNC aktivieren. Nach einem Neustart kommt man dan in den VNC und kann den Rest konfigurieren. Alles ohne jemals einen Monitor anzustecken. Wozu auch :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Remote - Entwicklung

Beitrag von kupferstecher »

Mit Windows-Bordmitteln funktioniert auch Remote-Desktop*. Auf Raspi-Seite muss man was dazuinstallieren, funktioniert aber gut.

*Edit: Das kann interessant sein, wenn auch andere drauf zugreifen können sollen.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Remote - Entwicklung

Beitrag von mschnell »

"Remote Desktop" ist doch ein proprietäres Windows -Protokoll. Hast Du einen Link, wie man das auf ARM-Linux verwendet ?
Erste Schritte gefunden. z.B -> https://www.youtube.com/watch?v=pM2EkRD7pCs

Anscheinend ist xrdp das entsprechende Programm (-> "X11 Remote DeskTop ??? ).

-> https://www.thomaschristlieb.de/auch-li ... tedesktop/ ->
apt-get install mate-core mate-desktop-environment mate-notification-daemon xrdp

Raspi_
-> https://www.datenreise.de/raspberry-pi- ... tallieren/
-> https://www.elektronik-kompendium.de/si ... 109031.htm

Anscheinend ist bei RASPi RealVNC bereits vorinstalliert.

-Michael

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Remote - Entwicklung

Beitrag von six1 »

Im eigenen Netzwerk mag VNC gehen.
Für mich ist die Teamviewer Alternative eine optimale Lösung, da man die Projektdateien schnell auf den Raspi laden kann und danach das Kompilat gleich herunterladen kann.
Ein Zugriff ist weltweit möglich, ohne dass man hierfür Aufwand hat.
Die Installation ist auf dem Raspi schnell erledigt.

Infos:
https://www.teamviewer.com/de/download/linux/

Download:
https://download.teamviewer.com/downloa ... _armhf.deb

Im privaten Umfeld ist es kostenlos... , im gewerblichen Einsatz kostet es Geld, hier muss man prüfen, was man braucht und ob es kostengünstiger geht...

Dies sind nur meine Erfahrungen über viele Jahre. Früher habe ich ebenfalls VNC oder ähnliches verwendet, jedoch ist es mit TV einfacher und in diesem Funktionsumfang schneller installiert.
Gruß, Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Remote - Entwicklung

Beitrag von af0815 »

Für mich ist VNC die besser Wahl. Der RasPi ist sowieso immer hinter einer Firewall mit VPN. Direkt ins Netz, nö, bin ja nicht wahnsinnig. Und einen RasPi harden, das tue ich mir nicht an.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten