Roja min a pêncemîn bi Haiku re: Ka em hin bernameyan derxînin

Roja min a pêncemîn bi Haiku re: Ka em hin bernameyan derxînin

TL; DR: Nûbiharek cara yekem Haiku dît, hewl da ku hin bernameyan ji cîhana Linuxê derxe.

Roja min a pêncemîn bi Haiku re: Ka em hin bernameyan derxînin
Bernameya min a yekem a barkirî ya Haiku, di forma wê ya hpkg de hatî pak kirin

Dawîn Min Haiku keşf kir, pergalek xebitandinê ya ecêb baş ji bo PC-yan.
Îro ez ê fêr bibim ka meriv çawa bernameyên nû li vê pergala xebitandinê bar dike. Mebesta sereke danasîna ezmûna yekem a guheztina Haiku-yê ji nihêrîna pêşdebirek Linux-ê ye. Ez lêborîna xwe dixwazim ji bo xeletiyên ehmeqî yên ku min di rê de kirin, ji ber ku hefteyek jî derbas nebû ku min yekem Haiku dakêşand.

Ez dixwazim bigihîjim sê armancan:

  • Serlêdanek CLI ya hêsan derxînin
  • Serlêdanek ji GUI berbi Qt veguhezînin
  • Dûv re wan di forma hpkg de pak bikin (ji ber ku ez hîn jî li ser adaptasyona AppDir û AppImage ji bo Haiku difikirim ...)

Werin em dest pê bikin. Di beşan de belgekirin и pêşveçûnîû her weha wiki ji HaikuPorts min rêça rast dît. Tewra pirtûkek PDF-ya serhêl jî heye BeOS: Veguheztina Serlêdana Unix.
467 rûpel - û ev ji 1997 e! Meriv di hundurê xwe de tirsnak e, lê ez hêvî dikim ya çêtirîn. Gotinên pêşdebir teşwîq dikin: "Demek dirêj girt ji ber ku BeOS ne li gorî POSIX-ê bû," lê Haiku "bi piranî" jixwe wusa ye.

Veguheztina serîlêdana CLI ya hêsan

Fikra yekem portkirina serîlêdanê bû avrdude, lê, wekî ku derket holê, ev jixwe ye kir demeke dirêj berê.

Yekem biceribîne: tiştek ji bo temaşekirinê tune

Ya ku ez nikarim fêm bikim ew e ku jixwe Serlêdan zêdetirî 10 sal in li Haikuyê têne şandin - tevî vê yekê ku OS bixwe hîn ne guhertoya 1.0 e.

Hewldana duyemîn: hewce ye ku ji nû ve binivîsîne

Ji ber vê yekê ez ê bikar bînim ptouch-770, CLI ji bo kontrolkirina çapera Brother P-Touch 770 ya ku ez ji bo çapkirina etîketan bikar tînim.
Ez etîketên cihêreng li ser wê çap dikim, û dibe ku we ew di gotara berê de dîtibe. Piçek berê, min di Python de bernameyek pêça GUI ya piçûk nivîsand (ji ber ku ew di Gtk+ de ye, pêdivî ye ku ew ji nû ve were nivîsandin, û ev sedemek baş e ku meriv fêr bibe).

Roja min a pêncemîn bi Haiku re: Ka em hin bernameyan derxînin
Brother P-Touch 770 label printer Ma ew ê bi Haiku re bixebite?

Rêvebirê pakêtê Haiku bi pirtûkxane û fermanan dizane, ji ber vê yekê heke dema xebitandinê peyamek "Ez nikarim libintl bibînim" bistînim. configure - Ez tenê dest pê dikim pkgman install devel:libintl û pakêta pêwîst dê were dîtin. Her wiha pkgman install cmd:rsync. Belê, hwd.

Ji bilî dema ku ev nexebite:

/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

Dibe ku udev pir Linux-based e û ji ber vê yekê ji bo Haiku tune. Wateya ku ez hewce dikim koda çavkaniyê ku ez hewl didim berhev bikim biguherim.
Eh, hûn nekarin serê xwe bavêjin, û ez jî nizanim ji ku dest pê bikim.

Hewldana sêyemîn

Dê xweş be ku hebe tmate ji bo Haiku, wê hingê ez ê rê bidim pêşdebirên Haiku ku bi danişîna termînalê min ve girêbidin - heke tiştek xelet derkeve. Rêbernameyên pir hêsan in:

./autogen.sh
./configure
make
make install

Baş xuya dike, ji ber vê yekê çima wê li Haiku neceribîne?

/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

Di vê gavê de ez HaikuDepot vedikim û digerim curses.
Tiştek hate dîtin, ku ji bo pirsek jêhatîtir îşaretek da min:

/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

Dîsa ez çûm HaikuDepot, û, bê guman, min dît devel:msgpack_c_cpp_devel. Ev navên xerîb çi ne?

/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

Di vê gavê de, min fêm kir ku veguheztina bernameyek ji Haiku-yê re ji ya ku ji bo ji nû ve avakirina sade hewce dike bêtir zanînê hewce dike.
Min bi pêşdebirên Haiku yên heval re peyivî, derket holê ku di msgpackê de xeletiyek heye, û piştî çend hûrdeman ez di HaikuPorts de pêçekek dibînim. Ez dikarim bi çavên xwe bibînim ka pakêta rastkirî çawa ye diçin vir (buildslave - makîneyên virtual).

Roja min a pêncemîn bi Haiku re: Ka em hin bernameyan derxînin
Avakirina msgpackê rastkirî li ser buildmaster

Di navbera deman de ez paçek ji jorîn re dişînim ku piştgiriya Haiku li msgpackê zêde bike.

Pênc hûrdem paşê, msgpackê nûvekirî jixwe di Haiku de heye:

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

Bêhêvî baş. Ma min got?!

Ez vegerim ser pirsgirêka bingehîn:

/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

Naha wusa dixuye ku msgpack ne xelet e. Ez şîrove dikim IMAXLABEL в tty.c wusa

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

Encam:

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.

Belê, em dîsa herin... Bi awayê:

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

mr. waddlesplash ji we re dibêje ku hûn li ku derê bikolin:

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

Li vir min şand config.log.

Wan ji min re diyar kir ku ji bilî libresolv li ser Haiku tiştek din jî di libnetworkê de heye. Xuya ye ku kod pêdivî ye ku bêtir were guherandin. Pêdivî ye ku bifikirin…

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

Pirsa herheyî: çi diqewime?

/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

Heman tişt, tenê di profîlê de. Google kir û ev dît. Heke hûn lê zêde bikin -lssp "carinan" dibe alîkar, ez hewl didim:

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

Wow! Ew dest pê dike! Lebê…

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

Ez ê hewl bidim debug bikim pelê li vir:

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

"Nasnameya porta xirab" jixwe wekî qerta karsaziyê ye haiku. Dibe ku kesek ramanek heye ka çi xelet e û meriv wê çawa rast bike? Ger wusa be, ez ê gotarê nûve bikim. Girêdana bi GitHub.

Veguheztina serîlêdana GUI li Qt.

Ez serîlêdanek QML ya hêsan hildibijêrim.

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

Bi rastî hêsan. Ji deqîqeyek kêmtir!

Serîlêdanên pakkirinê di hpkg de bi karanîna haikuporter û haikuports.

Divê ez bi çi dest pê bikim? Belgeyek hêsan tune, ez diçim kanala #haiku li ser irc.freenode.net û dibihîzim:

  • tîma package - rêyek nizm a çêkirina pakêtan. Bi piranî, PackageInfo ji bo wê bes e, wekî ku di beşa "Çêkirina wê di pakêtek .hpkg ya rast" de hatî destnîşan kirin.
  • Divê ez tiştekî bikim vî awayî
  • Karanîn hpkg-afirînerê (ew ji bo min têk diçe, ragihandina çewtiyê)

Çi bikin ne diyar e. Ez texmîn dikim ku ez hewceyê rêberê destpêkek şêwaza Hello World, bi îdeal vîdyoyek hewce dikim. Dê xweş be ku ji HaikuPorter re jî danasînek hêsan hebe, wekî ku di GNU hello de tê kirin.

Min jêrîn xwend:

haikuporter amûrek ji bo afirandina projeyên pakêtên hevpar ên ji bo Haiku ye. Ew depoya HaikuPorts wekî bingehek ji bo hemî pakêtan bikar tîne. Reçeteyên Haikuporter ji bo afirandina pakêtan têne bikar anîn.

Wekî din, ez dibînim ku:

Ne hewce ye ku di hilanîna HaikuPorts de reçeteyan hilînin. Hûn dikarin depoyek din çêkin, reçeteyan têxin nav wê, û dûv re haikuporter destnîşan bikin.

Tiştê ku ez hewce dikim - heke ne li rêyek ku ez pakêtê bi eşkereyî azad bikim bigerim. Lê ev mijarek ji bo nivîsek din e.

Sazkirina haikuporter û 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

Nivîsandina reçeteyekê

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
}

Komkirina reçeteyê

Ez pelê di bin navê de tomar dikim QtQuickApp-1.0.recipe, piştî ku ez dest pê dikim aikuporter -S ./QuickApp-1.0.recipe. Girêdayîn ji bo hemî pakêtên di depoyê de têne kontrol kirin haikuports, ku hinek dem digire. Ez ê herim qehweyekê bînim.

Çima li ser rûyê erdê divê ev kontrol li ser makîneya min a herêmî were kirin, û ne navendî li ser serverê carekê ji bo her kesî?

Li gorî Mr. waddlesplash:

Bi vî rengî ku hûn dikarin her pelê di depoyê de ji nû ve binivîsin 😉 Hûn dikarin vê piçekî xweşbîn bikin, dema ku hewce be agahdariya pêwîst hesab bikin, ji ber ku guhertinên paşîn ên hatine çêkirin pir kêm in.

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

Derket holê ku tiştek wekî pelek reçeteya birêkûpêk ku koda çavkaniya serîlêdana we vedihewîne tune. Pêdivî ye ku hûn wê di depoyek di forma HaikuPorts de bihêlin.

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

Ev rastî meclîsê aloztir dike. Ez bi taybetî jê hez nakim, lê ez difikirim ku ew hewce ye ku di dawiyê de hemî nermalava çavkaniya vekirî di HaikuPorts de xuya bibin.

Ez jêrîn distînim:

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

Kêşe çîye? Piştî xwendina irc ez dikim:

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

Pirseke balkêş derketiye holê. Ger ez jimareyek kontrolê li reçeteyê zêde bikim - gelo ew ê ji bo entegrasyona domdar bi git commita herî paşîn re têkildar be? (Pêşvebir piştrast dike: "Ew ê nexebite. Reçete ji bo ku bi îstîqrar bin hatine sêwirandin.")

Ji bo kêfê, li reçeteyê zêde bikin:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Dîsa jî ne razî ye:

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

Ew çi dike? Beriya her tiştî, ev depoyek git-ê ye, kod jixwe rasterast li wir e, tiştek tune ku were pakkirin. Li gorî nêrîna min, pêdivî ye ku amûr bi têra xwe jîr be ku ger ew li jor url-ya GitHub be li vekêşkerek negere.

Belkî uri git:// wê bixebite

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

Niha bi vî awayî gilî dike:

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

Hmm, çima her tişt ewqas tevlihev e, çima hûn nikarin "tenê bixebitin"? Beriya her tiştî, ne ew çend asayî ye ku meriv tiştek ji GitHub ava bike. Ka ew amûrên ku tavilê dixebitin, bêyî ku hewcedariya sazkirinê hebe, an wekî ku ez jê re dibêjim "tewş".

Dibe ku ew ê bi vî rengî bixebite:

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

Nexêr. Ez hîn jî vê xeletiya xerîb distînim û dikim, wek ku li vir hatiye diyarkirin

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

Ez piçekî pêş de diçim, lê çima ew li min diqîre (GitHub ne ewle ye!) û hîn jî hewl dide ku tiştek vebike.

Li gorî mr. waddlesplash:

Welê, erê, sedem xwestina kontrolkirina yekdestiya daneyên ku ji bo kombûnê hatine wergirtin kontrol kirin. Yek ji vebijarkan ev e ku meriv jimareya kontrolê ya arşîvê verast bike, lê hûn, bê guman, hûn dikarin pelên kesane, yên ku nayên bicîh kirin, heş bikin, ji ber ku ew pir dirêj digire. Encama vê yekê "bêbaweriya" git û VCS yên din e. Bi îhtîmalek mezin ev ê her gav wusa be, ji ber ku çêkirina arşîvek li ser GitHub pir hêsan û pir caran zûtir e. Welê, di pêşerojê de, dibe ku peyama xeletiyê ew qas şêrîn nebe... (Em êdî di HaikuPorts de reçeteyên weha li hev nakin).

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

Ji ber adetên berê, ez diçim ji kesên baş li ser kanala #haiku ya li ser tora irc.freenode.net bipirsim. Û ez ê bêyî wan li ku bim? Piştî nîşanê, min fêm kir ku divê ez bikar bînim:

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

Baş e, eşkere bû ku ew çi dike - ew arşîvek bi koda çavkaniyê ya hin guhertoyek dakêşîne. Ji nihêrîna min ew ehmeq e, û ne bi rastî ya ku min dixwest, ango, dakêşana guhertoya herî paşîn ji şaxê masterê dakêşim.

Yek ji pêşdebiran bi vî rengî rave kir:

Me CI-ya xweya xwe heye, ji ber vê yekê her tiştê ku di depoya haikuports de tê danîn dê ji bo hemî bikarhêneran were pak kirin, û em naxwazin xetera berhevkirin û radestkirina "her tiştê di guhertoya herî paşîn a jorîn de" bikin.

Fêm kirin! Di her rewşê de, tiştê ku qewimî ev e:

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

Vê reklama bêdawî dubare dike. Xuyaye ev xeletiyek e (serlêdanek heye? Min nekarî bibînim).

С haikuporter û depo haikuports Ew hestek "tenê dixebite" tune ye, lê wekî pêşdebirek, hin tişt hene ku ez ji xebata bi Haiku re hez dikim. Bi piranî, ew dişibihe Karûbarê Avakirina Vekirî, komek amûran ji bo avakirina avahîyên Linux: zehf bi hêz, bi nêzîkatîyek sîstematîk, lê ji bo serîlêdana min a piçûk "silav cîhan" zêde ye.

Dîsa, li gorî mr. waddlesplash:

Bi rastî, HaikuPorter ji hêla xwerû ve pir hişk e (digel vê yekê moda lint û her weha modek hişk heye ku wê hîn hişktir bike!), lê tenê ji ber ku ew pakêtên ku dê bixebitin diafirîne, ne ku tenê pakêtan biafirîne. Ji ber vê yekê ew gazindan ji girêdanên ne diyar, pirtûkxane bi rêkûpêk nehatine kirin, versiyonên nerast û hwd. Armanc ev e ku berî ku bikarhêner jê bizanibe, her û hemî pirsgirêkan, tevî yên pêşerojê, bigire (ji ber vê yekê ne gengaz bû ku avrdude saz bike, ji ber ku girêdayîbûn bi rastî di rênivîsê de hate destnîşan kirin). Pirtûkxane ne tenê pakêtên kesane an jî guhertoyên SO yên taybetî ne. HaikuPorter piştrast dike ku ev hemî di şîretan de bixwe têne dîtin da ku di dema darvekirinê de ji xeletiyan dûr bikevin.

Di prensîbê de, ev asta hişkiyê dema afirandina pergalek xebitandinê rastdar e, lê ji bo serîlêdana "silav cîhan" ji min re nepêwist xuya dike. Min biryar da ku tiştek din biceribînim.

Bi karanîna fermana "avakirina pakêtê" di forma hpkg de sepanan ava bikin

dibe ku, ev Ma rêwerzên hêsan dê ji bo min çêtir bixebitin?

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

Bi lez û bez, ji nedîtî ve sade, neçaverêk bi bandor. Bi rastî ez çawa jê hez dikim, ecêb!

Sazkirin - çi û li ku derê?

Pelê QtQuickApp.hpkg bar kir ~/config/packagesbi karanîna rêveberek pelê, piştî ku QtQuickApp bi efsûnî tê de xuya bû ~/config/apps.
Dîsa, bêhêvî zû, hêsan û bandorker. Ecêb, nebawer!

Lê... (em ê bêyî wan li ku bin!)

Serlêdan hîn jî ji navnîşa menuya sepanan û QuickLaunch winda ye. Ez difikirim ku ez jixwe dizanim ku meriv wê çawa rast bike. Di gerînendeyê pelê de ez QtQuickApp.hpkg ji ~/config/packages bar dikim /system/packages.

Na, hîn jî winda ye. Xuya ye, min (baş, û rêwerzan) tiştek winda kiriye.

Dema ku li tabloya "Naveroka" li HaikuDepot ji bo hin serîlêdanên din mêze kir, min dît ku pelên mîna /data/mimedb/application/x-vnd... ya ku hê balkêştir e, /data/deskbar/menu/Applications/….

Baş e, ez çi deynim wir? Haydê...

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

Ez pir pê bawer im ku ev hîle dê bixebite, lê pirs dimînin: çima ev hewce ye, ji bo çi ye? Ez difikirim ku ev têgihiştina giştî ku pergal ew çend sofîstîke ye hilweşîne.

Wekî ku ji hêla Mr. waddlesplash:

Carinan serîlêdanên ku pêdiviya wan bi sepanên din heye lê di menuyê de ne. Mînakî, LegacyPackageInstaller di dîmendera we de, arşîvên .pkg di formata BeOS de çêdike. Ez dixwazim bikarhêner wan saz bikin, lê hebûna wan di menuyê de dê bibe sedema tevliheviyê.

Ji ber hin sedeman ji min re xuya dike ku çareseriyek hêsantir heye, mînakî Hidden=true di pelan de .desktop li ser Linux. Çima agahdariya "veşartî" nabe çavkanî û taybetmendiyek pergala pelan?

Ya ku bi taybetî ne nazik e navê (hinek) serîlêdana ku menuyê nîşan dide ye, deskbar, bi awayekî hişk bi rê ve girêdayî ye.

mr. waddlesplash vê yekê diyar dike:

Di vê rewşê de, "Deskbar" divê wekî celebek têgînek gelemperî were fêm kirin (bi heman rengî wekî "taskbar", ku hem serîlêdana Windows-ê û hem jî têgeha giştî vedibêje). Erê, ji ber vê yekê deskbar, ne "Deskbar", ev jî dikare bi rengek wekhev were fêm kirin.

Roja min a pêncemîn bi Haiku re: Ka em hin bernameyan derxînin
2 pelrêçikên "hema hema eynî" ku di wan de serîlêdan hene

Çima 2 pelrêçan bi serîlêdan hene, û her weha çima QtQuickApplication min di yekê de ye, lê ne di ya din de? (Piştî her tiştî, ev ne yek pergalê ye, lê bikarhênerek duyemîn e, ku dê ji min re kesane were fêm kirin).
Ez bi rastî şaş im û ez difikirim ku divê ev yek were yek kirin.

şirove ji hêla mr. waddlesplash

Kataloga Apps sepanên ku di menuyê de ne hewce ne dihewîne. Lê rewşa menuyê bi rastî pêdivî ye ku were çêtir kirin, da ku ew bêtir xwerû bike.

Serlêdan, an jî ew ê nebe 😉

Min meraq kir: Ma bi rastî hewce ye ku meriv serlêdanan tê de mêvandar bike /system/apps, heke bikarhêner wan li wir bibînin, nexwestî ye. Dibe ku çêtir be ku meriv wan li cîhek din bi cîh bike ku bikarhêner bi wan re rû bi rû nemîne? Mîna ku di Mac OS X-ê de tê kirin, ku naveroka pakêtan tê de ye .app, ya ku divê ji bikarhênerê re neyê dîtin /Applications, di kûrahiya /Sîstema/Pirtûkxane/…“` de vedişêre.

Çi li ser girêdayîbûna?

Ez difikirim ku ew hêja ye ku bi rengekî ve girêdayîbûnê diyar bike, rast? Ma dikare Qt ji hêla xwerû ve wekî beşek mecbûrî ya sazkirina Haiku were hesibandin? Na! Qt ji hêla xwerû ve nehatiye saz kirin. Ma çêkerek pakêtê dikare bixweber bi kontrolkirina pelên ELF ve girêdayîbûnê tespît bike? Ji min re hat gotin ku HaikuPorter bi rastî vê yekê dike, lê package Na. Ji ber ku ew tenê "çêkerek pakêtê" ye ku tenê pelan bi xwe diafirîne hpkg.

Ma pêdivî ye ku Haiku bi zêdekirina polîtîkayek ku pêdivî ye ku pakêtek bi pakêtên derveyî Haiku ve girêdayî nebe, bêtir sofîstîke bibe? haikuports? (Ez dixwazim, ji ber ku siyasetek wusa dê tiştan pir hêsantir bike - pergal dê bikaribe bixweber girêdanên her pakêtê ku ji her deverê hatî dakêşandin çareser bike, bêyî ku bi çavkaniyên pakêtê yên din re tevlihev bibe.)

mr. waddlesplash diyar dike:

Em naxwazin azadiya pêşdebiran ew qas sînordar bikin, ji ber ku eşkere ye ku heke CompanyX bixwaze ku nermalava xwe ya bi girêdanan (û ji ber vê yekê depoyek) piştgirî bike, ew ê wiya bi tevahî azad bike.

Di wê rewşê de, dibe ku hêjayî pêşniyarê be ku pakêtên partiya sêyem ji girêdayiya her tiştê ku di haikuports de tune ne dûr bixin û her tiştê ku bi serîlêdanê re hewce dike bi tevahî pak bikin. Lê ez difikirim ku ev mijarek ji bo gotara pêşerojê ya vê rêzê ye. [Gelo nivîskar ber bi AppImage ve diçe? - nêzîkî. wergêr]

Zêdekirina îkonek serîlêdanê

Ger ez bixwazim yek ji îkonên çêkirî yên xweş li çavkaniyên serîlêdana xweya nû hatî afirandin lê zêde bikim? Derket holê ku ev mijarek ecêb e, ji ber vê yekê ew ê bibe bingeha gotara pêş.

Meriv çawa avahiyên serîlêdanê yên domdar organîze dike?

Projeyek mîna Inkscape bifikirin (erê, ez dizanim ku ew hîn di Haiku de peyda nabe, lê ew hêsan e ku meriv li ser wê were xuyang kirin). Ew depoyek koda çavkaniyê heye https://gitlab.com/inkscape/inkscape.
Her gava ku kesek guheztinên xwe li depoyê pêk tîne, boriyên çêkirinê têne dest pê kirin, piştî ku guheztin bixweber têne ceribandin, têne çêkirin û serîlêdan di nav pakêtên cihêreng de têne pak kirin, di nav de AppImage ji bo Linux (pakêtek serîlêdana serbixwe ya ku dikare ji bo ceribandina herêmî bê dakêşandin. çi dibe ku li ser pergalê were saz kirin an na [Min ew dizanibû! - nêzîkî. wergêr]). Heman tişt bi her daxwazek yekbûnê ya şaxê re diqewime, ji ber vê yekê hûn dikarin serîlêdana ku ji koda ku di daxwaza hevgirtinê de hatî pêşniyar kirin berî hevgirtinê dakêşin.

Roja min a pêncemîn bi Haiku re: Ka em hin bernameyan derxînin
Daxwazên hevgirtinê bi statûyên çêkirinê re û şiyana dakêşana binarên berhevkirî heke avahî serketî be (bi kesk hatî nîşankirin)

Avakirin di konteynerên Docker de dimeşe. GitLab li ser Linux-ê bazdanên belaş pêşkêşî dike, û ez difikirim ku dibe ku meriv bezvanên xwe jî têxe nav xwe (bi awayê, ez nabînim ku ev ê çawa ji bo pergalên mîna Haiku, ku ez dizanim Docker an jî hevwateya wê tune ne, bixebite, lê di heman demê de ji bo FreeBSD no Docker jî, ji ber vê yekê ev pirsgirêk ne tenê ji Haiku re ye).

Bi îdeal, serîlêdanên Haiku dikarin di hundurê konteynirek Docker-ê de ji bo Linux-ê bêne çêkirin. Di vê rewşê de, meclîsa ji bo Haiku dikare di boriyên heyî de were destnîşan kirin. Berhevkerên xaçê hene? An jî divê ez hemî Haiku-yê di hundurê konteynirek Docker-ê de bi karanîna tiştek mîna QEMU/KVM-ê bi kar bînim (bihesibînin ku ew ê bi vî rengî di hundurê Docker de bixebite)? Bi awayê, gelek proje prensîbên wekhev bikar tînin. Mînakî, Scribus vê yekê dike - ew jixwe ji bo Haiku heye. Dê rojek were ku ez bikaribim bişînim vî awayî Daxwazên projeyên din bikişînin ku piştgiriya Haiku zêde bikin.

Yek ji pêşdebiran diyar dike:

Ji bo projeyên din ên ku dixwazin bi xwe pakêtan biafirînin, rêbaza CMake/CPack ya birêkûpêk tê piştgirî kirin. Pergalên din ên avakirinê dikarin bi rasterast banga bernameya avakirina pakêtê werin piştgirî kirin, heke mirov jê re eleqedar bibin baş e. Tecrûbe nîşan dide: heya niha eleqeyek zêde çênebûye, ji ber vê yekê haikuporter ji bo me xweş xebitî, lê, di dawiyê de, divê her du rêbaz bi hev re bixebitin. Pêdivî ye ku em komek amûran ji bo nermalava xaç-avakirinê ji Linux an pergalek xebitandina serverek din bidin nasîn (Haiku ji bo xebitandina serveran nayê sêwirandin).

Ez li ber xwe didim. Bikarhênerên birêkûpêk ên Linux-ê hemî vê barê zêde û bagajên zêde (ewlekarî, kontrolkirina hişk, hwd.) hildigirin ku ji bo pergala xebitandina serverê hewce ne, lê ne ji bo ya kesane. Ji ber vê yekê ez bi tevahî qebûl dikim ku meriv bikaribe serîlêdanên Haiku-yê li ser Linux-ê ava bike rêyek e.

encamê

Veguheztina serîlêdanên POSIX ji Haiku re mimkun e, lê dibe ku ji nûavakirinek tîpîk bihatir be. Ez ê bê guman ji bo demek dirêj bi vê yekê asê mama ger ne ji alîkariya kesên kanala #haiku ya li ser tora irc.freenode.net bûya. Lê tewra wan her gav yekser nedît ku çi xelet e.

Serlêdanên ku bi Qt têne nivîsandin îstîsnayek hêsan e. Min serîlêdanek demo ya hêsan bêyî pirsgirêk berhev kir.

Avakirina pakêtek ji bo serîlêdanên hêsan jî pir hêsan e, lê tenê ji bo yên "bi kevneşopî hatine berdan", ango. xwedî arşîvên koda çavkaniyê yên guherto yên ku ji bo piştgiriyê di haikuports de ne. Ji bo avakirina domdar (avakirina ji bo her pêkanîna guhertinan) bi GitHub re, her tişt ne ew qas hêsan xuya dike. Li vir Haiku ji encama li ser Mac-ê bêtir mîna dabeşkirina Linux-ê hîs dike, li wir gava ku hûn bişkoja "Build" di XCode-ê de bikirtînin hûn pakêtek distînin. .app, amade ye ku têxe nav wêneyek dîskê .dmg, ji bo daxistinê li ser malpera min amade kirin.
Avakirina domdar a serîlêdanan li ser bingeha pergala xebitandinê ya "server", mînakî Linux, bi îhtîmalek mezin dê mimkun bibe ger daxwazek ji pêşdebiran hebe, lê di vê gavê de projeya Haiku karên din, yên girantir hene.

Bi xwe biceribîne! Beriya her tiştî, projeya Haiku wêneyên ji bo bootkirina ji DVD an USB-yê hatî çêkirin peyda dike Şehîd. Ji bo sazkirinê, tenê wêneyê dakêşin û bi karanîna wê li ajokerek flashê binivîsin Etcher

Pirsên te hene? Em we vedixwînin zimanê rûsî kanala telegram.

Pêşniyara çewtiyê: Meriv çawa di C û C ++ de xwe di lingê xwe de biteqîne. Berhevoka Reçeteya Haiku OS

ji nivîskar werger: ev gotara pêncemîn a rêzenivîsê ye li ser Haiku.

Lîsteya gotaran: Yekem Duyem Sisiyan Çarem

Source: www.habr.com

Add a comment