Mein fünfter Tag mit Haiku: Lassen Sie uns einige Programme portieren


TL; DR : Anfänger haben Haiku zum ersten Mal gesehen und versucht, einige Programme aus der Linux-Welt zu portieren.



Mein erstes von Haiku portiertes Programm im HPKG-Format


Ich habe kürzlich Haiku entdeckt, ein unerwartet gutes PC-Betriebssystem.
Heute werde ich lernen, neue Programme auf dieses Betriebssystem zu übertragen. Das Hauptaugenmerk liegt auf einer Beschreibung der ersten Erfahrungen mit dem Wechsel zu Haiku aus Sicht des Entwicklers für Linux. Ich entschuldige mich für die dummen Fehler, die dabei gemacht wurden, schließlich ist seit dem ersten Herunterladen von Haiku keine Woche vergangen.


Ich möchte drei Ziele erreichen:


  • Portieren Sie eine einfache CLI- Anwendung
  • Port-Anwendung von der GUI nach Qt
  • Packe sie später im HPKG-Format (da ich immer noch darüber nachdenke, AppDir und AppImage für Haiku anzupassen ...)

Fangen wir an. In den Abschnitten Dokumentation und Entwicklung sowie im HaikuPorts- Wiki habe ich die richtige Richtung gefunden. Es gibt sogar ein Online-PDF-Buch BeOS: Portierung einer Unix-Anwendung .
467 Seiten - und das ist von 1997! Nach innen zu schauen ist beängstigend, aber ich hoffe auf das Beste. Die Worte des Entwicklers sind ermutigend: "Lange Zeit, weil BeOS nicht POSIX-kompatibel war", aber Haiku "größtenteils" ist schon so.


Portierung einer einfachen CLI-Anwendung


Der erste Gedanke war, die avrdude- Anwendung zu portieren, aber wie sich herausstellte, war dies bereits vor langer Zeit geschehen .


Erster Versuch: nichts zu sehen


Was ich überhaupt nicht verstehen kann, ist, dass seit mehr als 10 Jahren Anwendungen nach Haiku portiert werden - trotz der Tatsache, dass das Betriebssystem selbst nicht einmal Version 1.0 hat.


Zweiter Versuch: muss neu geschrieben werden


Daher verwende ich die ptouch-770 , CLI, um den Brother P-Touch 770-Drucker zu steuern, auf dem ich Etiketten drucke .
Ich drucke verschiedene Etiketten darauf, und Sie haben es möglicherweise bereits in einem früheren Artikel gesehen. Zuvor habe ich ein kleines Wrapper-Programm mit einer GUI in Python geschrieben (da es auf Gtk + läuft, muss ich es neu schreiben, was ein guter Grund ist, etwas zu lernen).



Etikettendrucker Brother P-Touch 770. Funktioniert es unter Haiku?


Der Paketmanager von Haiku kennt sich mit Bibliotheken und Befehlen aus. Wenn ich also beim Ausführen von configure die Meldung "libintl kann nicht gefunden werden" erhalte, starte ich einfach pkgman install devel:libintl und das benötigte Paket wird gefunden. Ähnlich wie bei pkgman install cmd:rsync . Nun, etc.


Außer wenn dies nicht funktioniert:


 /Haiku/home> git clone https://github.com/probonopd/ptouch-770 Cloning into 'ptouch-770'... remote: Enumerating objects: 134, done. remote: Total 134 (delta 0), reused 0 (delta 0), pack-reused 134 Receiving objects: 100% (134/134), 98.91 KiB | 637.00 KiB/s, done. Resolving deltas: 100% (71/71), done./Haiku/home> cd ptouch-770//Haiku/home/ptouch-770> make gcc -Wall -O2 -c -o ptouch-770-write.o ptouch-770-write.c ptouch-770-write.c:28:10: fatal error: libudev.h: No such file or directory #include <libudev.h> ^~~~~~~~~~~ compilation terminated. Makefile:16: recipe for target 'ptouch-770-write.o' failed make: *** [ptouch-770-write.o] Error 1/Haiku/home/ptouch-770> pkgman install devel:libudev 100% repochecksum-1 [65 bytes] Validating checksum for Haiku...done. 100% repochecksum-1 [64 bytes] Validating checksum for HaikuPorts...done. *** Failed to find a match for "devel:libudev": Name not found/Haiku/home/ptouch-770> pkgman install devel:udev 100% repochecksum-1 [65 bytes] Validating checksum for Haiku...done. 100% repochecksum-1 [64 bytes] Validating checksum for HaikuPorts...done. *** Failed to find a match for "devel:udev": Name not found 

Vielleicht ist udev zu voll, so dass es für Haiku nicht existiert. Was bedeutet, dass der Quellcode, den ich zu kompilieren versuche, bearbeitet werden muss.
Du wirst nicht über deinen Kopf springen und ich weiß nicht einmal, wo ich anfangen soll.


Dritter Versuch


Es wäre schön, tmate für Haiku zu haben, dann würde ich Haiku-Entwickler eine Verbindung zu meiner Terminalsitzung herstellen lassen - falls etwas schief geht. Die Anweisungen sind recht einfach:


 ./autogen.sh ./configure make make install 

Es sieht gut aus, warum also nicht Haiku ausprobieren?


 /Haiku/home> git clone https://github.com/tmate-io/tmate/Haiku/home> cd tmate//Haiku/home/tmate> ./autogen.sh (...)/Haiku/home/tmate> ./configure (...) checking for libevent... no checking for library containing event_init... no configure: error: "libevent not found"/Haiku/home/tmate> pkgman install devel:libevent (...) The following changes will be made: in system: install package libevent21-2.1.8-2 from repository HaikuPorts install package libevent21_devel-2.1.8-2 from repository HaikuPorts Continue? [yes/no] (yes) : 100% libevent21-2.1.8-2-x86_64.hpkg [965.22 KiB] (...) [system] Done.checking for ncurses... no checking for library containing setupterm... no configure: error: "curses not found"/Haiku/home/tmate> pkgman install devel:libcurses (...) *** Failed to find a match for "devel:libcurses": Name not found/Haiku/home/tmate> pkgman install devel:curses (...) *** Failed to find a match for "devel:curses": Name not found 

In diesem Schritt öffne ich HaikuDepot und suche nach curses .
Es wurde etwas gefunden, das mir einen Hinweis auf eine kompetentere Anfrage gab:


 /Haiku/home/tmate> pkgman install devel:libncurses (...) 100% ncurses6_devel-6.1-1-x86_64.hpkg [835.62 KiB] (...)./configure (...) checking for msgpack >= 1.1.0... no configure: error: "msgpack >= 1.1.0 not found"/Haiku/home/tmate> pkgman install devel:msgpack (...) *** Failed to find a match for "devel:msgpack": Name not found/Haiku/home/tmate> pkgman install devel:libmsgpack (...) *** Failed to find a match for "devel:libmsgpack": Name not found 

Wieder ging zu HaikuDepot und fand natürlich devel:msgpack_c_cpp_devel . Was für seltsame Namen?


 /Haiku/home/tmate> pkgman install devel:msgpack_c_cpp_devel 100% repochecksum-1 [65 bytes] Validating checksum for Haiku...done. 100% repochecksum-1 [64 bytes] Validating checksum for HaikuPorts...done. *** Failed to find a match for "devel:msgpack_c_cpp_devel": Name not found# Why is it not finding it? To hell with the "devel:".../Haiku/home/tmate> pkgman install msgpack_c_cpp_devel (...) The following changes will be made: in system: install package msgpack_c_cpp-3.1.1-1 from repository HaikuPorts install package msgpack_c_cpp_devel-3.1.1-1 from repository HaikuPorts Continue? [yes/no] (yes) : (...)/Haiku/home/tmate> ./configure (...) checking for libssh >= 0.8.4... no configure: error: "libssh >= 0.8.4 not found"/Haiku/home/tmate> pkgman install devel:libssh/Haiku/home/tmate> make (...) In file included from /boot/system/develop/headers/msgpack.h:22, from tmate.h:5, from cfg.c:29: /boot/system/develop/headers/msgpack/vrefbuffer.h:19:8: error: redefinition of struct iovec' struct iovec { ^~~~~ In file included from tmux.h:27, from cfg.c:28: /boot/system/develop/headers/posix/sys/uio.h:12:16: note: originally defined here typedef struct iovec { ^~~~~ Makefile:969: recipe for target 'cfg.o' failed make: *** [cfg.o] Error 1 

In diesem Schritt wurde mir klar, dass das Portieren eines Programms nach Haiku wesentlich mehr Wissen erfordert, als Sie für eine einfache Neuerstellung benötigen.
Ich habe mit freundlichen Haiku-Entwicklern gesprochen, es stellte sich heraus, dass in msgpack ein Fehler vorliegt, und nach einigen Minuten sehe ich einen Patch in HaikuPorts. Ich persönlich beobachte, wie hier ein festes Paket erstellt wird (Buildslave - virtuelle Maschinen).



Erstellen Sie ein festes msgpack auf buildmaster


Senden Sie den Patch in der Zwischenzeit an den Upstream , um msgpack um Haiku-Unterstützung zu erweitern .


Fünf Minuten später ist das aktualisierte msgpack bereits auf Haiku verfügbar:


 /Haiku/home/tmate> pkgman update (...) The following changes will be made: in system: upgrade package msgpack_c_cpp-3.1.1-1 to 3.2.0-2 from repository HaikuPorts upgrade package msgpack_c_cpp_devel-3.1.1-1 to 3.2.0-2 from repository HaikuPorts Continue? [yes/no] (yes) : y 100% msgpack_c_cpp-3.2.0-2-x86_64.hpkg [13.43 KiB] (...) [system] Done. 

Unerwartet gut. Habe ich das gesagt ?!


Zurück zur ursprünglichen Aufgabe:


 /Haiku/home/tmate> make (...) In file included from tmux.h:40, from tty.c:32: compat.h:266: warning: "AT_FDCWD" redefined #define AT_FDCWD -100 In file included from tty.c:25: /boot/system/develop/headers/posix/fcntl.h:62: note: this is the location of the previous definition #define AT_FDCWD (-1) /* CWD FD for the *at() functions */ tty.c: In function 'tty_init_termios': tty.c:278:48: error: 'IMAXBEL' undeclared (first use in this function); did you mean 'MAXLABEL'? tio.c_iflag &= ~(IXON|IXOFF|ICRNL|INLCR|IGNCR|IMAXBEL|ISTRIP); ^~~~~~~ MAXLABEL tty.c:278:48: note: each undeclared identifier is reported only once for each function it appears in Makefile:969: recipe for target 'tty.o' failed make: *** [tty.o] Error 1 

Jetzt scheint msgpack nicht schuldig zu sein. IMAXLABEL in tty.c wie IMAXLABEL tty.c :


 tio.c_iflag &= ~(IXON|IXOFF|ICRNL|INLCR|IGNCR|/*IMAXBEL|*/ISTRIP); 

Ergebnis:


 osdep-unknown.c: In function 'osdep_get_cwd': osdep-unknown.c:32:19: warning: unused parameter 'fd' [-Wunused-parameter] osdep_get_cwd(int fd) ~~~~^~ make: *** No rule to make target 'compat/forkpty-unknown.c', needed by 'compat/forkpty-unknown.o'. Stop. 

Na ja, schon wieder ... Übrigens:


 /Haiku/home/tmate> ./configure | grep -i OPENAT checking for openat... no 

mr. waddlesplash sagt, wo man graben soll:


 /Haiku/home/tmate> ./configure LDFLAGS="-lbsd" (...)/Haiku/home/tmate> make (...) In file included from tmux.h:40, from window.c:31: compat.h:266: warning: "AT_FDCWD" redefined #define AT_FDCWD -100 In file included from window.c:22: /boot/system/develop/headers/posix/fcntl.h:62: note: this is the location of the previous definition #define AT_FDCWD (-1) /* CWD FD for the *at() functions */ make: *** No rule to make target 'compat/forkpty-unknown.c', needed by 'compat/forkpty-unknown.o'. Stop. 

Hier habe ich config.log angelegt .


Sie erklärten mir, dass es in libnetwork noch etwas anderes gibt, das auf Haiku libresolv ist. Höchstwahrscheinlich muss der Code weiter bearbeitet werden. Denken sollten...


 find . -type f -exec sed -i -e 's|lresolv|lnetwork|g' {} \; 

Die ewige Frage: Was passiert?


 /Haiku/home/tmate> ./configure LDFLAGS="-lbsd" (...)/Haiku/home/tmate> make (...) # Success!# Let's run it:/Haiku/home/tmate> ./tmate runtime_loader: /boot/system/lib/libssh.so.4.7.2: Could not resolve symbol '__stack_chk_guard' resolve symbol "__stack_chk_guard" returned: -2147478780 runtime_loader: /boot/system/lib/libssh.so.4.7.2: Troubles relocating: Symbol not found 

Das gleiche nur im Profil. Googelte und fand es . Wenn das Hinzufügen von -lssp "manchmal" hilft, versuche ich:


 /Haiku/home/tmate> ./configure LDFLAGS="-lbsd -lssp" (...)/Haiku/home/tmate> make (...)/Haiku/home/tmate> ./tmate 

Wow! Es fängt an! Aber ...


 [tmate] ssh.tmate.io lookup failure. Retrying in 2 seconds (non-recoverable failure in name resolution) 

Ich werde versuchen, die Datei hier zu debuggen:


 /Haiku/home/tmate> strace -f ./tmate >log 2>&1 

"Bad Port ID" ist bereits wie eine Haiku- Visitenkarte. Vielleicht stellt sich jemand vor, was falsch ist und wie man es behebt? Wenn überhaupt, werde ich den Artikel aktualisieren. Link zu GitHub .


Portieren einer GUI-Anwendung nach Qt.


Ich wähle eine einfache QML-Anwendung.


 /> cd /Haiku/home//Haiku/home> git clone https://github.com/probonopd/QtQuickApp /Haiku/home/QtQuickApp> qmake . /Haiku/home/QtQuickApp> make /Haiku/home/QtQuickApp> ./QtQuickApp # Works! 

Wirklich einfach. Weniger als eine Minute!


Packen von Anwendungen in HPKG mit Haikuporter und Haikuports.


Wo soll ich anfangen? Es gibt keine einfache Dokumentation, ich gehe zum # haiku-Kanal in irc.freenode.net und höre:


  • Der Befehl package ist eine einfache Methode zum Erstellen von Paketen. Zum größten Teil reicht PackageInfo dafür aus, wie im Abschnitt "Verwandeln in ein richtiges .hpkg-Paket" beschrieben.
  • Ich muss so etwas tun
  • Sie können hpkg-creator verwenden (es stürzt ab, Fehlerbericht )

Es ist nicht klar, was zu tun ist. Ich brauche wohl einen Anfängerleitfaden im Stil von "Hello World!", Idealerweise ein Video. Es wäre schön, eine bequeme Einführung in HaikuPorter zu haben, wie in GNU Hallo gemacht.


Ich habe folgendes gelesen:


haikuporter ist ein Tool zum Erstellen gemeinsamer Batch-Projekte für Haiku. Es verwendet das HaikuPorts-Repository als Basis für alle Pakete. Zum Erstellen von Paketen werden Haikuporter-Rezepte verwendet.

Außerdem finde ich heraus, dass:


Es ist nicht erforderlich, Rezepte im HaikuPorts-Tresor aufzubewahren. Sie können ein anderes Repository erstellen, Rezepte darin ablegen und dann Haikuporter darauf verweisen.

Genau das, was ich brauche - es sei denn, Sie suchen nach einer Möglichkeit, das Paket öffentlich zu veröffentlichen. Dies ist jedoch ein Thema für einen anderen Beitrag.


Installieren Sie Haikuporter und Haikuports


 cd /boot/home/ git clone https://github.com/haikuports/haikuporter --depth=50 git clone https://github.com/haikuports/haikuports --depth=50 ln -s /boot/home/haikuporter/haikuporter /boot/home/config/non-packaged/bin/ # make it runnable from anywhere cd haikuporter cp haikuports-sample.conf /boot/home/config/settings/haikuports.conf sed -i -e 's|/mydisk/haikuports|/boot/home/haikuports|g' /boot/home/config/settings/haikuports.conf 

Ein Rezept schreiben


 SUMMARY="Demo QtQuick application" DESCRIPTION="QtQuickApp is a demo QtQuick application for testing Haiku porting and packaging" HOMEPAGE="https://github.com/probonopd/QtQuickApp" COPYRIGHT="None" LICENSE="MIT" REVISION="1" SOURCE_URI="https://github.com/probonopd/QtQuickApp.git" #PATCHES="" ARCHITECTURES="x86_64" PROVIDES=" QtQuickApp = $portVersion " REQUIRES=" haiku " BUILD_REQUIRES=" haiku_devel cmd:qmake "BUILD() { qmake . make $jobArgs }INSTALL() { make install } 

Rezept-Baugruppe


Ich QtQuickApp-1.0.recipe Datei als QtQuickApp-1.0.recipe und aikuporter -S ./QuickApp-1.0.recipe dann aikuporter -S ./QuickApp-1.0.recipe . Abhängigkeiten werden für alle Pakete im Haikuports- Repository überprüft, was einige Zeit in Anspruch nimmt. Ich werde Kaffee holen gehen.


Und warum sollte diese Überprüfung auf meinem lokalen Computer und nicht einmal für alle zentral auf dem Server durchgeführt werden?


Nach mr. waddlesplash:


Damit können Sie jede Datei im Repository neu schreiben;) Sie können dies leicht optimieren, indem Sie bei Bedarf die erforderlichen Informationen berechnen, da die letzten Änderungen recht selten sind.

 ~/QtQuickApp> haikuporter QtQuickApp-1.0.recipe Checking if any dependency-infos need to be updated ... Looking for stale dependency-infos ... Error: QtQuickApp not found in repository 

Es stellt sich heraus, dass es keine gewöhnliche Rezeptdatei gibt, die den Quellcode Ihrer Anwendung enthält. Sie müssen es im Repository im HaikuPorts-Format aufbewahren.


 ~/QtQuickApp> mv QtQuickApp-1.0.recipe ../haikuports/app-misc/QtQuickApp/ ~/QtQuickApp> ../haikuport ~/QtQuickApp> haikuporter -S QtQuickApp-1.0.recipe 

Diese Tatsache macht die Montage umständlicher. Ich mag es nicht wirklich, aber ich denke, es ist notwendig, damit am Ende alle Open-Source-Software in HaikuPorts erscheint.


Ich bekomme folgendes:


 ~/QtQuickApp> haikuporter -S QtQuickApp-1.0.recipe Checking if any dependency-infos need to be updated ... updating dependency infos of QtQuickApp-1.0 Looking for stale dependency-infos ... Error: QtQuickApp-1.0.recipe not found in tree. 

Was ist los? Nach dem Lesen von irc mache ich:


 ~/QtQuickApp> haikuporter -S QtQuickApp Checking if any dependency-infos need to be updated ... updating dependency infos of QtQuickApp-1.0 Looking for stale dependency-infos ... ---------------------------------------------------------------------- app-misc::QtQuickApp-1.0 /boot/home/haikuports/app-misc/QtQuickApp/QtQuickApp-1.0.recipe ----------------------------------------------------------------------Downloading: https://github.com/probonopd/QtQuickApp.git ... --2019-07-14 16:12:44-- https://github.com/probonopd/QtQuickApp.git Resolving github.com... 140.82.118.3 Connecting to github.com|140.82.118.3|:443... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: https://github.com/probonopd/QtQuickApp [following] --2019-07-14 16:12:45-- https://github.com/probonopd/QtQuickApp Reusing existing connection to github.com:443. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: '/boot/home/haikuports/app-misc/QtQuickApp/download/QtQuickApp.git' 0K . 1.34M=0.06s 2019-07-14 16:12:45 (1.34 MB/s) - '/boot/home/haikuports/app-misc/QtQuickApp/download/QtQuickApp.git' saved [90094] Validating checksum of QtQuickApp.git Warning: ----- CHECKSUM TEMPLATE ----- Warning: CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c" Warning: ----------------------------- Error: No checksum found in recipe! 

Eine interessante Frage stellte sich. Wenn ich dem Rezept eine Prüfsumme hinzufüge, stimmt diese mit dem neuesten Git-Commit für die kontinuierliche Integration überein? (Der Entwickler bestätigt: "Es wird nichts daraus. Rezepte sind relativ stabil gestaltet.")


Zum Spaß zum Rezept hinzufügen:


 CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c" 

Immer noch nicht glücklich:


 ~/QtQuickApp> haikuporter -S QtQuickApp Checking if any dependency-infos need to be updated ... updating dependency infos of QtQuickApp-1.0 Looking for stale dependency-infos ... ---------------------------------------------------------------------- app-misc::QtQuickApp-1.0 /boot/home/haikuports/app-misc/QtQuickApp/QtQuickApp-1.0.recipe ---------------------------------------------------------------------- Skipping download of source for QtQuickApp.git Validating checksum of QtQuickApp.git Unpacking source of QtQuickApp.git Error: Unrecognized archive type in file /boot/home/haikuports/app-misc/QtQuickApp/download/QtQuickApp.git 

Was macht er Immerhin ist dies das Git-Repository, der Code ist bereits direkt da, es gibt nichts zu entpacken. Aus meiner Sicht sollte das Tool intelligent genug sein, um nicht nach dem Entpacker zu suchen, wenn es mit GitHub über der URL liegt.


Vielleicht funktioniert uri git: //


 SOURCE_URI="git://github.com/probonopd/QtQuickApp.git" 

Jetzt beschwert es sich so:


 Downloading: git://github.com/probonopd/QtQuickApp.git ... Error: Downloading from unsafe sources is disabled in haikuports.conf! 

Hmm, und warum ist alles so kompliziert, warum kannst du nicht einfach „arbeiten“? Am Ende ist es nicht so selten, etwas mit GitHub zu bauen. Entweder funktionieren die Tools sofort, ohne dass Anpassungen erforderlich sind, oder wie ich es nenne "Aufhebens".


Vielleicht funktioniert es so:


 SOURCE_URI="git+https://github.com/probonopd/QtQuickApp.git" 

Nein. Immer noch diesen dummen Fehler zu bekommen und wie hier beschrieben zu tun


 sed -i -e 's|#ALLOW_UNSAFE_SOURCES|ALLOW_UNSAFE_SOURCES|g' /boot/home/config/settings/haikuports.conf 

Ich gehe ein bisschen weiter, aber warum schreit es mich an (GitHub ist nicht sicher!) Und versucht immer noch, etwas auszupacken.


Nach mr. waddlesplash :


Ja, der Grund war der Wunsch, die Integrität der für die Baugruppe erhaltenen Daten zu überprüfen. Eine Möglichkeit besteht darin, die Prüfsumme des Archivs zu überprüfen, aber Sie können natürlich auch einzelne Dateien hashen, die da nicht implementiert werden es dauert viel länger. Die Folge davon ist die "Unsicherheit" von Git und anderen VCS. Dies wird höchstwahrscheinlich immer der Fall sein, da das Erstellen eines Archivs auf GitHub recht einfach und oft schneller ist. Nun, in Zukunft wird die Fehlermeldung vielleicht nicht mehr so ​​auffällig sein ... (solche Rezepte werden in HaikuPorts nicht mehr zusammengeführt).

 ~/QtQuickApp> haikuporter -S QtQuickApp Checking if any dependency-infos need to be updated ... Looking for stale dependency-infos ... ---------------------------------------------------------------------- app-misc::QtQuickApp-1.0 /boot/home/haikuports/app-misc/QtQuickApp/QtQuickApp-1.0.recipe ----------------------------------------------------------------------Downloading: git+https://github.com/probonopd/QtQuickApp.git ... Warning: UNSAFE SOURCES ARE BAD AND SHOULD NOT BE USED IN PRODUCTION Warning: PLEASE MOVE TO A STATIC ARCHIVE DOWNLOAD WITH CHECKSUM ASAP! Cloning into bare repository '/boot/home/haikuports/app-misc/QtQuickApp/download/QtQuickApp.git'... Unpacking source of QtQuickApp.git tar: /boot/home/haikuports/app-misc/QtQuickApp/work-1.0/sources/QtQuickApp-1.0: Cannot open: No such file or directory tar: Error is not recoverable: exiting now Command 'git archive HEAD | tar -x -C "/boot/home/haikuports/app-misc/QtQuickApp/work-1.0/sources/QtQuickApp-1.0"' returned non-zero exit status 2 

Als alte Gewohnheit werde ich gute Leute auf dem # haiku-Kanal im irc.freenode.net-Netzwerk fragen. Und wo bin ich ohne sie? Nach der Eingabeaufforderung wurde mir klar, dass ich Folgendes verwenden sollte:


 srcGitRev="d0769f53639eaffdcd070bddfb7113c04f2a0de8" SOURCE_URI="https://github.com/probonopd/QtQuickApp/archive/$srcGitRev.tar.gz" SOURCE_DIR="QtQuickApp-$srcGitRev" CHECKSUM_SHA256="db8ab861cfec0ca201e9c7b6c0c9e5e828cb4e9e69d98e3714ce0369ba9d9522" 

Nun, es wurde klar, was es tat - es lud das Archiv mit den Quellen einer bestimmten Revision herunter. Aus meiner Sicht ist es dumm und nicht ganz das, was ich wollte, nämlich die neueste Revision aus der Hauptniederlassung herunterzuladen.


Einer der Entwickler erklärte es folgendermaßen:


Wir haben unser eigenes CI, sodass alles, was im Haikuports-Repository abgelegt ist, für alle Benutzer gesichert ist, und wir möchten nicht riskieren, "die neueste Version für den Upstream" zu sammeln und bereitzustellen.

Verstanden! In jedem Fall geschah dies:


 waiting for build package QtQuickApp-1.0-1 to be activated waiting for build package QtQuickApp-1.0-1 to be activated waiting for build package QtQuickApp-1.0-1 to be activated waiting for build package QtQuickApp-1.0-1 to be activated waiting for build package QtQuickApp-1.0-1 to be activated (...) 

Es wiederholt diese Anzeige unendlich. Anscheinend ist dies ein Fehler (gibt es eine Anwendung? Ich habe sie nicht gefunden).


Mit haikuporter und dem Haikuports- Repository haben Sie nicht das Gefühl, dass das Level "einfach funktioniert", aber als Entwickler mag ich einige Dinge an der Arbeit mit Haiku. Zum größten Teil ähnelt dies dem Open Build Service - einer Reihe von Tools zum Erstellen von Linux-Assemblys: extrem leistungsfähig, systematisch, aber für meine kleine Hallo-Welt-Anwendung überflüssig.


Wieder nach mr. waddlesplash:


In der Tat ist HaikuPorter standardmäßig sehr streng (außerdem gibt es sowohl den Flusenmodus als auch den strengen Modus, wodurch es noch strenger wird!), Aber nur, weil es Pakete erstellt, die funktionieren, und nicht nur Pakete. Daher schwört er auf nicht deklarierte Abhängigkeiten, nicht ordnungsgemäß importierte Bibliotheken, falsche Versionen usw. Ziel ist es, alle Probleme ausnahmslos zu erfassen, auch zukünftige, bevor der Benutzer davon erfährt (daher war es nicht möglich, avrdude zu installieren, da die Abhängigkeit tatsächlich im Rezept angegeben wurde). Bibliotheken sind nicht nur separate Pakete oder sogar undefinierte Versionen von SO. HaikuPorter stellt sicher, dass all dies in den Rezepten befolgt wird, um Laufzeitfehler zu vermeiden.

Grundsätzlich ist diese Genauigkeit bei der Erstellung des Betriebssystems gerechtfertigt, scheint mir jedoch für die Hallo-Welt-Anwendung unnötig zu sein. Ich beschloss, etwas anderes auszuprobieren.


Erstellen von Anwendungen im HPKG-Format mit dem Befehl "package create"


Vielleicht passt diese einfache Anleitung besser zu mir?


 mkdir -p apps/ cp QtQuickApp apps/cat > .PackageInfo <<\EOF name QtQuickApp version 1.0-1 architecture x86_64 summary "Demo QtQuick application" description "QtQuickApp is a demo QtQuick application for testing Haiku porting and packaging" packager "probono" vendor "probono" copyrights "probono" licenses "MIT" provides { QtQuickApp = 1.0-1 }requires { qt5 } EOFpackage create -b QtQuickApp.hpkg package add QtQuickApp.hpkg apps# See below if you also want the application # to appear in the menu 

Unerwartet schnell, unerwartet einfach, unerwartet effektiv. Genau so, wie ich es mag, unglaublich!


Installation - was und wo?


Die Datei QtQuickApp.hpkg wurde mithilfe des Dateimanagers nach ~/config/packages verschoben. Danach wurde QtQuickApp auf magische Weise in ~/config/apps angezeigt.
Wieder unerwartet schnell, einfach und effektiv. Erstaunlich, unglaublich!


Aber ... (wo ohne sie!)


Die Anwendung befindet sich immer noch nicht in der Anwendungsmenüliste und in QuickLaunch. Ich glaube, ich weiß bereits, wie ich das beheben kann. Im Dateimanager verschiebe ich QtQuickApp.hpkg von ~ / config / packages nach / system / packages.


Nein, noch vermisst. Anscheinend habe ich (naja, die Anweisung) etwas verpasst.


Nachdem ich mir die Registerkarte "Inhalt" in HaikuDepot für einige andere Anwendungen angesehen hatte, sah ich, dass es Dateien wie /data/mimedb/application/x-vnd... was noch bemerkenswerter ist, /data/deskbar/menu/Applications/…


Nun, und was soll ich dort setzen? Nun ...


 mkdir -p data/deskbar/menu/Applications/ ( cd data/deskbar/menu/Applications ; ln -s ../../../../apps/QtQuickApp . ) package add QtQuickApp.hpkg apps data 

Ich bin mir ziemlich sicher, dass dieser Trick eine Fahrt geben wird, aber es blieben Fragen: Warum wird er benötigt, wofür ist er gedacht? Meiner Meinung nach zerstört dies den Gesamteindruck, dass das System so hoch entwickelt ist.


Wie von Herrn erklärt. waddlesplash:


Manchmal gibt es Anwendungen, die andere Anwendungen benötigen, aber nicht im Menü. Zum Beispiel der LegacyPackageInstaller in Ihrem Screenshot, der .pkg-Archive im BeOS-Format verarbeitet. Ich möchte, dass Benutzer sie festlegen, aber ihre Anwesenheit im Menü führt zu Verwirrung.

Aus irgendeinem Grund scheint es mir eine einfachere Lösung zu geben, zum Beispiel Hidden=true in Linux .desktop Dateien. Warum machen Sie die "versteckten" Informationen nicht zu einer Ressource und einem Attribut des Dateisystems?


Was nicht besonders ausgefeilt ist, ist der Name der (bestimmten) Anwendung, die das Menü anzeigt, die deskbar , die auf dem Weg eng miteinander verbunden ist.


mr. waddlesplash bei dieser Gelegenheit erklärt:


"Deskbar" sollte in diesem Fall als eine Art allgemeiner Begriff verstanden werden (ungefähr derselbe wie "Taskleiste", der sich sowohl auf die Windows-Anwendung als auch auf das allgemeine Konzept bezieht). Nun, da dies eine deskbar , keine "Deskbar", kann dies auch auf ähnliche Weise verstanden werden.


2 "fast identische" Verzeichnisse mit Anwendungen darin


Warum gibt es 2 Verzeichnisse mit Anwendungen und warum gibt es eines in meiner QtQuickApplication und nicht in dem anderen? (Immerhin ist dies nicht ein System, sondern der zweite Benutzer, den ich persönlich verstehen würde).
Ich bin wirklich verwirrt und denke, wir sollten dies vereinheitlichen.


Kommentar mr. waddlesplash


Im Apps-Verzeichnis befinden sich Anwendungen, die im Menü nicht benötigt werden. Die Situation mit dem Menü muss jedoch wirklich verbessert werden, um es anpassbarer zu machen.

Anwendung, oder dies wird nicht passieren;)


Ich dachte: Ist es wirklich notwendig, Anwendungen in /system/apps , wenn Benutzer sie dort sehen - das ist unerwünscht. Vielleicht ist es besser, sie an einem anderen Ort zu platzieren, an dem der Benutzer ihnen nicht begegnet? Genau wie unter Mac OS X, wo der Inhalt der .app Pakete, der für den Benutzer in /Applications nicht sichtbar sein sollte, im Darm von / System / Library / ... `` versteckt ist.


Was ist mit Abhängigkeiten?


Ich denke, es lohnt sich, irgendwie auf Abhängigkeiten hinzuweisen, oder? Kann Qt als obligatorischer Bestandteil der Standardinstallation von Haiku angesehen werden? Nein! Qt ist standardmäßig nicht installiert. Kann ein Paketerstellungsprogramm Abhängigkeiten automatisch erkennen, indem es ELF-Dateien überprüft? Mir wurde gesagt, dass HaikuPorter das wirklich tut, das package jedoch nicht. Das liegt daran, dass er nur ein "Paket- hpkg " ist, der an sich einfach hpkg Dateien erstellt.


Sollte Haiku verfeinert werden, indem eine Richtlinie hinzugefügt wird, nach der ein Paket keine Abhängigkeiten von Paketen aufweisen sollte, die nicht in haikuports ? (Ich würde so gerne, da eine solche Richtlinie die Aufgabe viel einfacher macht - das System könnte die Abhängigkeiten jedes von überall heruntergeladenen Pakets automatisch auflösen, ohne sich mit zusätzlichen Paketquellen herumschlagen zu müssen.)


mr. waddlesplash erklärt:


, , ( ) — .

-, haikuports, . , , . [ AppImage? — . Übersetzer]



? , , .


?


, Inkscape (, , Haiku, ). https://gitlab.com/inkscape/inkscape .
, - , , , , , AppImage Linux ( , , , [ ! — . ] ). , , , , .



( )


Docker. GitLab runners Linux, , runners (, , Haiku, , , Docker , FreeBSD Docker, Haiku).


Haiku Docker Linux. Haiku . ? Haiku Docker, - QEMU/KVM ( , Docker)? , . , Scribus — Haiku. , , Haiku.


:


, , CMake/CPack. , , , . : , haikuporter , , , . Linux (Haiku ).

Ich applaudiere im Stehen. Linux (, ..), , . , Haiku Linux — .



POSIX Haiku , , . , #haiku irc.freenode.net. , .


, Qt, — . .


, " ", .. , haikuports. ( ) GitHub . Haiku Linux, Mc, "" XCode .app , .dmg , .
"" , , Linux, , , Haiku , .


Probieren Sie es selbst aus! Schließlich bietet das Haiku-Projekt tägliche Download-Bilder von DVD oder USB. Laden Sie zur Installation einfach das Image herunter und schreiben Sie es mit Etcher auf ein USB-Flash-Laufwerk


Hast du eine Frage? Wir laden Sie zum russischsprachigen Telegrammkanal ein .


Fehlerübersicht: Wie Sie sich in C und C ++ in den Fuß schießen. Haiku OS Rezeptsammlung


: Haiku.


:

Source: https://habr.com/ru/post/de463803/


All Articles