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

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

Beitrag von GU_Meyer »

Hallo,

für ein eigentlich auch als Datenbank-Anwendung (MySQL) zu realisierendes Projekt (eine Koch- und Backrezept-Datenbank) möchte ich stattdessen einen Docker-Container auf einem Synology NAS (DS220+) erstellen. Eine grundsätzlich für mich gute Anleitung habe ich unter https://wiki.freepascal.org/Docker_Containerization schon gefunden. Allerdings stehe ich bei den Compiler-Einstellungen noch vor folgendem Problem: Der Container erhält ein Linux als OS. Aber was verwende ich denn in den Compiler-Einstellungen von Lazarus für den Ziel-Prozessor? Das NAS selbst läuft auf einem Celeron-Prozessor.
Vor allem: Wenn ich als Betriebssystem Linux angebe, möchte Lazarus von mir eine Konfigurationsdatei haben - die hab ich aber nicht. Wo kriege ich die her?

Vielen Dank schon mal für eure Hilfe.

Gruss
GU_Meyer

charlytango
Beiträge: 845
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

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

Beitrag von charlytango »

GU_Meyer hat geschrieben:
Sa 27. Jan 2024, 13:38
für ein ..... zu realisierendes Projekt
Das klingt für mich nach "zukünftig".

Ein Docker Container ist eine Instanz/Virtuelle Maschine (wie auch immer du es nennen magst) in der Programme und Prozesse isoliert ablaufen können. Im wesentlichen also ein Rumpf-Betriebssystem (eben eine bestimmte Linux-Distribution) und dein Programm samt allem was dazu nötig ist.
Ich würde nicht mit einem Container beginnen sondern die Entwicklung auf deinem Wunsch-Linux lokal starten. Meinetwegen auch auf einer lokal installierten Virtualbox-VM um überhaupt ein Gefühl dafür zu bekommen was nötig ist um mit virtuellen Maschinen zu arbeiten.
Erst wenn dein Programm (oder zumindest ein teil davon) läuft würde ich an einen Test mit Docker denken.
Damit weißt du dann zumindest dass dein Programm unter deinem Ziel-Linux läuft.

Besonders im Zusammenhang mit der Synology-NAS hast du dann auch noch einige Entscheidungen zu treffen. Soll die MySQL Datenbank im Container laufen oder in einem anderen Container oder auch auf der Syno selbst. Jede Variante hat erhebliche Auswirkungen im Routing und im Netzwerk zufolge.

Auch solltest du überlegen wie jemand auf deine Rezeptdatenbank zugreifen soll?
Zugriff auf eine GUI in einem Docker-Container bedingt irgend eine Remote-Verbindung zu diesem bestimmten Docker Container. Was die Entscheidung nötig macht ob man den Docker Container im Netzwerk bridged oder als macvlan installiert. Beides hat Vor- und Nachteile. Besonders die mcvlan-Variante kann die Docker App von Synology nicht korrekt installieren, dazu braucht man eine extra Docker Instanz mit Portainer um das alles einzustellen. (außer man kennt sich bei Docker mit Commandline aus)

Als ersten Schritt schau mal ob du eine MySQL Datenbank auf der Syno ansprechen kannst (Syno hat MariaDB 10 als App). Diese Version ist wohl jene mit den wenigsten Problemen, zumal du je nach Client dein Programm auch für jeden Client kompilieren kannst.

Ich vermute dass das jetzt nicht deine Absicht ist, aber wenn du es dir einfach machen willst installiere Synology Note Station und benutze ein "Regal" als Rezeptsammlung in das du mehrere Notizbücher stellst (zb Vorspeisen, Suppen, Hauptspeisen_Fleisch...) in die dann die Rezepte samt Bilder kommen. Dann kannst du mit Apps, Smartphone, mobil etc etc heran. Bis du diese Funktionalität in Lazarus oder jeder anderen Sprache von Null weg erledigt bekommst vergehen Mannjahre.

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

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

Beitrag von theo »

Ich werde wohl langsam alt.
Kann mir jemand erklären, was eine Rezept-Datenbank mit einem Docker-Container zu tun hat?
Warum nicht als Webanwendung implementieren?

charlytango
Beiträge: 845
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

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

Beitrag von charlytango »

klassische Kanonen-auf-Spatzen Anwendung ;-)
Würde was fertiges als Webanwendung zum selber hosten nehmen, aber wenns der Programmierneugierde dient, was soll's. Auch nicht anders als die 100ste CD-Verwaltung

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 »

theo hat geschrieben:
So 28. Jan 2024, 11:08
Ich werde wohl langsam alt.
Kann mir jemand erklären, was eine Rezept-Datenbank mit einem Docker-Container zu tun hat?
Warum nicht als Webanwendung implementieren?
Ich geb zu, dass es grundsätzlich nichts miteinander zu tun hat.
An sich würde es als Web-Anwendung gehen. Aber ich finde es einfacher (und spannender) direkt einen Container zu erstellen als mich mit dem Setup eines MySQL-Servers inkl Absicherung und externem Zugriff zu beschäftigen.

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 »

Ich habe für eine Synology Discstation bereits ein Lazarus Projekt am laufen. Es ist eigentlich supereinfach.

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)

Wenn man bereits Linux nutzt kann man ab hier weiter machen:
- Lazarus für Linux per FpcUpDeluxe installieren.

Damit kann man die eigene EXE schon mal für Linux übersetzen.

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.

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.
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.

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

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.
EleLa - Elektronik Lagerverwaltung - www.elela.de

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

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

Beitrag von six1 »

Also normalerweise kennt die MYSQL/MARIADB nur eine einzige Einstellung: 127.0.0.1 oder localhost. Dann erübrigt sich auch eine Firewalleinstellung.
"Praktisch alle" Hoster lassen etwas anderes auch gar nicht zu in den Einstellungen.
Einzig über einen SSH Tunnel und Port Translation ist ein anderer Zugriff denkbar und safe.
Für einen Zugriff aus dem Internet ohne weitere SIcherheit ist die MYSQL nicht gewappnet.
Wenn du einen Zugriff von irgendwoher aus dem Internet zu einer DB haben möchtest, dann solltest du eine Isolationsschicht "API" einsetzen.
DIe API kann ein PHP Script sein. PHP kann dann LOKAL über "localhost" auf die DB zugreifen und bietet nur ganz bestimmte Aufrufe an. Alle anderen Zugriffe aus dem Netz sind somit unmöglich.
So ein paar Fallstricke muss man allerdings auch dabei umgehen, um sicher zu sein! (SQL Injection usw.)
Gruß, Michael

charlytango
Beiträge: 845
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

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

Beitrag von charlytango »

GU_Meyer hat geschrieben:
So 28. Jan 2024, 15:30
als mich mit dem Setup eines MySQL-Servers inkl Absicherung und externem Zugriff zu beschäftigen.
Dann darf es keine MySQL-Anwendung sein (oder ein anderer SQL Server), sonst hast du dieses Problem ja in jedem Fall -- oder hab ich da etwas nicht verstanden?

charlytango
Beiträge: 845
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

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

Beitrag von charlytango »

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,
Hab heute nur Verständnisprobleme, denn eine Rezepte-Applikation in der Konsole kann ich mir nur schwer vorstellen
MmVisual hat geschrieben:
So 28. Jan 2024, 23:27
denn weder unter der Discstation noch in Docker hat man ein Grafikbildschirm.
sehe ich so nicht: Synology bietet einen Virtual Disk Manager an (nur für stärkere Modelle) um virtuelle Maschinen zu installieren. Und ein Docker Container hat die Fähigkeiten die man ihm verpasst. (von einer mini-Server-Version bis zur kompletten Linux-Desktop Version)

In beiden Fällen erfolgt der Zugriff von außen über Remote Desktop/VNC und Konsorten. Natürlich ist das dann auch eine Frage des Routings und der Netzwerkeinstellungen.

Kann man sicher alles machen, aber wenns kein akademisches Interesse ist würde ich zu Bordmitteln der Syno greifen

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 »

@six1: So wie ich ihn verstanden habe will er überhaupt keinen "externen Hoster" sondern auf einer lokalen Discstation.

Und da die Datenbank innerhalb eines Docker Images läuft hat man duch Docker eine Isolation in die Discstation, also alles was innerhalb Docker abläuft bleibt auch da drin und ein Angreifer kann somit zwar alles was innerhalb vom Docker passiert manipulieren jedoch nicht die Discstation.

Und damit man überhaupt von z.B. einem anderen Computer aus auf das Docker mit MySQL zugreifen möchte, so muss der Datenverkehr durch die DS und damit das geht muss die Firewall der DS dies auch zum Docker weiterleiten dürfen.

@GU_Meyer:
Bitte kläre uns mal genauer auf was überhaupt dein Ziel ist, wir hier sind zum großen Teil nur am raten. Jeder versteht dein Problem anders.
EleLa - Elektronik Lagerverwaltung - www.elela.de

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

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

Beitrag von six1 »

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 :)
Gruß, Michael

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 »

Er hat kein Wort davon geschrieben von einer Fritzbox und auch keines von "Online" stellen.
EleLa - Elektronik Lagerverwaltung - www.elela.de

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 »

charlytango hat geschrieben:
So 28. Jan 2024, 10:58
GU_Meyer hat geschrieben:
Sa 27. Jan 2024, 13:38
für ein ..... zu realisierendes Projekt
Das klingt für mich nach "zukünftig".
Ja, so ist es geplant.
charlytango hat geschrieben:
So 28. Jan 2024, 10:58

Ein Docker Container ist eine Instanz/Virtuelle Maschine (wie auch immer du es nennen magst) in der Programme und Prozesse isoliert ablaufen können. Im wesentlichen also ein Rumpf-Betriebssystem (eben eine bestimmte Linux-Distribution) und dein Programm samt allem was dazu nötig ist.
Ich würde nicht mit einem Container beginnen sondern die Entwicklung auf deinem Wunsch-Linux lokal starten. Meinetwegen auch auf einer lokal installierten Virtualbox-VM um überhaupt ein Gefühl dafür zu bekommen was nötig ist um mit virtuellen Maschinen zu arbeiten.
Erst wenn dein Programm (oder zumindest ein teil davon) läuft würde ich an einen Test mit Docker denken.
Damit weißt du dann zumindest dass dein Programm unter deinem Ziel-Linux läuft.

Besonders im Zusammenhang mit der Synology-NAS hast du dann auch noch einige Entscheidungen zu treffen. Soll die MySQL Datenbank im Container laufen oder in einem anderen Container oder auch auf der Syno selbst. Jede Variante hat erhebliche Auswirkungen im Routing und im Netzwerk zufolge.

Auch solltest du überlegen wie jemand auf deine Rezeptdatenbank zugreifen soll?
Zugriff auf eine GUI in einem Docker-Container bedingt irgend eine Remote-Verbindung zu diesem bestimmten Docker Container. Was die Entscheidung nötig macht ob man den Docker Container im Netzwerk bridged oder als macvlan installiert. Beides hat Vor- und Nachteile. Besonders die mcvlan-Variante kann die Docker App von Synology nicht korrekt installieren, dazu braucht man eine extra Docker Instanz mit Portainer um das alles einzustellen. (außer man kennt sich bei Docker mit Commandline aus)

Als ersten Schritt schau mal ob du eine MySQL Datenbank auf der Syno ansprechen kannst (Syno hat MariaDB 10 als App). Diese Version ist wohl jene mit den wenigsten Problemen, zumal du je nach Client dein Programm auch für jeden Client kompilieren kannst.
Fragen über Fragen....ich werden denen nachgehen.
charlytango hat geschrieben:
So 28. Jan 2024, 10:58
Ich vermute dass das jetzt nicht deine Absicht ist, aber wenn du es dir einfach machen willst installiere Synology Note Station und benutze ein "Regal" als Rezeptsammlung in das du mehrere Notizbücher stellst (zb Vorspeisen, Suppen, Hauptspeisen_Fleisch...) in die dann die Rezepte samt Bilder kommen. Dann kannst du mit Apps, Smartphone, mobil etc etc heran. Bis du diese Funktionalität in Lazarus oder jeder anderen Sprache von Null weg erledigt bekommst vergehen Mannjahre.
Das guck ich mir an. Noch bin ich ja am Überlegen und da ist Inspiration manchmal gar nicht so schlecht.

Danke und 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 »

charlytango hat geschrieben:
So 28. Jan 2024, 14:06
klassische Kanonen-auf-Spatzen Anwendung ;-)
Würde was fertiges als Webanwendung zum selber hosten nehmen, aber wenns der Programmierneugierde dient, was soll's. Auch nicht anders als die 100ste CD-Verwaltung
Stimmt schon. Aber mich interessiert, wie's geht - deshalb.

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, 10:04
Er hat kein Wort davon geschrieben von einer Fritzbox und auch keines von "Online" stellen.
Das stimmt. Für Online hab ich ne Raspberry Pi - die hängt über ne Fritzbox und nen passendes Script direkt als Server im Internet und dient als Webserver. Für alles andere (Dateispeicherung, Scanner-Zwischenlager, Fotos, usw.) gibts nen NAS (ok, das hängt auch an der Fritzbox). Aber das NAS hat keine Verbindung nach "draußen" und soll bzw. darf keine erhalten.

Antworten