Fimmti dagurinn minn með Haiku: við skulum flytja nokkur forrit

Fimmti dagurinn minn með Haiku: við skulum flytja nokkur forrit

TL; DR: Nýliði sá Haiku í fyrsta skipti, að reyna að flytja nokkur forrit frá Linux heiminum.

Fimmti dagurinn minn með Haiku: við skulum flytja nokkur forrit
Fyrsta Haiku flutta forritið mitt, pakkað í hpkg sniði

Nýlega Ég uppgötvaði Haiku, furðu gott stýrikerfi fyrir tölvur.
Í dag mun ég læra hvernig á að flytja ný forrit í þetta stýrikerfi. Aðaláherslan er lýsing á fyrstu reynslu af því að skipta yfir í Haiku frá sjónarhóli Linux forritara. Ég biðst afsökunar á heimskulegum mistökum sem ég gerði á leiðinni, þar sem það er ekki einu sinni liðin vika síðan ég sótti Haiku fyrst.

Ég vil ná þremur markmiðum:

  • Sendu einfalt CLI forrit
  • Flytja forrit frá GUI til Qt
  • Pakkaðu þeim svo í hpkg sniði (þar sem ég er enn að hugsa um að aðlaga AppDir og AppImage fyrir Haiku...)

Byrjum. Á köflum skjöl и þróun, eins og heilbrigður eins og í Wiki frá HaikuPorts fann ég rétta átt. Það er meira að segja til PDF bók á netinu BeOS: Flytja Unix forrit.
467 síður - og þetta er frá 1997! Það er skelfilegt að horfa inn, en ég vona það besta. Orð þróunaraðilans eru uppörvandi: „það tók langan tíma vegna þess að BeOS var ekki POSIX-samhæft,“ en Haiku „að mestu leyti“ er nú þegar þannig.

Flytja einfalt CLI forrit

Fyrsta hugsunin var að flytja forritið avrdude, en eins og það kom í ljós er þetta nú þegar gert fyrir löngu síðan.

Fyrsta tilraun: ekkert að horfa á

Það sem ég get ekki skilið er það nú þegar Forrit hafa verið flutt til Haiku í yfir 10 ár - þrátt fyrir að stýrikerfið sjálft sé ekki einu sinni útgáfa 1.0 ennþá.

Önnur tilraun: þarf að endurskrifa

Svo ég nota ptouch-770, CLI til að stjórna Brother P-Touch 770 prentaranum sem ég nota til að prenta merkimiða.
Ég prenta ýmsa merkimiða á það og þú hefur kannski þegar séð það í fyrri greininni. Nokkru áðan skrifaði ég lítið GUI wrapper forrit í Python (þar sem það er í Gtk+ verður að endurskrifa það og þetta er góð ástæða til að læra).

Fimmti dagurinn minn með Haiku: við skulum flytja nokkur forrit
Brother P-Touch 770 merkimiðaprentari. Virkar hann með Haiku?

Haiku pakkastjórinn veit um bókasöfn og skipanir, þannig að ef ég fæ skilaboð um „finn ekki libintl“ þegar ég keyri configure - Ég byrja bara pkgman install devel:libintl og tilskilinn pakki verður fundinn. sömuleiðis pkgman install cmd:rsync. Jæja, o.s.frv.

Nema þegar þetta virkar ekki:

/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

Kannski er udev of Linux byggt og er því ekki til fyrir Haiku. Sem þýðir að ég þarf að breyta frumkóðanum sem ég er að reyna að setja saman.
Æ, þú getur ekki hoppað yfir höfuðið og ég veit ekki einu sinni hvar ég á að byrja.

Þriðja tilraun

Það væri gaman að hafa tmate fyrir Haiku, þá myndi ég leyfa Haiku forriturunum að tengjast flugstöðinni minni - ef eitthvað fer úrskeiðis. Leiðbeiningarnar eru frekar einfaldar:

./autogen.sh
./configure
make
make install

Lítur vel út, svo hvers vegna ekki að prófa það á 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

Í þessu skrefi opna ég HaikuDepot og leita curses.
Eitthvað fannst sem gaf mér vísbendingu um hæfari fyrirspurn:

/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

Aftur fór ég í HaikuDepot og fann að sjálfsögðu devel:msgpack_c_cpp_devel. Hvað eru þessi undarlegu nöfn?

/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

Í þessu skrefi áttaði ég mig á því að það að flytja forrit til Haiku krefst miklu meiri þekkingu en þarf fyrir einfalda endurbyggingu.
Ég talaði við vinalega Haiku forritara, það kemur í ljós að það er villa í msgpack og eftir nokkrar mínútur sé ég plástur í HaikuPorts. Ég sé með eigin augum hvernig leiðréttur pakki að fara hingað (buildslave - sýndarvélar).

Fimmti dagurinn minn með Haiku: við skulum flytja nokkur forrit
Að byggja upp leiðrétta skilaboðapakkann á buildmaster

Þess á milli sendi ég plástur til upstream til að bæta Haiku stuðningi við msgpack.

Fimm mínútum síðar er uppfærði skilaboðapakkinn þegar fáanlegur í 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.

Óvænt gott. Var það það sem ég sagði?!

Ég sný aftur til upprunalega vandamálsins:

/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

Nú lítur út fyrir að msgpack sé ekki að kenna. Ég er að kommenta IMAXLABEL в tty.c svona:

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

Niðurstaða:

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.

Jæja, þá erum við komin aftur... Við the vegur:

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

herra. waddlesplash segir þér hvar á að grafa:

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

Hér birti ég config.log.

Þeir útskýrðu fyrir mér að það væri eitthvað annað í libnetwork fyrir utan libresolv á Haiku. Svo virðist sem þarf að breyta kóðanum frekar. Þarf að hugsa…

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

Hin eilífa spurning: hvað er í gangi?

/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

Sama hluturinn, aðeins í prófílnum. Googlaði og fann þetta. Ef þú bætir við -lssp "stundum" hjálpar, ég reyni:

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

Vá! Það er að byrja! En…

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

Ég skal reyna að kemba skrá hér:

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

„Bad port ID“ er nú þegar eins og nafnspjald haikú. Kannski hefur einhver hugmynd um hvað er að og hvernig á að laga það? Ef svo er mun ég uppfæra greinina. Tengill á GitHub.

Flytja GUI forritið til Qt.

Ég vel einfalt QML forrit.

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

Virkilega einfalt. Innan við mínútu!

Pökkunarforrit í hpkg með haikuporter og haikuporter.

Á hverju ætti ég að byrja? Það er engin einföld skjöl, ég fer á #haiku rásina á irc.freenode.net og heyri:

  • Team package - leið til að búa til pakka á lágu stigi. Að mestu dugar PackageInfo henni, eins og lýst er í kaflanum „Að gera það að almennilegum .hpkg pakka“
  • Ég þarf að gera eitthvað slíkt
  • Getur notað hpkg-skapandi (það hrynur hjá mér, villutilkynningu)

Það er ekki ljóst hvað á að gera. Ég býst við að ég þurfi byrjendahandbók í Hello World stíl, helst myndband. Það væri gaman að fá einnig þægilega kynningu á HaikuPorter, eins og gert er í GNU halló.

Ég las eftirfarandi:

haikuporter er tæki til að búa til algeng pakkaverkefni fyrir Haiku. Það notar HaikuPorts geymsluna sem grunn fyrir alla pakka. Haikuporter uppskriftir eru notaðar til að búa til pakka.

Auk þess kemst ég að því að:

Það er engin þörf á að geyma uppskriftir í HaikuPorts geymslu. Þú getur búið til aðra geymslu, sett uppskriftirnar í það og síðan bent haikuporter á það.

Bara það sem ég þarf - ef ég er ekki að leita að leið til að gefa út pakkann opinberlega. En þetta er efni í aðra færslu.

Að setja upp haikuporter og haikuporter

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

Að skrifa uppskrift

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
}

Að setja saman uppskriftina

Ég vista skrána undir nafninu QtQuickApp-1.0.recipe, eftir það ræsir ég aikuporter -S ./QuickApp-1.0.recipe. Ósjálfstæðir eru athugaðir fyrir alla pakka í geymslunni haikuports, sem tekur nokkurn tíma. Ég skal fara og fá mér kaffi.

Af hverju í ósköpunum ætti þetta eftirlit að fara fram á staðbundinni vélinni minni, en ekki miðlægt á þjóninum einu sinni fyrir alla?

Að sögn hr. waddlesplash:

Með þannig að þú getur endurskrifað hvaða skrá sem er í geymslunni 😉 Þú getur fínstillt þetta aðeins, reiknað út nauðsynlegar upplýsingar þegar þörf krefur, því síðustu breytingar sem gerðar eru eru frekar sjaldgæfar.

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

Það kemur í ljós að það er ekkert til sem heitir venjuleg uppskriftaskrá sem inniheldur frumkóða forritsins þíns. Þú þarft að geyma það í geymslu á HaikuPorts sniði.

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

Þessi staðreynd gerir samsetninguna fyrirferðarmeiri. Mér líkar það ekkert sérstaklega, en ég held að það sé nauðsynlegt svo að á endanum birtist allur opinn hugbúnaður í HaikuPorts.

Ég fæ eftirfarandi:

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

Hvað er að? Eftir að hafa lesið irc geri ég:

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

Áhugaverð spurning hefur vaknað. Ef ég bæti tékksummu við uppskriftina - mun hún passa við nýjustu git commit fyrir stöðuga samþættingu? (Hönnuðurinn staðfestir: „Það mun ekki virka. Uppskriftirnar eru hannaðar til að vera tiltölulega stöðugar.“)

Til gamans, bætið við uppskriftina:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Samt ekki sáttur:

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

Hvað er hann að gera? Þegar öllu er á botninn hvolft er þetta git geymsla, kóðinn er þegar þarna beint, það er ekkert til að taka upp. Frá mínu sjónarhorni ætti tólið að vera nógu snjallt til að leita ekki að unpacker ef það er fyrir ofan GitHub slóðina.

Kannski uri git:// virkar

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

Nú kvartar það svona:

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

Hmm, af hverju er allt svona flókið, af hverju geturðu ekki "bara unnið"? Eftir allt saman, það er ekki svo óalgengt að byggja eitthvað frá GitHub. Hvort sem það eru verkfæri sem virka strax, án þess að þurfa að setja upp, eða eins og ég kalla það "fussing".

Kannski virkar þetta svona:

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

Neibb. Ég fæ ennþá þessa undarlegu villu og geri það, eins og lýst er hér

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

Ég er að færa mig aðeins lengra, en hvers vegna öskrar það á mig (GitHub er ekki öruggt!) og er enn að reyna að pakka niður einhverju.

Samkvæmt herra. waddlesplash:

Jæja, já, ástæðan var löngunin til að athuga heilleika gagnanna sem berast til samsetningar. Einn af valkostunum er að staðfesta eftirlitssummu skjalasafnsins, en þú getur auðvitað hash einstakar skrár, sem verða ekki útfærðar, vegna þess að það tekur miklu lengri tíma. Afleiðingin af þessu er „óöryggi“ git og annarra VCS. Þetta mun líklega alltaf vera raunin, þar sem að búa til skjalasafn á GitHub er frekar auðvelt og oft fljótlegra. Jæja, í framtíðinni verða villuboðin kannski ekki svo áberandi... (við sameinum ekki lengur slíkar uppskriftir í 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

Af gömlum vana fer ég að spyrja gott fólk á #haiku rásinni á irc.freenode.net netinu. Og hvar væri ég án þeirra? Eftir ábendinguna áttaði ég mig á að ég ætti að nota:

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

Allt í lagi, það varð ljóst hvað það gerir - það hleður niður skjalasafni með frumkóða ákveðinnar útgáfu. Það er heimskulegt, frá mínu sjónarhorni, og ekki nákvæmlega það sem ég vildi, nefnilega að hlaða niður nýjustu útgáfunni frá master útibúinu.

Einn af þróunaraðilum útskýrði þetta svona:

Við erum með okkar eigin CI, þannig að allt sem er sett í haikuports geymsluna verður pakkað fyrir alla notendur og við viljum ekki hætta á að safna og afhenda „allt í nýjustu útgáfunni andstreymis“.

Skil! Í öllum tilvikum, þetta er það sem gerðist:

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

Það endurtekur þetta óendanlega. Svo virðist sem þetta sé villa (er til forrit? Ég fann það ekki).

С haikuporter og geymsla haikuports Það hefur ekki „bara virkar“ tilfinningu yfir því, en sem þróunaraðili eru nokkrir hlutir sem mér líkar við að vinna með Haiku. Að mestu leyti er það svipað og Open Build Service, sett af verkfærum til að byggja upp Linux smíði: afar öflugt, með kerfisbundinni nálgun, en of mikið fyrir litla „halló heim“ forritið mitt.

Aftur, að sögn hr. waddlesplash:

Reyndar, HaikuPorter er sjálfgefið frekar strangt (auk þess er lint mode sem og strangur háttur til að gera hann enn strangari!), En aðeins vegna þess að hann býr til pakka sem munu virka, frekar en að búa bara til pakka. Þess vegna kvartar hann yfir óuppgefnu ósjálfstæði, bókasöfnum sem ekki eru rétt flutt inn, röngum útgáfum o.s.frv. Markmiðið er að ná öllum vandamálum, þar á meðal framtíðarvandamálum, áður en notandinn veit af því (þess vegna var ekki hægt að setja upp avrdude, vegna þess að ósjálfstæðin voru í raun tilgreind í uppskriftinni). Bókasöfn eru ekki bara einstakir pakkar eða jafnvel sérstakar SO útgáfur. HaikuPorter tryggir að allt þetta sé athugað í uppskriftunum sjálfum til að forðast villur við framkvæmd.

Í grundvallaratriðum er þetta strangleikastig réttlætanlegt þegar búið er til stýrikerfi, en mér virðist það óþarft fyrir „halló heimur“ forrit. Ég ákvað að prófa eitthvað annað.

Byggja forrit á hpkg sniði með því að nota „package create“ skipunina

Kannski, þetta Munu einfaldar leiðbeiningar virka betur fyrir mig?

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

Óvænt hratt, óvænt einfalt, óvænt áhrifaríkt. Nákvæmlega eins og mér líkar það, ótrúlegt!

Uppsetning - hvað og hvar?

Færði QtQuickApp.hpkg skrána til ~/config/packagesmeð því að nota skráastjóra, eftir það birtist QtQuickApp með töfrum ~/config/apps.
Aftur, óvænt hratt, einfalt og áhrifaríkt. Ótrúlegt, ótrúlegt!

En... (hvar værum við án þeirra!)

Forritið vantar enn á forritavalmyndarlistann og QuickLaunch. Ég held að ég viti nú þegar hvernig á að laga það. Í skráasafninu flyt ég QtQuickApp.hpkg úr ~/config/packages í /system/packages.

Nei, vantar enn. Svo virðist sem ég (jæja, og leiðbeiningarnar) missti af einhverju.

Eftir að hafa skoðað flipann „Content“ í HaikuDepot fyrir nokkur önnur forrit, sá ég að það eru til skrár eins og /data/mimedb/application/x-vnd... það sem er enn merkilegra er /data/deskbar/menu/Applications/….

Jæja, hvað á ég að setja þarna? Láttu ekki svona...

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

Ég er alveg viss um að þetta bragð muni virka, en spurningarnar standa eftir: hvers vegna er þetta nauðsynlegt, til hvers er það? Ég held að þetta eyðileggi heildarmyndina af því að kerfið sé svona háþróað.

Eins og útskýrt er af hr. waddlesplash:

Stundum eru forrit sem önnur forrit þurfa en eru ekki í valmyndinni. Til dæmis, LegacyPackageInstaller á skjámyndinni þinni, sem vinnur .pkg skjalasafn á BeOS sniði. Ég vil að notendur setji þá upp, en tilvist þeirra í valmyndinni mun leiða til ruglings.

Einhverra hluta vegna sýnist mér að það sé til einfaldari lausn, td Hidden=true í skrám .desktop á Linux. Af hverju ekki að gera „falnu“ upplýsingarnar að auðlind og eiginleikum skráarkerfisins?

Það sem er sérstaklega ekki lúmskt er nafnið á (einhverju) forriti sem sýnir valmyndina, deskbar, stíft bundið á leiðinni.

herra. waddlesplash útskýrir þetta:

„Skrifborð“ í þessu tilfelli ætti að skilja sem eins konar almennt hugtak (á svipaðan hátt og „verkefnastika“, sem vísar bæði til Windows forritsins og almennu hugtaksins). Jæja, síðan þetta deskbar, ekki „Skrifborð“, þetta má líka skilja á svipaðan hátt.

Fimmti dagurinn minn með Haiku: við skulum flytja nokkur forrit
2 "næstum eins" möppur með forritum í þeim

Af hverju eru 2 möppur með forritum, og líka hvers vegna er QtQuickApplication minn í annarri, en ekki í hinni? (Þegar allt kemur til alls er þetta ekki eitt kerfi, heldur annar notandi, sem væri skiljanlegt fyrir mig persónulega).
Ég er mjög ringlaður og ég held að þetta ætti að vera sameinað.

athugasemd hr. waddlesplash

Forritaskráin inniheldur forrit sem ekki er þörf á í valmyndinni. En ástandið með matseðilinn þarf virkilega að bæta, til að gera hann sérsniðnari.

Umsókn, annars gerist það ekki 😉

Ég velti því fyrir mér: er virkilega nauðsynlegt að hýsa forrit í /system/apps, ef notendur sjá þær þar er það óæskilegt. Kannski væri betra að koma þeim fyrir á öðrum stað þar sem notandinn lendir ekki í þeim? Rétt eins og það er gert í Mac OS X, þar sem innihald pakka .app, sem ætti ekki að vera sýnilegt notandanum í /Applications, felur sig í djúpum /System/Library/…“`.

Hvað með ósjálfstæði?

Ég held að það sé þess virði að tilgreina ósjálfstæðin einhvern veginn, ekki satt? Getur Qt talist skyldubundinn hluti af Haiku uppsetningunni sjálfgefið? Neibb! Qt er ekki sjálfgefið uppsett. Getur pakkagerð sjálfkrafa greint ósjálfstæði með því að athuga ELF skrár? Mér var sagt að HaikuPorter geri þetta í raun, en package Nei. Það er vegna þess að þetta er bara "pakkasmíðar" sem býr bara til skrár á eigin spýtur hpkg.

Ætti Haiku að vera flóknari með því að bæta við stefnu um að pakki ætti ekki að vera háður pökkum utan Haiku? haikuports? (Mig langar til þess, vegna þess að slík stefna myndi gera hlutina miklu auðveldari - kerfið gæti sjálfkrafa leyst ósjálfstæði hvers pakka sem hlaðið er niður hvaðan sem er, án þess að skipta sér af viðbótarupptökum pakka.)

herra. waddlesplash útskýrir:

Við viljum ekki takmarka frelsi þróunaraðila svo mikið, því það er augljóst að ef CompanyX vill styðja sitt eigið sett af hugbúnaði með ósjálfstæði (og þar af leiðandi geymslu), mun það gera það algjörlega frjálst.

Í því tilviki gæti verið þess virði að mæla með því að þriðju aðila pakkar forðist ósjálfstæði á öllu sem er ekki innifalið í haikuports með því að pakka öllu sem þarf með forritinu. En ég held að þetta sé efni í framtíðargrein í þessari röð. [Er höfundurinn á leið í AppImage? — ca. þýðandi]

Bætir við forritatákni

Hvað ef ég vil bæta einu af snyrtilegu innbyggðu táknunum við auðlindir nýstofnaða forritsins míns? Það kemur í ljós að þetta er ótrúlegt efni, svo það verður grunnurinn að næstu grein.

Hvernig á að skipuleggja samfellda smíði forrita?

Ímyndaðu þér verkefni eins og Inkscape (já, ég veit að það er ekki enn fáanlegt í Haiku, en það er þægilegt að birta það á því). Þeir eru með frumkóðageymslu https://gitlab.com/inkscape/inkscape.
Í hvert skipti sem einhver framkvæmir breytingar sínar á geymslunni, eru byggingarleiðslur settar af stað, eftir það eru breytingarnar sjálfkrafa prófaðar, smíðaðar og forritinu pakkað í ýmsa pakka, þar á meðal AppImage fyrir Linux (sjálfstætt forritapakka sem hægt er að hlaða niður fyrir staðbundnar prófanir óháð hvað má eða má ekki vera uppsett á kerfinu [Ég vissi það! — ca. þýðandi]). Það sama gerist með hverja útibússameiningarbeiðni, svo þú getur halað niður forritinu sem er byggt upp úr kóðanum sem lagt er til í sameiningarbeiðninni áður en þú sameinar.

Fimmti dagurinn minn með Haiku: við skulum flytja nokkur forrit
Sameina beiðnir við byggingarstöðu og getu til að hlaða niður samansettum tvíþættum ef smíðin heppnast (merkt með grænu)

Byggingin keyrir í Docker gámum. GitLab býður upp á ókeypis hlaupara á Linux, og ég held að það gæti verið hægt að hafa þína eigin hlaupara (við the vegur, ég sé ekki hvernig þetta myndi virka fyrir kerfi eins og Haiku, sem ég veit að eru ekki með Docker eða sambærilegt, en einnig fyrir FreeBSD er enginn Docker, svo þetta vandamál er ekki einstakt fyrir Haiku).

Helst er hægt að smíða Haiku forrit í Docker gám fyrir Linux. Í þessum aðstæðum er hægt að setja samsetningu fyrir Haiku inn í núverandi leiðslur. Eru til krossþýðendur? Eða ætti ég að líkja eftir öllu Haiku inni í Docker gámi með því að nota eitthvað eins og QEMU/KVM (að því gefnu að það virki þannig inni í Docker)? Við the vegur, mörg verkefni nota svipaðar meginreglur. Til dæmis gerir Scribus þetta - það er nú þegar fáanlegt fyrir Haiku. Einn daginn kemur sá dagur að ég get sent svo Dragðu beiðnir til annarra verkefna til að bæta við Haiku stuðningi.

Einn af þróunaraðilum útskýrir:

Fyrir önnur verkefni sem vilja búa til pakka sjálf er venjuleg CMake/CPack aðferð studd. Hægt er að styðja við önnur byggingarkerfi með því að hringja beint í smíðaforrit pakkans, sem er í lagi ef fólk hefur áhuga á því. Reynslan sýnir: hingað til hefur ekki verið mikill áhugi, svo haikuporter virkaði eins vel fyrir okkur, en á endanum ættu báðar aðferðirnar að vinna saman. Við ættum að kynna sett af verkfærum fyrir krossbyggingarhugbúnað frá Linux eða öðru stýrikerfi netþjóna (Haiku er ekki hannað til að keyra á netþjónum).

Ég lofa uppreisn æru. Venjulegir Linux notendur bera allt þetta viðbótarálag og aukafarangur (öryggi, strangt eftirlit osfrv.) sem er nauðsynlegt fyrir stýrikerfi netþjóna, en ekki fyrir persónulegt. Svo ég er alveg sammála því að geta smíðað Haiku öpp á Linux er leiðin til að fara.

Ályktun

Það er mögulegt að flytja POSIX forrit til Haiku, en gæti verið dýrara en dæmigerð endurbygging. Ég væri örugglega fastur við þetta í langan tíma ef það væri ekki fyrir hjálp fólks frá #haiku rásinni á irc.freenode.net netinu. En jafnvel þeir sáu ekki alltaf strax hvað var að.

Umsóknir skrifaðar í Qt eru auðveld undantekning. Ég setti saman einfalt kynningarforrit án vandræða.

Það er líka frekar auðvelt að búa til pakka fyrir einföld forrit, en aðeins fyrir „hefðbundin útgefin“, þ.e. að hafa útgefna frumkóðasöfn sem eru ætluð til stuðnings í haikuports. Fyrir samfellda byggingu (byggja fyrir hverja breytingu) með GitHub, virðist allt ekki vera svo einfalt. Hér finnst Haiku meira eins og Linux dreifing en útkoman á Mac, þar sem þegar þú smellir á „Build“ hnappinn í XCode færðu pakka .app, tilbúið til að setja inn í diskmynd .dmg, tilbúinn til niðurhals á vefsíðunni minni.
Stöðug bygging forrita sem byggjast á „miðlara“ stýrikerfi, til dæmis Linux, verður líklega möguleg ef eftirspurn er frá hönnuðum, en í augnablikinu hefur Haiku verkefnið önnur og brýnni verkefni.

Prófaðu það sjálfur! Þegar öllu er á botninn hvolft gefur Haiku verkefnið myndir til að ræsa af DVD eða USB, myndaðar daglega. Til að setja upp skaltu bara hlaða niður myndinni og brenna hana á USB-drifi með því að nota Etcher

Ertu með spurningar? Við bjóðum þér til rússneskumælandi símskeytarás.

Villuyfirlit: Hvernig á að skjóta þig í fótinn í C og C++. Haiku OS uppskriftasafn

Frá höfundurinn þýðing: þetta er fimmta greinin í röðinni um Haiku.

Listi yfir greinar: First Annað Í þriðja lagi Fjórða

Heimild: www.habr.com

Bæta við athugasemd