Lädt lazbuild Packages/Komponenten automatisch herunter?
Lädt lazbuild Packages/Komponenten automatisch herunter?
Hallo allerseits,
ich habe eine – eigentlich triviale Frage – welche ich mir bisher aber auch nach eingehender Recherche nicht selbst beantworten konnte
Lädt lazbuild – vorausgesetzt einer funktionierenden Lazarus-Installation – Packages wie TBGRAControls etc. automatisch herunter, falls sie für die Erstellung eines Projekts benötigt werden? Falls nein, wie könnte man das erreichen?
Hintergrund ist, dass ich gerne eine relativ einfache Anleitung zum Selberkompilieren meiner Projekte geben möchte.
Vielen Dank schon mal!
ich habe eine – eigentlich triviale Frage – welche ich mir bisher aber auch nach eingehender Recherche nicht selbst beantworten konnte
Lädt lazbuild – vorausgesetzt einer funktionierenden Lazarus-Installation – Packages wie TBGRAControls etc. automatisch herunter, falls sie für die Erstellung eines Projekts benötigt werden? Falls nein, wie könnte man das erreichen?
Hintergrund ist, dass ich gerne eine relativ einfache Anleitung zum Selberkompilieren meiner Projekte geben möchte.
Vielen Dank schon mal!
-
- Beiträge: 1908
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Lädt lazbuild Packages/Komponenten automatisch herunter?
Nein, genau dafür hatte ich mir mal den LPM gebaut: https://github.com/Warfley/LazarusPackageManager
Ich kann dir docker empfehlen zum einfachen kompilieren von anwendungen. Oder wenn du github oder gitlab benutzt einfach dur automatische Pipelines das projekt Serverseitig bauen zu lassen sobald du updates commitest. Beispiel: https://gitlab.com/Warfley/lazarusgitlabci
Ich kann dir docker empfehlen zum einfachen kompilieren von anwendungen. Oder wenn du github oder gitlab benutzt einfach dur automatische Pipelines das projekt Serverseitig bauen zu lassen sobald du updates commitest. Beispiel: https://gitlab.com/Warfley/lazarusgitlabci
Re: Lädt lazbuild Packages/Komponenten automatisch herunter?
Ah super, danke! Das bedeutet, auf dem Zielrechner müsste ich LPM installieren und damit dann Lazarus und die benötigten Pakete herunterladen?
Re: Lädt lazbuild Packages/Komponenten automatisch herunter?
Ja, danke für den Hinweis! Genau das mache ich auch auf Github, zum Beispiel hier: https://github.com/reckel-jm/cantara/actionsWarf hat geschrieben: ↑Do 5. Jan 2023, 15:39Ich kann dir docker empfehlen zum einfachen kompilieren von anwendungen. Oder wenn du github oder gitlab benutzt einfach dur automatische Pipelines das projekt Serverseitig bauen zu lassen sobald du updates commitest. Beispiel: https://gitlab.com/Warfley/lazarusgitlabci
Das Problem ist bloß, dass sobald zusätzliche Komponenten/Pakete verwendet werden, der Build streickt. Das gleiche Problem habe ich auch beim Erstellen von Snaps/Flatpaks auf deren Servern.
-
- Beiträge: 1908
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Lädt lazbuild Packages/Komponenten automatisch herunter?
Ja also was benötigt wird ist Lazarus und LPM (ist ein Python script also auch noch Python3).
Am einfachsten geht es allerdings mit dem docker, dafür braucht der nutzer auf dem Zielrechner lediglich Docker. Leider sind die veröffentlichten Docker Images nicht mehr so aktuell, von daher müssen sie selbst gebaut werden.
Leider kenne ich mich mit Github Actions nicht so sehr aus (ich versuche gitlab zu benutzen wenn immer möglich), aber auch da müsste man relativ einfach docker verwenden können.
Wenn ich heut abend Zeit habe schreibe ich mal ne genauere Anleitung wie man das macht (und update mal die docker hub images).
Am einfachsten geht es allerdings mit dem docker, dafür braucht der nutzer auf dem Zielrechner lediglich Docker. Leider sind die veröffentlichten Docker Images nicht mehr so aktuell, von daher müssen sie selbst gebaut werden.
Leider kenne ich mich mit Github Actions nicht so sehr aus (ich versuche gitlab zu benutzen wenn immer möglich), aber auch da müsste man relativ einfach docker verwenden können.
Wenn ich heut abend Zeit habe schreibe ich mal ne genauere Anleitung wie man das macht (und update mal die docker hub images).
Re: Lädt lazbuild Packages/Komponenten automatisch herunter?
Danke dir, das wäre sehr hilfreich! Docker ist für mich nämlich mehr oder weniger Neuland
-
- Beiträge: 843
- 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: Lädt lazbuild Packages/Komponenten automatisch herunter?
Also wenn ich da etwas missverstanden habe verzeiht mir.
Aber wenn eine funktionierende Lazarus Installation vorausgesetzt wird dann benutze doch den OPM.
Mit Rechtsklick auf die Liste kannst du die Referenzen der installierten (oder gerade markierten und nötigen) Packages in eine Datei speichern.
Die legst du deinem Projekt bei und erklärst wie man die Fatei in den OPM importiert (also wieder mit Rechtsklick auf die Liste)
Und der OPM macht den Rest - runterladen, kompilieren, Lazarus neu erstellen.
Sorry aber im Moment sehe ich das Problem nicht, denn TBGRAControls sind grafische Elemente und ein installiertes Lazarus wird vorausgesetzt. Da sehe ich keine Notwendigkeit für Docker (obwohl es mich persönlich schon mal reizt das auszuprobieren)
-
- Beiträge: 1908
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Lädt lazbuild Packages/Komponenten automatisch herunter?
So, hat doch deutlich länger gedauert als erwartet, aber hier eine kurze™ erklärung.
LPM ist ein python script was praktisch die Funktionen von Lazbuild erweitert um packages. Um lpm zu benutzen muss zunächst mal LPM runtergeladen werden, einfach das repository aus git clonen. Das hauptscript im Repository ist die datei "lpm" (python script ohne dateiendung). Unter Unix systemen ist sie direkt ausführbar unter Windows sollte es allerdings auch funktionieren wenn man sie mit python aufruft (also python3 lpm ...).
Als erstes muss lpm konfiguriert werden. LPM erzeugt im Nutzerordner seine konfiguration in dem .lpm ordner. Das erste was man konfigurieren muss ist der Pfad unter dem Lazbuild gefunden werden kann. LPM kann mehrere Lazarus versionen handlen (Grund dafür ist bei größeren projekten fixe ich die Lazarus und FPC version, sodass ich z.B. noch ältere Projekte habe die auf Lazarus 1.8 laufen, da ich sie noch nicht geupdated habe).
Um eine lazarus installation hinzuzufügen musst du einfach "lpm lazarus add name pfad" aufrufen.
Z.B. für lazarus mit FPCUp installiert ist das standard verzeichnis /home/user/development/lazarus wäre das also
Einfach schauen wo lazarus installiert ist und dann hinzufügen.
Als nächstes muss die liste der OPM packages aktualisiert werden damit LPM diese finden kann. Das geht mit
Das sollte vor jeder verwendung gemacht werden um immer aktuell zu sein.
Wenn LPM über git runtergeladen wurde kann man auch lpm sich selbst updaten lassen mit
Um packages runterzuladen und zu installieren kann "lpm install packagename" (alternativ pfad zum bereits runtergeladenen package oder HTTP download link falls es nicht im OPM ist) verwendet werden, da du aber daran interresiert bist alles automatisch zu machen, tut das auch lpm build automatisch.
Über die Modi kannst du bestimmte Build Modi definieren. Wenn du damit noch keine Erfahrung hast, schau dir mal Seiten 1-5 von diesem PDF an: https://gitlab.com/Warfley/lazarusgitla ... torial.pdf
Das --yes skipped die nachfrage ob du die fehlenden Pakete runterladen willst und machts einfach.
Für mehr infos schau dir die README im Github zu LPM an.
Falls dir das zu kompliziert ist, gibt es auch die LPM docker images. Docker erlaubt es software zu containerizen sodass man praktisch alles was benötigt wird als einen container shippen kann. Die LPM container (warfley/lpm:version) packen also alles was du brauchst zusammen, also FPC mit compilern für Windows 32 und 64 bit sowie Linux 64 bit Lazarus mit QT5 und GTK2 und lpm.
Wenn du einen Docker container startest, kannst du ordner einbinden um sie in dem container verfügbar zu machen.
Um nun lpm mit einem projekt zu benutzen benötigst du nur eine laufende Docker installation, und dann kannst du folgenden befehl ausführen:
das --rm sagt das der Container nach dem kompilieren wieder gelöscht werden soll. Das liegt daran das der Container als "one off" container gedacht ist den man startet, einmal kompiliert und ihn dann wieder wegwirft.
-v bindet das projekt ein und nach dem image namen (warfley/lpm:stable) kommt der Befehl der ausgeführt werden soll.
Um mal ein praktisches Beispiel zu bringen, das Beispiel Projekt was ich bereits oben verlinkt habe: https://gitlab.com/Warfley/lazarusgitlabci
Dieses Projekt benutz DCPCrypt aus dem OPM, außerdem hat es build konfigurationen für Linux mit GTK and QT5 sowie für Windows 64 bit. Wenn ich bei mir (unter Windows mit Docker Desktop für Windows) den folgenden befehl ausführe:
Wird das projekt (das in C:\Users\...\lazarusgitlabci liegt) gebaut. Sobald der Container fertig ist finde ich dann unter "project\build" meine unterorder "x86_64-win64" und "x86_64-linux" die gebauten Programme.
Die Docker images gibt es in verschiedenen versionen, aktuell habe ich nur die "warfley/lpm:stable", was die aktuell stabile Lazarusversion (die es auch auf der Website zum Runterladen gibt), gebaut und hochgeladen.
Sobald ich aber den build server wieder angeschmissen bekomme (was ich die tage machen werde) wird es aber auch wieder die versionen 1.6, 1.8, 2.0, 2.2 (aktuelle stable), trunk (fpc stable, lazarus trunk) und experimental (fpc trunk und lazarus trunk) geben, mit nightly builds für die trunk versionen.
Ich muss nur noch gucken das ich das Docker ein bisschen kleiner bekomme, denn aktuell sind es 4 GB was sehr happig ist, natürlich braucht das auch ein bisschen speicher (fpc braucht pro cross compiler etwa 300 mb und lazarus braucht etwa 800 mb, also wird es etwas weniger als 2 gig mindestens), aber dank ein paar eigenheiten von docker ist das image bisher leider noch doppelt so groß wie es eigentlich sein müsste
LPM ist ein python script was praktisch die Funktionen von Lazbuild erweitert um packages. Um lpm zu benutzen muss zunächst mal LPM runtergeladen werden, einfach das repository aus git clonen. Das hauptscript im Repository ist die datei "lpm" (python script ohne dateiendung). Unter Unix systemen ist sie direkt ausführbar unter Windows sollte es allerdings auch funktionieren wenn man sie mit python aufruft (also python3 lpm ...).
Als erstes muss lpm konfiguriert werden. LPM erzeugt im Nutzerordner seine konfiguration in dem .lpm ordner. Das erste was man konfigurieren muss ist der Pfad unter dem Lazbuild gefunden werden kann. LPM kann mehrere Lazarus versionen handlen (Grund dafür ist bei größeren projekten fixe ich die Lazarus und FPC version, sodass ich z.B. noch ältere Projekte habe die auf Lazarus 1.8 laufen, da ich sie noch nicht geupdated habe).
Um eine lazarus installation hinzuzufügen musst du einfach "lpm lazarus add name pfad" aufrufen.
Z.B. für lazarus mit FPCUp installiert ist das standard verzeichnis /home/user/development/lazarus wäre das also
Code: Alles auswählen
$> lpm lazarus add fpcup /home/user/development/lazarus
Als nächstes muss die liste der OPM packages aktualisiert werden damit LPM diese finden kann. Das geht mit
Code: Alles auswählen
$> lpm update
Wenn LPM über git runtergeladen wurde kann man auch lpm sich selbst updaten lassen mit
Code: Alles auswählen
$> lpm self-update
Code: Alles auswählen
$> lpm build --yes path/to/project [MODI...]
Das --yes skipped die nachfrage ob du die fehlenden Pakete runterladen willst und machts einfach.
Für mehr infos schau dir die README im Github zu LPM an.
Falls dir das zu kompliziert ist, gibt es auch die LPM docker images. Docker erlaubt es software zu containerizen sodass man praktisch alles was benötigt wird als einen container shippen kann. Die LPM container (warfley/lpm:version) packen also alles was du brauchst zusammen, also FPC mit compilern für Windows 32 und 64 bit sowie Linux 64 bit Lazarus mit QT5 und GTK2 und lpm.
Wenn du einen Docker container startest, kannst du ordner einbinden um sie in dem container verfügbar zu machen.
Um nun lpm mit einem projekt zu benutzen benötigst du nur eine laufende Docker installation, und dann kannst du folgenden befehl ausführen:
Code: Alles auswählen
$> docker run --rm -v /path/to/project:/project warfley/lpm:stable lpm build --yes project.lpi [MODES]
-v bindet das projekt ein und nach dem image namen (warfley/lpm:stable) kommt der Befehl der ausgeführt werden soll.
Um mal ein praktisches Beispiel zu bringen, das Beispiel Projekt was ich bereits oben verlinkt habe: https://gitlab.com/Warfley/lazarusgitlabci
Dieses Projekt benutz DCPCrypt aus dem OPM, außerdem hat es build konfigurationen für Linux mit GTK and QT5 sowie für Windows 64 bit. Wenn ich bei mir (unter Windows mit Docker Desktop für Windows) den folgenden befehl ausführe:
Code: Alles auswählen
docker run --rm -v C:\Users\frederic\Documents\Projects\lazarusgitlabci:/project lpm:stable lpm build --yes project/FileEncrypter.lpi QTLinux GTKLinux Windows
Die Docker images gibt es in verschiedenen versionen, aktuell habe ich nur die "warfley/lpm:stable", was die aktuell stabile Lazarusversion (die es auch auf der Website zum Runterladen gibt), gebaut und hochgeladen.
Sobald ich aber den build server wieder angeschmissen bekomme (was ich die tage machen werde) wird es aber auch wieder die versionen 1.6, 1.8, 2.0, 2.2 (aktuelle stable), trunk (fpc stable, lazarus trunk) und experimental (fpc trunk und lazarus trunk) geben, mit nightly builds für die trunk versionen.
Ich muss nur noch gucken das ich das Docker ein bisschen kleiner bekomme, denn aktuell sind es 4 GB was sehr happig ist, natürlich braucht das auch ein bisschen speicher (fpc braucht pro cross compiler etwa 300 mb und lazarus braucht etwa 800 mb, also wird es etwas weniger als 2 gig mindestens), aber dank ein paar eigenheiten von docker ist das image bisher leider noch doppelt so groß wie es eigentlich sein müsste
- 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: Lädt lazbuild Packages/Komponenten automatisch herunter?
Hat das einen Grund warum lpm in Python ist und nicht nativ in Pascal ?! OPM, fpcupdeluxe sind ja ähnliche Tools und haben es geschafft in Pascal zu sein.
(Soll jetzt keine Provokation sein, sondern nur aus Interesse)
(Soll jetzt keine Provokation sein, sondern nur aus Interesse)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1908
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Lädt lazbuild Packages/Komponenten automatisch herunter?
Ja python hat einen sehr guten argumenten parser, weshalb ich es tatsächlich für kleinere konsolen wrapperscripte sehr gerne verwende. Ursprünglich sollte LPM auch deutlich schmaler sein, und für so kleinere consolen scripte bietet sich python sehr gut an. Hätte ich gewusst das es am ende auch fast 800 zeilen python code werden hätte ich es vielleicht nochmal überlegt