Fy mhumed diwrnod gyda Haiku: gadewch i ni bortreadu rhai rhaglenni

Fy mhumed diwrnod gyda Haiku: gadewch i ni bortreadu rhai rhaglenni

TL; DR: Gwelodd newbie Haiku am y tro cyntaf, yn ceisio porthu rhai rhaglenni o'r byd Linux.

Fy mhumed diwrnod gyda Haiku: gadewch i ni bortreadu rhai rhaglenni
Fy rhaglen Haiku ported gyntaf, wedi'i phecynnu yn ei fformat hpkg

Yn ddiweddar Darganfyddais Haiku, system weithredu rhyfeddol o dda ar gyfer cyfrifiaduron personol.
Heddiw byddaf yn dysgu sut i drosglwyddo rhaglenni newydd i'r system weithredu hon. Y prif ffocws yw disgrifiad o'r profiad cyntaf o newid i Haiku o safbwynt datblygwr Linux. Ymddiheuraf am unrhyw gamgymeriadau gwirion a wneuthum ar hyd y ffordd, gan nad yw hyd yn oed wythnos ers i mi lawrlwytho Haiku am y tro cyntaf.

Rwyf am gyflawni tri nod:

  • Porthladd cais CLI syml
  • Cludo cais o GUI i Qt
  • Yna paciwch nhw ar ffurf hpkg (gan fy mod i'n dal i feddwl am addasu AppDir ac AppImage ar gyfer Haiku...)

Gadewch i ni ddechrau. Mewn adrannau dogfennaeth и datblyguyn ogystal â wiki o HaikuPorts cefais y cyfeiriad cywir. Mae hyd yn oed llyfr PDF ar-lein BeOS: Trosglwyddo Cais Unix.
467 tudalen - ac mae hyn o 1997! Mae'n frawychus edrych y tu mewn, ond rwy'n gobeithio am y gorau. Mae geiriau’r datblygwr yn galonogol: “cymerodd amser hir oherwydd nid oedd BeOS yn cydymffurfio â POSIX,” ond mae Haiku “ar y cyfan” eisoes felly.

Cludo cais CLI syml

Y syniad cyntaf oedd porthi'r cais avrdude, ond, fel y mae'n troi allan, mae hyn eisoes wedi gwneud amser hir yn ôl.

Ceisiwch gyntaf: dim byd i'w wylio

Yr hyn na allaf ei ddeall yw hynny eisoes Mae apiau wedi'u trosglwyddo i Haiku ers dros 10 mlynedd - er gwaethaf y ffaith nad yw'r OS ei hun hyd yn oed yn fersiwn 1.0 eto.

Ail ymgais: angen ailysgrifennu

Felly byddaf yn defnyddio cyffwrdd-770, CLI am reoli'r argraffydd Brother P-Touch 770 yr wyf yn ei ddefnyddio i argraffu labeli.
Rwy'n argraffu labeli amrywiol arno, ac efallai eich bod eisoes wedi ei weld yn yr erthygl flaenorol. Ychydig yn gynharach, ysgrifennais raglen lapio GUI fach yn Python (gan ei fod yn Gtk +, bydd yn rhaid ei hailysgrifennu, ac mae hwn yn reswm da i ddysgu).

Fy mhumed diwrnod gyda Haiku: gadewch i ni bortreadu rhai rhaglenni
Argraffydd label Brother P-Touch 770 A fydd yn gweithio gyda Haiku?

Mae rheolwr pecyn Haiku yn gwybod am lyfrgelloedd a gorchmynion, felly os caf neges "methu dod o hyd i libintl" wrth redeg configure - Fi jyst yn lansio pkgman install devel:libintl a bydd y pecyn gofynnol ar gael. Yr un modd pkgman install cmd:rsync. Wel, etc.

Ac eithrio pan nad yw hyn yn gweithio:

/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

Efallai bod udev yn rhy seiliedig ar Linux ac felly nid yw'n bodoli ar gyfer Haiku. Sy'n golygu bod angen i mi olygu'r cod ffynhonnell yr wyf yn ceisio ei lunio.
Eh, ni allwch neidio dros eich pen, a dydw i ddim hyd yn oed yn gwybod ble i ddechrau.

Trydydd cais

Byddai'n braf cael tmate ar gyfer Haiku, yna byddwn yn caniatáu i'r datblygwyr Haiku gysylltu â fy sesiwn derfynell - rhag ofn i rywbeth fynd o'i le. Mae'r cyfarwyddiadau yn eithaf syml:

./autogen.sh
./configure
make
make install

Edrych yn dda, felly beth am roi cynnig arni ar 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

Yn y cam hwn rwy'n agor HaikuDepot a chwilio curses.
Daethpwyd o hyd i rywbeth a roddodd awgrym i mi ar gyfer ymholiad mwy cymwys:

/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

Eto es i HaikuDepot, ac, wrth gwrs, dod o hyd devel:msgpack_c_cpp_devel. Beth yw'r enwau rhyfedd hyn?

/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

Ar y cam hwn, sylweddolais fod trosglwyddo rhaglen i Haiku yn gofyn am lawer mwy o wybodaeth nag sydd ei angen ar gyfer ailadeiladu syml.
Siaradais â datblygwyr cyfeillgar Haiku, mae'n ymddangos bod nam yn msgpack, ac ar ôl ychydig funudau rwy'n gweld darn yn HaikuPorts. Gallaf weld gyda fy llygaid fy hun sut y pecyn cywiro mynd yma (buildslave - peiriannau rhithwir).

Fy mhumed diwrnod gyda Haiku: gadewch i ni bortreadu rhai rhaglenni
Adeiladu'r msgpack wedi'i gywiro ar buildmaster

Rhwng amseroedd byddaf yn anfon clwt i fyny'r afon i ychwanegu cefnogaeth Haiku i msgpack.

Bum munud yn ddiweddarach, mae'r msgpack wedi'i ddiweddaru eisoes ar gael yn 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.

Yn annisgwyl o dda. Wnes i ddweud hynny?!

Dychwelaf at y broblem wreiddiol:

/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

Nawr mae'n edrych fel nad yw msgpack ar fai. Rwy'n gwneud sylw IMAXLABEL в tty.c fel hyn:

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

Canlyniad:

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.

Wel, dyma ni eto... Gyda llaw:

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

mr. waddlesplash yn dweud wrthych ble i gloddio:

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

Yma postiais config.log.

Fe wnaethon nhw esbonio i mi fod rhywbeth arall yn libnetwork yn ogystal â libresolv ar Haiku. Mae'n debyg bod angen golygu'r cod ymhellach. Angen meddwl…

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

Y cwestiwn tragwyddol: beth sy'n digwydd?

/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

Yr un peth, dim ond mewn proffil. Googled a dod o hyd i hyn. Os ydych yn ychwanegu -lssp Mae “weithiau” yn helpu, dwi'n ceisio:

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

Waw! Mae'n dechrau! Ond…

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

Byddaf yn ceisio dadfygio ffeil yma:

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

Mae “ID porthladd drwg” eisoes fel cerdyn busnes haiku. Efallai bod gan rywun syniad beth sydd o'i le a sut i'w drwsio? Os felly, byddaf yn diweddaru'r erthygl. Dolen i GitHub.

Cludo'r cais GUI i Qt.

Rwy'n dewis cymhwysiad QML syml.

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

Syml iawn. Llai na munud!

Cymwysiadau pecynnu mewn hpkg gan ddefnyddio haikuporter a haikuports.

Beth ddylwn i ddechrau? Nid oes dogfennaeth syml, af i'r sianel #haiku ar irc.freenode.net a chlywed:

  • Tîm package - ffordd lefel isel o greu pecynnau. Ar y cyfan, mae PackageInfo yn ddigon iddi, fel y disgrifir yn yr adran "Ei wneud yn becyn .hpkg iawn"
  • Mae angen i mi wneud rhywbeth такое
  • Gall ddefnyddio hpkg-creawdwr (mae'n damwain i mi, adrodd gwallau)

Nid yw'n glir beth i'w wneud. Mae'n debyg fy mod angen canllaw dechreuwyr arddull Hello World, yn ddelfrydol fideo. Byddai'n braf hefyd cael cyflwyniad cyfleus i HaikuPorter, fel y gwneir yn GNU helo.

Darllenais y canlynol:

haikuporter yn offeryn ar gyfer creu prosiectau pecyn cyffredin ar gyfer Haiku. Mae'n defnyddio ystorfa HaikuPorts fel sylfaen ar gyfer pob pecyn. Defnyddir ryseitiau Haikuporter i greu pecynnau.

Yn ogystal, darganfyddaf fod:

Nid oes angen storio ryseitiau yn storfa HaikuPorts. Gallwch chi wneud ystorfa arall, rhoi'r ryseitiau ynddi, ac yna pwyntio haikuporter ato.

Yr union beth sydd ei angen arnaf - os nad yn edrych am ffordd i ryddhau'r pecyn yn gyhoeddus. Ond mae hwn yn bwnc ar gyfer swydd arall.

Gosod haikuporter a 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

Ysgrifennu rysáit

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
}

Cydosod y rysáit

Rwy'n cadw'r ffeil o dan yr enw QtQuickApp-1.0.recipe, ac ar ôl hynny rwy'n lansio aikuporter -S ./QuickApp-1.0.recipe. Mae dibyniaethau'n cael eu gwirio ar gyfer pob pecyn yn y gadwrfa haikuports, sy'n cymryd peth amser. Fe af i gael coffi.

Pam ar y ddaear y dylid gwneud y gwiriad hwn ar fy mheiriant lleol, ac nid yn ganolog ar y gweinydd unwaith i bawb?

Yn ol Mr. sblash gwadlan:

Gyda chymaint y gallwch chi ailysgrifennu unrhyw ffeil yn yr ystorfa 😉 Gallwch chi wneud y gorau o hyn ychydig, gan gyfrifo'r wybodaeth angenrheidiol pan fo angen, oherwydd mae'r newidiadau olaf a wnaed yn eithaf prin.

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

Mae'n troi allan nad oes y fath beth â ffeil rysáit rheolaidd sy'n cynnwys cod ffynhonnell eich cais. Mae angen i chi ei gadw mewn ystorfa yn y fformat HaikuPorts.

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

Mae'r ffaith hon yn gwneud y cynulliad yn fwy beichus. Dydw i ddim yn ei hoffi'n arbennig, ond rwy'n meddwl ei fod yn angenrheidiol fel y bydd yr holl feddalwedd ffynhonnell agored yn ymddangos yn HaikuPorts yn y pen draw.

Rwy'n cael y canlynol:

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

Beth sy'n bod? Ar ôl darllen irc dwi'n gwneud:

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

Mae cwestiwn diddorol wedi codi. Os byddaf yn ychwanegu checksum at y rysáit - a fydd yn cyfateb i'r ymrwymiad git diweddaraf ar gyfer integreiddio parhaus? (Mae'r datblygwr yn cadarnhau: "Ni fydd yn gweithio. Mae'r ryseitiau wedi'u cynllunio i fod yn gymharol sefydlog.")

Am hwyl, ychwanegwch at y rysáit:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Dal ddim yn fodlon:

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

Beth mae e'n ei wneud? Wedi'r cyfan, mae hwn yn ystorfa git, mae'r cod eisoes yno'n uniongyrchol, nid oes dim i'w ddadbacio. O'm safbwynt i, dylai'r offeryn fod yn ddigon craff i beidio â chwilio am ddadbaciwr os yw uwchlaw'r url GitHub.

Efallai y bydd uri git:// yn gweithio

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

Nawr mae'n cwyno fel hyn:

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

Hmm, pam mae popeth mor gymhleth, pam na allwch chi “weithio”? Wedi'r cyfan, nid yw mor anghyffredin i adeiladu rhywbeth o GitHub. P'un a yw'n offer sy'n gweithio ar unwaith, heb yr angen am setup, neu fel yr wyf yn ei alw'n "ffwsio".

Efallai y bydd yn gweithio fel hyn:

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

Naddo. Rwy'n dal i gael y gwall rhyfedd hwn ac yn ei wneud, fel y disgrifir yma

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

Rwy'n symud ychydig ymhellach, ond pam ei fod yn sgrechian arnaf (nid yw GitHub yn ddiogel!) Ac yn dal i geisio dadbacio rhywbeth.

Yn ôl mr. waddlesplash:

Wel, ie, y rheswm oedd yr awydd i wirio cywirdeb y data a dderbyniwyd ar gyfer cydosod. Un o'r opsiynau yw gwirio swm yr archif, ond gallwch, wrth gwrs, hash ffeiliau unigol, na fyddant yn cael eu gweithredu, oherwydd mae'n cymryd llawer mwy o amser. Canlyniad hyn yw “ansicrwydd” git a VCS eraill. Mae'n debyg y bydd hyn yn wir bob amser, gan fod creu archif ar GitHub yn eithaf hawdd ac yn aml yn gyflymach. Wel, yn y dyfodol, efallai na fydd y neges gwall mor fflachlyd ... (nid ydym bellach yn uno ryseitiau o'r fath yn 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

Allan o hen arferiad, dwi'n mynd i ofyn i bobl dda ar y sianel #haiku ar y rhwydwaith irc.freenode.net. A ble fyddwn i hebddyn nhw? Ar ôl yr awgrym, sylweddolais y dylwn ddefnyddio:

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

Iawn, daeth yn amlwg beth mae'n ei wneud - mae'n llwytho i lawr archif gyda chod ffynhonnell adolygiad penodol. Mae’n dwp, o’m safbwynt i, ac nid yn union yr hyn roeddwn i eisiau, sef lawrlwytho’r adolygiad diweddaraf o’r brif gangen.

Esboniodd un o'r datblygwyr fel hyn:

Mae gennym ni ein CI ein hunain, felly bydd popeth sy'n cael ei roi yn ystorfa haikuports yn cael ei becynnu ar gyfer pob defnyddiwr, ac nid ydym am fentro casglu a chyflwyno “popeth yn y fersiwn ddiweddaraf i fyny'r afon.”

Wedi deall! Mewn unrhyw achos, dyma beth ddigwyddodd:

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

Mae'n ailadrodd yr ad infinitum hwn. Mae'n debyg bod hwn yn gamgymeriad (a oes yna raglen? Ni allwn ddod o hyd iddo).

С haikuporter ac ystorfa haikuports Nid oes ganddo naws "jyst yn gweithio" iddo, ond fel datblygwr, mae rhai pethau rwy'n eu hoffi am weithio gyda Haiku. Ar y cyfan, mae'n debyg i'r Gwasanaeth Adeiladu Agored, set o offer ar gyfer adeiladu Linux yn adeiladu: hynod bwerus, gydag ymagwedd systematig, ond yn ormodol ar gyfer fy nghais bach "helo world".

Eto, yn ol Mr. sblash gwadlan:

Yn wir, mae HaikuPorter yn eithaf llym yn ddiofyn (a hefyd mae modd lint yn ogystal â modd llym i'w wneud hyd yn oed yn fwy llym!), ond dim ond oherwydd ei fod yn creu pecynnau a fydd yn gweithio, yn hytrach na chreu pecynnau yn unig. Dyna pam ei fod yn cwyno am ddibyniaethau heb eu datgan, llyfrgelloedd heb eu mewnforio yn iawn, fersiynau anghywir, ac ati. Y nod yw dal unrhyw broblemau, gan gynnwys rhai yn y dyfodol, cyn i'r defnyddiwr wybod amdano (dyma pam nad oedd yn bosibl gosod avrdude, oherwydd bod y rysáit mewn gwirionedd yn nodi dibyniaeth). Nid pecynnau unigol yn unig neu hyd yn oed fersiynau SO penodol yw llyfrgelloedd. Mae HaikuPorter yn sicrhau bod hyn i gyd yn cael ei arsylwi yn y ryseitiau eu hunain er mwyn osgoi gwallau wrth eu gweithredu.

Mewn egwyddor, gellir cyfiawnhau'r lefel hon o drylwyredd wrth greu system weithredu, ond mae'n ymddangos yn ddiangen i mi ar gyfer cymhwysiad “helo world”. Penderfynais roi cynnig ar rywbeth arall.

Adeiladu cymwysiadau mewn fformat hpkg gan ddefnyddio'r gorchymyn “creu pecyn”.

Efallai, hwn A fydd cyfarwyddiadau syml yn gweithio'n well i mi?

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

Yn annisgwyl o gyflym, yn annisgwyl o syml, yn annisgwyl o effeithiol. Yn union sut dwi'n ei hoffi, anhygoel!

Gosod - beth a ble?

Wedi symud y ffeil QtQuickApp.hpkg i ~/config/packagesdefnyddio rheolwr ffeiliau, ac ar ôl hynny ymddangosodd QtQuickApp yn hudol ~/config/apps.
Unwaith eto, yn annisgwyl o gyflym, syml ac effeithiol. Anhygoel, anhygoel!

Ond... (ble fydden ni hebddyn nhw!)

Mae'r app yn dal ar goll o'r rhestr ddewislen apps a QuickLaunch. Rwy'n meddwl fy mod eisoes yn gwybod sut i'w drwsio. Yn y rheolwr ffeiliau rwy'n symud QtQuickApp.hpkg o ~/config/packages i /system/packages.

Na, dal ar goll. Mae'n debyg, fe wnes i (wel, a'r cyfarwyddiadau) fethu rhywbeth.

Ar ôl edrych ar y tab "Cynnwys" yn HaikuDepot ar gyfer rhai cymwysiadau eraill, gwelais fod yna ffeiliau fel /data/mimedb/application/x-vnd... yr hyn sydd hyd yn oed yn fwy rhyfeddol yw /data/deskbar/menu/Applications/….

Wel, beth ddylwn i ei roi yno? Dewch ymlaen...

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

Rwy’n hollol siŵr y bydd y tric hwn yn gweithio, ond erys y cwestiynau: pam mae hyn yn angenrheidiol, beth yw ei ddiben? Rwy'n meddwl bod hyn yn difetha'r argraff gyffredinol bod y system mor soffistigedig.

Fel yr eglurwyd gan Mr. sblash gwadlan:

Weithiau mae yna gymwysiadau sydd eu hangen ar gymwysiadau eraill ond nad ydyn nhw yn y ddewislen. Er enghraifft, LegacyPackageInstaller yn eich screenshot, prosesu archifau .pkg mewn fformat BeOS. Hoffwn i ddefnyddwyr eu gosod, ond bydd eu presenoldeb yn y ddewislen yn arwain at ddryswch.

Am ryw reswm mae'n ymddangos i mi fod yna ateb symlach, er enghraifft Hidden=true mewn ffeiliau .desktop ar Linux. Beth am wneud y wybodaeth "cudd" yn adnodd a phriodoledd y system ffeiliau?

Yr hyn nad yw'n arbennig o gynnil yw enw (rhai) cymhwysiad sy'n dangos y ddewislen, deskbar, wedi'i glymu'n anhyblyg ar hyd y ffordd.

mr. mae waddlesplash yn esbonio hyn:

Dylid deall “bar bwrdd” yn yr achos hwn fel rhyw fath o derm cyffredinol (yn yr un modd i raddau helaeth â “bar tasgau”, sy'n cyfeirio at raglen Windows a'r cysyniad cyffredinol). Wel, ers hyn deskbar, nid “Bar Bwrdd”, gellir deall hyn mewn ffordd debyg hefyd.

Fy mhumed diwrnod gyda Haiku: gadewch i ni bortreadu rhai rhaglenni
2 gyfeiriadur "bron yn union yr un fath" gyda chymwysiadau ynddynt

Pam mae yna 2 gyfeiriadur gyda chymwysiadau, a hefyd pam mae fy QtQuickApplication yn un, ond nid yn y llall? (Wedi'r cyfan, nid un system un yw hon, ond ail ddefnyddiwr, a fyddai'n ddealladwy i mi yn bersonol).
Rwy'n ddryslyd iawn ac rwy'n meddwl y dylai hyn fod yn unedig.

sylw gan Mr. waddlesplash

Mae'r catalog Apps yn cynnwys cymwysiadau nad oes eu hangen yn y ddewislen. Ond mae gwir angen gwella'r sefyllfa gyda'r fwydlen, i'w gwneud yn fwy addasadwy.

Cais, neu ni fydd yn digwydd 😉

Roeddwn i'n meddwl tybed: a yw'n wirioneddol angenrheidiol cynnal ceisiadau i mewn /system/apps, os yw defnyddwyr yn eu gweld yno, mae'n annymunol. Efallai y byddai'n well eu gosod mewn man arall lle na fydd y defnyddiwr yn dod ar eu traws? Yn union fel y gwneir yn Mac OS X, lle mae cynnwys pecynnau .app, na ddylai fod yn weladwy i'r defnyddiwr yn /Applications, yn cuddio yn nyfnderoedd /System/Llyfrgell/…“`.

Beth am ddibyniaethau?

Rwy'n credu ei bod yn werth nodi'r dibyniaethau rywsut, iawn? A ellir ystyried Qt yn rhan orfodol o osodiad Haiku yn ddiofyn? Naddo! Nid yw Qt wedi'i osod yn ddiofyn. A all adeiladwr pecynnau ganfod dibyniaethau yn awtomatig trwy wirio ffeiliau ELF? Dywedwyd wrthyf fod HaikuPorter yn gwneud hyn mewn gwirionedd, ond package Nac ydw. Mae hynny oherwydd mai dim ond "adeiladwr pecyn" ydyw sydd ond yn creu ffeiliau ar ei ben ei hun hpkg.

A ddylai Haiku gael ei wneud yn fwy soffistigedig drwy ychwanegu polisi na ddylai pecyn fod yn ddibynnol ar becynnau y tu allan i Haiku? haikuports? (Hoffwn, oherwydd byddai polisi o'r fath yn gwneud pethau'n llawer haws - byddai'r system yn gallu datrys dibyniaethau pob pecyn sy'n cael ei lawrlwytho o unrhyw le yn awtomatig, heb chwarae o gwmpas gyda ffynonellau pecyn ychwanegol.)

mr. mae waddlesplash yn esbonio:

Ni hoffem gyfyngu cymaint ar ryddid datblygwyr, oherwydd mae'n amlwg, os yw CompanyX am gefnogi ei set ei hun o feddalwedd gyda dibyniaethau (ac felly ystorfa), bydd yn gwneud hynny'n gwbl rydd.

Yn yr achos hwnnw, efallai y byddai'n werth argymell bod pecynnau trydydd parti yn osgoi dibyniaeth ar unrhyw beth nad yw wedi'i gynnwys mewn haikuports trwy becynnu popeth sydd ei angen gyda'r cais yn llwyr. Ond dwi'n meddwl bod hwn yn bwnc ar gyfer erthygl yn y dyfodol yn y gyfres hon. [A yw'r awdur yn mynd tuag at AppImage? — tua. cyfieithydd]

Ychwanegu eicon cais

Beth os ydw i am ychwanegu un o'r eiconau adeiledig taclus at adnoddau fy nghais sydd newydd ei greu? Mae'n ymddangos bod hwn yn bwnc anhygoel, felly bydd yn sail i'r erthygl nesaf.

Sut i drefnu adeiladu cais parhaus?

Dychmygwch brosiect fel Inkscape (ie, dwi'n ymwybodol nad yw ar gael eto yn Haiku, ond mae'n gyfleus i'w arddangos arno). Mae ganddyn nhw storfa cod ffynhonnell https://gitlab.com/inkscape/inkscape.
Bob tro y bydd rhywun yn ymrwymo eu newidiadau i'r ystorfa, mae piblinellau adeiladu yn cael eu lansio, ac ar ôl hynny mae'r newidiadau'n cael eu profi, eu hadeiladu, a'r cymhwysiad yn cael ei becynnu i wahanol becynnau, gan gynnwys AppImage ar gyfer Linux (pecyn cais annibynnol y gellir ei lawrlwytho ar gyfer profion lleol beth bynnag yr hyn y gellir neu na ellir ei osod ar y system [Roeddwn yn gwybod! — tua. cyfieithydd]). Mae'r un peth yn digwydd gyda phob cais uno cangen, felly gallwch chi lawrlwytho'r cais sydd wedi'i adeiladu o'r cod a gynigir yn y cais uno cyn uno.

Fy mhumed diwrnod gyda Haiku: gadewch i ni bortreadu rhai rhaglenni
Cyfuno ceisiadau â statws adeiladu a'r gallu i lawrlwytho'r deuaidd a luniwyd os yw'r adeiladwaith yn llwyddiannus (wedi'i farcio mewn gwyrdd)

Mae'r adeilad yn rhedeg mewn cynwysyddion Docker. Mae GitLab yn cynnig rhedwyr am ddim ar Linux, ac rwy'n meddwl y gallai fod yn bosibl cynnwys eich rhedwyr eich hun (gyda llaw, nid wyf yn gweld sut y byddai hyn yn gweithio ar gyfer systemau fel Haiku, y gwn nad oes ganddynt Docker neu gyfwerth, ond hefyd ar gyfer FreeBSD nid oes Dociwr, felly nid yw'r broblem hon yn unigryw i Haiku).

Yn ddelfrydol, gellir adeiladu cymwysiadau Haiku y tu mewn i gynhwysydd Docker ar gyfer Linux. Yn y sefyllfa hon, gellir cyflwyno'r cynulliad ar gyfer Haiku i'r piblinellau presennol. A oes croes-gasglwyr? Neu a ddylwn i efelychu Haiku i gyd y tu mewn i gynhwysydd Docker gan ddefnyddio rhywbeth fel QEMU / KVM (gan dybio y bydd yn gweithio felly y tu mewn i Docker)? Gyda llaw, mae llawer o brosiectau yn defnyddio egwyddorion tebyg. Er enghraifft, mae Scribus yn gwneud hyn - mae eisoes ar gael ar gyfer Haiku. Un diwrnod fe ddaw'r dydd pan gaf anfon o'r fath Tynnu ceisiadau i brosiectau eraill i ychwanegu cefnogaeth Haiku.

Mae un o'r datblygwyr yn esbonio:

Ar gyfer prosiectau eraill sy'n dymuno creu pecynnau eu hunain, cefnogir y dull CMake/CPack rheolaidd. Gellir cefnogi systemau adeiladu eraill trwy ffonio rhaglen adeiladu'r pecyn yn uniongyrchol, sy'n iawn os oes gan bobl ddiddordeb ynddo. Dengys profiad: hyd yn hyn ni fu llawer o ddiddordeb, felly bu haikuporter mor gyfleus i ni, ond, yn y pen draw, dylai'r ddau ddull weithio gyda'i gilydd. Dylem gyflwyno set o offer ar gyfer meddalwedd traws-adeiladu o Linux neu unrhyw system weithredu gweinydd arall (nid yw Haiku wedi'i gynllunio i redeg ar weinyddion).

Rhoddaf gymeradwyaeth sefyll. Mae defnyddwyr Linux rheolaidd yn cario'r holl lwyth ychwanegol hwn a bagiau ychwanegol (diogelwch, rheolaeth gaeth, ac ati) sy'n angenrheidiol ar gyfer system weithredu gweinydd, ond nid ar gyfer un personol. Felly dwi'n cytuno'n llwyr mai gallu adeiladu apps Haiku ar Linux yw'r ffordd i fynd.

Casgliad

Mae trosglwyddo ceisiadau POSIX i Haiku yn bosibl, ond gall fod yn ddrutach nag ailadeiladu arferol. Byddwn yn bendant yn sownd â hyn am amser hir oni bai am gymorth pobl o'r sianel #haiku ar y rhwydwaith irc.freenode.net. Ond hyd yn oed nid oeddent bob amser yn gweld ar unwaith beth oedd yn bod.

Mae ceisiadau a ysgrifennwyd yn Qt yn eithriad hawdd. Lluniais gymhwysiad demo syml heb unrhyw broblemau.

Mae adeiladu pecyn ar gyfer cymwysiadau syml hefyd yn eithaf hawdd, ond dim ond ar gyfer rhai “a ryddhawyd yn draddodiadol”, h.y. cael fersiynau o archifau cod ffynhonnell y bwriedir eu cefnogi mewn haikuports. Ar gyfer adeiladwaith parhaus (adeiladu ar gyfer pob ymrwymiad o newidiadau) gyda GitHub, mae'n ymddangos nad yw popeth mor syml. Yma mae Haiku yn teimlo'n debycach i ddosbarthiad Linux na'r canlyniad ar Mac, lle rydych chi'n cael pecyn pan fyddwch chi'n clicio ar y botwm “Build” yn XCode .app, yn barod i'w fewnosod i ddelwedd disg .dmg, a baratowyd i'w lawrlwytho ar fy ngwefan.
Mae'n debygol y bydd adeiladu cymwysiadau'n barhaus yn seiliedig ar system weithredu “gweinydd”, er enghraifft, Linux, yn bosibl os bydd galw gan ddatblygwyr, ond ar hyn o bryd mae gan brosiect Haiku dasgau eraill, mwy dybryd.

Rhowch gynnig arni eich hun! Wedi'r cyfan, mae prosiect Haiku yn darparu delweddau ar gyfer cychwyn o DVD neu USB, wedi'u cynhyrchu ежедневно. I osod, lawrlwythwch y ddelwedd a'i hysgrifennu i yriant fflach gan ddefnyddio Etcher

Oes gennych chi unrhyw gwestiynau? Rydym yn eich gwahodd i'r Rwsieg eu hiaith sianel telegram.

Trosolwg gwall: Sut i saethu eich hun yn y droed yn C a C++. Casgliad o ryseitiau Haiku OS

O awdur cyfieithiad: dyma'r bumed erthygl yn y gyfres am Haiku.

Rhestr o erthyglau: Cyntaf Mae'r ail Yn drydydd Pedwerydd

Ffynhonnell: hab.com

Ychwanegu sylw