Lädt lazbuild Packages/Komponenten automatisch herunter?

Rund um die LCL und andere Komponenten
Antworten
ArchChem
Beiträge: 82
Registriert: Mo 11. Jul 2022, 10:41

Lädt lazbuild Packages/Komponenten automatisch herunter?

Beitrag von ArchChem »

Hallo allerseits,

ich habe eine – eigentlich triviale Frage – welche ich mir bisher aber auch nach eingehender Recherche nicht selbst beantworten konnte :D

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!

Warf
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?

Beitrag von Warf »

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

ArchChem
Beiträge: 82
Registriert: Mo 11. Jul 2022, 10:41

Re: Lädt lazbuild Packages/Komponenten automatisch herunter?

Beitrag von ArchChem »

Ah super, danke! Das bedeutet, auf dem Zielrechner müsste ich LPM installieren und damit dann Lazarus und die benötigten Pakete herunterladen?

ArchChem
Beiträge: 82
Registriert: Mo 11. Jul 2022, 10:41

Re: Lädt lazbuild Packages/Komponenten automatisch herunter?

Beitrag von ArchChem »

Warf hat geschrieben:
Do 5. Jan 2023, 15:39
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
Ja, danke für den Hinweis! Genau das mache ich auch auf Github, zum Beispiel hier: https://github.com/reckel-jm/cantara/actions

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.

Warf
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?

Beitrag von Warf »

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

ArchChem
Beiträge: 82
Registriert: Mo 11. Jul 2022, 10:41

Re: Lädt lazbuild Packages/Komponenten automatisch herunter?

Beitrag von ArchChem »

Danke dir, das wäre sehr hilfreich! Docker ist für mich nämlich mehr oder weniger Neuland :)

charlytango
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?

Beitrag von charlytango »

ArchChem hat geschrieben:
Do 5. Jan 2023, 15:36
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?
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)

Warf
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?

Beitrag von Warf »

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

Code: Alles auswählen

$> lpm lazarus add fpcup /home/user/development/lazarus
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

Code: Alles auswählen

$> lpm update
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

Code: Alles auswählen

$> lpm self-update
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.

Code: Alles auswählen

$> lpm build --yes path/to/project [MODI...]
Ü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:

Code: Alles auswählen

$> docker run --rm -v /path/to/project:/project warfley/lpm:stable lpm build --yes project.lpi [MODES]
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:

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

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: Lädt lazbuild Packages/Komponenten automatisch herunter?

Beitrag von af0815 »

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)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Warf
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?

Beitrag von Warf »

af0815 hat geschrieben:
Fr 6. Jan 2023, 08:09
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)
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

Antworten