Siku yangu ya tano na Haiku: wacha tuweke programu fulani

Siku yangu ya tano na Haiku: wacha tuweke programu fulani

TL; DR: Mtoto mpya aliona Haiku kwa mara ya kwanza, akijaribu kuhamisha programu kutoka kwa ulimwengu wa Linux.

Siku yangu ya tano na Haiku: wacha tuweke programu fulani
Programu yangu ya kwanza ya Haiku iliyosafirishwa, iliyowekwa katika umbizo lake la hpkg

Hivi karibuni Niligundua Haiku, mfumo mzuri wa uendeshaji kwa Kompyuta.
Leo nitajifunza jinsi ya kuweka programu mpya kwenye mfumo huu wa uendeshaji. Lengo kuu ni maelezo ya uzoefu wa kwanza wa kubadili Haiku kutoka kwa mtazamo wa msanidi wa Linux. Ninaomba radhi kwa makosa yoyote ya kijinga niliyofanya njiani, kwani haijapita hata wiki moja tangu nilipopakua Haiku.

Nataka kufikia malengo matatu:

  • Weka programu rahisi ya CLI
  • Sambaza programu kutoka kwa GUI hadi Qt
  • Kisha vifurushie katika umbizo la hpkg (kwani bado ninafikiria kurekebisha AppDir na AppImage ya Haiku...)

Tuanze. Katika sehemu nyaraka ΠΈ maendeleovile vile wiki kutoka HaikuPorts nilipata mwelekeo sahihi. Kuna hata kitabu cha mtandaoni cha PDF BeOS: Kuweka Programu ya Unix.
kurasa 467 - na hii ni ya 1997! Inatisha kuangalia ndani, lakini natumai bora. Maneno ya msanidi programu yanatia moyo: "ilichukua muda mrefu kwa sababu BeOS haikufuata POSIX," lakini Haiku "kwa sehemu kubwa" tayari iko hivyo.

Inasambaza programu rahisi ya CLI

Wazo la kwanza lilikuwa kuhamisha programu avrdude, lakini, kama ilivyotokea, hii tayari kumaliza muda mrefu uliopita.

Jaribu kwanza: hakuna cha kutazama

Nisichoweza kuelewa ni kwamba tayari Programu zimetumwa kwa Haiku kwa zaidi ya miaka 10 - licha ya ukweli kwamba OS yenyewe sio hata toleo la 1.0 bado.

Jaribio la pili: haja ya kuandika upya

Kwa hivyo nitatumia kugusa-770, CLI kwa kudhibiti kichapishi cha Brother P-Touch 770 ninachotumia kuchapisha lebo.
Ninachapisha maandiko mbalimbali juu yake, na unaweza kuwa tayari umeiona katika makala iliyotangulia. Hapo awali, niliandika programu ndogo ya kukunja GUI huko Python (kwa kuwa iko kwenye Gtk +, italazimika kuandikwa tena, na hii ni sababu nzuri ya kujifunza).

Siku yangu ya tano na Haiku: wacha tuweke programu fulani
Printa ya lebo ya Brother P-Touch 770. Je, itafanya kazi na Haiku?

Msimamizi wa kifurushi cha Haiku anajua juu ya maktaba na amri, kwa hivyo nikipata ujumbe wa "siwezi kupata libintl" wakati wa kukimbia. configure - Ninazindua tu pkgman install devel:libintl na kifurushi kinachohitajika kitapatikana. Vivyo hivyo pkgman install cmd:rsync. Naam, nk.

Isipokuwa wakati hii haifanyi kazi:

/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

Labda udev inategemea sana Linux na kwa hivyo haipo kwa Haiku. Inayomaanisha ninahitaji kuhariri msimbo wa chanzo ninajaribu kuunda.
Eh, huwezi kuruka juu ya kichwa chako, na sijui hata nianzie wapi.

Jaribio la tatu

Itakuwa nzuri kuwa na tmate kwa Haiku, basi ningeruhusu watengenezaji wa Haiku kuunganishwa kwenye kipindi changu cha mwisho - ikiwa kitu kitaenda vibaya. Maagizo ni rahisi sana:

./autogen.sh
./configure
make
make install

Inaonekana vizuri, kwa nini usijaribu kwenye 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

Katika hatua hii mimi kufungua HaikuDepot na kutafuta curses.
Kitu kilipatikana, ambacho kilinipa kidokezo kwa swali linalofaa zaidi:

/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

Tena nilikwenda HaikuDepot, na, bila shaka, nilipata devel:msgpack_c_cpp_devel. Majina haya ya ajabu ni nini?

/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

Katika hatua hii, niligundua kuwa kuhamisha programu kwa Haiku kunahitaji maarifa zaidi kuliko inavyohitajika kwa uundaji upya rahisi.
Nilizungumza na watengenezaji wa Haiku wa kirafiki, ilibainika kuwa kuna hitilafu kwenye msgpack, na baada ya dakika chache naona kiraka katika HaikuPorts. Ninaweza kuona kwa macho yangu jinsi kifurushi kilichosahihishwa kwenda hapa (buildslave - mashine virtual).

Siku yangu ya tano na Haiku: wacha tuweke programu fulani
Kuunda msgpack iliyosahihishwa kwenye buildmaster

Katikati ya nyakati mimi kutuma kiraka juu ya mkondo kuongeza msaada wa Haiku kwenye msgpack.

Dakika tano baadaye, msgpack iliyosasishwa tayari inapatikana katika 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.

Nzuri bila kutarajia. Nilisema hivyo?!

Ninarudi kwenye shida ya asili:

/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

Sasa inaonekana kama msgpack haina makosa. Ninatoa maoni IMAXLABEL Π² tty.c hivyo:

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

Matokeo:

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.

Kweli, hapa tunaenda tena ... Kwa njia:

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

Bwana. waddlesplash inakuambia wapi kuchimba:

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

Hapa nilichapisha config.log.

Walinieleza kuwa kuna kitu kingine katika libnetwork pamoja na libresolv kwenye Haiku. Inaonekana msimbo unahitaji kuhaririwa zaidi. Haja ya kufikiria…

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

Swali la milele: nini kinaendelea?

/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

Kitu kimoja, tu katika wasifu. Googled na kupatikana hii. Ukiongeza -lssp "wakati mwingine" husaidia, ninajaribu:

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

Lo! Inaanza! Lakini…

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

Nitajaribu kurekebisha faili hapa:

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

"Kitambulisho kibaya cha bandari" tayari ni kama kadi ya biashara haiku. Labda mtu ana wazo ni nini kibaya na jinsi ya kuirekebisha? Ikiwa ndivyo, nitasasisha makala. Unganisha kwa GitHub.

Inahamisha programu ya GUI kwa Qt.

Ninachagua programu rahisi ya QML.

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

Rahisi sana. Chini ya dakika moja!

Ufungaji wa programu katika hpkg kwa kutumia haikuporter na haikuports.

Nianze na nini? Hakuna hati rahisi, ninaenda kwa kituo cha #haiku kwenye irc.freenode.net na kusikia:

  • Timu package - njia ya chini ya kuunda vifurushi. Kwa sehemu kubwa, PackageInfo inamtosha, kama ilivyoelezwa katika sehemu ya "Kuifanya kuwa kifurushi sahihi cha .hpkg"
  • Ninahitaji kufanya kitu ni
  • Inaweza kutumia hpkg-muumba (inaanguka kwa ajili yangu, kuripoti makosa)

Haijulikani ni nini cha kufanya. Nadhani ninahitaji mwongozo wa wanaoanza mtindo wa Hello World, video bora. Itakuwa vyema pia kuwa na utangulizi unaofaa kwa HaikuPorter, kama inavyofanywa katika GNU hujambo.

Ninasoma yafuatayo:

haikuporter ni zana ya kuunda miradi ya kawaida ya kifurushi cha Haiku. Inatumia hazina ya HaikuPorts kama msingi wa vifurushi vyote. Mapishi ya Haikuporter hutumiwa kuunda vifurushi.

Kwa kuongeza, ninagundua kuwa:

Hakuna haja ya kuhifadhi mapishi katika hifadhi ya HaikuPorts. Unaweza kutengeneza hazina nyingine, weka mapishi ndani yake, na kisha uelekeze haikuporter kwake.

Ninachohitaji tu - ikiwa sio kutafuta njia ya kuachilia kifurushi hadharani. Lakini hii ni mada ya chapisho lingine.

Inasakinisha haikuporter na 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

Kuandika mapishi

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
}

Kukusanya mapishi

Ninahifadhi faili chini ya jina QtQuickApp-1.0.recipe, baada ya hapo nazindua aikuporter -S ./QuickApp-1.0.recipe. Utegemezi huangaliwa kwa vifurushi vyote kwenye ghala haikuports, ambayo inachukua muda. Nitaenda kuchukua kahawa.

Kwa nini ukaguzi huu ufanyike duniani kwenye mashine yangu ya karibu, na sio katikati ya seva mara moja kwa kila mtu?

Kwa mujibu wa Bw. waddlesplash:

Kwa hivyo unaweza kuandika tena faili yoyote kwenye hazina πŸ˜‰ Unaweza kuboresha hii kidogo, ukihesabu habari muhimu inapohitajika, kwa sababu mabadiliko ya mwisho yaliyofanywa ni nadra sana.

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

Inabadilika kuwa hakuna kitu kama faili ya mapishi ya kawaida ambayo ina msimbo wa chanzo wa programu yako. Unahitaji kuiweka kwenye hifadhi katika umbizo la HaikuPorts.

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

Ukweli huu hufanya mkutano kuwa mbaya zaidi. Siipendi haswa, lakini nadhani ni muhimu ili hatimaye programu zote huria zionekane katika HaikuPorts.

Napata yafuatayo:

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

Nini tatizo? Baada ya kusoma irc mimi hufanya:

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

Swali la kuvutia limetokea. Ikiwa nitaongeza cheki kwenye kichocheo - italingana na ahadi ya hivi karibuni ya git kwa ujumuishaji unaoendelea? (Msanidi programu anathibitisha: "Haitafanya kazi. Mapishi yameundwa kuwa thabiti.")

Kwa kufurahisha, ongeza kwenye mapishi:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Bado hujaridhika:

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

Anafanya nini? Baada ya yote, hii ni hazina ya git, nambari tayari iko moja kwa moja, hakuna kitu cha kufungua. Kwa maoni yangu, chombo kinapaswa kuwa na akili ya kutosha kutotafuta kiboreshaji ikiwa iko juu ya url ya GitHub.

Labda uri git:// itafanya kazi

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

Sasa inalalamika kama hii:

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

Hmm, kwa nini kila kitu ni ngumu sana, kwa nini huwezi "kufanya kazi tu"? Baada ya yote, sio kawaida kuunda kitu kutoka kwa GitHub. Ikiwa ni zana zinazofanya kazi mara moja, bila hitaji la kusanidi, au kama ninavyoiita "kubishana".

Labda itafanya kazi kama hii:

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

Hapana. Bado ninapata kosa hili la kushangaza na kufanya, kama ilivyoelezwa hapa

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

Ninasonga mbele kidogo, lakini kwa nini inanipigia kelele (GitHub si salama!) na bado ninajaribu kufungua kitu.

Kulingana na Bwana. waddlesplash:

Kweli, ndio, sababu ilikuwa hamu ya kuangalia uadilifu wa data iliyopokelewa kwa mkusanyiko. Moja ya chaguzi ni kuthibitisha ukaguzi wa kumbukumbu, lakini unaweza, bila shaka, faili za kibinafsi, ambazo hazitatekelezwa, kwa sababu. inachukua muda mrefu zaidi. Matokeo ya hii ni "kutokuwa na usalama" kwa git na VCS nyingine. Hii itawezekana kuwa hivyo kila wakati, kwani kuunda kumbukumbu kwenye GitHub ni rahisi sana na mara nyingi haraka. Kweli, katika siku zijazo, labda ujumbe wa makosa hautakuwa mkali sana ... (hatuunganishi tena mapishi kama haya katika 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

Kutokana na mazoea ya zamani, ninaenda kuwauliza watu wema kwenye chaneli ya #haiku kwenye mtandao wa irc.freenode.net. Na ningekuwa wapi bila wao? Baada ya wazo hilo, niligundua kuwa ninapaswa kutumia:

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

Sawa, ikawa wazi kile kinachofanya - inapakua kumbukumbu na msimbo wa chanzo wa marekebisho fulani. Ni kijinga, kutoka kwa mtazamo wangu, na sio hasa nilitaka, yaani, kupakua marekebisho ya hivi karibuni kutoka kwa tawi kuu.

Mmoja wa watengenezaji alielezea hivi:

Tuna CI yetu wenyewe, kwa hivyo kila kitu kitakachowekwa kwenye hazina ya haikuports kitawekwa kwa ajili ya watumiaji wote, na hatutaki kuhatarisha kukusanya na kuwasilisha "kila kitu katika toleo jipya zaidi la mkondo."

Inaeleweka! Kwa hali yoyote, hii ndio ilifanyika:

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

Inarudia tangazo hili bila kikomo. Inaonekana hili ni kosa (kuna programu? Sikuweza kuipata).

Π‘ haikuporter na hazina haikuports Haina hisia ya "kazi tu" kwake, lakini kama msanidi programu, kuna baadhi ya mambo ninayopenda kuhusu kufanya kazi na Haiku. Kwa sehemu kubwa, ni sawa na Huduma ya Open Build, seti ya zana za kujenga Linux hujenga: yenye nguvu sana, na mbinu ya utaratibu, lakini inazidi kwa programu yangu ndogo ya "hello world".

Tena, kwa mujibu wa Bw. waddlesplash:

Hakika, HaikuPorter ni kali kabisa kwa chaguo-msingi (pamoja na kuna hali ya lint na hali ngumu ya kuifanya iwe kali zaidi!), Lakini kwa sababu tu inaunda vifurushi ambavyo vitafanya kazi, badala ya kuunda vifurushi tu. Ndio maana analalamika juu ya utegemezi ambao haujatangazwa, maktaba ambazo hazijaingizwa ipasavyo, matoleo yasiyo sahihi, nk. Lengo ni kukamata matatizo yoyote na yote, ikiwa ni pamoja na yale ya baadaye, kabla ya mtumiaji kujua kuhusu hilo (hii ndiyo sababu haikuwezekana kusakinisha avrdude, kwa sababu utegemezi ulibainishwa katika mapishi). Maktaba sio tu vifurushi vya mtu binafsi au hata matoleo maalum ya SO. HaikuPorter inahakikisha kwamba yote haya yanazingatiwa katika mapishi yenyewe ili kuepuka makosa wakati wa utekelezaji.

Kimsingi, kiwango hiki cha ukali kinahesabiwa haki wakati wa kuunda mfumo wa uendeshaji, lakini inaonekana kwangu sio lazima kwa programu ya "hello world". Niliamua kujaribu kitu kingine.

Kuunda programu katika umbizo la hpkg kwa kutumia amri ya "unda kifurushi".

Labda, hii Maagizo rahisi yatafanya kazi vizuri kwangu?

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

Haraka bila kutarajiwa, rahisi bila kutarajiwa, ufanisi bila kutarajiwa. Hasa jinsi ninavyoipenda, ya kushangaza!

Ufungaji - nini na wapi?

Umehamisha faili ya QtQuickApp.hpkg hadi ~/config/packageskwa kutumia meneja wa faili, baada ya hapo QtQuickApp ilionekana kichawi ndani ~/config/apps.
Tena, haraka bila kutarajia, rahisi na yenye ufanisi. Kushangaza, ajabu!

Lakini ... (tungekuwa wapi bila wao!)

Programu bado haipo kwenye orodha ya menyu ya programu na QuickLaunch. Nadhani tayari najua jinsi ya kuirekebisha. Katika meneja wa faili ninahamisha QtQuickApp.hpkg kutoka ~/config/packages hadi /system/packages.

Hapana, bado haipo. Inavyoonekana, mimi (vizuri, na maagizo) nilikosa kitu.

Baada ya kuangalia kichupo cha "Yaliyomo" katika HaikuDepot kwa programu zingine, niliona kuwa kuna faili kama /data/mimedb/application/x-vnd... cha ajabu zaidi ni /data/deskbar/menu/Applications/….

Naam, niweke nini hapo? Njoo...

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

Nina hakika kabisa kwamba hila hii itafanya kazi, lakini maswali yanabaki: kwa nini hii ni muhimu, ni kwa nini? Nadhani hii inaharibu maoni ya jumla kwamba mfumo ni wa kisasa sana.

Kama alivyoeleza Bw. waddlesplash:

Wakati mwingine kuna programu ambazo programu zingine zinahitaji lakini haziko kwenye menyu. Kwa mfano, LegacyPackageInstaller katika picha ya skrini yako, inachakata kumbukumbu za .pkg katika umbizo la BeOS. Ningependa watumiaji kuzisakinisha, lakini uwepo wao kwenye menyu utasababisha kuchanganyikiwa.

Kwa sababu fulani inaonekana kwangu kuwa kuna suluhisho rahisi zaidi, kwa mfano Hidden=true katika faili .desktop kwenye Linux. Kwa nini usifanye habari "iliyofichwa" kuwa rasilimali na sifa ya mfumo wa faili?

Kile ambacho sio hila ni jina la (baadhi) ya programu inayoonyesha menyu, deskbar, imefungwa kwa ukali njiani.

Bwana. waddlesplash anaelezea hivi:

"Upau wa eneo-kazi" katika kesi hii inapaswa kueleweka kama aina ya neno la jumla (kwa njia sawa na "bar ya kazi", ambayo inahusu utumizi wa Windows na dhana ya jumla). Naam, tangu hii deskbar, si "Deskbar", hii pia inaweza kueleweka kwa njia sawa.

Siku yangu ya tano na Haiku: wacha tuweke programu fulani
2 saraka "zinazokaribia kufanana" zilizo na programu ndani yake

Kwa nini kuna saraka 2 zilizo na programu, na pia kwa nini Ombi langu la QtQuick liko katika moja, lakini sio kwa lingine? (Baada ya yote, hii sio mfumo mmoja, lakini mtumiaji wa pili, ambayo inaweza kueleweka kwangu kibinafsi).
Nimechanganyikiwa sana na nadhani hii inapaswa kuunganishwa.

maoni ya Bw. waddlesplash

Katalogi ya Programu ina programu ambazo hazihitajiki kwenye menyu. Lakini hali iliyo na menyu kweli inahitaji kuboreshwa, ili kuifanya iweze kubinafsishwa zaidi.

Maombi, au haitafanyika πŸ˜‰

Nilijiuliza: ni muhimu kweli kukaribisha maombi ndani /system/apps, ikiwa watumiaji wanaziona hapo, haifai. Labda itakuwa bora kuziweka mahali pengine ambapo mtumiaji hatakutana nazo? Kama vile inafanywa katika Mac OS X, ambapo yaliyomo kwenye vifurushi .app, ambayo haipaswi kuonekana kwa mtumiaji katika /Applications, kujificha katika kina cha /System/Library/β€¦β€œ`.

Vipi kuhusu utegemezi?

Nadhani inafaa kutaja utegemezi kwa njia fulani, sawa? Je, Qt inaweza kuchukuliwa kuwa sehemu ya lazima ya usakinishaji wa Haiku kwa chaguo-msingi? Hapana! Qt haijasakinishwa kwa chaguo-msingi. Mjenzi wa kifurushi anaweza kugundua utegemezi kiotomatiki kwa kuangalia faili za ELF? Niliambiwa kwamba HaikuPorter kweli hufanya hivi, lakini package Hapana. Hiyo ni kwa sababu ni "mjenzi wa kifurushi" ambaye huunda faili peke yake hpkg.

Je, Haiku inapaswa kufanywa kuwa ya kisasa zaidi kwa kuongeza sera kwamba kifurushi haipaswi kuwa na tegemezi kwenye vifurushi nje ya Haiku? haikuports? (Ningependa, kwa sababu sera kama hiyo ingerahisisha mambo - mfumo utaweza kusuluhisha kiotomatiki utegemezi wa kila kifurushi kilichopakuliwa kutoka mahali popote, bila kutatanisha na vyanzo vya ziada vya kifurushi.)

Bwana. waddlesplash anaelezea:

Hatungependa kupunguza uhuru wa wasanidi programu sana, kwa sababu ni dhahiri kwamba kama CompanyX inataka kuunga mkono seti yake ya programu na vitegemezi (na kwa hivyo hazina), itafanya hivyo kwa uhuru kabisa.

Katika hali hiyo, inaweza kufaa kupendekeza kwamba vifurushi vya wahusika wengine viepuke utegemezi wa kitu chochote ambacho hakijajumuishwa kwenye bandari za haiku kwa kufunga kabisa kila kitu kinachohitajika na programu. Lakini nadhani hii ni mada ya makala yajayo katika mfululizo huu. [Je, mwandishi anaelekea AppImage? - takriban. mtafsiri]

Inaongeza ikoni ya programu

Je, ikiwa ninataka kuongeza aikoni moja nadhifu iliyojengewa ndani kwenye rasilimali za programu yangu mpya iliyoundwa? Inatokea kwamba hii ni mada ya kushangaza, hivyo itakuwa msingi wa makala inayofuata.

Jinsi ya kupanga ujenzi wa programu endelevu?

Hebu fikiria mradi kama Inkscape (ndio, ninajua kuwa bado haupatikani katika Haiku, lakini ni rahisi kuonyesha juu yake). Wana hazina ya msimbo wa chanzo https://gitlab.com/inkscape/inkscape.
Kila wakati mtu anafanya mabadiliko yao kwenye hazina, mabomba ya ujenzi yanazinduliwa, baada ya hapo mabadiliko hujaribiwa kiotomatiki, kujengwa, na programu kusakinishwa katika vifurushi mbalimbali, ikiwa ni pamoja na AppImage kwa ajili ya Linux (kifurushi cha programu pekee ambacho kinaweza kupakuliwa kwa majaribio ya ndani bila kujali. ni nini kinachoweza kusakinishwa au kutosakinishwa kwenye mfumo [Nilijua! - takriban. mtafsiri]) Kitu kimoja kinatokea kwa kila ombi la kuunganisha tawi, ili uweze kupakua programu iliyojengwa kutoka kwa msimbo uliopendekezwa katika ombi la kuunganisha kabla ya kuunganishwa.

Siku yangu ya tano na Haiku: wacha tuweke programu fulani
Unganisha maombi na hali za ujenzi na uwezo wa kupakua jozi zilizokusanywa ikiwa muundo umefaulu (iliyowekwa alama ya kijani)

Jengo linaendesha kwenye vyombo vya Docker. GitLab inatoa wakimbiaji wa bure kwenye Linux, na nadhani inaweza kujumuisha wakimbiaji wako mwenyewe (kwa njia, sioni jinsi hii ingefanya kazi kwa mifumo kama Haiku, ambayo najua haina Docker au sawa, lakini pia kwa FreeBSD hakuna Docker, kwa hivyo shida hii sio ya Haiku pekee).

Kwa hakika, programu za Haiku zinaweza kujengwa ndani ya chombo cha Docker cha Linux. Katika hali hii, mkutano wa Haiku unaweza kuletwa kwenye mabomba yaliyopo. Je, kuna wakusanyaji msalaba? Au niige Haiku yote ndani ya kontena ya Docker kwa kutumia kitu kama QEMU/KVM (ikizingatiwa itafanya kazi kwa njia hiyo ndani ya Docker)? Kwa njia, miradi mingi hutumia kanuni zinazofanana. Kwa mfano, Scribus hufanya hivi - tayari inapatikana kwa Haiku. Siku moja itakuja ambapo naweza kutuma vile Vuta maombi kwa miradi mingine ili kuongeza usaidizi wa Haiku.

Mmoja wa watengenezaji anaelezea:

Kwa miradi mingine inayotaka kuunda vifurushi yenyewe, njia ya kawaida ya CMake/CPack inatumika. Mifumo mingine ya ujenzi inaweza kuungwa mkono kwa kupiga simu mpango wa ujenzi wa kifurushi moja kwa moja, ambayo ni sawa ikiwa watu wanavutiwa nayo. Uzoefu unaonyesha: hadi sasa hajapendezwa sana, kwa hivyo haikuporter ilifanya kazi kwa urahisi kwetu, lakini, mwishowe, njia zote mbili zinapaswa kufanya kazi pamoja. Tunapaswa kuanzisha seti ya zana za programu-tofauti za ujenzi kutoka Linux au mfumo wowote wa uendeshaji wa seva (Haiku haijaundwa kuendeshwa kwenye seva).

Ninatoa shangwe iliyosimama. Watumiaji wa Linux wa kawaida hubeba mzigo huu wote wa ziada na mizigo ya ziada (usalama, udhibiti mkali, nk) ambayo ni muhimu kwa mfumo wa uendeshaji wa seva, lakini si kwa mtu binafsi. Kwa hivyo ninakubali kabisa kuwa na uwezo wa kuunda programu za Haiku kwenye Linux ndio njia ya kwenda.

Hitimisho

Kuhamisha programu za POSIX kwa Haiku kunawezekana, lakini kunaweza kuwa ghali zaidi kuliko ujenzi wa kawaida. Bila shaka ningekwama na hili kwa muda mrefu kama isingekuwa msaada wa watu kutoka kituo cha #haiku kwenye mtandao wa irc.freenode.net. Lakini hata wao hawakuona mara moja kilichokuwa kibaya.

Programu zilizoandikwa kwa Qt ni ubaguzi rahisi. Niliweka pamoja ombi rahisi la onyesho bila shida yoyote.

Kuunda kifurushi kwa programu rahisi pia ni rahisi sana, lakini tu kwa wale "walioachiliwa kwa jadi", i.e. kuwa na kumbukumbu za msimbo wa chanzo zilizotolewa zilizokusudiwa kutumika katika haikuports. Kwa ujenzi unaoendelea (kujenga kwa kila ahadi ya mabadiliko) na GitHub, kila kitu kinaonekana kuwa sio rahisi sana. Hapa Haiku anahisi zaidi kama usambazaji wa Linux kuliko matokeo kwenye Mac, ambapo unapobofya kitufe cha "Jenga" kwenye XCode unapata kifurushi. .app, tayari kuingizwa kwenye picha ya diski .dmg, iliyotayarishwa kwa kupakuliwa kwenye tovuti yangu.
Uundaji endelevu wa programu kulingana na mfumo wa uendeshaji wa "seva", kwa mfano, Linux, uwezekano mkubwa utawezekana ikiwa kuna mahitaji kutoka kwa watengenezaji, lakini kwa sasa mradi wa Haiku una kazi zingine zinazosisitiza zaidi.

Jaribu mwenyewe! Baada ya yote, mradi wa Haiku hutoa picha za booting kutoka kwa DVD au USB, zinazozalishwa kila siku. Ili kufunga, pakua tu picha na uandike kwenye gari la flash kwa kutumia Mchezaji

Je, una maswali yoyote? Tunakualika kwa wanaozungumza Kirusi kituo cha telegram.

Muhtasari wa makosa: Jinsi ya kujipiga risasi kwenye mguu katika C na C ++. Mkusanyiko wa mapishi ya Haiku OS

Kutoka mwandishi tafsiri: hii ni makala ya tano katika mfululizo kuhusu Haiku.

Orodha ya makala: Kwanza Ya pili Tatu Nne

Chanzo: mapenzi.com

Kuongeza maoni