Dinten kalima abdi sareng Haiku: hayu urang port sababaraha program

Dinten kalima abdi sareng Haiku: hayu urang port sababaraha program

TL; DR: A newbie nempo Haiku pikeun kahiji kalina, nyoba port sababaraha program ti dunya Linux Ubuntu.

Dinten kalima abdi sareng Haiku: hayu urang port sababaraha program
program porting Haiku munggaran kuring, rangkep dina format hpkg na

cikeneh Kuring mendakan Haiku, sistem operasi anu saé pikeun PC.
Dinten ieu kuring bakal diajar kumaha porting program anyar kana sistem operasi ieu. Fokus utama nyaéta pedaran ngeunaan pangalaman mimiti ngalih ka Haiku tina sudut pandang pamekar Linux. Hapunten tina sagala kalepatan anu abdi lakukeun sapanjang jalan, sabab teu acan saminggu ti saprak kuring mimiti ngaunduh Haiku.

Abdi hoyong ngahontal tilu tujuan:

  • Port aplikasi CLI basajan
  • Port hiji aplikasi ti GUI mun Qt
  • Teras bungkusna dina format hpkg (sabab kuring masih mikir ngeunaan adaptasi AppDir sareng AppImage pikeun Haiku ...)

Hayu urang ngamimitian. Dina bagian dokuméntasi и pamekaranogé wiki ti HaikuPorts I kapanggih arah katuhu. Malah aya buku PDF online BeOS: Porting hiji Aplikasi Unix.
467 kaca - sarta ieu ti 1997! Sieun pisan ningali ka jero, tapi kuring ngarepkeun anu pangsaéna. Kecap pamekar anu nyorong: "Butuh waktos anu lami kusabab BeOS henteu patuh POSIX," tapi Haiku "kanggo sabagéan ageung" parantos sapertos kitu.

Porting aplikasi CLI basajan

Pikiran anu munggaran nyaéta pikeun port aplikasi avrdude, tapi, sakumaha tétéla, ieu geus réngsé lila pisan.

Cobaan kahiji: euweuh nu lalajo

Anu kuring henteu ngartos éta parantos Aplikasi parantos dialihkeun ka Haiku langkung ti 10 taun - sanajan kanyataan yén OS sorangan teu sanajan versi 1.0 acan.

Usaha kadua: kedah nyerat deui

Ku kituna kuring bakal ngagunakeun toél-770, CLI pikeun ngadalikeun printer Brother P-Touch 770 anu kuring pake pikeun nyitak labél.
Kuring nyitak rupa-rupa labél dina éta, sareng anjeun panginten parantos ningali dina tulisan sateuacana. Sakedik sateuacanna, kuring nyerat program bungkus GUI leutik dina Python (sabab aya dina Gtk +, éta kedah ditulis deui, sareng ieu mangrupikeun alesan anu saé pikeun diajar).

Dinten kalima abdi sareng Haiku: hayu urang port sababaraha program
Printer labél Brother P-Touch 770. Naha éta tiasa dianggo sareng Haiku?

Pangatur pakét Haiku terang ngeunaan perpustakaan sareng paréntah, janten upami kuring nampi pesen "teu tiasa mendakan libintl" nalika ngajalankeun. configure - Kuring ngan ngajalankeun pkgman install devel:libintl jeung pakét diperlukeun bakal kapanggih. Kitu deui pkgman install cmd:rsync. Muhun, jsb.

Iwal lamun ieu teu jalan:

/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

Panginten udev teuing basis Linux sareng ku kituna henteu aya pikeun Haiku. Nu hartina kuring kudu ngédit kode sumber Kuring nyoba compile.
Eh, anjeun moal tiasa luncat kana sirah anjeun, sareng kuring henteu terang dimana ngamimitian.

usaha katilu

Eta bakal hade ka boga tmate pikeun Haiku, teras kuring bakal ngijinkeun pamekar Haiku nyambung ka sési terminal kuring - bisi aya anu salah. Parentah anu cukup basajan:

./autogen.sh
./configure
make
make install

Sigana alus, jadi naha henteu coba eta dina 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

Dina léngkah ieu kuring muka HaikuDepot sareng milarian curses.
Aya anu kapendak, anu masihan kuring petunjuk pikeun patarosan anu langkung kompeten:

/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

Deui kuring indit ka HaikuDepot, sarta, tangtosna, kapanggih devel:msgpack_c_cpp_devel. Naon ieu ngaran aneh?

/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

Dina hambalan ieu, kuring sadar yén porting program ka Haiku merlukeun pangaweruh leuwih ti diperlukeun pikeun ngawangun deui basajan.
Kuring ngobrol jeung pamekar Haiku ramah, tétéla aya bug di msgpack, sarta sanggeus sababaraha menit kuring ningali patch dina HaikuPorts. Abdi tiasa ningali ku panon kuring sorangan kumaha bungkusan dilereskeun nuju ka dieu (buildslave - mesin virtual).

Dinten kalima abdi sareng Haiku: hayu urang port sababaraha program
Ngawangun msgpack anu dilereskeun dina buildmaster

Di antawis waktos abdi ngirim patch ka hulu pikeun nambahkeun rojongan Haiku kana msgpack.

Lima menit ti harita, msgpack anu diropéa parantos sayogi dina 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.

Teu disangka alus. Naha kuring nyarios kitu?!

Kuring balik deui ka masalah aslina:

/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

Ayeuna sigana msgpack henteu lepat. Kuring mairan IMAXLABEL в tty.c siga kieu:

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

Hasil:

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.

Muhun, hayu urang balik deui ... Ku jalan kitu:

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

Bapa. waddlesplash ngabejaan Anjeun dimana ngagali:

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

Di dieu kuring dipasang config.log.

Aranjeunna ngajelaskeun ka kuring yén aya anu sanés dina libnetwork salian libresolv on Haiku. Tétéla kode perlu diédit salajengna. Perlu dipikiran…

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

Patarosan langgeng: naon anu lumangsung?

/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

Hal anu sarua, ngan dina profil. Googled jeung kapanggih ieu. Upami anjeun nambihan -lssp "Sok" ngabantosan, kuring nyobian:

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

Wow! Ieu dimimitian! Tapi…

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

Abdi badé nyobian debug file dieu:

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

"Bad port ID" geus kawas kartu bisnis haiku. Meureun batur boga pamanggih naon salah jeung kumaha carana ngalereskeun eta? Upami kitu, abdi bakal ngamutahirkeun artikel. Tumbu ka GitHub.

Porting aplikasi GUI ka Qt.

Kuring milih hiji aplikasi QML basajan.

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

Saderhana pisan. Kirang ti menit!

Aplikasi bungkusan dina hpkg ngagunakeun haikuporter sareng haikuports.

Kuring kudu mimitian ku naon? Henteu aya dokuméntasi saderhana, kuring angkat ka saluran #haiku dina irc.freenode.net sareng ngadangu:

  • regu package - cara tingkat handap pikeun nyieun bungkusan. Kanggo sabagéan ageung, PackageInfo cekap pikeun anjeunna, sakumaha anu dijelaskeun dina bagian "Ngadamel kana pakét .hpkg anu leres"
  • Abdi kedah ngalakukeun hiji hal saperti kitu
  • Bisa dianggo hpkg-panyipta (Éta ngadat pikeun kuring, ngalaporkeun kasalahan)

Teu jelas naon anu kudu dilakukeun. Kuring nyangka kuring peryogi pituduh pamula gaya Hello World, idéalna pidéo. Hadé pisan mun éta ogé boga bubuka merenah pikeun HaikuPorter, sakumaha anu dipigawé dina GNU halo.

Kuring maca kieu:

haikuporter mangrupakeun alat pikeun nyieun proyék pakét umum pikeun Haiku. Éta ngagunakeun gudang HaikuPorts salaku dasar pikeun sadaya bungkusan. Resep Haikuporter dipaké pikeun nyieun bungkusan.

Salaku tambahan, kuring mendakan yén:

Teu perlu nyimpen resep dina gudang HaikuPorts. Anjeun tiasa ngadamel Repository sejen, nempatkeun resep di dinya, lajeng nunjuk haikuporter ka dinya.

Ngan naon anu kuring butuhkeun - upami henteu milarian cara pikeun ngaleupaskeun pakét sacara umum. Tapi ieu topik pikeun pos sejen.

Masang haikuporter sareng 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

Nulis resep

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
}

Ngumpulkeun resep

Kuring nyimpen file dina ngaran QtQuickApp-1.0.recipe, sanggeus éta kuring ngajalankeun aikuporter -S ./QuickApp-1.0.recipe. Dependensi dipariksa pikeun sadaya bungkusan dina gudang haikuports, nu butuh sababaraha waktu. Abdi badé nyandak kopi.

Naha di bumi kedah dipariksa ieu dipigawé dina mesin lokal kuring, sarta teu centrally on server sakali for everyone?

Numutkeun mr. waddlesplash:

Kalayan sapertos kitu anjeun tiasa nyerat deui file naon waé dina gudang 😉 Anjeun tiasa ngaoptimalkeun ieu sakedik, ngitung inpormasi anu diperyogikeun nalika diperyogikeun, sabab parobihan anu terakhir dilakukeun jarang jarang.

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

Tétéla henteu aya file resep biasa anu ngandung kode sumber aplikasi anjeun. Anjeun kedah nyimpen éta dina gudang dina format HaikuPorts.

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

Kanyataan ieu ngajadikeun rakitan leuwih pajeulit. Abdi henteu resep pisan, tapi kuring nyangka éta diperyogikeun supados pamustunganana sadaya parangkat lunak open source bakal muncul dina HaikuPorts.

Kuring meunang kieu:

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

Aya naon? Saatos maca irc kuring ngalakukeun:

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

Hiji patarosan metot geus timbul. Upami kuring nambihan checksum kana resep - naha éta bakal cocog sareng komit git panganyarna pikeun integrasi kontinyu? (Pamekar confirms: "Ieu moal jalan. Resep nu dirancang pikeun jadi rélatif stabil ".)

Pikeun senang, tambahkeun kana resep:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Masih teu puas:

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

Naon anu anjeunna lakukeun? Barina ogé, ieu mangrupikeun gudang git, kodeu parantos aya langsung, teu aya anu ngabongkar. Ti sudut pandang abdi, alat nu kudu cukup pinter teu néangan hiji unpacker lamun éta luhureun url GitHub.

Panginten uri git: // bakal dianggo

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

Ayeuna keluhan sapertos kieu:

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

Hmm, naha sagalana jadi pajeulit, naha anjeun teu bisa "ngan digawé"? Barina ogé, éta teu ilahar ngawangun hal ti GitHub. Naha éta alat anu langsung dianggo, tanpa peryogi pangaturan, atanapi sakumaha anu kuring nyebatna "fussing".

Panginten éta bakal tiasa dianggo sapertos kieu:

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

Heueuh. Kuring masih meunang kasalahan aneh ieu sareng ngalakukeun, sakumaha ditétélakeun di dieu

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

Kuring pindah saeutik salajengna, tapi naha éta screaming di kuring (GitHub teu aman!) Sarta masih nyobian ngabongkar hiji hal.

nurutkeun Bapa. waddlesplash:

Nya, enya, alesanana nyaéta kahayang pikeun pariksa integritas data anu ditampi pikeun assembly. Salah sahiji pilihan nyaéta pikeun pariksa checksum tina arsip, tapi anjeun tiasa, tangtosna, hash file individu, anu moal dilaksanakeun, sabab butuh leuwih lila. Konsékuansi tina ieu "kerawanan" git na VCS séjén. Ieu paling dipikaresep bakal salawasna jadi, saprak nyieun arsip on GitHub cukup gampang sarta mindeng leuwih gancang. Muhun, di mangsa nu bakal datang, meureun pesen kasalahan moal jadi flashy ... (urang euweuh ngagabung resep misalna dina 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

Kusabab kabiasaan baheula, kuring naroskeun ka jalma anu saé dina saluran #haiku dina jaringan irc.freenode.net. Sareng dimana atuh tanpa aranjeunna? Saatos petunjuk, kuring sadar yén kuring kedah nganggo:

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

Oke, janten jelas naon anu dilakukeun - éta ngaunduh arsip kalayan kode sumber tina révisi anu tangtu. Éta bodo, tina sudut pandang kuring, sareng henteu persis anu dipikahoyong, nyaéta, pikeun ngaunduh révisi panganyarna tina cabang master.

Salah sahiji pamekar ngajelaskeun ku cara kieu:

Kami gaduh CI sorangan, janten sadayana anu disimpen dina gudang haikuports bakal dibungkus pikeun sadaya pangguna, sareng kami henteu hoyong résiko ngumpulkeun sareng ngirimkeun "sadayana dina versi anu pang anyarna."

Ngarti! Dina naon waé, ieu anu kajantenan:

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

Ieu repeats ad infinitum ieu. Tétéla ieu kasalahan (aya hiji aplikasi? Abdi teu bisa manggihan eta).

С haikuporter jeung gudang haikuports Éta henteu gaduh rasa "ngan ukur dianggo", tapi salaku pamekar, aya sababaraha hal anu kuring resep ngeunaan gawé bareng Haiku. Sabagéan ageung, éta sami sareng Open Build Service, sakumpulan alat pikeun ngawangun Linux Ubuntu: kuat pisan, kalayan pendekatan sistematis, tapi overkill pikeun aplikasi leutik "halo dunya" kuring.

Deui, nurutkeun mr. waddlesplash:

Mémang, HaikuPorter cukup ketat sacara standar (tambah aya mode lint ogé mode anu ketat pikeun ngajantenkeun langkung ketat!), Tapi ngan kusabab éta nyiptakeun bungkusan anu bakal dianggo, sanés ngan ukur nyiptakeun bungkusan. Éta pisan sababna naha anjeunna complains ngeunaan kagumantungan undeclared, perpustakaan teu diimpor leres, versi salah, jsb. Tujuanana nyaéta pikeun nangkep naon waé sareng sadaya masalah, kalebet masalah anu bakal datang, sateuacan pangguna terang ngeunaan éta (éta naha éta henteu mungkin pikeun masang avrdude, sabab kagumantunganana leres-leres dieusian dina resep). Perpustakaan sanés ngan ukur bungkusan individu atanapi bahkan versi SO khusus. HaikuPorter mastikeun yén sadaya ieu dititénan dina resep sorangan pikeun nyegah kasalahan nalika palaksanaan.

Sacara prinsip, tingkat rigor ieu diyakinkeun nalika nyieun sistem operasi, tapi sigana mah teu perlu keur aplikasi "halo dunya". Kuring mutuskeun pikeun nyobaan hal sejenna.

Ngawangun aplikasi dina format hpkg nganggo paréntah "paket jieun".

Tiasa waé, эта Naha parentah saderhana tiasa dianggo langkung saé pikeun kuring?

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

Teu kaduga gancang, teu disangka basajan, teu disangka éféktif. Persis kumaha kuring resep, endah pisan!

Instalasi - naon jeung dimana?

Dipindahkeun file QtQuickApp.hpkg ka ~/config/packagesngagunakeun manajer file, nu satutasna QtQuickApp magically mucunghul di ~/config/apps.
Deui, teu kaduga gancang, basajan tur éféktif. Hebat, luar biasa!

Tapi... (dimana urang tanpa aranjeunna!)

Aplikasina masih leungit tina daptar ménu aplikasi sareng QuickLaunch. Jigana mah geus nyaho kumaha carana ngalereskeun eta. Dina manajer file kuring mindahkeun QtQuickApp.hpkg ti ~/config/packages ka /system/packages.

Henteu, masih leungit. Tétéla, kuring (sumur, jeung parentah) lasut hiji hal.

Saatos ningali tab "Eusi" dina HaikuDepot pikeun sababaraha aplikasi anu sanés, kuring ningali yén aya file sapertos /data/mimedb/application/x-vnd... anu langkung luar biasa nyaéta /data/deskbar/menu/Applications/….

Muhun, naon anu kudu kuring nempatkeun di dinya? Kadieu...

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

Kuring yakin yén trik ieu bakal dianggo, tapi patarosan tetep: naha ieu diperlukeun, naon eta? Jigana ieu ruruntuhan gambaran sakabéh yén sistem téh jadi canggih.

Sakumaha anu dijelaskeun ku Mr. waddlesplash:

Kadang aya aplikasi anu diperyogikeun ku aplikasi sanés tapi henteu aya dina ménu. Contona, LegacyPackageInstaller dina screenshot anjeun, ngolah arsip .pkg dina format BeOS. Abdi hoyong pangguna masang aranjeunna, tapi ayana dina ménu bakal nyababkeun kabingungan.

Kanggo sababaraha alesan sigana kuring aya solusi anu langkung saderhana, contona Hidden=true dina file .desktop dina Linux. Naha henteu ngajantenkeun inpormasi "disumputkeun" janten sumber sareng atribut sistem file?

Anu khususna henteu halus nyaéta nami (sababaraha) aplikasi anu nunjukkeun ménu, deskbar, kaku dihijikeun sapanjang jalan.

Bapa. waddlesplash ngajelaskeun ieu:

"Deskbar" dina hal ieu kudu dipikaharti salaku jenis istilah umum (dina cara nu sarua salaku "taskbar", nu nujul kana duanana aplikasi Windows jeung konsep umum). Muhun, saprak ieu deskbar, sanes "Deskbar", ieu ogé tiasa kahartos ku cara anu sami.

Dinten kalima abdi sareng Haiku: hayu urang port sababaraha program
2 diréktori "ampir sami" sareng aplikasi di jerona

Naha aya 2 directories kalawan aplikasi, sarta ogé naha QtQuickApplication kuring dina hiji, tapi teu di séjén? (Barina ogé, ieu sanés sistem hiji, tapi pangguna kadua, anu bakal kaharti ku kuring pribadi).
Abdi leres-leres bingung sareng panginten ieu kedah dihijikeun.

komentar ku mr. waddlesplash

Katalog Aplikasi ngandung aplikasi anu henteu diperyogikeun dina ménu. Tapi kaayaan jeung menu bener perlu ditingkatkeun, sangkan eta leuwih customizable.

Aplikasi, atanapi éta moal lumangsung 😉

Kuring heran: naha éta leres-leres kedah janten host aplikasi /system/apps, lamun pamaké ningali aranjeunna aya, éta teu pikaresepeun. Panginten éta langkung saé pikeun nempatkeun éta di tempat sanés dimana pangguna moal mendakanana? Sapertos anu dilakukeun dina Mac OS X, dimana eusi bungkusan .app, anu henteu kedah katingali ku pangguna dina /Applications, nyumput di jero /System/Library/…“`.

Kumaha upami katergantungan?

Jigana éta patut nangtukeun gumantungna kumaha bae, katuhu? Tiasa Qt dianggap bagian wajib tina instalasi Haiku sacara standar? Henteu! Qt teu dipasang sacara standar. Tiasa pembina pakét otomatis ngadeteksi kagumantungan ku mariksa file ELF? Kuring ieu ngawartoskeun yen HaikuPorter sabenerna ngalakukeun ieu, tapi package No. Éta sabab éta ngan ukur "pembina pakét" anu ngan ukur nyiptakeun file nyalira hpkg.

Naha Haiku kedah dilakukeun langkung canggih ku nambihan kabijakan yén pakét henteu kedah gumantung kana bungkusan di luar Haiku? haikuports? (Abdi hoyong, sabab kabijakan sapertos kitu bakal ngagampangkeun hal-hal - sistem bakal tiasa sacara otomatis ngabéréskeun katergantungan unggal pakét anu diunduh ti mana waé, tanpa nganggo sumber pakét tambahan.)

Bapa. waddlesplash ngajelaskeun:

Kami henteu hoyong ngabatesan kabébasan pamekar pisan, sabab écés yén upami CompanyX hoyong ngadukung set parangkat lunak sorangan sareng dependensi (sareng ku kituna gudang), éta bakal ngalakukeunana sacara bébas.

Dina hal éta, éta patut nyarankeun yén bungkusan pihak katilu ngahindarkeun katergantungan kana naon waé anu henteu kalebet dina haikuports ku cara ngabungkus sadayana anu diperyogikeun sareng aplikasi. Tapi kuring pikir ieu topik pikeun artikel hareup dina séri ieu. [Naha panulis nuju ka AppImage? - kira-kira. penerjemah]

Nambahkeun ikon aplikasi

Kumaha upami abdi hoyong tambahkeun salah sahiji ikon diwangun-di rapih kana sumberdaya aplikasi abdi karek dijieun? Tétéla éta topik endah pisan, jadi eta bakal jadi dadasar pikeun artikel salajengna.

Kumaha ngatur ngawangun aplikasi kontinyu?

Bayangkeun proyék sapertos Inkscape (enya, kuring sadar yén éta henteu acan sayogi di Haiku, tapi éta gampang pikeun ditingalikeun). Aranjeunna gaduh gudang kode sumber https://gitlab.com/inkscape/inkscape.
Unggal waktos aya anu ngalakukeun parobahanana kana gudang, ngawangun pipelines diluncurkeun, saatos éta parobihan sacara otomatis diuji, diwangun, sareng aplikasi ngarangkep kana sababaraha pakét, kalebet AppImage pikeun Linux (pakét aplikasi mandiri anu tiasa diunduh pikeun uji lokal henteu paduli. naon anu tiasa atanapi henteu dipasang dina sistem [Abdi terang éta! - kira-kira. penerjemah]). Hal anu sami kajadian sareng unggal pamundut gabungan cabang, janten anjeun tiasa ngaunduh aplikasi anu diwangun tina kode anu diajukeun dina pamundut gabungan sateuacan ngahiji.

Dinten kalima abdi sareng Haiku: hayu urang port sababaraha program
Gabungkeun pamundut sareng status ngawangun sareng kamampuan pikeun ngaunduh binér anu disusun upami ngawangun suksés (ditandaan héjo)

Wangunanna dijalankeun dina wadah Docker. GitLab nawiskeun pelari gratis dina Linux, sareng kuring panginten tiasa ngalebetkeun pelari anjeun nyalira (ku jalan kitu, kuring henteu ningali kumaha ieu tiasa dianggo pikeun sistem sapertos Haiku, anu kuring terang henteu gaduh Docker atanapi sarimbag, tapi ogé pikeun FreeBSD teu aya Docker, janten masalah ieu henteu unik pikeun Haiku).

Ideally, aplikasi Haiku tiasa diwangun di jero wadah Docker pikeun Linux. Dina kaayaan ieu, assembly pikeun Haiku bisa diwanohkeun kana pipelines aya. Naha aya kompiler lintas? Atanapi kuring kedah niru sadayana Haiku di jero wadah Docker nganggo hal sapertos QEMU / KVM (asumsina éta bakal jalan di jero Docker)? Ku jalan kitu, seueur proyék nganggo prinsip anu sami. Salaku conto, Scribus ngalakukeun ieu - éta parantos sayogi pikeun Haiku. Hiji poé bakal datang nalika kuring bisa ngirim siga Tarik requests ka proyék séjén pikeun nambahkeun rojongan Haiku.

Salah sahiji pamekar ngajelaskeun:

Pikeun proyék-proyék sanés anu badé nyiptakeun bungkusan nyalira, metodeu CMake / CPack biasa dirojong. Sistem ngawangun anu sanés tiasa dirojong ku nyauran program ngawangun pakét sacara langsung, henteu kunanaon upami jalma anu resep kana éta. Pangalaman nunjukkeun: sajauh ieu teu acan seueur minat, janten haikuporter damel saé pikeun urang, tapi, pamustunganana, duanana metode kedah dianggo babarengan. Urang kedah ngenalkeun sakumpulan alat pikeun parangkat lunak ngawangun silang tina Linux atanapi sistem operasi pangladén anu sanés (Haiku henteu dirancang pikeun ngajalankeun dina server).

Kuring méré standing ovation. Pamaké Linux biasa mawa sagala beban tambahan ieu sareng koper tambahan (kaamanan, kontrol ketat, jsb) anu dipikabutuh pikeun sistem operasi server, tapi henteu pikeun anu pribadi. Janten kuring satuju pisan yén tiasa ngawangun aplikasi Haiku dina Linux mangrupikeun jalan anu leres.

kacindekan

Porting aplikasi POSIX ka Haiku nyaéta dimungkinkeun, tapi bisa jadi leuwih mahal batan rebuild has. Kuring pasti bakal nyangkut sareng ieu kanggo waktos anu lami upami sanés bantosan jalma ti saluran #haiku dina jaringan irc.freenode.net. Tapi sanajan maranehna teu salawasna langsung ningali naon salah.

Aplikasi ditulis dina Qt mangrupakeun iwal gampang. Kuring nunda babarengan hiji aplikasi demo basajan tanpa masalah.

Ngawangun pakét pikeun aplikasi basajan oge rada gampang, tapi ngan pikeun "dileupaskeun tradisional", i.e. ngabogaan arsip kode sumber versioned dimaksudkeun pikeun rojongan di haikuports. Pikeun ngawangun kontinyu (ngawangun pikeun unggal komitmen parobahan) kalawan GitHub, sagalana sigana teu jadi basajan. Di dieu Haiku karasaeun langkung sapertos distribusi Linux tibatan hasil dina Mac, dimana nalika anjeun ngaklik tombol "Bangun" dina XCode anjeun nampi pakét. .app, siap diasupkeun kana gambar disk .dmg, disiapkeun pikeun diundeur dina ramatloka kuring.
Pangwangunan kontinyu tina aplikasi dumasar kana sistem operasi "server", contona, Linux, paling dipikaresep bakal mungkin upami aya paménta ti pamekar, tapi ayeuna proyék Haiku ngagaduhan tugas anu langkung mendesak.

Coba sorangan! Barina ogé, proyék Haiku nyadiakeun gambar pikeun booting tina DVD atawa USB, dihasilkeun ежедневно. Pikeun masang, ngan unduh gambar sareng nyerat kana flash drive nganggo Etcher

Dupi anjeun gaduh patarosan? Urang ngajak anjeun ka Rusia-diomongkeun saluran telegram.

Tinjauan kasalahan: Kumaha némbak diri dina suku di C jeung C ++. kumpulan resep Haiku OS

ti pangarang tarjamahan: ieu artikel kalima dina séri ngeunaan Haiku.

Daptar artikel: kahiji kadua katilu Kaopat

sumber: www.habr.com

Tambahkeun komentar