Dina kaping lima karo Haiku: ayo port sawetara program

Dina kaping lima karo Haiku: ayo port sawetara program

TL; DR: A newbie weruh Haiku kanggo pisanan, nyoba kanggo port sawetara program saka donya Linux.

Dina kaping lima karo Haiku: ayo port sawetara program
Program porting Haiku pisananku, dikemas ing format hpkg

Bubar Aku nemokake Haiku, sistem operasi sing apik banget kanggo PC.
Dina iki aku bakal sinau carane port program anyar kanggo sistem operasi iki. Fokus utama yaiku gambaran saka pengalaman pisanan ngoper menyang Haiku saka sudut pandang pangembang Linux. Aku njaluk ngapura kanggo kabeh kesalahan bodho sing aku lakoni ing dalan, amarga durung seminggu wiwit aku ngunduh Haiku.

Aku pengin entuk telung gol:

  • Port aplikasi CLI prasaja
  • Port aplikasi saka GUI kanggo Qt
  • Banjur paket ing format hpkg (amarga aku isih mikir babagan adaptasi AppDir lan AppImage kanggo Haiku ...)

Ayo dadi miwiti. Ing bagean dokumentasi ΠΈ pangembangan, uga ing wiki saka HaikuPorts aku nemokake arah sing bener. Malah ana buku PDF online BeOS: Porting Aplikasi Unix.
467 kaca - lan iki saka 1997! Medeni katon ing njero, nanging aku ngarep-arep sing paling apik. Tembung pangembang nyemangati: "Butuh wektu suwe amarga BeOS ora tundhuk karo POSIX," nanging Haiku "kanggo umume" wis kaya ngono.

Porting aplikasi CLI prasaja

Pikiran pisanan yaiku port aplikasi avrdude, nanging, minangka ternyata, iki wis wis rampung dangu.

Coba pisanan: ora ana sing kudu ditonton

Apa aku ora bisa ngerti iku wis Aplikasi wis ditransfer menyang Haiku luwih saka 10 taun - senadyan kasunyatan sing OS dhewe ora malah versi 1.0 durung.

Upaya kapindho: kudu nulis ulang

Dadi aku bakal nggunakake tutul-770, CLI kanggo ngontrol printer Brother P-Touch 770 sing digunakake kanggo nyithak label.
Aku nyithak macem-macem label, lan sampeyan bisa uga wis ndeleng ing artikel sadurunge. A little sadurungΓ©, Aku wrote program pambungkus GUI cilik ing Python (amarga ana ing Gtk +, iku kudu ditulis maneh, lan iki alesan apik kanggo sinau).

Dina kaping lima karo Haiku: ayo port sawetara program
Printer label Brother P-Touch 770. Apa bakal bisa digunakake karo Haiku?

Manajer paket Haiku ngerti babagan perpustakaan lan perintah, dadi yen aku entuk pesen "ora bisa nemokake libintl" nalika mlaku configure - Aku mung miwiti pkgman install devel:libintl lan paket sing dibutuhake bakal ditemokake. Semono uga pkgman install cmd:rsync. Inggih, lsp.

Kajaba yen iki ora bisa:

/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

Mbok udev banget basis Linux lan mulane ora ana kanggo Haiku. Tegese aku kudu nyunting kode sumber sing dakkarepake.
Eh, sampeyan ora bisa mlumpat liwat sirah, lan aku malah ora ngerti ngendi kanggo miwiti.

Coba kaping telu

Iku bakal becik kanggo duwe tmate kanggo Haiku, banjur aku bakal ngidini pangembang Haiku nyambung menyang sesi terminal - yen ana sing salah. Instruksi cukup prasaja:

./autogen.sh
./configure
make
make install

Katon apik, dadi apa ora nyoba ing 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

Ing langkah iki aku mbukak HaikuDepot lan nggoleki curses.
Ana sing ditemokake, sing menehi pitunjuk kanggo pitakon sing luwih 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

Maneh aku lunga menyang HaikuDepot, lan, mesthi, ketemu devel:msgpack_c_cpp_devel. Apa jeneng aneh iki?

/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

Ing langkah iki, aku nyadari yen porting program menyang Haiku mbutuhake kawruh luwih akeh tinimbang sing dibutuhake kanggo mbangun maneh sing gampang.
Aku ngomong karo pangembang Haiku sing ramah, ternyata ana bug ing msgpack, lan sawise sawetara menit aku ndeleng tembelan ing HaikuPorts. Aku bisa ndeleng karo mripatku dhewe carane paket didandani arep mrene (buildslave - mesin virtual).

Dina kaping lima karo Haiku: ayo port sawetara program
Nggawe msgpack sing wis didandani ing buildmaster

Ing antarane kaping aku ngirim tembelan kanggo hulu kanggo nambah dhukungan Haiku menyang msgpack.

Limang menit mengko, msgpack sing dianyari wis kasedhiya ing 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.

Ora disangka apik. Aku ngomong ngono?!

Aku bali menyang masalah asli:

/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

Saiki katon kaya msgpack ora salah. Aku komentar IMAXLABEL Π² tty.c supaya:

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

Asil:

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.

Inggih, kita pindhah maneh ... Miturut cara:

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

pak. waddlesplash ngandhani ngendi kanggo dig:

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

Kene aku dikirim config.log.

Dheweke nerangake yen ana liyane ing libnetwork saliyane libresolv ing Haiku. Ketoke kode kasebut kudu diowahi maneh. Perlu dipikir…

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

Pitakonan langgeng: apa sing kedadeyan?

/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

Bab sing padha, mung ing profil. Googled lan ketemu iki. Yen sampeyan nambah -lssp "Kadhangkala" mbantu, aku nyoba:

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

wah! Iku diwiwiti! Nanging…

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

Aku bakal nyoba kanggo debug file kene:

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

"ID port ala" wis kaya kertu bisnis haiku. Mungkin wong duwe idea apa salah lan carane ndandani iku? Yen mangkono, aku bakal nganyari artikel kasebut. Link menyang GitHub.

Porting aplikasi GUI kanggo Qt.

Aku milih aplikasi QML prasaja.

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

Prasaja tenan. Kurang saka menit!

Aplikasi pengemasan ing hpkg nggunakake haikuporter lan haikuports.

Aku kudu miwiti karo apa? Ora ana dokumentasi sing gampang, aku menyang saluran #haiku ing irc.freenode.net lan krungu:

  • tim package - cara tingkat rendah kanggo nggawe paket. Umume, PackageInfo cukup kanggo dheweke, kaya sing diterangake ing bagean "Nggawe paket .hpkg sing tepat"
  • Aku kudu nindakake soko kayata
  • Bisa digunakake pangripta hpkg (iku nabrak kanggo aku, laporan kesalahan)

Ora jelas apa sing kudu ditindakake. Aku guess aku kudu guide pamula gaya Hello World, saenipun video. Iku bakal becik uga duwe introduksi trep kanggo HaikuPorter, minangka rampung ing GNU hello.

Aku maca ing ngisor iki:

haikuporter minangka alat kanggo nggawe proyek paket umum kanggo Haiku. Iki nggunakake gudang HaikuPorts minangka basis kanggo kabeh paket. Resep Haikuporter digunakake kanggo nggawe paket.

Kajaba iku, aku ngerteni manawa:

Ora perlu nyimpen resep ing panyimpenan HaikuPorts. Sampeyan bisa nggawe repositori liyane, sijine resep-resep ing, lan banjur titik haikuporter menyang.

Mung apa aku kudu - yen ora looking for cara kanggo publicly release paket. Nanging iki topik kanggo kirim liyane.

Nginstal haikuporter lan 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
}

Ngumpulake resep

Aku nyimpen file ing jeneng QtQuickApp-1.0.recipe, sawise aku miwiti aikuporter -S ./QuickApp-1.0.recipe. Dependensi dicenthang kanggo kabeh paket ing repositori haikuports, sing njupuk sawetara wektu. Aku arep njupuk kopi.

Apa ing bumi kudu mriksa iki rampung ing mesin lokal, lan ora tengah ing server sapisan kanggo kabeh?

Miturut mr. waddlesplash:

Kanthi mangkono, sampeyan bisa nulis ulang file apa wae ing repositori πŸ˜‰ Sampeyan bisa ngoptimalake iki sethithik, ngitung informasi sing dibutuhake yen perlu, amarga owah-owahan pungkasan sing ditindakake cukup langka.

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

Pranyata ora ana file resep biasa sing ngemot kode sumber aplikasi sampeyan. Sampeyan kudu nyimpen ing repositori ing format HaikuPorts.

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

Kasunyatan iki ndadekake perakitan luwih rumit. Aku ora utamanΓ© kaya iku, nanging aku iku perlu supaya pungkasanipun kabeh piranti lunak open source bakal katon ing HaikuPorts.

Aku njaluk ing ngisor iki:

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

Opo sing salah? Sawise maca irc aku nindakake:

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

Pitakonan sing menarik wis muncul. Yen aku nambahake checksum menyang resep - apa bakal cocog karo komit git paling anyar kanggo integrasi terus-terusan? (Pangembang nandheske: "Iku ora bakal bisa. Resep-resep dirancang kanggo dadi relatif stabil.")

Kanggo nyenengake, tambahake resep:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Isih durung 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

Dheweke nyapo? Sawise kabeh, iki minangka gudang git, kode kasebut wis ana langsung, ora ana sing kudu dibongkar. Saka sudut pandangku, alat kasebut kudu cukup pinter supaya ora nggoleki unpacker yen ana ing ndhuwur url GitHub.

Mbok uri git: // bakal bisa

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

Saiki keluhan kaya mangkene:

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

Hmm, kenapa kabeh dadi rumit, kenapa sampeyan ora bisa "mung kerja"? Sawise kabeh, iku ora umum kanggo mbangun soko saka GitHub. Apa iku alat sing bisa langsung, tanpa perlu kanggo persiyapan, utawa aku nelpon iku "fussing".

Mungkin bakal bisa kaya mangkene:

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

Ora. Aku isih njaluk kesalahan aneh iki lan nindakake, kaya sing diterangake ing kene

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

Aku obah sethitik luwih, nanging kok njerit ing kula (GitHub ora aman!) Lan isih nyoba kanggo unpack soko.

Miturut pak. waddlesplash:

Inggih, ya, alasane yaiku kepinginan kanggo mriksa integritas data sing ditampa kanggo perakitan. Salah sawijining pilihan yaiku verifikasi checksum arsip, nanging sampeyan bisa, mesthi, hash file individu, sing ora bakal ditindakake, amarga butuh luwih suwe. Akibat saka iki yaiku "ora aman" git lan VCS liyane. Iki mesthine bakal kedadeyan, amarga nggawe arsip ing GitHub cukup gampang lan asring luwih cepet. Inggih, ing mangsa ngarep, mbok menawa pesen kesalahan ora bakal dadi flashy ... (kita ora maneh nggabung resep-resep kuwi ing 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

Saka pakulinan lawas, aku takon wong apik ing saluran #haiku ing jaringan irc.freenode.net. Lan ing ngendi aku tanpa dheweke? Sawise pitunjuk, aku ngerti yen aku kudu nggunakake:

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

Oke, dadi jelas apa sing ditindakake - ngundhuh arsip kanthi kode sumber saka revisi tartamtu. Bodho, saka sudut pandangku, lan ora persis sing dakkarepake, yaiku, download revisi paling anyar saka cabang master.

Salah sawijining pangembang nerangake kanthi cara iki:

Kita duwe CI dhewe, supaya kabeh sing diselehake ing gudang haikuports bakal dikemas kanggo kabeh pangguna, lan kita ora pengin resiko ngumpulake lan ngirim "kabeh ing versi paling anyar hulu."

Ngerti! Ing kasus apa wae, iki kedadeyan:

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

Iki mbaleni iklan tanpa wates. Ketoke iki kesalahan (ana aplikasi? Aku ora bisa nemokake iku).

Π‘ haikuporter lan gudang haikuports Ora ana rasa "mung dianggo", nanging minangka pangembang, ana sawetara perkara sing aku seneng nggarap Haiku. Umume, meh padha karo Open Build Service, sakumpulan alat kanggo mbangun Linux: kuat banget, kanthi pendekatan sing sistematis, nanging overkill kanggo aplikasi "hello world" cilik.

Maneh, miturut mr. waddlesplash:

Pancen, HaikuPorter cukup ketat kanthi standar (plus ana mode lint uga mode ketat kanggo nggawe luwih ketat!), Nanging mung amarga nggawe paket sing bisa digunakake, tinimbang mung nggawe paket. Mulane dheweke sambat babagan dependensi sing ora dideklarasi, perpustakaan sing ora diimpor kanthi bener, versi sing ora bener, lsp. Tujuane kanggo nyekel kabeh masalah, kalebu sing bakal teka, sadurunge pangguna ngerti babagan iki (mulane ora bisa nginstal avrdude, amarga ketergantungan kasebut bener-bener kasebut ing resep). Pustaka ora mung paket individu utawa malah versi SO tartamtu. HaikuPorter mesthekake yen kabeh iki diamati ing resep-resep dhewe kanggo ngindhari kasalahan sajrone eksekusi.

Ing asas, tingkat rigor iki sabdho nalika nggawe sistem operasi, nanging misale jek ora perlu kanggo aplikasi "hello donya". Aku mutusakΓ© kanggo nyoba mergo.

Mbangun aplikasi ing format hpkg nggunakake printah "paket nggawe".

Bisa uga, iki Apa instruksi prasaja bisa luwih apik kanggo kula?

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

Ora dinyana cepet, ora dinyana prasaja, ora disangka efektif. Persis carane aku seneng, apik tenan!

Instalasi - apa lan ing ngendi?

Dipindhah file QtQuickApp.hpkg menyang ~/config/packagesnggunakake file manager, sawise QtQuickApp gaib muncul ing ~/config/apps.
Maneh, ora dikarepke cepet, prasaja lan efektif. Apik banget, luar biasa!

Nanging ... (ngendi kita bakal tanpa dheweke!)

Aplikasi isih ilang saka dhaptar menu app lan QuickLaunch. Aku wis ngerti carane ndandani. Ing file manager aku mindhah QtQuickApp.hpkg saka ~/config/packages kanggo /system/packages.

Ora, isih ilang. Ketoke, aku (uga, lan instruksi) ora kejawab.

Sawise ndeleng tab "Konten" ing HaikuDepot kanggo sawetara aplikasi liyane, aku weruh yen ana file kaya /data/mimedb/application/x-vnd... sing luwih nggumunake yaiku /data/deskbar/menu/Applications/….

Nah, apa sing kudu daklebokake ing kana? Ayo...

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

Aku yakin yen trik iki bakal bisa digunakake, nanging pitakonan tetep: kenapa iki perlu, kanggo apa? Aku iki ngrusak roso kesengsem sakabèhé sing sistem dadi canggih.

Kaya sing dijlentrehake dening Bp. waddlesplash:

Kadhangkala ana aplikasi sing dibutuhake aplikasi liyane nanging ora ana ing menu. Contone, LegacyPackageInstaller ing gambar sampeyan, ngolah arsip .pkg ing format BeOS. Aku pengin kedhaftar kanggo nginstal, nanging ngarsane ing menu bakal mimpin kanggo kebingungan.

Kanggo sawetara alesan misale jek kula sing ana solusi prasaja, contone, Hidden=true ing file .desktop ing Linux. Napa ora nggawe informasi "didhelikake" minangka sumber lan atribut sistem file?

Sing paling ora subtle yaiku jeneng (sawetara) aplikasi sing nuduhake menu, deskbar, kaku diikat ing dalan.

pak. waddlesplash nerangake iki:

"Deskbar" ing kasus iki kudu dimangerteni minangka jinis istilah umum (kanthi cara sing padha karo "taskbar", sing nuduhake aplikasi Windows lan konsep umum). Nah, wiwit iki deskbar, dudu "Deskbar", iki uga bisa dimangerteni kanthi cara sing padha.

Dina kaping lima karo Haiku: ayo port sawetara program
2 direktori "meh padha" karo aplikasi ing

Apa ana 2 direktori karo aplikasi, lan uga kok QtQuickApplication ing siji, nanging ora ing liyane? (Sawise kabeh, iki dudu sistem siji, nanging pangguna kapindho, sing bisa dingerteni kanthi pribadi).
Aku pancene bingung lan aku iki kudu nyawiji.

komentar saka mr. waddlesplash

Katalog Aplikasi ngemot aplikasi sing ora dibutuhake ing menu. Nanging kahanan karo menu pancene kudu ditingkatake, supaya luwih bisa disesuaikan.

Aplikasi, utawa ora bakal kelakon πŸ˜‰

Aku kepingin weruh: iku pancene perlu kanggo tuan rumah aplikasi ing /system/apps, yen kedhaftar ndeleng wong ana, iku undesirable. Mungkin luwih becik dilebokake ing papan liya sing ora bakal ditemoni pangguna? Kaya sing ditindakake ing Mac OS X, ing ngendi isi paket .app, sing ngirim ora katon kanggo pangguna ing /Applications, ndhelikake ing telenging /System/Library/β€¦β€œ`.

Kepiye babagan dependensi?

Aku mikir iku worth nemtokake dependensi piye wae, bener? Qt bisa dianggep minangka bagean prentah saka instalasi Haiku minangka standar? Ora! Qt ora diinstal kanthi gawan. Bisa nggawe paket kanthi otomatis ndeteksi dependensi kanthi mriksa file ELF? Aku iki marang sing HaikuPorter bener nindakake iki, nanging package Ora. Iku amarga iku mung "paket builder" sing mung nggawe file ing dhewe hpkg.

Apa Haiku kudu digawe luwih canggih kanthi nambahake kabijakan yen paket ora duwe ketergantungan ing paket ing njaba Haiku? haikuports? (Aku pengin, amarga kabijakan kasebut bakal nggawe luwih gampang - sistem bakal bisa kanthi otomatis mutusake ketergantungan saben paket sing diunduh saka ngendi wae, tanpa nganggo sumber paket tambahan.)

pak. waddlesplash nerangake:

Kita ora pengin mbatesi kebebasan para pangembang, amarga jelas yen CompanyX pengin ndhukung piranti lunak dhewe kanthi dependensi (lan mulane dadi repositori), mula bakal ditindakake kanthi bebas.

Ing kasus kasebut, bisa uga dianjurake supaya paket pihak katelu ngindhari ketergantungan apa wae sing ora kalebu ing haikuports kanthi ngrampungake kabeh sing dibutuhake karo aplikasi kasebut. Nanging aku mikir iki topik kanggo artikel mangsa ing seri iki. [Apa penulis tumuju AppImage? - kira-kira. penerjemah]

Nambahake lambang aplikasi

Kepiye yen aku pengin nambah salah sawijining lambang sing dibangun ing sumber daya aplikasi sing mentas digawe? Pranyata iki minangka topik sing apik tenan, mula bakal dadi dhasar kanggo artikel sabanjure.

Kepiye cara ngatur mbangun aplikasi sing terus-terusan?

Bayangake proyek kaya Inkscape (ya, aku ngerti yen durung kasedhiya ing Haiku, nanging luwih gampang ditampilake). Dheweke duwe gudang kode sumber https://gitlab.com/inkscape/inkscape.
Saben ana wong sing nindakake owah-owahan ing repositori, mbangun pipelines diluncurake, sawise owah-owahan kasebut kanthi otomatis diuji, dibangun, lan aplikasi dikemas ing macem-macem paket, kalebu AppImage kanggo Linux (paket aplikasi mandiri sing bisa diundhuh kanggo testing lokal preduli). apa bisa utawa ora diinstal ing sistem [Aku ngerti! - kira-kira. penerjemah]). Bab sing padha kedadeyan karo saben panyuwunan gabungan cabang, supaya sampeyan bisa ndownload aplikasi sing dibangun saka kode sing diusulake ing panyuwunan gabungan sadurunge gabung.

Dina kaping lima karo Haiku: ayo port sawetara program
Gabung panjalukan karo status mbangun lan kemampuan kanggo ndownload binari kompilasi yen mbangun sukses (ditandhani ijo)

Mbangun mlaku ing kontaner Docker. GitLab nawakake pelari gratis ing Linux, lan aku mikir bisa uga kalebu pelari sampeyan dhewe (kanthi cara, aku ora ngerti carane iki bisa digunakake kanggo sistem kaya Haiku, sing aku ngerti ora duwe Docker utawa sing padha, nanging uga kanggo FreeBSD ora ana Docker, mula masalah iki ora unik kanggo Haiku).

Saenipun, aplikasi Haiku bisa dibangun ing wadhah Docker kanggo Linux. Ing kahanan iki, DΓ©wan kanggo Haiku bisa ngenalaken menyang pipelines ana. Apa ana kompiler lintas? Utawa aku kudu niru kabeh Haiku ing wadhah Docker nggunakake kaya QEMU / KVM (assuming bakal bisa ing Docker)? Miturut cara, akeh proyek nggunakake prinsip sing padha. Contone, Scribus nindakake iki - wis kasedhiya kanggo Haiku. Sawijining dina bakal teka nalika aku bisa ngirim kuwi Tarik panjaluk menyang proyek liyane kanggo nambah dhukungan Haiku.

Salah sawijining pangembang nerangake:

Kanggo proyek liyane sing pengin nggawe paket dhewe, metode CMake / CPack biasa didhukung. Sistem mbangun liyane bisa didhukung kanthi langsung nelpon program mbangun paket, sing apik yen wong kasengsem. Pengalaman nuduhake: nganti saiki wis ora akeh kapentingan, supaya haikuporter makarya minangka trep kanggo kita, nanging, wekasanipun, loro cara kudu bisa bebarengan. Kita kudu ngenalake sakumpulan alat kanggo piranti lunak cross-bangunan saka Linux utawa sistem operasi server liyane (Haiku ora dirancang kanggo mbukak ing server).

Aku menehi standing ovation. Pangguna Linux biasa nindakake kabeh beban tambahan lan bagasi tambahan (keamanan, kontrol ketat, lan sapiturute) sing perlu kanggo sistem operasi server, nanging ora kanggo pribadi. Dadi aku setuju yen bisa nggawe aplikasi Haiku ing Linux minangka cara sing kudu ditindakake.

kesimpulan

Porting aplikasi POSIX menyang Haiku bisa, nanging bisa uga luwih larang tinimbang mbangun maneh. Aku mesthi bakal macet karo iki kanggo dangu yen ora kanggo bantuan wong saka saluran #haiku ing jaringan irc.freenode.net. Nanging malah padha ora tansah langsung weruh apa salah.

Aplikasi sing ditulis ing Qt minangka pangecualian sing gampang. Aku sijine bebarengan aplikasi demo prasaja tanpa masalah.

Mbangun paket kanggo aplikasi prasaja uga cukup gampang, nanging mung kanggo "rilis tradisional", i.e. duwe arsip kode sumber versi sing dimaksudake kanggo dhukungan ing haikuports. Kanggo mbangun terus-terusan (mbangun kanggo saben owah-owahan) karo GitHub, kabeh katon ora gampang. Ing kene Haiku luwih kaya distribusi Linux tinimbang asil ing Mac, nalika sampeyan ngeklik tombol "Mbangun" ing XCode sampeyan entuk paket. .app, siap dilebokake menyang gambar disk .dmg, disiapake kanggo diundhuh ing situs webku.
Bangunan aplikasi sing terus-terusan adhedhasar sistem operasi "server", umpamane, Linux, bakal bisa ditindakake yen ana panjaluk saka pangembang, nanging saiki proyek Haiku duwe tugas liyane sing luwih penting.

Coba dhewe! Sawise kabeh, proyek Haiku nyedhiyakake gambar kanggo boot saka DVD utawa USB, sing digawe ßСднСвно. Kanggo nginstal, mung ngundhuh gambar lan nulis menyang flash drive nggunakake Etcher

Apa sampeyan duwe pitakon? Kita ngajak sampeyan menyang basa Rusia saluran telegram.

Ringkesan kesalahan: Carane njupuk dhewe ing sikil ing C lan C ++. Koleksi resep Haiku OS

saka pengarang terjemahan: iki artikel kaping lima ing seri babagan Haiku.

Daftar artikel: Kaping pisanan Kapindho Katelu Kaping pat

Source: www.habr.com

Add a comment