Senkyèm jou mwen ak Haiku: ann pote kèk pwogram

Senkyèm jou mwen ak Haiku: ann pote kèk pwogram

TL; DR: Yon newbie te wè Haiku pou premye fwa, ap eseye pò kèk pwogram nan mond lan Linux.

Senkyèm jou mwen ak Haiku: ann pote kèk pwogram
Premye pwogram Haiku mwen an, pake nan fòma hpkg li yo

Dènyèman Mwen dekouvri Haiku, yon sistèm operasyon etonan bon pou PC yo.
Jodi a mwen pral aprann kijan pou pote nouvo pwogram nan sistèm operasyon sa a. Konsantre prensipal la se yon deskripsyon premye eksperyans nan chanje nan Haiku nan pwen de vi yon pwomotè Linux. Mwen mande eskiz pou nenpòt erè estipid mwen te fè sou wout la, paske sa pa menm gen yon semèn depi premye telechaje Haiku.

Mwen vle reyalize twa objektif:

  • Port yon senp aplikasyon CLI
  • Pòte yon aplikasyon ki soti nan entèfas Qt
  • Lè sa a, pake yo nan fòma hpkg (piske mwen toujou ap panse sou adapte AppDir ak AppImage pou Haiku...)

An n kòmanse. Nan seksyon dokiman an и devlopmanosi byen ke wiki soti nan HaikuPorts mwen jwenn bon direksyon an. Gen menm yon liv PDF sou entènèt BeOS: Transfè yon aplikasyon Unix.
467 paj - e sa soti nan 1997! Li fè pè gade andedan, men mwen espere pou pi bon an. Pawòl pwomotè a ankouraje: "li te pran yon bon bout tan paske BeOS pa t 'konfòme POSIX," men Haiku "pou pifò pati" se deja konsa.

Transfè yon senp aplikasyon CLI

Premye panse a se te pò aplikasyon an avrdude, men, jan li te tounen soti, sa a se deja lontan sa.

Premye eseye: pa gen anyen yo gade

Sa mwen pa ka konprann se sa deja Aplikasyon yo te pote sou Haiku pou plis pase 10 ane - malgre lefèt ke OS nan tèt li se pa menm vèsyon 1.0 ankò.

Dezyèm tantativ: bezwen reekri

Se konsa, mwen pral itilize ptouch-770, CLI pou kontwole enprimant Brother P-Touch 770 ke mwen itilize pou enprime etikèt yo.
Mwen enprime plizyè etikèt sou li, epi ou ka deja wè li nan atik anvan an. Yon ti kras pi bonè, mwen te ekri yon ti pwogram Wrapper GUI nan Python (depi li nan Gtk +, li pral gen yo dwe reekri, e sa a se yon bon rezon pou aprann).

Senkyèm jou mwen ak Haiku: ann pote kèk pwogram
Enprimant etikèt Brother P-Touch 770. Èske l ap travay ak Haiku?

Manadjè pake Haiku a konnen sou bibliyotèk ak kòmandman, kidonk si mwen jwenn yon mesaj "pa ka jwenn libintl" lè m ap kouri configure - Mwen jis lanse pkgman install devel:libintl epi yo pral jwenn pake ki nesesè yo. Menm jan an tou pkgman install cmd:rsync. Oke, elatriye.

Eksepte lè sa a pa travay:

/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

Petèt udev twò baze sou Linux e se poutèt sa pa egziste pou Haiku. Ki vle di mwen bezwen modifye kòd sous la mwen ap eseye konpile.
Eh, ou pa ka sote sou tèt ou, epi mwen pa menm konnen ki kote yo kòmanse.

Twazyèm eseye

Li ta bon pou genyen tmate pou Haiku, Lè sa a, mwen ta pèmèt devlopè Haiku yo konekte ak sesyon tèminal mwen an - nan ka yon bagay ale mal. Enstriksyon yo se byen senp:

./autogen.sh
./configure
make
make install

Li sanble bon, kidonk poukisa pa eseye li sou 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

Nan etap sa a mwen louvri HaikuDepot epi chèche curses.
Yon bagay te jwenn, ki te ban m 'yon allusion pou yon rechèch ki pi konpetan:

/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

Ankò mwen te ale nan HaikuDepot, epi, nan kou, jwenn devel:msgpack_c_cpp_devel. Ki non etranj sa yo?

/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

Nan etap sa a, mwen reyalize ke pòtaj yon pwogram nan Haiku mande plis konesans pase sa nesesè pou yon senp rekonstwi.
Mwen te pale ak zanmitay devlopè Haiku yo, li sanble gen yon ensèk nan msgpack, epi apre kèk minit mwen wè yon patch nan HaikuPorts. Mwen ka wè ak pwòp je mwen ki jan pake a korije pral isit la (buildslave - machin vityèl).

Senkyèm jou mwen ak Haiku: ann pote kèk pwogram
Bati msgpack korije a sou buildmaster

Nan ant fwa mwen voye yon patch nan en pou ajoute sipò Haiku nan msgpack.

Senk minit apre, msgpack mete ajou deja disponib nan 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.

San atann bon. Èske mwen te di sa?!

Mwen retounen nan pwoblèm orijinal la:

/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

Koulye a, li sanble ke msgpack pa nan fòt. Mwen fè kòmantè IMAXLABEL в tty.c konsa:

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

Rezilta:

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.

Oke, isit la nou ale ankò... By the way:

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

mesye. waddlesplash di w ki kote pou w fouye:

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

Isit la mwen poste config.log.

Yo te eksplike m ke gen yon lòt bagay nan libnetwork anplis libresolv sou Haiku. Aparamman kòd la bezwen modifye pi lwen. Bezwen reflechi...

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

Kesyon p'ap janm fini an: kisa k ap pase?

/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

Menm bagay la, sèlman nan pwofil. Googled ak jwenn sa a. Si ou ajoute -lssp "pafwa" ede, mwen eseye:

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

Wow! Li kòmanse! Men…

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

Mwen pral eseye debug dosye isit la:

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

"Move pò ID" se deja tankou yon kat biznis haiku. Petèt yon moun gen yon lide ki sa ki mal ak ki jan yo ranje li? Si se konsa, mwen pral mete ajou atik la. Link nan GitHub.

Pòte aplikasyon entèfas la nan Qt.

Mwen chwazi yon aplikasyon QML senp.

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

Vrèman senp. Mwens pase yon minit!

Aplikasyon pou anbalaj nan hpkg lè l sèvi avèk haikuporter ak haikuports.

Ki sa mwen ta dwe kòmanse ak? Pa gen okenn dokiman ki senp, mwen ale nan chanèl #haiku sou irc.freenode.net epi tande:

  • Ekip package - yon fason ki ba-nivo yo kreye pakè. Pou pati ki pi, PackageInfo se ase pou li, jan sa dekri nan seksyon "Fè li nan yon pake .hpkg apwopriye"
  • Mwen bezwen fè yon bagay sa yo
  • Ka itilize hpkg-kreyatè (li fè aksidan pou mwen, rapò erè)

Li pa klè sa pou yo fè. Mwen devine mwen bezwen yon gid pou debutan Hello World style, depreferans yon videyo. Li ta bon pou tou gen yon entwodiksyon pratik nan HaikuPorter, jan sa fèt nan GNU hello.

Mwen li sa ki annapre yo:

haikuporter se yon zouti pou kreye pwojè pake komen pou Haiku. Li itilize depo HaikuPorts kòm yon baz pou tout pakè yo. Yo itilize resèt Haikuporter pou kreye pakè.

Anplis de sa, mwen jwenn ke:

Pa gen okenn nesesite pou sere resèt yo nan depo HaikuPorts. Ou ka fè yon lòt depo, mete resèt yo nan li, epi Lè sa a, montre haikuporter sou li.

Jis sa mwen bezwen - si se pa kap chèche yon fason piblikman lage pake a. Men, sa a se yon sijè pou yon lòt pòs.

Enstale haikuporter ak 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

Ekri yon resèt

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
}

Rasanble resèt la

Mwen sove fichye a anba non an QtQuickApp-1.0.recipe, apre sa mwen lanse aikuporter -S ./QuickApp-1.0.recipe. Depandans yo tcheke pou tout pakè nan depo a haikuports, ki pran kèk tan. Mwen pral pran yon ti kafe.

Poukisa sou latè ta dwe tcheke sa a sou machin lokal mwen an, epi yo pa santralman sou sèvè a yon fwa pou tout moun?

Dapre Mr. waddlesplash:

Avèk sa ou ka reekri nenpòt fichye nan repozitwa a 😉 Ou ka optimize sa a yon ti kras, kalkile enfòmasyon ki nesesè yo lè sa nesesè, paske dènye chanjman ki fèt yo se byen ra.

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

Li sanble pa gen okenn bagay tankou yon fichye resèt regilye ki gen kòd sous aplikasyon w lan. Ou bezwen kenbe li nan yon depo nan fòma HaikuPorts.

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

Reyalite sa a fè asanble a pi ankonbran. Mwen pa renmen li patikilyèman, men mwen panse li nesesè pou evantyèlman tout lojisyèl sous louvri ap parèt nan HaikuPorts.

Mwen jwenn sa ki annapre yo:

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

Ki sa ki mal? Apre mwen fin li irc mwen fè:

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

Yon kesyon enteresan te parèt. Si mwen ajoute yon sòm chèk nan resèt la - èske li matche ak dènye git commit pou entegrasyon kontinyèl? (Devlopè a konfime: "Li pa pral travay. Resèt yo fèt yo dwe relativman ki estab.")

Pou plezi, ajoute nan resèt la:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Toujou pa satisfè:

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

Ki sa l ap fè? Apre yo tout, sa a se yon depo git, kòd la deja la dirèkteman, pa gen anyen pou depake. Soti nan pwen de vi mwen an, zouti a ta dwe entelijan ase pa gade pou yon depake si li pi wo a adrès GitHub la.

Petèt uri git:// ap travay

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

Koulye a, li plenyen tankou sa a:

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

Hmm, poukisa tout bagay konplike konsa, poukisa ou pa ka "jis travay"? Apre yo tout, li pa estraòdinè yo bati yon bagay soti nan GitHub. Kit se zouti ki travay touswit, san yo pa bezwen konfigirasyon, oswa jan mwen rele li "fussing".

Petèt li pral travay tankou sa a:

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

Non. Mwen toujou jwenn erè sa a etranj epi mwen fè, jan sa dekri isit la

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

Mwen ap deplase yon ti kras pi lwen, men poukisa li kriye sou mwen (GitHub pa an sekirite!) E li toujou ap eseye debake yon bagay.

Dapre mesye. waddlesplash:

Oke, wi, rezon ki fè yo te dezi a tcheke entegrite nan done yo te resevwa pou asanble. Youn nan opsyon yo se verifye sòm chèk la nan achiv la, men ou ka, nan kou, hache dosye endividyèl yo, ki pa pral aplike, paske li pran pi lontan ankò. Konsekans sa a se "ensekirite" nan git ak lòt VCS. Sa a pral gen plis chans toujou ka a, depi kreye yon achiv sou GitHub se byen fasil e souvan pi vit. Oke, nan tan kap vini an, petèt mesaj erè a pa pral tèlman flachi ... (nou pa rantre resèt sa yo nan 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

Soti nan vye abitid mwen ale mande bon moun sou channel #haiku sou rezo irc.freenode.net. E ki kote mwen ta ye san yo? Apre allusion a, mwen reyalize ke mwen ta dwe itilize:

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

Oke, li te vin klè sa li fè - li telechaje yon achiv ak kòd sous la nan yon revizyon sèten. Li estipid, nan pwen de vi mwen, epi li pa egzakteman sa mwen te vle, sètadi, telechaje dènye revizyon an nan branch mèt la.

Youn nan devlopè yo eksplike li fason sa a:

Nou gen pwòp CI nou, kidonk tout sa ki mete nan repozitwa haikuports yo pral pake pou tout itilizatè yo, epi nou pa vle riske kolekte epi delivre "tout sa ki nan dènye vèsyon an an monte."

Konprann! Nan nenpòt ka, sa a se sa ki te pase:

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

Li repete sa ad infinitum. Aparamman sa a se yon erè (èske gen yon demann? Mwen pa t 'kapab jwenn li).

С haikuporter ak depo haikuports Li pa gen yon "jis travay" santi nan li, men kòm yon pwomotè, gen kèk bagay mwen renmen sou travay ak Haiku. Pou pi fò, li sanble ak Open Build Service la, yon seri zouti pou bati Linux bati: trè pwisan, ak yon apwòch sistematik, men twòp pou ti aplikasyon mwen an "bonjou mond".

Ankò, dapre Mr. waddlesplash:

Vreman vre, HaikuPorter se byen strik pa default (plis gen yon mòd lint osi byen ke yon mòd strik fè li menm plis strik!), Men sèlman paske li kreye pakè ki pral travay, olye ke jis kreye pakè. Se poutèt sa li plenyen sou depandans ki pa deklare, bibliyotèk pa enpòte byen, vèsyon ki pa kòrèk, elatriye. Objektif la se trape nenpòt pwoblèm, ki gen ladan pwoblèm nan lavni, anvan itilizatè a konnen sou li (se poutèt sa li pa t 'posib enstale avrdude, paske depandans la te aktyèlman espesifye nan resèt la). Bibliyotèk yo pa sèlman pakè endividyèl oswa menm vèsyon espesifik SO. HaikuPorter asire ke tout bagay sa yo obsève nan resèt yo tèt yo pou fè pou evite erè pandan ekzekisyon.

Nan prensip, nivo rijè sa a jistifye lè w ap kreye yon sistèm opere, men li sanble pa nesesè pou mwen pou yon aplikasyon "bonjou mond". Mwen deside eseye yon lòt bagay.

Bati aplikasyon nan fòma hpkg lè l sèvi avèk kòmandman "pake kreye".

Petèt, sa a Èske enstriksyon senp yo ap travay pi byen pou mwen?

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

San atann vit, san atann senp, san atann efikas. Egzakteman ki jan mwen renmen li, etonan!

Enstalasyon - ki sa ak ki kote?

Deplase dosye QtQuickApp.hpkg nan ~/config/packageslè l sèvi avèk yon manadjè dosye, apre sa QtQuickApp maji parèt nan ~/config/apps.
Yon fwa ankò, san atann vit, senp ak efikas. Etonan, enkwayab!

Men... (kote nou ta ye san yo!)

Aplikasyon an toujou manke nan lis meni aplikasyon yo ak QuickLaunch. Mwen panse mwen deja konnen ki jan yo ranje li. Nan manadjè fichye a mwen deplase QtQuickApp.hpkg soti nan ~/config/packages nan /system/packages.

Non, toujou manke. Aparamman, mwen (byen, ak enstriksyon yo) rate yon bagay.

Apre mwen fin gade tab "Contents" nan HaikuDepot pou kèk lòt aplikasyon, mwen wè ke gen dosye tankou /data/mimedb/application/x-vnd... sa ki menm pi remakab se /data/deskbar/menu/Applications/….

Oke, kisa mwen ta dwe mete la? Vini non...

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

Mwen byen sèten ke Trick sa a pral travay, men kesyon yo rete: poukisa sa a nesesè, ki sa li ye? Mwen panse ke sa a kraze enpresyon an jeneral ke sistèm nan se tèlman sofistike.

Kòm eksplike pa Mr. waddlesplash:

Pafwa gen aplikasyon ke lòt aplikasyon bezwen men yo pa nan meni an. Pou egzanp, LegacyPackageInstaller nan ekran ou a, trete achiv .pkg nan fòma BeOS. Mwen ta renmen itilizatè yo enstale yo, men prezans yo nan meni an ap mennen nan konfizyon.

Pou kèk rezon, li sanble ke gen yon solisyon ki pi senp, pou egzanp Hidden=true nan dosye yo .desktop sou Linux. Poukisa nou pa fè enfòmasyon "kache" yo yon resous ak atribi sistèm dosye a?

Ki sa ki espesyalman pa sibtil se non an nan (kèk) aplikasyon ki montre meni an, deskbar, rijidman mare sou wout la.

mesye. waddlesplash eksplike sa:

"Deskbar" nan ka sa a ta dwe konprann kòm yon kalite tèm jeneral (nan anpil menm jan ak "bare travay", ki refere a tou de aplikasyon an Windows ak konsèp jeneral la). Oke, depi sa a deskbar, pa "Deskbar", sa a kapab tou konprann nan yon fason menm jan an.

Senkyèm jou mwen ak Haiku: ann pote kèk pwogram
2 "prèske idantik" repèrtwar ak aplikasyon nan yo

Poukisa gen 2 repèrtwar ki gen aplikasyon, epi tou poukisa QtQuickApplication mwen an nan youn, men se pa nan lòt la? (Apre tou, sa a se pa yon sèl sistèm yon sèl, men yon dezyèm itilizatè youn, ki ta ka konprann mwen pèsonèlman).
Mwen vrèman konfonn e mwen panse ke sa a ta dwe inifye.

kòmantè pa Mr. waddlesplash

Katalòg Apps la gen aplikasyon ki pa nesesè nan meni an. Men, sitiyasyon an ak meni an reyèlman bezwen amelyore, fè li plis customizable.

Aplikasyon, oswa li pap rive 😉

Mwen te mande: èske li vrèman nesesè pou òganize aplikasyon yo nan /system/apps, si itilizatè yo wè yo la, li se endezirab. Petèt li ta pi bon pou mete yo nan yon lòt kote kote moun kap itilize li an p ap rankontre yo? Jis tankou li fè nan Mac OS X, kote sa ki nan pakè yo .app, ki pa ta dwe vizib itilizatè a nan /Applications, kache nan pwofondè /System/Library/…“`.

E depandans?

Mwen panse ke li vo espesifye depandans yo yon jan kanmenm, dwa? Èske Qt ka konsidere kòm yon pati obligatwa nan enstalasyon an Haiku pa default? Non! Qt pa enstale pa default. Èske yon mason pake otomatikman detekte depandans lè w tcheke dosye ELF? Mwen te di ke HaikuPorter aktyèlman fè sa, men package Non. Sa se paske se jis yon "pake builder" ki jis kreye fichiers pou kont li hpkg.

Èske yo ta dwe fè Haiku pi sofistike lè yo ajoute yon politik ke yon pake pa ta dwe gen depandans sou pakè andeyò Haiku? haikuports? (Mwen ta renmen sa paske yon politik konsa ta fè bagay sa yo anpil pi fasil-sistèm nan ta kapab otomatikman rezoud depandans pou chak pake telechaje soti nan nenpòt kote, san yo pa mele ak sous pake adisyonèl.)

mesye. waddlesplash eksplike:

Nou pa ta renmen limite libète devlopè yo anpil, paske li evidan ke si CompanyX vle sipòte pwòp seri lojisyèl li yo ak depandans (ak Se poutèt sa yon depo), li pral fè sa konplètman lib.

Nan ka sa a, li ta ka vo rekòmande ke pakè twazyèm pati evite depandans sou nenpòt bagay ki pa enkli nan haikuports pa konplètman anbalaj tout bagay ki nesesè ak aplikasyon an. Men, mwen panse ke sa a se yon sijè pou yon atik nan lavni nan seri sa a. [Èske otè a ap dirije nan direksyon AppImage? -apeprè tradiktè]

Ajoute yon icon aplikasyon

E si mwen vle ajoute youn nan pwòp ikon entegre yo nan resous aplikasyon mwen fèk kreye a? Li sanble ke sa a se yon sijè etonan, kidonk li pral baz pou pwochen atik la.

Ki jan yo òganize aplikasyon kontinyèl bati?

Imajine yon pwojè tankou Inkscape (wi, mwen konsyan ke li poko disponib nan Haiku, men li bon pou montre sou li). Yo gen yon depo kòd sous https://gitlab.com/inkscape/inkscape.
Chak fwa yon moun komèt chanjman yo nan depo a, yo lanse kanalizasyon konstriksyon, apre sa chanjman yo otomatikman teste, bati, ak aplikasyon an pake nan divès pakè, ki gen ladan AppImage pou Linux (yon pake aplikasyon otonòm ki ka telechaje pou tès lokal yo kèlkeswa. ki sa ki ka oswa ki pa ka enstale sou sistèm nan [Mwen te konnen sa! -apeprè tradiktè]). Menm bagay la rive ak chak demann fizyon branch, kidonk, ou ka telechaje aplikasyon an ki te bati nan kòd ki pwopoze nan demann fizyon an anvan fizyone.

Senkyèm jou mwen ak Haiku: ann pote kèk pwogram
Fizyone demann ak estati bati ak kapasite pou telechaje binè yo konpile si bati a reyisi (ki make an vèt)

Konstriksyon an kouri nan resipyan Docker. GitLab ofri kourè gratis sou Linux, e mwen panse ke li ta ka posib pou mete pwòp kourè ou yo (nan chemen an, mwen pa wè ki jan sa a ta travay pou sistèm tankou Haiku, ki mwen konnen pa gen Docker oswa ekivalan, men tou pou FreeBSD pa gen okenn Docker, kidonk pwoblèm sa a pa inik nan Haiku).

Idealman, aplikasyon Haiku yo ka bati andedan yon veso Docker pou Linux. Nan sitiyasyon sa a, asanble a pou Haiku ka prezante nan tiyo ki deja egziste. Èske gen konpilateur kwa? Oswa èske mwen ta dwe imite tout Haiku andedan yon veso Docker lè l sèvi avèk yon bagay tankou QEMU / KVM (an sipoze li pral travay konsa andedan Docker)? By wout la, anpil pwojè sèvi ak prensip menm jan an. Pou egzanp, Scribus fè sa - li deja disponib pou Haiku. Yon jou ap rive kote mwen ka voye sa yo Rale demann nan lòt pwojè yo ajoute sipò Haiku.

Youn nan devlopè yo eksplike:

Pou lòt pwojè ki vle kreye pakè tèt yo, yo sipòte metòd regilye CMake/CPack. Lòt sistèm konstriksyon yo ka sipòte lè w rele pwogram bati pakè a dirèkteman, ki bon si moun enterese nan li. Eksperyans montre: jiskaprezan pa te gen anpil enterè, kidonk haikuporter te travay kòm pratik pou nou, men, finalman, tou de metòd yo ta dwe travay ansanm. Nou ta dwe prezante yon seri zouti pou lojisyèl cross-building soti nan Linux oswa nenpòt lòt sistèm opere sèvè (Haiku pa fèt pou kouri sou sèvè).

Mwen bay yon ovasyon kanpe. Itilizatè Linux regilye yo pote tout chaj adisyonèl sa a ak bagaj adisyonèl (sekirite, kontwòl strik, elatriye) ki nesesè pou yon sistèm opere sèvè, men se pa pou yon sèl pèsonèl. Se konsa, mwen konplètman dakò ke yo te kapab bati apps Haiku sou Linux se yon fason a ale.

Konklizyon

Pote aplikasyon POSIX yo nan Haiku posib, men li ka pi chè pase yon rekonstriksyon tipik. Mwen ta definitivman kole ak sa a pou yon tan long si se pa t pou èd moun ki soti nan chanèl #haiku sou rezo irc.freenode.net. Men, menm yo pa t toujou imedyatman wè sa ki mal.

Aplikasyon ki ekri nan Qt se yon eksepsyon fasil. Mwen mete ansanm yon senp aplikasyon Demo san okenn pwoblèm.

Bati yon pake pou aplikasyon senp tou se byen fasil, men sèlman pou "tradisyonèlman lage" yo, i.e. gen vèsyon kòd sous achiv ki gen entansyon pou sipò nan haikuports. Pou yon konstriksyon kontinyèl (konstriksyon pou chak komèt chanjman) ak GitHub, tout bagay sanble yo pa tèlman senp. Isit la Haiku santi plis tankou yon distribisyon Linux pase rezilta a sou yon Mac, kote lè ou klike sou bouton "Build" nan XCode ou jwenn yon pake. .app, pare yo dwe mete nan yon imaj ki gen kapasite .dmg, prepare pou telechaje sou sit entènèt mwen an.
Konstriksyon kontinyèl aplikasyon ki baze sou yon sistèm opere "sèvè", pou egzanp, Linux, pral gen plis chans vin posib si gen demann nan men devlopè, men nan moman sa a pwojè Haiku a gen lòt, travay ki pi ijan.

Eseye li tèt ou! Apre yo tout, pwojè a Haiku bay imaj pou demaraj soti nan DVD oswa USB, pwodwi chak jou. Pou enstale, jis telechaje imaj la epi ekri li nan yon kondwi flash lè l sèvi avèk Etcher

W gen nenpòt kesyon? Nou envite ou nan ki pale Ris la chanèl telegram.

Apèsi sou erè: Ki jan yo tire tèt ou nan pye a nan C ak C++. Haiku OS koleksyon resèt

Soti nan otè a tradiksyon: sa a se senkyèm atik nan seri a sou Haiku.

Lis atik: Premye a Dezyèm lan Twazyèm lan Katriyèm

Sous: www.habr.com

Add nouvo kòmantè