U mo quintu ghjornu cù Haiku : portemu qualchi prugrammi

U mo quintu ghjornu cù Haiku : portemu qualchi prugrammi

TL; DR: Un novu hà vistu Haiku per a prima volta, pruvatu à portà qualchi prugrammi da u mondu Linux.

U mo quintu ghjornu cù Haiku : portemu qualchi prugrammi
U mo primu prugramma Haiku portatu, imballatu in u so furmatu hpkg

Ricentimenti Aghju scupertu Haiku, un sistema operatore sorprendentemente bonu per i PC.
Oghje ampararaghju cumu portà novi prugrammi à stu sistema upirativu. L'enfasi principale hè una descrizzione di a prima sperienza di cambià à Haiku da u puntu di vista di un sviluppatore Linux. Mi scusemu per ogni sbagliu stupidu ch'e aghju fattu in a strada, postu chì ùn hè mancu una settimana da quandu aghju scaricatu Haiku per a prima volta.

Vogliu ghjunghje à trè scopi:

  • Port una semplice applicazione CLI
  • Port un'applicazione da GUI à Qt
  • Allora imballate in u formatu hpkg (poi ch'e aghju sempre à pensà à adattà AppDir è AppImage per Haiku...)

Cuminciamu. In sezzioni documentazione и sviluppucum'è lontana da HaikuPorts aghju trovu a direzzione ghjusta. Ci hè ancu un libru PDF in linea BeOS: Porting di una Applicazione Unix.
467 pagine - è questu hè di u 1997! Hè paura di guardà dentru, ma speru per u megliu. E parolle di u sviluppatore sò incoraggianti: "pigliò assai tempu perchè BeOS ùn era micca conforme à POSIX", ma Haiku "per a maiò parte" hè digià cusì.

Porting una semplice applicazione CLI

U primu pensamentu era di portà l'applicazione avrdude, ma, cum'è hè risultatu, questu hè digià fattu assai tempu fà.

Prima prova: nunda à fighjà

Ciò chì ùn possu micca capisce hè chì digià L'applicazioni sò state portate in Haiku per più di 10 anni - malgradu u fattu chì u SO stessu ùn hè ancu a versione 1.0.

Second tentativu: bisognu di riscrittura

Allora aduprà ptouch-770, CLI per cuntrullà l'impresora Brother P-Touch 770 chì aghju utilizatu per stampà etichette.
Aghju stampatu diverse etichette nantu à questu, è pudete avè digià vistu in l'articulu precedente. Un pocu prima, aghju scrittu un picculu prugramma GUI wrapper in Python (perchè hè in Gtk +, duverà esse riscritto, è questu hè un bonu mutivu per amparà).

U mo quintu ghjornu cù Haiku : portemu qualchi prugrammi
Stampante di etichette Brother P-Touch 770. Funcionerà cù Haiku ?

U gestore di pacchetti Haiku sapi di e librerie è i cumandamenti, dunque si riceve un missaghju "ùn possu truvà libintl" quandu eseguite configure - Aghju appena lanciatu pkgman install devel:libintl è u pacchettu necessariu serà trovu. Di listessa manera pkgman install cmd:rsync. Ebbè, ecc.

Eccettu quandu questu ùn funziona micca:

/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

Forse udev hè troppu basatu in Linux è dunque ùn esiste micca per Haiku. Chì significa chì aghju bisognu di edità u codice fonte chì aghju pruvatu à compilà.
Eh, ùn pudete micca saltà nantu à a testa, è ùn sò mancu da induve principià.

Terzu tentativu

Saria bellu d'avè tmate per Haiku, allora permetteraghju à i sviluppatori di Haiku di cunnette à a mo sessione di u terminal - in casu chì qualcosa va male. L'istruzzioni sò abbastanza sèmplice:

./autogen.sh
./configure
make
make install

Sembra bè, allora perchè ùn pruvà micca nantu à Haiku?

/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 questu passu aghju apertu HaikuDepot è cerca curses.
Qualcosa hè statu trovu, chì m'hà datu un suggerimentu per una dumanda più cumpetente:

/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

Una volta aghju andatu à HaikuDepot, è, sicuru, truvaru devel:msgpack_c_cpp_devel. Chì sò sti nomi strani ?

/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

À questu passu, aghju realizatu chì u porting di un prugramma in Haiku richiede assai più cunniscenze di ciò chì hè necessariu per una ricustruzzione simplice.
Aghju parlatu cù i sviluppatori amichevuli di Haiku, risulta chì ci hè un bug in msgpack, è dopu uni pochi di minuti vecu un patch in HaikuPorts. Puderaghju vede cù i mo ochji cumu u pacchettu currettu andendu quì (buildslave - macchine virtuali).

U mo quintu ghjornu cù Haiku : portemu qualchi prugrammi
Custruì u msgpack currettu nantu à buildmaster

In trà i tempi mandu un patch à upstream per aghjunghje supportu Haiku à msgpack.

Cinque minuti dopu, u msgpack aghjurnatu hè digià dispunibule in Haiku:

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

Inespettatu bè. L'aghju dettu ?!

Ritornu à u prublema originale:

/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

Avà pare chì msgpack ùn hè micca in culpa. mi cumentu IMAXLABEL в tty.c cum'è questa:

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

Risultatu:

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.

Ebbè, ci ripartemu... Per via :

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

sr. waddlesplash vi dice induve scavà:

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

Quì aghju publicatu config.log.

M'hà spiegatu chì ci hè qualcosa d'altru in libnetwork in più di libresolv in Haiku. Apparentemente, u codice deve esse editatu in più. Ci vole à pensà…

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

L'eterna quistione: chì passa ?

/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

A stessa cosa, solu in prufilu. Googled è trovu questu. Se aghjunghje -lssp "Qualchì volta" aiuta, pruvate:

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

Wow! Hè principiatu ! Ma…

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

Pruvaraghju di debug schedariu quì:

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

"Bad port ID" hè digià cum'è una carta di visita haiku. Forse qualcunu hà una idea di ciò chì hè sbagliatu è cumu risolve? Sì cusì, aghjurnà l'articulu. Link à GitHub.

Porting l'applicazione GUI in Qt.

Aghju sceltu una applicazione QML simplice.

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

Veramente simplice. Meno di un minutu !

Applicazioni di imballaggio in hpkg utilizendu haikuporter è haikuports.

Chì duverebbe principià? Ùn ci hè micca una documentazione simplice, andu à u canali #haiku in irc.freenode.net è sentu:

  • squadra package - un modu di livellu bassu per creà pacchetti. Per a maiò parte, PackageInfo hè abbastanza per ella, cum'è discrittu in a sezione "Fà in un pacchettu .hpkg propiu"
  • Aghju bisognu di fà qualcosa tali
  • Puderà aduprà hpkg-creator (si sbatte per mè, rapportu di errore)

Ùn hè micca chjaru chì fà. Pensu chì aghju bisognu di una guida per principianti in stile Hello World, idealmente un video. Saria piacevule ancu avè una introduzione cunvene à HaikuPorter, cum'è hè fattu in GNU hello.

Aghju leghje i seguenti:

haikuporter hè un strumentu per creà prughjetti di pacchetti cumuni per Haiku. Utiliza u repository HaikuPorts cum'è una basa per tutti i pacchetti. I ricetti di Haikuporter sò usati per creà pacchetti.

Inoltre, scopre chì:

Ùn ci hè bisognu di almacenà ricette in u almacenamentu HaikuPorts. Pudete fà un altru repository, mette e ricette in questu, è poi indicà u haikuporter.

Solu ciò chì aghju bisognu - se ùn cercate micca un modu per liberà publicamente u pacchettu. Ma questu hè un tema per un altru postu.

Installazione di haikuporter è 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

Scrive una ricetta

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
}

Assemblage a ricetta

Salvà u schedariu sottu u nome QtQuickApp-1.0.recipe, dopu à quale aghju lanciatu aikuporter -S ./QuickApp-1.0.recipe. E dipendenze sò verificate per tutti i pacchetti in u repository haikuports, chì piglia un pocu di tempu. Andaraghju à piglià un caffè.

Perchè a terra deve esse fattu questu cuntrollu nantu à a mo macchina lucale, è micca cintrali nantu à u servitore una volta per tutti?

Sicondu mr. waddlesplash:

Cù tali chì pudete riscrive qualsiasi fugliale in u repository 😉 Pudete ottimisà questu un pocu, calculendu l'infurmazioni necessarii quandu hè necessariu, perchè l'ultimi cambiamenti fatti sò abbastanza rari.

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

Risulta chì ùn ci hè nunda cum'è un schedariu di ricetta regulare chì cuntene u codice fonte di a vostra applicazione. Avete bisognu di mantene in un repository in u furmatu HaikuPorts.

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

Stu fattu rende l'assemblea più ingombrante. Ùn mi piace micca particularmente, ma pensu chì hè necessariu per chì eventualmente tutti i software open source appariscenu in HaikuPorts.

Aghju u seguente:

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

Chì ci hè? Dopu avè lettu irc facciu:

~/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!

Una quistione interessante hè ghjunta. Se aghju aghjunghje un checksum à a ricetta - currisponderà à l'ultimu git commit per una integrazione cuntinua? (U sviluppatore cunfirma: "Ùn hà micca travagliatu. E ricette sò pensate per esse relativamente stabile.")

Per piacè, aghjunghje à a ricetta:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Sempre micca cuntentu:

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

Chì faci ? Dopu tuttu, questu hè un repository git, u codice hè digià direttamente direttamente, ùn ci hè nunda per unpack. Da u mo puntu di vista, l'uttellu deve esse abbastanza intelligente per ùn circà un unpacker si hè sopra à l'url GitHub.

Forse uri git:// funzionerà

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

Avà si lamenta cusì:

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

Hmm, perchè tuttu hè cusì complicatu, perchè ùn pudete micca "travaglià solu"? Dopu tuttu, ùn hè micca cusì raru di custruisce qualcosa da GitHub. Ch'ella sia strumenti chì travaglianu subitu, senza bisognu di setup, o cum'è l'aghju chjamatu "fussing".

Forse funziona cusì:

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

Innò. Aghju sempre stu errore stranu è fà, cum'è descrittu quì

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

Mi muviu un pocu più, ma perchè mi grida (GitHub ùn hè micca sicuru!)

Sicondu sr. waddlesplash:

Ebbè, sì, u mutivu era u desideriu di verificà l'integrità di e dati ricevuti per l'assemblea. Una di l'opzioni hè di verificà u checksum di l'archiviu, ma pudete, sicuru, hash files individuali, chì ùn saranu micca implementati, perchè ci pigghia assai di più. A cunsiguenza di questu hè a "insecurity" di git è altri VCS. Questu serà più prubabilmente sempre u casu, postu chì a creazione di un archiviu in GitHub hè abbastanza faciule è spessu più veloce. Ebbè, in u futuru, forse u missaghju d'errore ùn serà micca cusì lampante... (ùn uniscemu più tali ricette in HaikuPorts).

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

Per via di l'abitudine, vanu à dumandà à e persone bè nantu à u canali #haiku nantu à a reta irc.freenode.net. E induve saria senza elli ? Dopu à u suggerimentu, aghju capitu chì duverebbe aduprà:

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

Va bè, hè diventatu chjaru ciò chì face - scarica un archiviu cù u codice fonte di una certa rivisione. Hè stupidu, da u mo puntu di vista, è micca esattamente ciò chì vulia, à dì, per scaricà l'ultima rivisione da u ramu maestru.

Unu di i sviluppatori l'hà spiegatu cusì:

Avemu u nostru propiu CI, cusì tuttu ciò chì hè piazzatu in u repository di haikuports serà imballatu per tutti l'utilizatori, è ùn vulemu risicà di cullà è di furnisce "tuttu in l'ultima versione upstream".

Capisci ! In ogni casu, questu hè ciò chì hè accadutu:

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

Ripete questu à l'infinitu. Apparentemente questu hè un errore (ci hè una applicazione? Ùn aghju micca pussutu truvà).

С haikuporter è repository haikuports Ùn hà micca un sensu di "funzioni solu", ma cum'è sviluppatore, ci sò parechje cose chì mi piace à travaglià cù Haiku. Per a maiò parte, hè simile à l'Open Build Service, un inseme di strumenti per custruisce e custruzzioni Linux: estremamente putente, cù un approcciu sistematicu, ma eccessiva per a mo piccula applicazione "hello world".

Di novu, sicondu mr. waddlesplash:

In verità, HaikuPorter hè abbastanza strettu per difettu (in più ci hè un modu lint è ancu un modu strettu per rende ancu più strettu!), Ma solu perchè crea pacchetti chì funzionanu, piuttostu cà solu creà pacchetti. Hè per quessa chì si lamenta di dipendenze micca dichjarate, biblioteche micca impurtate bè, versioni sbagliate, etc. L'ughjettu hè di catturà tutti i prublemi, cumpresi i futuri, prima chì l'utilizatore ne sapia (hè per quessa chì ùn era micca pussibule di stallà avrdude, perchè a dependenza era veramente specificata in a ricetta). Biblioteche ùn sò micca solu pacchetti individuali o ancu versioni SO specifiche. HaikuPorter assicura chì tuttu questu hè osservatu in i ricetti stessi per evità errori durante l'esekzione.

In principiu, stu livellu di rigore hè ghjustificatu quandu crea un sistema operatore, ma mi pare micca necessariu per una applicazione "hello world". Aghju decisu di pruvà qualcosa d'altru.

Custruisce l'applicazioni in u formatu hpkg usendu u cumandimu "create pacchettu".

Pò esse, questu Istruzzioni simplici funzionaranu megliu per mè?

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

Inaspettatamente veloce, inaspettatamente simplice, inesperu efficace. Esattamente cumu mi piace, stupente!

Installazione - chì è induve?

Sposta u schedariu QtQuickApp.hpkg à ~/config/packagesutilizendu un gestore di file, dopu à quale QtQuickApp apparsu magicamente in ~/config/apps.
In novu, inesperu veloce, simplice è efficace. Amazing, incredibile!

Ma... (induve seriamu senza elli !)

L'app manca sempre da a lista di menu di l'applicazioni è da QuickLaunch. Pensu ch'e aghju digià sapè cumu risolve. In u gestore di u schedariu movu QtQuickApp.hpkg da ~/config/packages à /system/packages.

No, manca sempre. Apparentemente, aghju (bene, è l'istruzzioni) mi mancava qualcosa.

Dopu avè guardatu a tabulazione "Cuntinutu" in HaikuDepot per alcune altre applicazioni, aghju vistu chì ci sò schedari cum'è /data/mimedb/application/x-vnd... ciò chì hè ancu più notevole hè /data/deskbar/menu/Applications/….

Ebbè, chì deve mette quì ? Aiò...

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

Sò sicuru chì questu truccu hà da travaglià, ma e dumande restanu: perchè hè questu necessariu, per chì hè? Pensu chì questu arruvina l'impressione generale chì u sistema hè cusì sofisticatu.

Comu spiegatu da Mr. waddlesplash:

Calchì volta ci sò appricazzioni chì altre applicazioni necessitanu ma ùn sò micca in u menù. Per esempiu, LegacyPackageInstaller in a vostra screenshot, processendu l'archivi .pkg in u formatu BeOS. Vogliu chì l'utilizatori l'installanu, ma a so prisenza in u menù porta à cunfusione.

Per una certa ragione mi pare chì ci hè una suluzione più simplice, per esempiu Hidden=true in i schedari .desktop nantu à Linux. Perchè ùn fate micca l'infurmazioni "hidden" una risorsa è attributu di u sistema di fugliale?

Ciò chì hè soprattuttu micca sottile hè u nome di (alcune) applicazione chì mostra u menu, deskbar, rigidamente ligata à a strada.

sr. waddlesplash spiega questu:

"Deskbar" in questu casu deve esse capitu cum'è una spezia di termini generale (in quantu à a "taskbar", chì si riferisce à l'applicazione Windows è à u cuncettu generale). Ebbè, postu chì questu deskbar, micca "Deskbar", questu pò ancu esse capitu in modu simili.

U mo quintu ghjornu cù Haiku : portemu qualchi prugrammi
2 cartulari "quasi identici" cù applicazioni in elli

Perchè ci sò cartulari 2 cù applicazioni, è ancu perchè u mo QtQuickApplication hè in unu, ma micca in l'altru? (Dopu tuttu, questu ùn hè micca un sistema unu, ma un secondu utilizatore, chì puderia capisce per mè personalmente).
Sò veramente cunfusu è pensu chì questu deve esse unificatu.

cumentu da mr. waddlesplash

U catalogu Apps cuntene l'applicazioni chì ùn sò micca necessariu in u menù. Ma a situazione cù u menu deve esse migliuratu, per fà più customizable.

Applicazione, o ùn succede micca 😉

Mi dumandu: hè veramente necessariu di accoglie l'applicazioni in /system/apps, Se l'utilizatori li vedenu quì, ùn hè micca desideratu. Forsi saria megliu di mette in un altru locu induve l'utilizatore ùn li scuntrà micca? Cum'è hè fattu in Mac OS X, induve u cuntenutu di i pacchetti .app, chì ùn deve micca esse visibile à l'utilizatore in /Applications, ammucciatu in a prufundità di /System/Library/…“`.

E dipendenze ?

Pensu chì vale a pena specificà e dipendenze in qualchì modu, nò ? Qt pò esse cunsideratu cum'è una parte obligatoria di l'installazione di Haiku per difettu? Innò ! Qt ùn hè micca stallatu per difettu. Pò un pacchettu di pacchettu detectà automaticamente dipendenze cuntrollandu i fugliali ELF? Mi sò dettu chì HaikuPorter faci veramente questu, ma package Innò. Hè perchè hè solu un "costruttore di pacchetti" chì crea solu i schedari da sè stessu hpkg.

Haiku deve esse fattu più sufisticatu aghjustendu una pulitica chì un pacchettu ùn deve micca dipende di i pacchetti fora di Haiku? haikuports? (Mi piacerebbe, perchè una tale pulitica faria e cose assai più faciule - u sistema puderia risolve automaticamente e dipendenze di ogni pacchettu scaricatu da ogni locu, senza scherzà cù fonti di pacchetti supplementari).

sr. waddlesplash spiega:

Ùn vulemu micca limità a libertà di i sviluppatori tantu, perchè hè ovvi chì, se CompanyX vole sustene u so propiu set di software cù dipendenze (è dunque un repository), farà cusì in modu liberu.

In questu casu, puderia esse ricumandendu chì i pacchetti di terze parti evitenu dipendenze nantu à qualcosa chì ùn hè micca inclusu in haikuports imballendu cumplettamente tuttu ciò chì hè necessariu cù l'applicazione. Ma pensu chì questu hè un tema per un futuru articulu in questa serie. [L'autore si dirige versu AppImage? - ca. traduttore]

Aghjunghje una icona di l'applicazione

E se vogliu aghjunghje una di l'icone pulite integrate à e risorse di a mo applicazione appena creata? Ci hè chì questu hè un tema maravigghiusu, cusì serà a basa per u prossimu articulu.

Cumu urganizà e custruzzioni cuntinue di applicazioni?

Immaginate un prughjettu cum'è Inkscape (sì, sò cuscente chì ùn hè ancu dispunibule in Haiku, ma hè cunvenutu per vede nantu à questu). Hanu un repository di codice fonte https://gitlab.com/inkscape/inkscape.
Ogni volta chì qualchissia cummette i so cambiamenti à u repository, custruite pipeline sò lanciati, dopu chì i cambiamenti sò automaticamente testati, custruiti, è l'applicazione imballata in diversi pacchetti, cumpresu AppImage per Linux (un pacchettu di l'applicazione standalone chì pò esse scaricatu per teste lucale indipendentemente). ciò chì pò esse installatu o micca in u sistema [A sapia! - ca. traduttore]). A listessa cosa succede cù ogni dumanda di fusione di filiale, cusì pudete scaricà l'applicazione custruita da u codice prupostu in a dumanda di fusione prima di fusione.

U mo quintu ghjornu cù Haiku : portemu qualchi prugrammi
Unisce e richieste cù stati di custruzzione è a capacità di scaricà i binari compilati se a custruzione hè successu (marcata in verde)

A custruzione corre in cuntenituri Docker. GitLab offre corridori gratuiti in Linux, è pensu chì puderia esse pussibule include i vostri propri corridori (per via, ùn vecu micca cumu questu puderia travaglià per sistemi cum'è Haiku, chì sò chì ùn anu micca Docker o equivalente, ma ancu per FreeBSD ùn ci hè micca Docker, cusì stu prublema ùn hè micca unicu à Haiku).

Ideale, l'applicazioni Haiku ponu esse custruite in un containeru Docker per Linux. In questa situazione, l'assemblea per Haiku pò esse introduttu in pipelines esistenti. Ci sò compilatori incruciati? O duverebbe emulà tutti l'Haiku in un containeru Docker usendu qualcosa cum'è QEMU / KVM (assumendu chì funziona cusì in Docker)? In modu, assai prughjetti utilizanu principii simili. Per esempiu, Scribus faci questu - hè digià dispunibule per Haiku. Un ghjornu venerà u ghjornu chì possu mandà tali Pull dumande à altri prughjetti per aghjunghje supportu Haiku.

Unu di i sviluppatori spiega:

Per altri prughjetti chì vulianu creà pacchetti stessi, u metudu CMake / CPack regulare hè supportatu. L'altri sistemi di custruzzione ponu esse supportati chjamendu direttamente u prugramma di custruzzione di u pacchettu, chì hè bè se a ghjente hè interessata in questu. L'esperienza mostra: finu à quì ùn ci hè statu assai interessu, cusì haikuporter hà travagliatu cum'è cunvene per noi, ma, in fine, i dui metudi anu da travaglià inseme. Duvemu intruduce un inseme di arnesi per u software cross-building da Linux o qualsiasi altru sistema operatore di u servitore (Haiku ùn hè micca pensatu per eseguisce nantu à i servitori).

Faccio una standing ovation. L'utilizatori regulari di Linux portanu tutta questa carica supplementaria è bagaglii supplementari (securità, cuntrollu strettu, etc.) chì hè necessariu per un sistema operatore di u servitore, ma micca per un persunale. Allora sò cumplettamente d'accordu chì esse capace di custruisce app Haiku in Linux hè a strada per andà.

cunchiusioni

Portà l'applicazioni POSIX à Haiku hè pussibule, ma pò esse più caru cà una ricustruzzione tipica. Di sicuru, avissi da esse chjappu cù questu per un bellu pezzu s'ellu ùn era per l'aiutu di e persone di u canali #haiku nantu à a reta irc.freenode.net. Ma ancu ùn anu micca sempre vistu immediatamente ciò chì era sbagliatu.

L'applicazioni scritte in Qt sò una eccezzioni faciule. Aghju aghjustatu una applicazione demo simplice senza prublemi.

Custruì un pacchettu per l'applicazioni simplici hè ancu abbastanza faciule, ma solu per quelli "tradiziunali liberati", i.e. avè versioni di l'archivi di codice fonte destinati à supportu in haikuports. Per una custruzzione cuntinua (custruite per ogni impegnu di cambiamenti) cù GitHub, tuttu pare micca cusì simplice. Quì Haiku si sente più cum'è una distribuzione Linux cà u risultatu in un Mac, induve quandu cliccate nantu à u buttone "Custruisce" in XCode avete un pacchettu. .app, pronta per esse inserita in una maghjina di discu .dmg, preparatu per scaricà nantu à u mo situ web.
A custruzzione cuntinuu di l'applicazioni basatu annantu à un sistema upirativu "servitore", per esempiu, Linux, diventerà più prubabilmente pussibule s'ellu ci hè una dumanda da i sviluppatori, ma à u mumentu u prughjettu Haiku hà altre attività più pressanti.

Pruvate voi stessu! Dopu tuttu, u prughjettu Haiku furnisce images per booting da DVD o USB, generatu Ежедневно. Per installà, basta à scaricà l'imaghjini è brusgià in un USB flash drive usendu Etcher

Avete dumande? Vi invitemu à a lingua russa canali di telegramma.

Panoramica di l'errore: Cumu sparà in u pede in C è C++. Raccolta di ricette Haiku OS

da a autore traduzzione: questu hè u quintu articulu di a serie nantu à Haiku.

Lista di l'articuli: Prima U sicondu U terzu Quarta

Source: www.habr.com

Add a comment