Il-ħames jum tiegħi mal-Haiku: ejja nġibu xi programmi

Il-ħames jum tiegħi mal-Haiku: ejja nġibu xi programmi

TL; DR: Newbie ra Haiku għall-ewwel darba, jipprova jtrasferixxi xi programmi mid-dinja Linux.

Il-ħames jum tiegħi mal-Haiku: ejja nġibu xi programmi
L-ewwel programm tiegħi portat Haiku, ippakkjat fil-format hpkg tiegħu

Riċentement Skoprejt Haiku, sistema operattiva sorprendentement tajba għall-PCs.
Illum se nitgħallem kif nitrasferixxi programmi ġodda għal din is-sistema operattiva. L-enfasi ewlenija hija deskrizzjoni tal-ewwel esperjenza ta 'bidla għal Haiku mill-perspettiva ta' żviluppatur Linux. Niskuża ruħi għal xi żbalji stupidi li għamilt matul it-triq, peress li lanqas ilha ġimgħa minn meta niżżilt l-ewwel Haiku.

Irrid nilħaq tliet għanijiet:

  • Port applikazzjoni CLI sempliċi
  • Port applikazzjoni minn GUI għal Qt
  • Imbagħad ippakkjahom f'format hpkg (peress li għadni naħseb biex naddatta AppDir u AppImage għal Haiku...)

Ejja nibdew. F'sezzjonijiet dokumentazzjoni и żviluppkif ukoll wiki minn HaikuPorts sibt id-direzzjoni t-tajba. Hemm anke ktieb PDF onlajn BeOS: Porting ta' Applikazzjoni Unix.
467 paġna - u dan mill-1997! Hija tal-biża li tħares ġewwa, imma nittama għall-aħjar. Il-kliem tal-iżviluppatur huwa inkoraġġanti: "da żmien twil minħabba li BeOS ma kienx konformi mal-POSIX," iżda Haiku "fil-biċċa l-kbira" diġà huwa hekk.

Porting ta' applikazzjoni CLI sempliċi

L-ewwel ħsieb kien li port l-applikazzjoni avrdude, iżda, kif irriżulta, dan huwa diġà ghamel żmien twil ilu.

L-ewwel ipprova: xejn x'tara

Li ma nistax nifhem hu li diġà Apps ġew trasferiti għal Haiku għal aktar minn 10 snin - minkejja l-fatt li l-OS innifsu għadu lanqas il-verżjoni 1.0.

It-tieni tentattiv: jeħtieġ li tikteb mill-ġdid

Allura jien ser nuża ptouch-770, CLI għall-kontroll tal-printer Brother P-Touch 770 li nuża biex nipprintja t-tikketti.
Nipprintja diversi tikketti fuqha, u forsi diġà rajtu fl-artiklu preċedenti. Ftit qabel, ktibt programm żgħir ta’ wrapper GUI f’Python (billi huwa f’Gtk+, se jkollu jinkiteb mill-ġdid, u din hija raġuni tajba biex titgħallem).

Il-ħames jum tiegħi mal-Haiku: ejja nġibu xi programmi
Printer tat-tikketti Brother P-Touch 770. Se jaħdem mal-Haiku?

Il-maniġer tal-pakketti Haiku jaf dwar il-libreriji u l-kmandi, allura jekk niġi messaġġ "ma nistax insib libintl" meta nħaddem configure - Jien biss inniedi pkgman install devel:libintl u jinstab il-pakkett meħtieġ. Bl-istess mod pkgman install cmd:rsync. Ukoll, eċċ.

Ħlief meta dan ma jaħdimx:

/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

Forsi udev huwa bbażat wisq fuq il-Linux u għalhekk ma jeżistix għall-Haiku. Li jfisser li għandi bżonn neditja l-kodiċi tas-sors li qed nipprova niġbor.
Eh, ma tistax taqbeż minn fuq rasek, u lanqas naf minn fejn tibda.

It-tielet prova

Ikun sabiħ li jkollok tmate għal Haiku, allura nħalli lill-iżviluppaturi tal-Haiku jgħaqqdu mas-sessjoni tat-terminal tiegħi - f'każ li xi ħaġa tmur ħażin. L-istruzzjonijiet huma pjuttost sempliċi:

./autogen.sh
./configure
make
make install

Jidher tajjeb, allura għaliex ma tippruvax fuq 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

F'dan il-pass niftaħ HaikuDepot u nfittex curses.
Instab xi ħaġa, li tatni ħjiel għal mistoqsija aktar kompetenti:

/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

Għal darb'oħra mort HaikuDepot, u, ovvjament, sibt devel:msgpack_c_cpp_devel. X'inhuma dawn l-ismijiet strambi?

/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

F'dan il-pass, indunajt li l-porting ta 'programm għall-Haiku jeħtieġ ħafna aktar għarfien milli huwa meħtieġ għal bini mill-ġdid sempliċi.
Tkellimt mal-iżviluppaturi ta' ħbiberija tal-Haiku, jirriżulta li hemm bug f'msgpack, u wara ftit minuti nara garża f'HaikuPorts. Nista' nara b'għajnejja kif il-pakkett ikkoreġut sejjer hawn (buildslave - magni virtwali).

Il-ħames jum tiegħi mal-Haiku: ejja nġibu xi programmi
Nibnu l-msgpack korrett fuq buildmaster

Bejn iż-żmien nibgħat garża upstream biex iżżid l-appoġġ Haiku għal msgpack.

Ħames minuti wara, l-msgpack aġġornat huwa diġà disponibbli f'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.

Tajjeb bla mistenni. Għidt hekk?!

Nirritorna lura għall-problema oriġinali:

/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

Issa jidher li msgpack mhux tort. Qed nikkummenta IMAXLABEL в tty.c allura:

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

Riżultat:

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.

Ukoll, hawn nerġgħu mmorru... Mill-mod:

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

is-sur. waddlesplash jgħidlek fejn għandek tħaffer:

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

Hawnhekk I stazzjonati config.log.

Spjegawli li hemm xi ħaġa oħra fil-libnetwork minbarra libresolv fuq Haiku. Apparentement il-kodiċi jeħtieġ li jiġi editjat aktar. Hemm bżonn taħseb...

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

Il-mistoqsija eterna: x'qed jiġri?

/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

L-istess ħaġa, biss fil-profil. Googled u sab dan. Jekk iżżid -lssp "xi kultant" jgħin, nipprova:

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

Ara naqra! Qed jibda! Imma...

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

Nipprova niddebug fajl hawn:

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

"Bad port ID" diġà hija bħal business card haiku. Forsi xi ħadd għandu idea x'inhu ħażin u kif jirranġah? Jekk iva, naġġorna l-artiklu. Link għal GitHub.

Ittrasferixxi l-applikazzjoni GUI għal Qt.

Nagħżel applikazzjoni QML sempliċi.

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

Verament sempliċi. Inqas minn minuta!

Applikazzjonijiet ta 'ppakkjar f'hpkg bl-użu ta' haikuporter u haikuports.

X'għandi nibda? M'hemm l-ebda dokumentazzjoni sempliċi, immur fil-kanal #haiku fuq irc.freenode.net u nisma':

  • Team package - mod ta' livell baxx biex jinħolqu pakketti. Fil-biċċa l-kbira, PackageInfo hija biżżejjed għaliha, kif deskritt fit-taqsima "Nagħmluha f'pakkett .hpkg xieraq"
  • Għandi bżonn nagħmel xi ħaġa bħal dawn
  • Jista 'juża hpkg-kreatur (jiġġarraf għalija, rappurtar ta' żbalji)

Mhux ċar x'għandek tagħmel. Naħseb li għandi bżonn gwida għall-bidu tal-istil Hello World, idealment vidjo. Ikun sabiħ li jkollna wkoll introduzzjoni konvenjenti għal HaikuPorter, kif isir f'GNU hello.

Qed naqra dan li ġej:

haikuporter hija għodda għall-ħolqien ta 'proġetti ta' pakkett komuni għall-Haiku. Juża r-repożitorju HaikuPorts bħala bażi għall-pakketti kollha. Ir-riċetti tal-Haikuporter jintużaw biex jinħolqu pakketti.

Barra minn hekk, insib li:

M'hemmx bżonn li taħżen riċetti fil-ħażna HaikuPorts. Tista 'tagħmel repożitorju ieħor, poġġi r-riċetti fih, u mbagħad tipponta haikuporter lejha.

Eżatt dak li għandi bżonn - jekk mhux qed infittex mod kif nirilaxxa pubblikament il-pakkett. Iżda dan huwa suġġett għal post ieħor.

Installazzjoni ta' haikuporter u 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

Kitba ta 'riċetta

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
}

Armar tar-riċetta

Nissejvja l-fajl taħt l-isem QtQuickApp-1.0.recipe, wara li nniedi aikuporter -S ./QuickApp-1.0.recipe. Id-dipendenzi huma kkontrollati għall-pakketti kollha fir-repożitorju haikuports, li jieħu ftit taż-żmien. Immur nieħu ftit kafè.

Għaliex fid-dinja għandu jsir dan il-kontroll fuq il-magna lokali tiegħi, u mhux ċentralment fuq is-server darba għal kulħadd?

Skont is-sur. waddlesplash:

B'tali mod li tista 'tikteb mill-ġdid kwalunkwe fajl fir-repożitorju 😉 Tista' tottimizza dan ftit, tikkalkula l-informazzjoni meħtieġa meta tkun meħtieġa, minħabba li l-aħħar bidliet li saru huma pjuttost 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

Jirriżulta li m'hemm l-ebda ħaġa bħal fajl ta 'riċetta regolari li fih il-kodiċi tas-sors tal-applikazzjoni tiegħek. Għandek bżonn iżżommha f'repożitorju fil-format HaikuPorts.

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

Dan il-fatt jagħmel l-assemblaġġ aktar ingombranti. Ma jogħġobnix partikolarment, imma naħseb li huwa meħtieġ biex eventwalment is-software open source kollu jidher fil-HaikuPorts.

Nirċievi dan li ġej:

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

X'hemm ħażin? Wara li naqra irc nagħmel:

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

Qammet mistoqsija interessanti. Jekk inżid checksum mar-riċetta - se jaqbel mal-aħħar git commit għal integrazzjoni kontinwa? (L-iżviluppatur jikkonferma: "Mhux se jaħdem. Ir-riċetti huma ddisinjati biex ikunu relattivament stabbli.")

Għall-gost, żid mar-riċetta:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Għadu mhux sodisfatt:

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

X'inhu jagħmel? Wara kollox, dan huwa repożitorju git, il-kodiċi diġà qiegħed hemm direttament, m'hemm xejn x'jispakkja. Mill-punt di vista tiegħi, l-għodda għandha tkun intelliġenti biżżejjed biex ma tfittexx unpacker jekk tkun 'il fuq mill-url GitHub.

Forsi uri git:// se taħdem

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

Issa jilmenta hekk:

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

Hmm, għaliex kollox huwa daqshekk ikkumplikat, għaliex ma tistax "taħdem biss"? Wara kollox, mhuwiex daqshekk rari li tibni xi ħaġa minn GitHub. Kemm jekk huma għodod li jaħdmu minnufih, mingħajr il-ħtieġa ta 'setup, jew kif insejħilha "fussing".

Forsi se taħdem hekk:

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

Le. Għadni nieħu dan l-iżball stramb u nagħmel, kif deskritt hawn

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

Qed nimxi ftit aktar, imma għaliex qed tgħajjat ​​miegħi (GitHub mhux sikur!) U xorta qed nipprova nneħħi xi ħaġa.

Skond is-sur. waddlesplash:

Ukoll, iva, ir-raġuni kienet ix-xewqa li tiċċekkja l-integrità tad-dejta riċevuta għall-assemblaġġ. Waħda mill-għażliet hija li tivverifika l-checksum ta 'l-arkivju, iżda tista', ovvjament, hash fajls individwali, li mhux se jiġu implimentati, minħabba jieħu ħafna itwal. Il-konsegwenza ta 'dan hija l-"insigurtà" ta' git u VCS oħra. Dan x'aktarx dejjem ikun il-każ, peress li l-ħolqien ta 'arkivju fuq GitHub huwa pjuttost faċli u ħafna drabi aktar mgħaġġel. Ukoll, fil-futur, forsi l-messaġġ ta 'żball mhux se jkun daqshekk flashy... (m'għadniex ngħaqqdu riċetti bħal dawn f'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

Bi drawwa antik, immur nistaqsi nies tajbin fuq il-kanal #haiku fuq in-netwerk irc.freenode.net. U fejn inkun mingħajrhom? Wara l-ħjiel, indunajt li għandi nuża:

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

Okay, deher ċar x'tagħmel - tniżżel arkivju bil-kodiċi tas-sors ta 'ċerta reviżjoni. Huwa stupid, mil-lat tiegħi, u mhux eżattament dak li ridt, jiġifieri, li tniżżel l-aħħar reviżjoni mill-fergħa kaptan.

Wieħed mill-iżviluppaturi spjegaha b'dan il-mod:

Għandna CI tagħna stess, għalhekk dak kollu li jitqiegħed fir-repożitorju tal-haikuports se jiġi ppakkjat għall-utenti kollha, u ma rridux nirriskjaw li niġbru u nwasslu "kollox fl-aħħar verżjoni upstream."

Mifhum! Fi kwalunkwe każ, dan huwa dak li ġara:

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

Hija tirrepeti dan ad infinitum. Apparentement dan huwa żball (hemm applikazzjoni? Ma stajtx insibha).

С haikuporter u repożitorju haikuports M'għandux sensazzjoni ta '"xogħlijiet biss" għaliha, iżda bħala żviluppatur, hemm xi affarijiet li nħobb biex naħdem ma' Haiku. Fil-biċċa l-kbira, huwa simili għall-Open Build Service, sett ta 'għodod għall-bini ta' Linux builds: estremament qawwija, b'approċċ sistematiku, iżda overkill għall-applikazzjoni żgħira tiegħi "hello world".

Għal darb'oħra, skont is-sur. waddlesplash:

Tabilħaqq, HaikuPorter huwa pjuttost strett b'mod awtomatiku (barra minn hekk hemm modalità lint kif ukoll modalità stretta biex tagħmilha saħansitra aktar stretta!), Iżda biss għax toħloq pakketti li se jaħdmu, aktar milli sempliċement joħolqu pakketti. Huwa għalhekk li jilmenta dwar dipendenzi mhux iddikjarati, libreriji mhux importati kif suppost, verżjonijiet skorretti, eċċ. L-għan huwa li taqbad kwalunkwe u kull problema, inklużi dawk futuri, qabel ma l-utent ikun jaf biha (dan hu għaliex ma kienx possibbli li tinstalla avrdude, minħabba li d-dipendenza kienet attwalment speċifikata fir-riċetta). Libreriji mhumiex biss pakketti individwali jew saħansitra verżjonijiet SO speċifiċi. HaikuPorter jiżgura li dan kollu jiġi osservat fir-riċetti nfushom biex jiġu evitati żbalji waqt l-eżekuzzjoni.

Fil-prinċipju, dan il-livell ta 'rigorożità huwa ġġustifikat meta tinħoloq sistema operattiva, iżda jidhirli mhux meħtieġ għal applikazzjoni "hello world". Iddeċidejt li nipprova xi ħaġa oħra.

Bini ta' applikazzjonijiet f'format hpkg bl-użu tal-kmand "package create".

Jista 'jkun, dan Istruzzjonijiet sempliċi se jaħdmu aħjar għalija?

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

Mgħaġġel bla mistenni, sempliċi b'mod mhux mistenni, effettiv b'mod mhux mistenni. Eżattament kif jogħġobni, aqwa!

Installazzjoni - x'u fejn?

Ċaqlaq il-fajl QtQuickApp.hpkg għal ~/config/packagesbl-użu ta 'maniġer tal-fajls, u wara deher QtQuickApp b'mod maġiku ~/config/apps.
Għal darb'oħra, veloċi, sempliċi u effettiva bla mistenni. tal-għaġeb, inkredibbli!

Imma... (fejn inkunu mingħajrhom!)

L-app għadha nieqsa mil-lista tal-menu tal-apps u QuickLaunch. Naħseb li diġà naf kif nirranġaha. Fil-maniġer tal-fajls nimxi QtQuickApp.hpkg minn ~/config/packages għal /system/packages.

No, għadu nieqes. Apparentement, jien (tajjeb, u l-istruzzjonijiet) qbiżt xi ħaġa.

Wara li ħarist lejn it-tab "Kontenut" f'HaikuDepot għal xi applikazzjonijiet oħra, rajt li hemm fajls bħal /data/mimedb/application/x-vnd... dak li hu saħansitra aktar notevoli huwa /data/deskbar/menu/Applications/….

Ukoll, x'għandi npoġġi hemm? Ejja...

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

Jien ċert li dan it-trick se jaħdem, iżda l-mistoqsijiet jibqgħu: għaliex dan huwa meħtieġ, għalxiex? Naħseb li dan iħassar l-impressjoni ġenerali li s-sistema hija tant sofistikata.

Kif spjegat is-Sur. waddlesplash:

Xi drabi jkun hemm applikazzjonijiet li applikazzjonijiet oħra jeħtieġu iżda li mhumiex fil-menu. Pereżempju, LegacyPackageInstaller fil-screenshot tiegħek, tipproċessa arkivji .pkg fil-format BeOS. Nixtieq li l-utenti jinstallawhom, iżda l-preżenza tagħhom fil-menu twassal għal konfużjoni.

Għal xi raġuni jidhirli li hemm soluzzjoni aktar sempliċi, pereżempju Hidden=true fil-fajls .desktop fuq Linux. Għaliex ma tagħmilx l-informazzjoni "moħbija" riżorsa u attribut tas-sistema tal-fajls?

Dak li huwa speċjalment mhux sottili huwa l-isem ta '(xi) applikazzjoni li turi l-menu, deskbar, marbut b'mod riġidu tul it-triq.

is-sur. waddlesplash jispjega dan:

"Deskbar" f'dan il-każ għandha tinftiehem bħala tip ta 'terminu ġenerali (b'mod ferm bl-istess mod bħal "taskbar", li tirreferi kemm għall-applikazzjoni tal-Windows kif ukoll għall-kunċett ġenerali). Ukoll, peress li dan deskbar, mhux "Deskbar", dan jista 'wkoll jinftiehem b'mod simili.

Il-ħames jum tiegħi mal-Haiku: ejja nġibu xi programmi
2 direttorji "kważi identiċi" b'applikazzjonijiet fihom

Għaliex hemm 2 direttorji b'applikazzjonijiet, u wkoll għaliex QtQuickApplication tiegħi qiegħed f'wieħed, iżda mhux fl-ieħor? (Wara kollox, din mhix sistema waħda, iżda t-tieni waħda mill-utent, li tkun niftiehem għalija personalment).
Jien tassew konfuż u naħseb li dan għandu jkun unifikat.

kumment mis-Sur. waddlesplash

Il-katalgu tal-Apps fih applikazzjonijiet li mhumiex meħtieġa fil-menu. Iżda s-sitwazzjoni bil-menu verament trid titjieb, biex tagħmilha aktar customizable.

Applikazzjoni, jew mhux se jiġri 😉

Staqsejt: huwa verament meħtieġ li jospita applikazzjonijiet fi /system/apps, jekk l-utenti jarawhom hemm, mhux mixtieq. Forsi jkun aħjar li tpoġġihom f'post ieħor fejn l-utent ma jiltaqax magħhom? Eżatt bħal dan isir fil-Mac OS X, fejn il-kontenut tal-pakketti .app, li m'għandux ikun viżibbli għall-utent fi /Applications, jistaħbew fil-fond ta' /System/Library/…“`.

Xi ngħidu dwar id-dipendenzi?

Naħseb li ta' min jispeċifika d-dipendenzi b'xi mod, hux? Qt jista' jitqies bħala parti obbligatorja mill-installazzjoni tal-Haiku b'mod awtomatiku? Le! Qt mhuwiex installat awtomatikament. Jista' bennej tal-pakketti awtomatikament jiskopri dipendenzi billi jiċċekkja l-fajls ELF? Qaluli li HaikuPorter fil-fatt jagħmel dan, iżda package Nru. Dak għax huwa biss "bennej tal-pakkett" li joħloq biss fajls waħdu hpkg.

Il-Haiku għandu jsir aktar sofistikat billi tiżdied politika li pakkett m'għandux ikollu dipendenzi fuq pakketti barra mill-Haiku? haikuports? (Nixtieq, għax politika bħal din tagħmel l-affarijiet ħafna eħfef - is-sistema tkun tista' awtomatikament issolvi d-dipendenzi ta' kull pakkett imniżżel minn kullimkien, mingħajr ma tħawwad ma' sorsi ta' pakketti addizzjonali.)

is-sur. waddlesplash jispjega:

Ma nixtiequx nillimitaw il-libertà tal-iżviluppaturi tant, għax huwa ovvju li jekk CompanyX trid tappoġġja s-sett ta 'softwer tagħha stess b'dipendenzi (u għalhekk repożitorju), tagħmel dan b'mod kompletament ħieles.

F'dak il-każ, jista 'jkun ta' min jirrakkomanda li pakketti ta 'partijiet terzi jevitaw dipendenzi fuq xi ħaġa mhux inkluża fil-haikuports billi jippakkjaw kompletament dak kollu meħtieġ mal-applikazzjoni. Imma naħseb li dan huwa suġġett għal artiklu futur f'din is-sensiela. [L-awtur sejjer lejn AppImage? — madwar. traduttur]

Żieda ta 'ikona ta' applikazzjoni

X'jiġri jekk irrid inżid waħda mill-ikoni puliti integrati mar-riżorsi tal-applikazzjoni tiegħi li għadha kif inħolqot? Jirriżulta li dan huwa suġġett aqwa, għalhekk se jkun il-bażi għall-artiklu li jmiss.

Kif torganizza bini kontinwu ta' applikazzjoni?

Immaġina proġett bħal Inkscape (iva, jiena konxju li għadu mhux disponibbli fil-Haiku, iżda huwa konvenjenti li jintwera fuqu). Huma għandhom repożitorju tal-kodiċi tas-sors https://gitlab.com/inkscape/inkscape.
Kull darba li xi ħadd jikkommetti l-bidliet tiegħu fir-repożitorju, jitniedu pipelines tal-bini, u wara l-bidliet jiġu ttestjati awtomatikament, mibnija, u l-applikazzjoni tiġi ppakkjata f’diversi pakketti, inkluż AppImage għal Linux (pakkett ta’ applikazzjoni waħdu li jista’ jitniżżel għall-ittestjar lokali indipendentement) x'jista' jew ma jistax jiġi installat fis-sistema [Kont naf! — madwar. traduttur]). L-istess ħaġa jiġri ma 'kull talba għall-għaqda tal-fergħat, sabiex tkun tista' tniżżel l-applikazzjoni mibnija mill-kodiċi propost fit-talba għall-għaqda qabel l-għaqda.

Il-ħames jum tiegħi mal-Haiku: ejja nġibu xi programmi
Amalgama talbiet bi status ta' bini u l-abbiltà li tniżżel il-binarji kkompilati jekk il-bini jirnexxi (immarkat bl-aħdar)

Il-bini jaħdem f'kontenituri Docker. GitLab joffri runners b'xejn fuq Linux, u naħseb li jista 'jkun possibbli li tinkludi runners tiegħek stess (mill-mod, ma narax kif dan jaħdem għal sistemi bħal Haiku, li naf li m'għandhomx Docker jew ekwivalenti, iżda ukoll għal FreeBSD m'hemm l-ebda Docker, għalhekk din il-problema mhix unika għal Haiku).

Idealment, l-applikazzjonijiet Haiku jistgħu jinbnew ġewwa kontenitur Docker għal Linux. F'din is-sitwazzjoni, l-assemblaġġ għall-Haiku jista 'jiġi introdott f'pipelines eżistenti. Hemm cross compilers? Jew għandi nimita l-Haiku kollu ġewwa kontenitur Docker billi tuża xi ħaġa bħal QEMU/KVM (jekk wieħed jassumi li se taħdem hekk ġewwa Docker)? Mill-mod, ħafna proġetti jużaw prinċipji simili. Pereżempju, Scribus jagħmel dan - huwa diġà disponibbli għall-Haiku. Jum wieħed jasal il-jum meta nista’ nibgħat bħal dawn Iġbed talbiet għal proġetti oħra biex iżżid l-appoġġ tal-Haiku.

Wieħed mill-iżviluppaturi jispjega:

Għal proġetti oħra li jixtiequ joħolqu pakketti huma stess, il-metodu CMake/CPack regolari huwa appoġġjat. Sistemi oħra tal-bini jistgħu jiġu appoġġjati billi ċċempel direttament il-programm tal-bini tal-pakkett, li huwa tajjeb jekk in-nies ikunu interessati fih. L-esperjenza turi: s'issa ma kienx hemm ħafna interess, għalhekk il-haikuporter ħadem bħala konvenjenti għalina, iżda, fl-aħħar mill-aħħar, iż-żewġ metodi għandhom jaħdmu flimkien. Għandna nintroduċu sett ta 'għodod għal softwer cross-building minn Linux jew kwalunkwe sistema operattiva server oħra (Haiku mhux iddisinjat biex jaħdem fuq servers).

Nagħti standing ovation. Utenti regolari tal-Linux iġorru din it-tagħbija addizzjonali kollha u bagalji addizzjonali (sigurtà, kontroll strett, eċċ.) li hija meħtieġa għal sistema operattiva għal server, iżda mhux għal waħda personali. Għalhekk naqbel għal kollox li l-mod li wieħed jista' jibni l-applikazzjonijiet Haiku fuq Linux huwa l-mod li jrid isir.

Konklużjoni

Il-porting ta 'applikazzjonijiet POSIX għal Haiku huwa possibbli, iżda jista' jkun aktar għali minn rikostruzzjoni tipika. Żgur li nkun mwaħħla ma’ dan għal żmien twil kieku ma kienx għall-għajnuna ta’ nies mill-kanal #haiku fuq in-netwerk irc.freenode.net. Imma lanqas huma mhux dejjem raw immedjatament x’kien ħażin.

Applikazzjonijiet miktuba f'Qt huma eċċezzjoni faċli. I għaqqad applikazzjoni demo sempliċi mingħajr problemi.

Il-bini ta 'pakkett għal applikazzjonijiet sempliċi huwa wkoll pjuttost faċli, iżda biss għal dawk "tradizzjonalment rilaxxati", i.e. li jkollhom arkivji tal-kodiċi tas-sors verġjonati maħsuba għall-appoġġ fil-haikuports. Għal bini kontinwu (bini għal kull impenn ta 'bidliet) ma' GitHub, kollox jidher li mhux daqshekk sempliċi. Hawnhekk Haiku iħossu aktar bħal distribuzzjoni Linux milli r-riżultat fuq Mac, fejn meta tikklikkja l-buttuna "Bini" f'XCode ikollok pakkett .app, lest biex jiddaħħal f'immaġni tad-diska .dmg, ippreparat għat-tniżżil fuq il-websajt tiegħi.
Bini kontinwu ta 'applikazzjonijiet ibbażati fuq sistema operattiva "server", pereżempju, Linux, x'aktarx isir possibbli jekk ikun hemm domanda mill-iżviluppaturi, iżda bħalissa l-proġett Haiku għandu kompiti oħra, aktar urġenti.

Ipprova lilek innifsek! Wara kollox, il-proġett Haiku jipprovdi immaġini għall-ibbutjar minn DVD jew USB, iġġenerat kuljum. Biex tinstalla, tniżżel l-immaġni u iktebha fuq flash drive bl-użu Etcher

Għandek xi mistoqsijiet? Aħna nistednuk għall-russu jitkellmu kanal tat-telegramma.

Ħarsa ġenerali tal-iżball: Kif tispara lilek innifsek fis-sieq f'C u C++. Kollezzjoni ta 'riċetti Haiku OS

Mill l-awtur traduzzjoni: dan huwa l-ħames artiklu fis-sensiela dwar il-Haiku.

Lista ta' artikli: L-ewwel It-tieni It-tielet Ir-raba '

Sors: www.habr.com

Żid kumment