Compiler-Einstellungen für Cross-Compile in Docker-Container

Für Fragen von Einsteigern und Programmieranfängern...
GU_Meyer
Beiträge: 66
Registriert: Mo 21. Apr 2014, 10:22

Re: Compiler-Einstellungen für Cross-Compile in Docker-Container

Beitrag von GU_Meyer »

six1 hat geschrieben:
Mo 29. Jan 2024, 10:01
Ok, also eine sichere Umgebung durchlöchern... :D das macht keinen Sinn. Es spielt ja auch erst mal keine Rolle, wo die Daten schlußendlich liegen.
Er würde durch Weiterleitung von Ports über die fritzbox auf eine Sandbox, welche dafür durchlöchert wird, die DB letztendlich doch online stellen. Das ist erst mal kein guter Plan :)
Neee. Da gibt es bei mir eine saubere Trennung. Eine Fritzbox stellt bei mir neben den eigentlichen Aufgaben noch eine "Schnittstelle" für ein Raspberry Pi ins Internet zur Verfügung. Aber auf dem RPi liegen nur die Daten, die für die da gehostete Homepage relevant sind. Und auch die da liegende DB ist entsprechend abgesichert. Es sind nur die für eine effiziente Verwaltung der Homepage erforderlichen Ports offen bzw. weitergeleitet (die Ports für einen direkten Zugriff auf die DB gehören nicht dazu). Und ich verwende für den Zugriff immer nur SSL.

GU_Meyer
Beiträge: 66
Registriert: Mo 21. Apr 2014, 10:22

Re: Compiler-Einstellungen für Cross-Compile in Docker-Container

Beitrag von GU_Meyer »

MmVisual hat geschrieben:
So 28. Jan 2024, 23:27
Ich habe für eine Synology Discstation bereits ein Lazarus Projekt am laufen. Es ist eigentlich supereinfach.
Oh, das liest sich nach einer machbaren Lösung - sowas habe ich gehofft.
MmVisual hat geschrieben:
So 28. Jan 2024, 23:27
Wenn man Windows ha braucht man:
- Einen virtuellen Computer, z.B. VBox
- Installiert da ein Linux drauf (z.B. Linux Mint, da das Mint zu Windows relativ ähnlich von der Oberfläche aus ist)
Hmm...ich habe "Lazarus_cross " unter Windows, das dürfte diesem:
MmVisual hat geschrieben:
So 28. Jan 2024, 23:27
Wenn man bereits Linux nutzt kann man ab hier weiter machen:
- Lazarus für Linux per FpcUpDeluxe installieren.
entsprechen (ich müsste den Link mal suchen - schließlich nutze ich das für meine Entwicklungen für den Raspberry Pi.
MmVisual hat geschrieben:
So 28. Jan 2024, 23:27
Damit kann man die eigene EXE schon mal für Linux übersetzen.
Wie gesagt, für Raspberry Pi ist das kein Problem - da setze ich als Ziel-OS "Linux" und als Zielprozessor "ARM" und der Compiler läuft. Aber wenn ich als Prozessor "Intel" nehme, fehlt Lazarus eine Konfigurationsdatei. Vielleicht muss ich mir nochmal eine "-cross"-Version konfigurieren, die auch für diesen Prozessor alles hat?
MmVisual hat geschrieben:
So 28. Jan 2024, 23:27
Vorraussetzung ist natürlich dass die EXE keine GUI hat sondern ein reines Konsole Programm sein muss, denn weder unter der Discstation noch in Docker hat man ein Grafikbildschirm. Ich gehe mal davon aus, dass es dir schon im Vorneherein klar ist.
Das ist mir bewusst - wie gesagt, für Raspberry Pi hab ich das shcon mal gemacht. Außerdem sagt das einem ja auch der Menschenverstand. :wink:
MmVisual hat geschrieben:
So 28. Jan 2024, 23:27
Dann einfach die EXE unter Linux übersetzen, auf die Discstation kopieren. Auf die Discstation kann man per SSH (z.B. mit PUTTY) zugreifen, die EXE ausführbar machen und starten. Und wenn man möchte dass die EXE zum Start vom OS mit ausgeführt wird muss man die z.B, im Aufgabenplaner mit einstellen.

Meine EXE läuft auf der Discstation von Synology, die macht jeden Tag ein Backup der Datenbank und beendet sich wieder.

Hier habe ich eine Anleitung wie das mit meiner EXE geht, vielleicht kannst du dir davon was für dich abschauen:
http://elela.de/Hilfe/Index.php?url=Tut ... Backup.htm

Wie ich es machen würde, bzw. meine Lösung die bereits funktioniert:
Die eigene Datenbank kann man problemlos in einem Docker Container laufen lassen (laden, prarmetrieren, starten, läuft), die eigene EXE würde ich direkt auf der DS laufen lassen und den Docker würde ich nicht ändern. Damit hat die eigene EXE über TCP/IP den Datenbank Zugriff (Discstation > TCP/IP > DockerContainer) und weil die auf der DS direkt läuft hat die den Zugriff auf Volume1 um da hin das Backup ab zu legen.

PS: Vergesse nicht die Firewall zu parametrieren, sonst klappt der externe Zugriff nicht.
Das muss ich mir noch mal genauer angucken und drü ber nachdenken. Aber dieser Ansatz gefüllt mir. Allerdings:
MmVisual hat geschrieben:
So 28. Jan 2024, 23:27
Falls du die Datei "libmysqlclient.so.18.0.0" auf der DS nicht findest, kann ich dir diese per Mail schicken, diese Client SO wird benötigt.
wäre das schön. Vielleicht kannst du mir zusätzlich nen Tipp geben, in welchem Verzeichnis ich dise suchen muss?
MmVisual hat geschrieben:
So 28. Jan 2024, 23:27
Info:
Liste der Discstations und deren eingebaute Prozessoren. Wer mit Lazarus experimente machen möchte sollte unbedingt eine DS mit Intel/AMD Prozessor kaufen und nicht mit ARM/Realtec/Marvell, damit man es einfacher hat.
https://kb.synology.com/de-de/DSM/tutor ... x20-series
Ich glaub, diese Liste hatte ich auch gefunden, denn das mein NAS nen Intel Celeron hat, wusste ich schon.
MmVisual hat geschrieben:
So 28. Jan 2024, 23:27
Tipp wer mit seiner Syno DS "spielen" möchte:
Als Paketquelle sollte man die "synocommunity" (http://packages.synocommunity.com/) mit hinzufügen, damit bekommt man viele extra Tools die man dazu installieren kann.
Dann kann man das Paket "SynoCli File Tools" installieren. Damit hat man unter Putty z.B. den "mc" und besseren Editor (nano) zur Verfügung. Der "mc" macht das Arbeiten mit PUTTY deutlich einfacher, vor allem für Leute die eher aus der Windows Welt kommen.
Das ist ein guter Tipp! Den MC liebe ich (ich hatte shcon mal gesucht, aber nicht gefunden) - hab ich noch unter DOS in den (Volkov-)-Commander "verliebt" und bin dann unter Windows dem "Total-Commander (bzw. Windows-Commander wie er früher mal hieß) treu geblieben.

Vielen Dank - ich muss das jetzt alles erstmal sortieren, neu durchdenken und ggf. auch mein gesamtes Konzept nochmal neu strukturieren. Aber dafür ist es ja Hobby - da muss nix gestern fertig sein.

Gruss
GU_Meyer

MmVisual
Beiträge: 1470
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Compiler-Einstellungen für Cross-Compile in Docker-Container

Beitrag von MmVisual »

Hmm...ich habe "Lazarus_cross " unter Windows
Ich mag "Cross" nicht, weil eine EXE die da raus kommt kann man nie testen. Daher lieber ein VBox mit Linux aufsetzen. Dann kann man da drin übersetzen und die EXE testen. Sonst kopiert man die auf das Zielsystem und kann nicht debuggen.

Die Datei "libmysqlclient.so.18.0.0" kopiere ich einfach in den gleichen Ordner wie meine EXE ist. Als Datenbank Komponente verwende ich ZEOS. Bei TZConnection.LibraryLocation kann ich dann gezielt den Pfad / Deteiname der "libmysqlclient.so.18.0.0" angeben und es läuft. Damit bin ich dann unabhängig vom Installationsstand vom restlichen Linux.

Auf der DiscStation kann man "MariaDB10" installieren, eine .so Datei sollte dann im Ordner:
/volume1/@appstore/MariaDB10/lib

Auf der DiscStation kann man "MariaDB5" installieren, eine .so Datei sollte dann im Ordner:
/volume1/@appstore/MariaDB/lib
MariaDB5 geht, glaub ich, nur bis zu DS Version 6.4, ab V7 gibt es das Paket nicht mehr. Die Datei "libmysqlclient.so.18.0.0" habe ich mir aus der DS Installation von V6.4 gleich mal gesichert und die geht auch mit MariaDB10.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6217
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: Compiler-Einstellungen für Cross-Compile in Docker-Container

Beitrag von af0815 »

MmVisual hat geschrieben:
Mo 29. Jan 2024, 19:46
Hmm...ich habe "Lazarus_cross " unter Windows
Ich mag "Cross" nicht, weil eine EXE die da raus kommt kann man nie testen. Daher lieber ein VBox mit Linux aufsetzen. Dann kann man da drin übersetzen und die EXE testen. Sonst kopiert man die auf das Zielsystem und kann nicht debuggen.
Ist nicht richtig, nur viel mehr Aufwand. Ich habe für eine TS212 von QNap (mit ARM V5) sehr wohl ein Programm schreiben können unter Linux und das gleich mit scp auf die QNap kopiert und dort mit dem remote GDB debuggen können, etwas zäh manchmal wegen dem Prozessor und der remote Verbindung. Ist zeitauswendig, braucht entsprechedes Wissen ist aber machbar.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

GU_Meyer
Beiträge: 66
Registriert: Mo 21. Apr 2014, 10:22

Re: Compiler-Einstellungen für Cross-Compile in Docker-Container

Beitrag von GU_Meyer »

MmVisual hat geschrieben:
Mo 29. Jan 2024, 19:46
Hmm...ich habe "Lazarus_cross " unter Windows
Ich mag "Cross" nicht, weil eine EXE die da raus kommt kann man nie testen. Daher lieber ein VBox mit Linux aufsetzen. Dann kann man da drin übersetzen und die EXE testen. Sonst kopiert man die auf das Zielsystem und kann nicht debuggen.
Bei meinem Raspberry Pi-Projekt habe ich das auch etwas anders gemacht. Da ging es um ein CGI für eine Website, also Eingabe über String und Ausgabe auch als String. Also habe ich den Serverteil von der eigentlichen Funktionalität getrennt und für die Vorverarbeitung des "Parameterstring"s bzw. die Erzeugung des Ausgabestrings eine "Schnittstellen-Unit" geschrieben. Diese, und zwar ausschließlich wird vom Serverteil eingebunden. Weiterhin habe ich mir eine Art "Oberfläche" für die Erhzeugung der Parameter sowie die Darstellung der Ausgabe erstellt und zwar als separates Projekt. Diese Oberfläche bindet ebenfalls die Schnittstellen-Unit ein. Nun kann ich im "Server"-Projekt als Ausgabe die Linux-Version festlegen und im "Oberflächen"Projekt als Ausgabe Windows. Ein paar Feinheiten, wie z.B. das Handling von Verzeichnis-Trennern oder CR/LF lassen sich über Konstanten und bedingte Compilierung abwickeln.
So kann ich die eigentliche Funktionalität unter Windows debuggen. Und erst, wenn jeweils genug Funktion vorhanden ist, wird wieder eine Linux-Version compiliert und auf das Zielsystem kopiert. (Anpassung der Rechte und Ausführung gehören dann natürlich auch noch dazu).
MmVisual hat geschrieben:
Mo 29. Jan 2024, 19:46
Die Datei "libmysqlclient.so.18.0.0" kopiere ich einfach in den gleichen Ordner wie meine EXE ist. Als Datenbank Komponente verwende ich ZEOS. Bei TZConnection.LibraryLocation kann ich dann gezielt den Pfad / Deteiname der "libmysqlclient.so.18.0.0" angeben und es läuft. Damit bin ich dann unabhängig vom Installationsstand vom restlichen Linux.

Auf der DiscStation kann man "MariaDB10" installieren, eine .so Datei sollte dann im Ordner:
/volume1/@appstore/MariaDB10/lib

Auf der DiscStation kann man "MariaDB5" installieren, eine .so Datei sollte dann im Ordner:
/volume1/@appstore/MariaDB/lib
MariaDB5 geht, glaub ich, nur bis zu DS Version 6.4, ab V7 gibt es das Paket nicht mehr. Die Datei "libmysqlclient.so.18.0.0" habe ich mir aus der DS Installation von V6.4 gleich mal gesichert und die geht auch mit MariaDB10.
Da muss ich mal gründlich suchen. Vielen Dank.

Gruss
GU_Meyer

GU_Meyer
Beiträge: 66
Registriert: Mo 21. Apr 2014, 10:22

Re: Compiler-Einstellungen für Cross-Compile in Docker-Container

Beitrag von GU_Meyer »

Vielen Dank erstmal für die vielen "Nachdenker"! Wie ich in fast allen meinen Antworten schon geschrieben habe, muss ich die ganzen Hinweise und Tipps erstmal "verarbeiten".
Ich habe nun beschlossen, erstmal die reine Funktionalität (die sich in den letzten Tagen noch erweitert hat, da der Wunsch hinzugekommen ist, die Rezepte in Form eines "Redaktionssystems" bearbeiten zu können) zu implementieren. Und um diese zu testen, verwende ich vorerst meine vorhandene Infrastruktur auf der Raspberry Pi. Hier muss ich zwar auch noch diverse Sachen lernen und konfigurieren, aber das Hauptaugenmerk kann auf der eigentlichen Aufgabenstellung liegen.
Und erst wenn eine Grundfunktionalität geschaffen ist, werde ich diese in, wie auch immer, geeigneter Form in einen Docker-Container "gießen". Dann hat sich sicherlich auch die Frage nach der zu verwendenden Datenbank sowie dem erforderlichen Ort beantwortet.
Von daher betrachte ich das Thema hier erstmal abgeschlossen. Vielen Dank.

Gruss
GU_Meyer

Antworten