Nire bosgarren eguna Haikurekin: portu ditzagun programa batzuk

Nire bosgarren eguna Haikurekin: portu ditzagun programa batzuk

TL; DR: Hasiberri batek Haiku ikusi zuen lehen aldiz, Linux munduko programa batzuk porturatu nahian.

Nire bosgarren eguna Haikurekin: portu ditzagun programa batzuk
Nire lehen Haiku eramandako programa, hpkg formatuan bildua

Duela gutxi Haiku aurkitu nuen, ordenagailuetarako sistema eragile harrigarri ona.
Gaur programa berriak sistema eragile honetara eramaten ikasiko dut. Haikura aldatzeko lehen esperientziaren deskribapena da ardatz nagusia Linux garatzaile baten ikuspuntutik. Barkamena eskatzen dizut bidean egin ditudan akats ergelengatik, ez baita aste bat ere pasatu Haiku lehen aldiz deskargatu nuenetik.

Hiru helburu lortu nahi ditut:

  • Portatu CLI aplikazio sinple bat
  • Portatu aplikazio bat GUItik Qt-era
  • Gero hpkg formatuan paketatu (oraindik AppDir eta AppImage Haikurako egokitzea pentsatzen ari naizenez...)

Has gaitezen. Ataletan dokumentazioa ΠΈ garapenabaita wiki HaikuPorts-etik norabide egokia aurkitu dut. Sarean PDF liburu bat ere badago BeOS: Unix aplikazio bat portatzea.
467 orrialde - eta hau 1997koa da! Beldurra ematen du barrura begiratzea, baina espero dut onena. Garatzailearen hitzak pozgarriak dira: "denbora asko behar izan zuen BeOS ez zelako POSIX-ekin bat egiten", baina Haiku "gehienetan" horrela da jada.

CLI aplikazio sinple bat portatzea

Lehenengo pentsamendua aplikazioa porturatzea izan zen avrdude, baina, ondorioztatu zenez, hau dagoeneko da egina aspaldi.

Lehenengo saiakera: ezer ikustekorik

Ulertzerik ez dudana da dagoeneko Aplikazioak 10 urte baino gehiago daramatzate Haikura eraman - OS bera oraindik 1.0 bertsioa ere ez den arren.

Bigarren saiakera: berridatzi beharra

Beraz, erabiliko dut ptouch-770, Etiketak inprimatzeko erabiltzen dudan Brother P-Touch 770 inprimagailua kontrolatzeko CLI.
Hainbat etiketa inprimatzen ditut bertan, eta baliteke aurreko artikuluan dagoeneko ikusi izana. Apur bat lehenago, Python-en GUI wrapper programa txiki bat idatzi nuen (Gtk+-n dagoenez, berridatzi beharko da, eta hau ikasteko arrazoi ona da).

Nire bosgarren eguna Haikurekin: portu ditzagun programa batzuk
Brother P-Touch 770 etiketa-inprimagailua. Haikurekin funtzionatuko al du?

Haiku paketeen kudeatzaileak liburutegiak eta komandoak ezagutzen ditu, beraz, exekutatzen ari zarenean "ezin da libintl aurkitu" mezua jasotzen badut configure - Abian jarri besterik ez dut pkgman install devel:libintl eta beharrezko paketea aurkituko da. Era berean pkgman install cmd:rsync. Bueno, etab.

Honek funtzionatzen ez duenean izan ezik:

/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

Agian udev Linux-en oinarrituta dago eta, beraz, ez dago Haikurako. Horrek esan nahi du konpilatzen saiatzen ari naizen iturburu-kodea editatu behar dudala.
E, ezin duzu zure buru gainetik salto egin, eta ez dakit nondik hasi ere.

Hirugarren saiakera

Ondo legoke edukitzea tmate Haikurako, orduan Haiku garatzaileei nire terminaleko saiora konektatzeko baimena emango nieke, zerbait gaizki aterako balitz. Argibideak nahiko sinpleak dira:

./autogen.sh
./configure
make
make install

Itxura ona du, beraz, zergatik ez probatu Haiku-n?

/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

Urrats honetan HaikuDepot ireki eta bilatzen dut curses.
Zerbait aurkitu zen, eta horrek kontsulta konpetenteago baterako iradokizun bat eman zidan:

/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

Berriz ere HaikuDepotera joan nintzen, eta, noski, aurkitu nuen devel:msgpack_c_cpp_devel. Zeintzuk dira izen arraro hauek?

/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

Urrats honetan, programa bat Haikura eramateak berreraikitze soil baterako behar dena baino ezagutza askoz gehiago behar duela konturatu nintzen.
Haiku garatzaile lagunkoiekin hitz egin nuen, msgpack-en akats bat dagoela ikusten da, eta minutu batzuen buruan HaikuPorts-en adabaki bat ikusten dut. Nire begiekin ikusten dut nola zuzendutako paketea hona joaten (buildslave - makina birtualak).

Nire bosgarren eguna Haikurekin: portu ditzagun programa batzuk
buildmaster-en msgpack zuzendua eraikitzen

Tarteka adabaki bat bidaltzen dut upstreamera Haiku laguntza gehitzeko msgpack-era.

Bost minutu geroago, eguneratutako msgpack dagoeneko eskuragarri dago Haiku-n:

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

Ezustean ona. Hori esan al dut?!

Hasierako arazora itzultzen naiz:

/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

Orain badirudi msgpack-ek ez duela errurik. Komentatzen ari naiz IMAXLABEL Π² tty.c hau:

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

Emaitza:

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.

Tira, hemen gaude berriro... Bide batez:

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

jauna. waddlesplash non zulatu behar duzun esaten dizu:

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

Hemen argitaratu dut konfig.log.

Haiku-n libresolv-az gain libnetwork-en beste zerbait dagoela azaldu zidaten. Antza denez, kodea gehiago editatu behar da. Pentsatu behar...

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

Betiko galdera: zer gertatzen ari da?

/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

Gauza bera, profilean bakarrik. Googled eta hau aurkitu. Gehitzen baduzu -lssp "batzuetan" laguntzen du, saiatzen naiz:

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

Aupa! Hasi da! Baina…

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

Saiatuko naiz arazketa egiten fitxategia hemen:

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

"Portu ID txarra" dagoeneko bisita-txartel bat bezalakoa da haiku. Agian norbaitek ideia bat du zer dagoen gaizki eta nola konpondu? Hala bada, artikulua eguneratuko dut. Esteka GitHub.

GUI aplikazioa Qt-ra eramatea.

QML aplikazio sinple bat aukeratzen dut.

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

Benetan sinplea. Minutu bat baino gutxiago!

Hpkg-n paketatzeko aplikazioak haikuporter eta haikuports erabiliz.

Zertatik hasi behar dut? Ez dago dokumentazio sinplerik, irc.freenode.net-eko #haiku kanalera joaten naiz eta entzuten dut:

  • Team package - paketeak sortzeko maila baxuko modu bat. Gehienetan, PackageInfo nahikoa da berarentzat, ".hpkg pakete egoki batean bihurtzea" atalean azaltzen den bezala.
  • Zerbait egin behar dut hau
  • Erabil daiteke hpkg-sortzailea (niri huts egiten zait, akatsen berri ematea)

Ez dago argi zer egin. Uste dut Hello World estiloko hasiberrientzako gida bat behar dudala, hobeki bideo bat. Polita litzateke HaikuPorter-en sarrera erosoa izatea ere, GNU hello-n egiten den bezala.

Honako hau irakurri dut:

haikuporter Haikurako pakete proiektu komunak sortzeko tresna da. HaikuPorts biltegia erabiltzen du pakete guztien oinarri gisa. Haikuporter errezetak paketeak sortzeko erabiltzen dira.

Gainera, zera jakin dut:

Ez dago errezetak HaikuPorts biltegian gorde beharrik. Beste biltegi bat egin dezakezu, errezetak bertan jarri eta gero haikuporter seinalatu.

Behar dudana - paketea publikoki askatzeko modu bat bilatzen ez bada. Baina hau beste mezu baterako gaia da.

Haikuporter eta haikuports instalatzea

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

Errezeta bat idaztea

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
}

Errezeta muntatzea

Fitxategia izenpean gordetzen dut QtQuickApp-1.0.recipe, ondoren abiarazi dut aikuporter -S ./QuickApp-1.0.recipe. Biltegiko pakete guztien menpekotasunak egiaztatzen dira haikuportak, denbora pixka bat hartzen duena. Kafe pixka bat hartzera joango naiz.

Zergatik egin behar da egiaztapen hau nire tokiko makinan, eta ez zerbitzarian zentralki behin guztiontzat?

mr. waddlesplash:

Horrela, biltegiko edozein fitxategi berridatzi dezakezu πŸ˜‰ Hau apur bat optimiza dezakezu, beharrezkoa denean beharrezko informazioa kalkulatuz, egindako azken aldaketak nahiko arraroak direlako.

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

Ematen du ez dagoela zure aplikazioaren iturburu-kodea duen errezeta fitxategi arruntik. HaikuPorts formatuan dagoen biltegi batean gorde behar duzu.

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

Gertaera honek muntaketa astunagoa egiten du. Ez zait bereziki gustatzen, baina beharrezkoa dela uste dut azkenean kode irekiko software guztia HaikuPorts-en ager dadin.

Honako hau lortzen dut:

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

Zer dago oker? Irc irakurri ondoren egiten dut:

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

Galdera interesgarri bat sortu da. Errezetari checksum bat gehitzen badiot - bat egingo al du azken git commit-arekin etengabeko integraziorako? (Garatzaileak baieztatzen du: "Ez du funtzionatuko. Errezetak nahiko egonkorrak izateko diseinatuta daude").

Dibertitzeko, gehitu errezetari:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Oraindik ez dago konforme:

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

Zertan ari da? Azken finean, hau git biltegi bat da, kodea dagoeneko hor dago zuzenean, ez dago ezer deskonprimitu behar. Nire ikuspuntutik, tresnak nahikoa adimentsua izan behar du deskonpaktatzailerik ez bilatzeko GitHub url-aren gainetik badago.

Agian uri git:// funtzionatuko du

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

Orain honela kexatzen da:

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

Hmm, zergatik da hain konplikatua dena, zergatik ezin duzu "lan egin"? Azken finean, ez da hain arraroa GitHub-etik zerbait eraikitzea. Berehala funtzionatzen duten tresnak diren, konfigurazio beharrik gabe, edo nik "nahasi" esaten dudan moduan.

Agian honela funtzionatuko du:

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

Ezetz. Akats arraro hau oraindik jasotzen dut eta egiten dut, hemen azaltzen den bezala

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

Apur bat urrunago noa, baina zergatik ari zait garrasika (GitHub ez dago segurua!) eta oraindik zerbait deskonprimitzen saiatzen ari naiz.

Arabera jauna. waddlesplash:

Tira, bai, arrazoia muntaketarako jasotako datuen osotasuna egiaztatzeko nahia izan zen. Aukeretako bat artxiboaren kontrol batura egiaztatzea da, baina, noski, fitxategi indibidualak hash egin ditzakezu, inplementatuko ez direnak, izan ere. askoz gehiago behar da. Horren ondorioa git eta beste VCS batzuen "segurtasun eza" da. Seguruenik beti horrela izango da, GitHub-en artxibo bat sortzea nahiko erraza eta askotan azkarragoa baita. Bada, etorkizunean, agian errore-mezua ez da hain distiratsua izango... (jada ez ditugu halako errezetak bateratzen HaikuPorts-en).

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

Ohitura zaharretik irc.freenode.net sareko #haiku kanalean jende onari galdezka joaten naiz. Eta non egongo nintzateke haiek gabe? Iradokizunaren ondoren, konturatu nintzen erabili behar nuela:

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

Ados, argi geratu zen zer egiten duen: artxibo bat deskargatzen du berrikuspen jakin baten iturburu-kodearekin. Ergela da, nire ikuspuntutik, eta ez zehazki nahi nuena, hots, maisu-adarretik azken berrikuspena deskargatzea.

Garatzaileetako batek honela azaldu zuen:

Gure CI propioa dugu, beraz, haikuports biltegian jartzen den guztia erabiltzaile guztientzat paketatuta egongo da, eta ez dugu "azken bertsioan gorako azken bertsioan dena" biltzeko eta entregatzeko arriskurik izan nahi.

Ulertua! Nolanahi ere, hauxe gertatu zen:

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

Infinitum hori errepikatzen du. Antza denez hau errore bat da (ba al dago aplikaziorik? Ezin izan dut aurkitu).

Π‘ haikuporter eta biltegia haikuportak Ez du "funtzionatzen" sentsaziorik, baina garatzaile gisa, badaude Haikurekin lan egiteak gustatzen zaizkidan gauza batzuk. Gehienetan, Open Build Zerbitzuaren antzekoa da, Linuxen eraikuntzak eraikitzeko tresna multzo bat: oso indartsua, ikuspegi sistematikoarekin, baina gehiegizkoa nire "kaixo mundua" aplikazio txikiarentzat.

Berriz ere, mr. waddlesplash:

Hain zuzen ere, HaikuPorter nahiko zorrotza da lehenespenez (gainera, lint modua eta baita modu zorrotza ere zorrotzagoa izateko!), baina funtzionatuko duten paketeak sortzen dituelako bakarrik, paketeak sortu beharrean. Horregatik kexatzen da deklaratu gabeko menpekotasunak, liburutegiak behar bezala inportatuak, bertsio okerrak, etab. Helburua edozein arazo harrapatzea da, etorkizunekoenak barne, erabiltzaileak horren berri izan baino lehen (horregatik ezin izan da avrdude instalatu, mendekotasuna benetan errezetan zehaztuta zegoelako). Liburutegiak ez dira pakete indibidualak edo SO bertsio zehatzak ere. HaikuPorterrek hori guztia errezetetan bertan ikusten dela ziurtatzen du exekuzioan akatsak saihesteko.

Printzipioz, sistema eragile bat sortzean justifikatuta dago zorroztasun maila hori, baina ez zait beharrezkoa iruditzen β€œhello world” aplikazio baterako. Beste zerbait probatzea erabaki nuen.

Aplikazioak eraiki hpkg formatuan "package create" komandoa erabiliz

Agian, hau Argibide errazak hobeto funtzionatuko al naute?

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

Ustekabeko azkarra, ustekabeko sinplea, ustekabeko eraginkorra. Nola gustatzen zaidan, harrigarria!

Instalazioa - zer eta non?

QtQuickApp.hpkg fitxategia hona eraman du ~/config/packagesfitxategi-kudeatzaile bat erabiliz, ondoren QtQuickApp magiaz agertu zen ~/config/apps.
Berriz ere, ustekabeko azkarra, sinplea eta eraginkorra. Harrigarria, sinestezina!

Baina... (non egongo ginateke haiek gabe!)

Aplikazioa oraindik ez dago aplikazioen menuen zerrendan eta QuickLaunch. Uste dut dagoeneko badakidala nola konpondu. Fitxategi-kudeatzailean QtQuickApp.hpkg ~/config/packages-tik /system/packages-era eramaten dut.

Ez, oraindik falta da. Dirudienez, zerbait galdu dut (beno, eta argibideak).

HaikuDepot-eko "Edukiak" fitxan beste aplikazio batzuetarako begiratuta, ikusi nuen fitxategiak daudela. /data/mimedb/application/x-vnd... are nabarmenagoa dena da /data/deskbar/menu/Applications/….

Tira, zer jarri behar dut hor? Etorri...

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

Nahiko ziur nago trikimailu honek funtzionatuko duela, baina galderak geratzen dira: zergatik da beharrezkoa, zertarako? Uste dut horrek sistema oso sofistikatua den inpresio orokorra hondatzen duela.

Mr. waddlesplash:

Batzuetan, beste aplikazio batzuk behar dituzten baina menuan ez dauden aplikazioak daude. Adibidez, LegacyPackageInstaller zure pantaila-argazkian, .pkg artxiboak prozesatzen ditu BeOS formatuan. Erabiltzaileek instalatzea gustatuko litzaidake, baina menuan egoteak nahasmena ekarriko du.

Zerbaitegatik iruditzen zait badela irtenbide sinpleago bat, adibidez Hidden=true fitxategietan .desktop Linux-en. Zergatik ez "ezkutuko" informazioa fitxategi-sistemaren baliabide eta atributu bihurtu?

Bereziki sotila ez dena menua erakusten duen (batzuen) aplikazioaren izena da, deskbar, bidean zurrun lotuta.

jauna. waddlesplashek hau azaltzen du:

"Mahai-barra" kasu honetan termino orokor moduko bat bezala ulertu behar da ("ataza-barra"-ren modu berean, Windows aplikazioari eta kontzeptu orokorrari egiten dio erreferentzia). Tira, honetatik aurrera deskbar, ez β€œDeskbar”, hau ere antzera uler daiteke.

Nire bosgarren eguna Haikurekin: portu ditzagun programa batzuk
2 direktorio "ia berdinak" aplikazioak dituzten

Zergatik daude 2 direktorio aplikazioekin, eta, gainera, zergatik dago nire QtQuickApplication batean, baina ez bestean? (Azken finean, hau ez da sistema bakarra, bigarren erabiltzailea baizik, pertsonalki ulergarria izango litzatekeena).
Benetan nahastuta nago eta hori bateratu egin beharko litzatekeela uste dut.

iruzkina jaunak. waddlesplash

Aplikazioen katalogoak menuan beharrezkoak ez diren aplikazioak ditu. Baina menuaren egoera benetan hobetu behar da, pertsonalizagarriagoa izan dadin.

Aplikazioa, edo ez da gertatuko πŸ˜‰

Galdetu nion: benetan beharrezkoa al da aplikazioak bertan ostatzea /system/apps, erabiltzaileek hor ikusten badute, ez da desiragarria. Agian hobe litzateke erabiltzaileak topatuko ez dituen beste leku batean jartzea? Mac OS X-n egiten den bezala, non paketeen edukia .app, erabiltzailearentzat ikusgai egon behar ez duena /Applications, /System/Library/...-ren sakonean ezkutatuta.

Eta menpekotasunekin?

Uste dut merezi duela mendekotasunak nolabait zehaztea, ezta? Qt Haiku instalazioaren derrigorrezko zatitzat har al daiteke lehenespenez? Ez! Qt ez dago lehenespenez instalatuta. Pakete-sortzaile batek automatikoki detekta ditzake mendekotasunak ELF fitxategiak egiaztatuz? HaikuPorterrek benetan hau egiten duela esan zidaten, baina package Ez. Hori da fitxategiak bere kabuz sortzen dituen "pakete-eraikitzailea" besterik ez delako hpkg.

Haiku sofistikatuagoa egin beharko litzateke pakete batek Haikutik kanpoko paketeekiko menpekotasunik izan behar ez duen politika gehituz? haikuports? (Gustuko nuke, horrelako politika batek gauzak asko erraztuko lituzkeelako - sistemak automatikoki konponduko lituzke edonondik deskargatutako pakete bakoitzaren menpekotasunak, pakete-iturri gehigarriekin nahastu gabe).

jauna. waddlesplashek honela azaltzen du:

Ez genuke garatzaileen askatasuna hainbeste mugatzea gustatuko, begi-bistakoa baita CompanyX-ek bere software-multzoa menpekotasunekin (eta, beraz, biltegi batekin) onartzen badu, guztiz libreki egingo duela.

Kasu horretan, baliteke hirugarrenen paketeei haikuportetan sartzen ez den edozerren menpekotasunak saihestea gomendatzea, aplikazioarekin behar den guztia guztiz ontziratuz. Baina uste dut serie honetako etorkizuneko artikulu baterako gaia dela. [Egilea AppImage aldera doa? β€” gutxi gorabehera. itzultzailea]

Aplikazioaren ikonoa gehitzea

Zer gertatuko da sortu berri den aplikazioaren baliabideei integratutako ikono txukunetako bat gehitu nahi badiot? Gai harrigarria dela ematen du, beraz, hurrengo artikuluaren oinarria izango da.

Nola antolatu etengabeko aplikazioen eraikuntza?

Imajinatu Inkscape bezalako proiektu bat (bai, badakit oraindik ez dagoela Haiku-n eskuragarri, baina komenigarria da bertan erakustea). Iturburu-kodeen biltegia dute https://gitlab.com/inkscape/inkscape.
Norbaitek bere aldaketak biltegian konprometitzen dituen bakoitzean, eraikitzeko kanalizazioak abiarazten dira, eta ondoren aldaketak automatikoki probatu, eraikitzen dira eta aplikazioa hainbat paketetan paketatzen da, besteak beste, AppImage Linux-erako (aplikazio-pakete autonomoa, tokiko probak egiteko deskargatu daitekeena kontuan hartu gabe. sisteman instalatu daitekeena edo ez [Banekien! β€” gutxi gorabehera. itzultzailea]). Gauza bera gertatzen da sukurtsalen bateratze-eskaera guztietan, beraz, bateratze-eskaeran proposatutako kodetik sortutako aplikazioa deskargatu dezakezu batu aurretik.

Nire bosgarren eguna Haikurekin: portu ditzagun programa batzuk
Konbinatu eskaerak eraikuntza-egoerekin eta konpilatutako bitarrak deskargatzeko gaitasunarekin, eraikuntza arrakastatsua bada (berdez markatuta)

Eraikuntza Docker edukiontzietan exekutatzen da. GitLab-ek doako korrikalariak eskaintzen ditu Linux-en, eta uste dut posible izan daitekeela zure korrikalariak sartzea (bide batez, ez dut ikusten nola funtzionatuko lukeen Haiku bezalako sistemetan, badakit Docker edo baliokiderik ez dutela, baina FreeBSD-rako ere ez dago Dockerrik, beraz arazo hau ez da Haikuren bakarra).

Egokiena, Haiku aplikazioak Linuxerako Docker edukiontzi baten barruan eraiki daitezke. Egoera honetan, Haikurako muntaia lehendik dauden hodietan sar daiteke. Ba al dago konpilatzaile gurutzatuak? Edo Docker edukiontzi baten barruan Haiku guztia emulatu behar dut QEMU/KVM bezalako zerbait erabiliz (Dockerren barruan horrela funtzionatuko duela suposatuz)? Bide batez, proiektu askok antzeko printzipioak erabiltzen dituzte. Esaterako, Scribusek hau egiten du - dagoeneko eskuragarri dago Haikurako. Egunen batean bidaliko dudan eguna iritsiko da besteak beste, Atera eskaerak beste proiektu batzuetara Haiku laguntza gehitzeko.

Garatzaileetako batek azaltzen du:

Paketeak beraiek sortu nahi dituzten beste proiektuetarako, CMake/CPack metodo arrunta onartzen da. Beste eraikuntza-sistema batzuk onar daitezke paketearen eraikuntza-programara zuzenean deituz, eta hori ondo dago jendea interesatuta badago. Esperientziak erakusten du: orain arte ez da interes handirik egon, beraz, haikuporter-ek erosoa egin zuen guretzat, baina, azken batean, bi metodoek batera funtzionatu beharko lukete. Linuxetik edo beste edozein zerbitzari sistema eragiletik (Haiku ez dago zerbitzarietan exekutatzeko diseinatuta) tresna multzo bat aurkeztu beharko genuke.

Txalo zaparrada ematen dut. Linux-eko erabiltzaile arruntek zerbitzari sistema eragile baterako beharrezkoa den karga gehigarri eta ekipaje gehigarri hori guztia (segurtasuna, kontrol zorrotza, etab.) eramaten dute, baina ez pertsonalerako. Beraz, guztiz ados nago Haiku aplikazioak Linuxen eraiki ahal izatea dela bidea.

Ondorioa

Posible da POSIX aplikazioak Haikura eramatea, baina ohiko berreraikitze bat baino garestiagoa izan daiteke. Zalantzarik gabe, denbora luzez geldituko nintzateke honekin irc.freenode.net sareko #haiku kanaleko jendearen laguntzagatik ez balitz. Baina haiek ere ez zuten beti berehala ikusten zer zegoen gaizki.

Qt-en idatzitako aplikazioak salbuespen erraza dira. Demo aplikazio sinple bat muntatu dut arazorik gabe.

Aplikazio sinpleetarako pakete bat eraikitzea ere nahiko erraza da, baina "tradizionalki kaleratu" direnetarako bakarrik, hau da. iturburu-kodeen artxiboak bertsionatuta edukitzea haikuportetan laguntzeko. GitHub-ekin etengabe eraikitzeko (aldaketen konpromiso bakoitzerako eraikitzeko), badirudi dena ez dela hain erraza. Hemen Haiku Linux banaketa baten antzekoa da Mac batean emaitza baino, non XCode-ko "Eraiki" botoian klik egiten duzunean pakete bat lortzen duzun. .app, diskoaren irudi batean txertatzeko prest .dmg, nire webgunean deskargatzeko prestatua.
"Zerbitzari" sistema eragile batean oinarritutako aplikazioen etengabeko eraikuntza, adibidez, Linux, posible izango da ziurrenik garatzaileen eskaera badago, baina momentuz Haiku proiektuak beste zeregin larriagoak ditu.

Probatu zeure burua! Azken finean, Haiku proiektuak DVDtik edo USBtik abiarazteko irudiak eskaintzen ditu, sortutakoak eguneroko. Instalatzeko, deskargatu irudia eta idatzi flash drive batean erabiliz akuaforte kontuetan

Galderarik baduzu? Errusiera hiztunera gonbidatzen zaitugu telegrama kanala.

Erroreen ikuspegi orokorra: Nola tiro zeure buruari oinetan C eta C++-n. Haiku OS errezeta bilduma

From egilea itzulpena: Haikuari buruzko serieko bosgarren artikulua da.

Artikuluen zerrenda: Lehen Bigarren Hirugarrena Laugarren

Iturria: www.habr.com

Gehitu iruzkin berria