Mana piektÄ diena ar Haiku: portÄsim dažas programmas
TL; DR: IesÄcÄjs pirmo reizi redzÄja Haiku, mÄÄ£inot pÄrnest dažas programmas no Linux pasaules.
Mana pirmÄ Haiku portÄtÄ programma, kas iepakota hpkg formÄtÄ
Nesen Es atklÄju Haiku, pÄrsteidzoÅ”i labu operÄtÄjsistÄmu personÄlajiem datoriem.
Å odien es uzzinÄÅ”u, kÄ portÄt jaunas programmas uz Å”o operÄtÄjsistÄmu. GalvenÄ uzmanÄ«ba tiek pievÄrsta pirmÄs pieredzes aprakstam, pÄrejot uz Haiku no Linux izstrÄdÄtÄja viedokļa. Es atvainojos par stulbÄm kļūdÄm, ko pieļÄvu ceļÄ, jo nav pagÄjusi pat nedÄļa, kopÅ” pirmo reizi lejupielÄdÄju Haiku.
Es vÄlos sasniegt trÄ«s mÄrÄ·us:
PortÄjiet vienkÄrÅ”u CLI lietojumprogrammu
PortÄjiet lietojumprogrammu no GUI uz Qt
PÄc tam iesaiÅojiet tos hpkg formÄtÄ (jo es joprojÄm domÄju par AppDir un AppImage pielÄgoÅ”anu Haiku...)
SÄksim. SadaļÄs dokumentÄciju Šø attÄ«stÄ«bu, kÄ arÄ« iekÅ”Ä Wiki no HaikuPorts atradu pareizo virzienu. Ir pat tieÅ”saistes PDF grÄmata BeOS: Unix lietojumprogrammas pÄrneÅ”ana.
467 lappuses - un tas ir no 1997. gada! Ir bail skatÄ«ties iekÅ”Ä, bet ceru uz to labÄko. IzstrÄdÄtÄja vÄrdi ir iepriecinoÅ”i: āpagÄja ilgs laiks, jo BeOS nebija saderÄ«gs ar POSIXā, bet Haiku ālielÄkotiesā jau tÄds ir.
VienkÄrÅ”as CLI lietojumprogrammas pÄrneÅ”ana
PirmÄ doma bija lietojumprogrammas pÄrneÅ”ana avrdude, bet, kÄ izrÄdÄ«jÄs, tas jau ir ir darÄ«juÅ”i sen.
TÄpÄc es izmantoÅ”u ptouch-770, CLI, lai kontrolÄtu Brother P-Touch 770 printeri, ko izmantoju uzlÄ«mju drukÄÅ”anai.
Es uz tÄ drukÄju dažÄdas etiÄ·etes, un jÅ«s, iespÄjams, to jau redzÄjÄt iepriekÅ”ÄjÄ rakstÄ. Nedaudz agrÄk es uzrakstÄ«ju nelielu GUI iesaiÅojuma programmu Python (tÄ kÄ tÄ ir Gtk+, tÄ bÅ«s jÄpÄrraksta, un tas ir labs iemesls mÄcÄ«ties).
Brother P-Touch 770 uzlīmju printeris. Vai tas darbosies ar Haiku?
Haiku pakotÅu pÄrvaldnieks zina par bibliotÄkÄm un komandÄm, tÄdÄļ, ja palaižot saÅemu ziÅojumu "nevaru atrast libintl". configure - Es tikko palaižu pkgman install devel:libintl un vajadzÄ«gÄ pakete tiks atrasta. TÄpat pkgman install cmd:rsync. Nu utt.
IzÅemot gadÄ«jumus, kad tas nedarbojas:
/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
IespÄjams, udev ir pÄrÄk balstÄ«ts uz Linux, un tÄpÄc tas nepastÄv priekÅ” Haiku. Tas nozÄ«mÄ, ka man ir jÄrediÄ£Ä avota kods, ko mÄÄ£inu apkopot.
Eh, tu nevari lÄkt pÄri galvai, un es pat nezinu, ar ko sÄkt.
TreÅ”ais mÄÄ£inÄjums
BÅ«tu jauki, ja bÅ«tu tmate Haiku gadÄ«jumÄ es ļautu Haiku izstrÄdÄtÄjiem pieslÄgties manai terminÄļa sesijai - ja kaut kas noiet greizi. NorÄdÄ«jumi ir pavisam vienkÄrÅ”i:
./autogen.sh
./configure
make
make install
IzskatÄs labi, kÄpÄc gan neizmÄÄ£inÄt to uz 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
Å ajÄ solÄ« es atveru HaikuDepot un meklÄju curses.
Tika atrasts kaut kas, kas man deva mÄjienu precÄ«zÄkam vaicÄjumam:
/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
Atkal devos uz HaikuDepot, un, protams, atradu devel:msgpack_c_cpp_devel. KÄdi ir Å”ie dÄ«vainie vÄrdi?
/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
Å ajÄ solÄ« es sapratu, ka programmas pÄrneÅ”ana uz Haiku prasa daudz vairÄk zinÄÅ”anu, nekÄ nepiecieÅ”ams vienkÄrÅ”ai pÄrbÅ«vei.
Es runÄju ar draudzÄ«gajiem Haiku izstrÄdÄtÄjiem, izrÄdÄs, ka msgpack ir kļūda, un pÄc dažÄm minÅ«tÄm es redzu ielÄpu HaikuPorts. SavÄm acÄ«m redzu kÄ izlabots iepakojums dodos Å”eit (buildslave ā virtuÄlÄs maŔīnas).
PÄc piecÄm minÅ«tÄm atjauninÄtais msgpack jau ir pieejams Haiku valodÄ:
/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.
Negaidīti labi. Vai es to teicu?!
Atgriežos pie sÄkotnÄjÄs problÄmas:
/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
Tagad izskatÄs, ka msgpack nav vainÄ«gs. Es komentÄju IMAXLABEL Š² tty.c tÄ:
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.
Nu, lūk, atkal... Starp citu:
/Haiku/home/tmate> ./configure | grep -i OPENAT
checking for openat... no
/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.
ViÅi man paskaidroja, ka bez Haiku libresolv ir vÄl kaut kas libresolv tÄ«klÄ. AcÄ«mredzot kods ir jÄrediÄ£Ä tÄlÄk. JÄdomÄā¦
find . -type f -exec sed -i -e 's|lresolv|lnetwork|g' {} ;
Mūžīgais jautÄjums: kas notiek?
/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
Tas pats, tikai profilÄ. Google un atrada Å”o. Ja pievienojat -lssp āDažreizā palÄ«dz, es mÄÄ£inu:
/Haiku/home/tmate> ./configure LDFLAGS="-lbsd -lssp"
(...)/Haiku/home/tmate> make
(...)/Haiku/home/tmate> ./tmate
Oho! SÄkas! Betā¦
[tmate] ssh.tmate.io lookup failure. Retrying in 2 seconds (non-recoverable failure in name resolution)
āBad port IDā jau ir kÄ vizÄ«tkarte haiku. VarbÅ«t kÄdam ir nojausma, kas par vainu un kÄ to novÄrst? Ja tÄ, es atjauninÄÅ”u rakstu. Saite uz GitHub.
GUI lietojumprogrammas pÄrneÅ”ana uz Qt.
Es izvÄlos vienkÄrÅ”u QML aplikÄciju.
/> 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!
TieÅ”Äm vienkÄrÅ”i. MazÄk par minÅ«ti!
AplikÄciju iepakoÅ”ana hpkg, izmantojot haikuporter un haikuports.
Ar ko man jÄsÄk? Nav vienkÄrÅ”as dokumentÄcijas, es dodos uz #haiku kanÄlu vietnÄ irc.freenode.net un dzirdu:
Komanda package - zema lÄ«meÅa pakotÅu izveides veids. LielÄkoties viÅai pietiek ar PackageInfo, kÄ aprakstÄ«ts sadaÄ¼Ä "Pareizas .hpkg pakotnes izveidoÅ”ana"
Nav skaidrs, ko darÄ«t. Man Ŕķiet, ka man ir vajadzÄ«ga Hello World stila rokasgrÄmata iesÄcÄjiem, ideÄlÄ gadÄ«jumÄ video. BÅ«tu jauki, ja bÅ«tu arÄ« Ärts ievads par HaikuPorter, kÄ tas tiek darÄ«ts GNU hello.
Es lasu sekojoŔo:
haikuporter ir rÄ«ks kopÄju Haiku pakotÅu projektu izveidei. Tas izmanto HaikuPorts repozitoriju kÄ bÄzi visÄm pakotnÄm. Haikuporter receptes tiek izmantotas, lai izveidotu iepakojumus.
TurklÄt es atklÄju, ka:
HaikuPorts krÄtuvÄ receptes nav jÄglabÄ. Varat izveidot citu krÄtuvi, ievietot tajÄ receptes un pÄc tam norÄdÄ«t uz to haikuporter.
TieÅ”i tas, kas man vajadzÄ«gs ā ja nemeklÄju veidu, kÄ publiski izlaist paketi. Bet Ŕī ir tÄma citam ierakstam.
Haikuportera un haikuportu uzstÄdÄ«Å”ana
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
Receptes rakstīŔana
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
}
Receptes salikŔana
Es saglabÄju failu ar nosaukumu QtQuickApp-1.0.recipe, pÄc kura es palaistu aikuporter -S ./QuickApp-1.0.recipe. AtkarÄ«bas tiek pÄrbaudÄ«tas visÄm repozitorijÄ esoÅ”ajÄm pakotnÄm haikuports, kas aizÅem kÄdu laiku. Es aizieÅ”u pÄc kafijas.
KÄpÄc Ŕī pÄrbaude bÅ«tu jÄveic manÄ vietÄjÄ datorÄ, nevis centralizÄti serverÄ« vienu reizi visiem?
SaskaÅÄ ar mr. waddlesplash:
Ar tÄdu, lai varÄtu pÄrrakstÄ«t jebkuru failu repozitorijÄ š Å o vari nedaudz optimizÄt, nepiecieÅ”amÄ«bas gadÄ«jumÄ aprÄÄ·inot nepiecieÅ”amo informÄciju, jo pÄdÄjÄs veiktÄs izmaiÅas ir diezgan reti.
~/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
IzrÄdÄs, ka nav tÄdas lietas kÄ parasts receptes fails, kas satur jÅ«su lietojumprogrammas avota kodu. Jums tas jÄglabÄ krÄtuvÄ HaikuPorts formÄtÄ.
Å is fakts padara montÄžu apgrÅ«tinoÅ”Äku. Man tas Ä«paÅ”i nepatÄ«k, bet domÄju, ka tas ir nepiecieÅ”ams, lai galu galÄ visa atvÄrtÄ koda programmatÅ«ra parÄdÄ«tos HaikuPorts.
Es saÅemu sekojoÅ”o:
~/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.
Kas noticis? PÄc irc izlasÄ«Å”anas es daru:
~/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!
Ir radies interesants jautÄjums. Ja es pievienoÅ”u receptei kontrolsummu, vai tÄ atbilst jaunÄkajai git commit nepÄrtrauktai integrÄcijai? (IzstrÄdÄtÄjs apstiprina: "Tas nedarbosies. Receptes ir izstrÄdÄtas tÄ, lai tÄs bÅ«tu salÄ«dzinoÅ”i stabilas.")
~/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
Ko viÅÅ” dara? Galu galÄ Å”Ä« ir git repozitorija, kods jau ir tieÅ”i tur, nav ko izpakot. ManÄ skatÄ«jumÄ rÄ«kam jÄbÅ«t pietiekami gudram, lai nemeklÄtu atpakotÄju, ja tas atrodas virs GitHub url.
Downloading: git://github.com/probonopd/QtQuickApp.git ...
Error: Downloading from unsafe sources is disabled in haikuports.conf!
Hmm, kÄpÄc viss ir tik sarežģīti, kÄpÄc nevar "tikai strÄdÄt"? Galu galÄ nav nekas neparasts izveidot kaut ko no GitHub. NeatkarÄ«gi no tÄ, vai tie ir rÄ«ki, kas darbojas uzreiz, bez nepiecieÅ”amÄ«bas pÄc iestatÄ«Å”anas vai kÄ es to saucu par "uztraukumu".
Nu jÄ, iemesls bija vÄlme pÄrbaudÄ«t montÄžai saÅemto datu integritÄti. Viena no iespÄjÄm ir pÄrbaudÄ«t arhÄ«va kontrolsummu, taÄu jÅ«s, protams, varat jaukt atseviŔķus failus, kas netiks ieviesti, jo tas aizÅem daudz ilgÄku laiku. TÄ sekas ir git un citu VCS ānedroŔībaā. VisticamÄk, tas tÄ bÅ«s vienmÄr, jo arhÄ«va izveide vietnÄ GitHub ir diezgan vienkÄrÅ”a un bieži vien ÄtrÄka. Labi, nÄkotnÄ varbÅ«t kļūdas ziÅojums nebÅ«s tik spilgts... (Å”Ädas receptes vairs HaikuPorts neapvienojam).
~/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
PÄc vecÄ ieraduma es eju pajautÄt labiem cilvÄkiem kanÄlÄ #haiku tÄ«klÄ irc.freenode.net. Un kur es bÅ«tu bez viÅiem? PÄc mÄjiena es sapratu, ka man vajadzÄtu izmantot:
Labi, kļuva skaidrs, ko tas dara - tas lejupielÄdÄ arhÄ«vu ar noteiktas versijas pirmkodu. Tas ir stulbi, no mana viedokļa, un ne gluži tas, ko es gribÄju, proti, lejupielÄdÄt jaunÄko versiju no galvenÄs filiÄles.
Viens no izstrÄdÄtÄjiem to paskaidroja Å”Ädi:
Mums ir savs CI, tÄpÄc viss, kas tiek ievietots haikuportu repozitorijÄ, tiks iesaiÅots visiem lietotÄjiem, un mÄs nevÄlamies riskÄt, apkopojot un piegÄdÄt āvisu jaunÄkajÄ versijÄ augÅ”pusā.
Sapratu! JebkurÄ gadÄ«jumÄ notika Å”Ädi:
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
(...)
Tas atkÄrto to bezgalÄ«gi. AcÄ«mredzot tÄ ir kļūda (vai ir lietojumprogramma? Es to nevarÄju atrast).
Š” haikuporter un repozitorijs haikuports Tam nav "tikai darbojas" sajÅ«tas, taÄu kÄ izstrÄdÄtÄjam man patÄ«k dažas lietas, strÄdÄjot ar Haiku. LielÄkoties tas ir lÄ«dzÄ«gs Open Build Service ā rÄ«ku komplektam Linux bÅ«vÄjumu veidoÅ”anai: ÄrkÄrtÄ«gi jaudÄ«gs, ar sistemÄtisku pieeju, taÄu pÄrspÄ«lÄts manai mazajai "sveiki pasaulei" lietojumprogrammai.
Atkal, saskaÅÄ ar mr. waddlesplash:
PatieÅ”Äm, HaikuPorter pÄc noklusÄjuma ir diezgan stingrs (turklÄt ir savstarpÄja režīms, kÄ arÄ« stingrs režīms, lai padarÄ«tu to vÄl stingrÄku!), bet tikai tÄpÄc, ka tas rada pakotnes, kas darbosies, nevis tikai izveido pakotnes. TÄpÄc viÅÅ” sÅ«dzas par nedeklarÄtÄm atkarÄ«bÄm, nepareizi importÄtÄm bibliotÄkÄm, nepareizÄm versijÄm utt. MÄrÄ·is ir noÄ·ert visas problÄmas, arÄ« turpmÄkÄs, pirms lietotÄjs par to uzzina (tÄpÄc nebija iespÄjams instalÄt avrdude, jo atkarÄ«ba faktiski bija norÄdÄ«ta receptÄ). BibliotÄkas nav tikai atseviŔķas pakotnes vai pat konkrÄtas SO versijas. HaikuPorter nodroÅ”ina, ka tas viss tiek ievÄrots paÅ”Äs receptÄs, lai izvairÄ«tos no kļūdÄm izpildes laikÄ.
PrincipÄ Å”Äds stingrÄ«bas lÄ«menis ir attaisnojams, veidojot operÄtÄjsistÄmu, bet man tas Ŕķiet nevajadzÄ«gs "hello world" lietojumprogrammai. NolÄmu pamÄÄ£inÄt ko citu.
Lietojumprogrammu izveide hpkg formÄtÄ, izmantojot komandu āpackage createā.
Var bÅ«t, Å”is Vai vienkÄrÅ”as instrukcijas man noderÄs labÄk?
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
PÄrvietoja failu QtQuickApp.hpkg uz ~/config/packagesizmantojot failu pÄrvaldnieku, pÄc kura maÄ£iski parÄdÄ«jÄs QtQuickApp ~/config/apps.
Atkal negaidÄ«ti Ätri, vienkÄrÅ”i un efektÄ«vi. ApbrÄ«nojami, neticami!
Bet... (kur gan mÄs bÅ«tu bez viÅiem!)
Programma joprojÄm nav iekļauta lietotÅu izvÄlÅu sarakstÄ un QuickLaunch. Man Ŕķiet, ka es jau zinu, kÄ to labot. Failu pÄrvaldniekÄ es pÄrvietoju QtQuickApp.hpkg no ~/config/packages uz /system/packages.
NÄ, joprojÄm trÅ«kst. AcÄ«mredzot es (nu un instrukcijas) kaut ko palaidu garÄm.
Apskatot dažas citas lietojumprogrammas HaikuDepot cilnÄ "Saturs", es redzÄju, ka ir tÄdi faili kÄ /data/mimedb/application/x-vnd... kas ir vÄl ievÄrojamÄks /data/deskbar/menu/Applications/ā¦.
Nu ko man tur likt? Aiziet...
mkdir -p data/deskbar/menu/Applications/
( cd data/deskbar/menu/Applications ; ln -s ../../../../apps/QtQuickApp . )
package add QtQuickApp.hpkg apps data
Esmu diezgan pÄrliecinÄts, ka Å”is triks darbosies, taÄu paliek jautÄjumi: kÄpÄc tas ir vajadzÄ«gs, kam tas paredzÄts? ManuprÄt, tas sagrauj kopÄjo iespaidu, ka sistÄma ir tik izsmalcinÄta.
KÄ skaidroja Mr. waddlesplash:
Dažreiz ir lietojumprogrammas, kas ir vajadzÄ«gas citÄm lietojumprogrammÄm, bet kuras nav izvÄlnÄ. PiemÄram, ekrÄnuzÅÄmumÄ LegacyPackageInstaller, kas apstrÄdÄ .pkg arhÄ«vus BeOS formÄtÄ. Es vÄlÄtos, lai lietotÄji tos instalÄtu, taÄu viÅu klÄtbÅ«tne izvÄlnÄ radÄ«s neskaidrÄ«bas.
Man nez kÄpÄc Ŕķiet, ka ir, piemÄram, vienkÄrÅ”Äks risinÄjums Hidden=true failos .desktop operÄtÄjsistÄmÄ Linux. KÄpÄc gan nepadarÄ«t "slÄpto" informÄciju par failu sistÄmas resursu un atribÅ«tu?
ÄŖpaÅ”i smalks ir (dažas) lietojumprogrammas nosaukums, kas parÄda izvÄlni, deskbar, pa ceļam stingri sasiets.
Mr. waddlesplash to izskaidro:
āDarbjoslaā Å”ajÄ gadÄ«jumÄ ir jÄsaprot kÄ sava veida vispÄrÄ«gs termins (tÄpat kÄ āuzdevumjoslaā, kas attiecas gan uz Windows lietojumprogrammu, gan uz vispÄrÄjo koncepciju). Nu, kopÅ” Ŕī deskbar, nevis āDeskbarā, arÄ« to var saprast lÄ«dzÄ«gi.
2 "gandrÄ«z identiski" direktoriji ar lietojumprogrammÄm tajos
KÄpÄc ir 2 direktoriji ar lietojumprogrammÄm, kÄ arÄ« kÄpÄc vienÄ ir mana QtQuickApplication, bet otrÄ nav? (Galu galÄ tas nav vienas sistÄmas, bet gan otrÄ lietotÄja, kas man personÄ«gi bÅ«tu saprotams).
Es esmu patieÅ”Äm apmulsis, un es domÄju, ka tam vajadzÄtu bÅ«t vienotam.
komentÄja mr. waddlespllash
Programmu katalogÄ ir lietojumprogrammas, kas izvÄlnÄ nav vajadzÄ«gas. TaÄu situÄcija ar Ädienkarti tieÅ”Äm ir jÄuzlabo, lai tÄ bÅ«tu pielÄgojamÄka.
PieteikÅ”anÄs, vai arÄ« nenotiks š
Es prÄtoju: vai tieÅ”Äm ir nepiecieÅ”ams mitinÄt lietojumprogrammas /system/apps, ja lietotÄji tos tur redz, tas ir nevÄlami. VarbÅ«t labÄk tos novietot citÄ vietÄ, kur lietotÄjs ar tiem nesastapsies? TÄpat kÄ tas tiek darÄ«ts operÄtÄjsistÄmÄ Mac OS X, kur pakotÅu saturs .app, kam nevajadzÄtu bÅ«t redzamam lietotÄjam /Applications, slÄpjas /SistÄma/BibliotÄka/ā¦ā` dziļumos.
KÄ ar atkarÄ«bÄm?
Es domÄju, ka ir vÄrts kaut kÄ precizÄt atkarÄ«bas, vai ne? Vai Qt pÄc noklusÄjuma var uzskatÄ«t par obligÄtu Haiku instalÄcijas sastÄvdaļu? NÄ! Qt pÄc noklusÄjuma nav instalÄts. Vai pakotÅu veidotÄjs var automÄtiski noteikt atkarÄ«bas, pÄrbaudot ELF failus? Man teica, ka HaikuPorter patiesÄ«bÄ to dara, bet package NÄ. Tas ir tÄpÄc, ka tas ir tikai "pakeÅ”u veidotÄjs", kas tikai izveido failus pats hpkg.
Vai Haiku ir jÄpadara sarežģītÄkas, pievienojot politiku, ka paketei nevajadzÄtu bÅ«t atkarÄ«gÄm no pakotnÄm Ärpus haiku? haikuports? (Es gribÄtu, jo Å”Äda politika padarÄ«tu darbu daudz vienkÄrÅ”Äku ā sistÄma spÄtu automÄtiski atrisinÄt katras no jebkuras vietas lejupielÄdÄtas pakotnes atkarÄ«bas, nejaucoties ar papildu pakotÅu avotiem.)
Mr. waddlesplash paskaidro:
MÄs negribÄtu tik ļoti ierobežot izstrÄdÄtÄju brÄ«vÄ«bu, jo ir acÄ«mredzams, ka, ja CompanyX vÄlas atbalstÄ«t savu programmatÅ«ras komplektu ar atkarÄ«bÄm (un lÄ«dz ar to arÄ« repozitoriju), tas to darÄ«s pilnÄ«gi brÄ«vi.
TÄdÄ gadÄ«jumÄ varÄtu bÅ«t vÄrts ieteikt treÅ”o puÅ”u pakotnÄm izvairÄ«ties no atkarÄ«bas no nekÄ, kas nav iekļauts haikuportÄ, pilnÄ«bÄ iesaiÅojot visu nepiecieÅ”amo kopÄ ar lietojumprogrammu. Bet es domÄju, ka Ŕī ir tÄma turpmÄkam Ŕīs sÄrijas rakstam. [Vai autors dodas uz AppImage? ā apm. tulkotÄjs]
Lietojumprogrammas ikonas pievienoŔana
Ko darÄ«t, ja es vÄlos pievienot kÄdu no glÄ«tajÄm iebÅ«vÄtajÄm ikonÄm savas jaunizveidotÄs lietojumprogrammas resursiem? IzrÄdÄs, ka Ŕī ir pÄrsteidzoÅ”a tÄma, tÄpÄc tas bÅ«s pamats nÄkamajam rakstam.
IedomÄjieties tÄdu projektu kÄ Inkscape (jÄ, es zinu, ka tas vÄl nav pieejams Haiku formÄtÄ, bet ir Ärti tajÄ attÄlot). ViÅiem ir pirmkoda repozitorijs https://gitlab.com/inkscape/inkscape.
Ikreiz, kad kÄds veic izmaiÅas krÄtuvÄ, tiek palaistas izveides konveijerus, pÄc kuriem izmaiÅas tiek automÄtiski pÄrbaudÄ«tas, veidotas un lietojumprogramma tiek iepakota dažÄdÄs pakotnÄs, tostarp AppImage for Linux (atseviŔķa lietojumprogrammu pakotne, kuru var lejupielÄdÄt vietÄjai testÄÅ”anai neatkarÄ«gi no ko var vai nevar instalÄt sistÄmÄ [ES to zinÄju! ā apm. tulkotÄjs]). Tas pats notiek ar katru filiÄles sapludinÄÅ”anas pieprasÄ«jumu, tÄpÄc pirms sapludinÄÅ”anas varat lejupielÄdÄt lietojumprogrammu, kas izveidota no sapludinÄÅ”anas pieprasÄ«jumÄ piedÄvÄtÄ koda.
Apvienot pieprasÄ«jumus ar bÅ«vÄjuma statusiem un iespÄju lejupielÄdÄt kompilÄtos binÄros failus, ja bÅ«vÄÅ”ana ir veiksmÄ«ga (atzÄ«mÄta zaÄ¼Ä krÄsÄ)
BÅ«vÄjums darbojas Docker konteineros. GitLab piedÄvÄ bezmaksas skrÄjÄjus operÄtÄjsistÄmÄ Linux, un es domÄju, ka varÄtu bÅ«t iespÄjams iekļaut savus skrÄjÄjus (starp citu, es nesaprotu, kÄ tas darbotos tÄdÄs sistÄmÄs kÄ Haiku, kurÄm, kÄ es zinu, nav Docker vai lÄ«dzvÄrtÄ«ga, taÄu arÄ« FreeBSD nav Docker, tÄpÄc Ŕī problÄma nav raksturÄ«ga tikai Haiku).
IdeÄlÄ gadÄ«jumÄ Haiku lietojumprogrammas var iebÅ«vÄt Docker konteinerÄ, kas paredzÄts Linux. Å ÄdÄ situÄcijÄ Haiku montÄžu var ieviest esoÅ”ajos cauruļvados. Vai ir krusteniski kompilatori? Vai arÄ« man vajadzÄtu atdarinÄt visu Haiku Docker konteinerÄ, izmantojot kaut ko lÄ«dzÄ«gu QEMU/KVM (pieÅemot, ka tÄ darbosies Docker iekÅ”pusÄ)? Starp citu, daudzi projekti izmanto lÄ«dzÄ«gus principus. PiemÄram, Scribus to dara - tas jau ir pieejams Haiku. KÄdu dienu pienÄks diena, kad varÄÅ”u nosÅ«tÄ«t Å”Äds PÄrsÅ«tiet pieprasÄ«jumus citiem projektiem, lai pievienotu Haiku atbalstu.
Viens no izstrÄdÄtÄjiem paskaidro:
Citiem projektiem, kas vÄlas paÅ”i izveidot pakotnes, tiek atbalstÄ«ta parastÄ CMake/CPack metode. Citas bÅ«vÄÅ”anas sistÄmas var atbalstÄ«t, tieÅ”i izsaucot pakotnes veidoÅ”anas programmu, kas ir labi, ja cilvÄkus tÄ interesÄ. Pieredze rÄda: lÄ«dz Å”im liela interese nav bijusi, tÄpÄc haikuporter darbojÄs kÄ mums Ärts, bet galu galÄ abÄm metodÄm vajadzÄtu strÄdÄt kopÄ. Mums vajadzÄtu ieviest rÄ«ku komplektu programmatÅ«ras savstarpÄjai veidoÅ”anai no Linux vai jebkuras citas servera operÄtÄjsistÄmas (Haiku nav paredzÄts darboties serveros).
Es sniedzu stÄvovÄcijas. RegulÄri Linux lietotÄji nes visu Å”o papildu slodzi un papildu bagÄžu (droŔība, stingra kontrole utt.), kas nepiecieÅ”ama servera operÄtÄjsistÄmai, bet ne personÄ«gajai. TÄpÄc es pilnÄ«bÄ piekrÄ«tu, ka iespÄja izveidot Haiku lietotnes operÄtÄjsistÄmÄ Linux ir pareizais ceļŔ.
SecinÄjums
POSIX lietojumprogrammu pÄrneÅ”ana uz Haiku ir iespÄjama, taÄu tÄ var bÅ«t dÄrgÄka nekÄ parasta pÄrbÅ«ve. Es noteikti paliktu pie tÄ uz ilgu laiku, ja nepalÄ«dzÄtu cilvÄki no #haiku kanÄla irc.freenode.net tÄ«klÄ. Bet pat viÅi ne vienmÄr uzreiz saprata, kas bija nepareizi.
Programmas, kas rakstÄ«tas Qt, ir vienkÄrÅ”s izÅÄmums. Es bez problÄmÄm izveidoju vienkÄrÅ”u demonstrÄcijas lietojumprogrammu.
Pakotnes izveidoÅ”ana vienkÄrÅ”Äm lietojumprogrammÄm arÄ« ir diezgan vienkÄrÅ”a, taÄu tikai ātradicionÄli izlaistajÄmā, t.i. kam ir versijas pirmkoda arhÄ«vi, kas paredzÄti atbalstam haikuportos. NepÄrtrauktai izveidei (veidot katrai izmaiÅu veikÅ”anai) ar GitHub, Ŕķiet, ka viss nav tik vienkÄrÅ”i. Å eit Haiku Ŕķiet vairÄk kÄ Linux izplatÄ«Å”ana, nevis rezultÄts Mac datorÄ, kur, noklikŔķinot uz pogas āBuildā programmÄ XCode, jÅ«s saÅemat pakotni. .app, gatavs ievietoÅ”anai diska attÄlÄ .dmg, sagatavots lejupielÄdei manÄ vietnÄ.
NepÄrtraukta aplikÄciju veidoÅ”ana uz āserveraā operÄtÄjsistÄmas bÄzes, piemÄram, Linux, visticamÄk, kļūs iespÄjama, ja bÅ«s pieprasÄ«jums no izstrÄdÄtÄjiem, taÄu Å”obrÄ«d Haiku projektam ir citi, aktuÄlÄki uzdevumi.
IzmÄÄ£iniet to pats! Galu galÄ Haiku projekts nodroÅ”ina Ä£enerÄtus attÄlus palaiÅ”anai no DVD vai USB katru dienu. Lai instalÄtu, vienkÄrÅ”i lejupielÄdÄjiet attÄlu un ierakstiet to zibatmiÅas diskÄ, izmantojot Etcher
Vai jums ir kÄdi jautÄjumi? AicinÄm uz krievvalodÄ«go telegrammas kanÄls.