Ang akong ikalimang adlaw uban sa Haiku: atong i-port ang pipila ka mga programa

Ang akong ikalimang adlaw uban sa Haiku: atong i-port ang pipila ka mga programa

TL; DR: Usa ka bag-o nga nakakita sa Haiku sa unang higayon, naningkamot sa pag-port sa pipila ka mga programa gikan sa kalibutan sa Linux.

Ang akong ikalimang adlaw uban sa Haiku: atong i-port ang pipila ka mga programa
Ang akong unang Haiku ported nga programa, giputos sa hpkg format niini

Dili pa dugay Nadiskobrehan nako ang Haiku, usa ka katingad-an nga maayo nga operating system alang sa mga PC.
Karon makakat-on ko kung unsaon pag-port ang mga bag-ong programa sa kini nga operating system. Ang nag-unang focus mao ang usa ka paghulagway sa unang kasinatian sa pagbalhin ngadto sa Haiku gikan sa punto sa panglantaw sa usa ka Linux developer. Nangayo kog pasaylo sa bisan unsang binuang nga mga kasaypanan nga akong nahimo sa dalan, tungod kay wala pa gani usa ka semana sukad sa una nakong pag-download sa Haiku.

Gusto nakong makab-ot ang tulo ka tumong:

  • Pagdala usa ka yano nga aplikasyon sa CLI
  • Pagdala ug aplikasyon gikan sa GUI ngadto sa Qt
  • Dayon i-package kini sa hpkg format (tungod kay naghunahuna pa ko bahin sa pagpahiangay sa AppDir ug AppImage para sa Haiku...)

Magsugod na ta. Sa mga seksyon dokumentasyon и pag-uswagingon man wiki gikan sa HaikuPorts nakit-an nako ang husto nga direksyon. Adunay bisan usa ka online nga libro sa PDF BeOS: Pagdala ug Unix Application.
467 mga panid - ug kini gikan sa 1997! Makahadlok tan-awon sa sulod, apan nanghinaut ko nga ang labing maayo. Ang mga pulong sa developer makapadasig: "kini dugay nga panahon tungod kay ang BeOS dili POSIX-compliant," apan Haiku "sa kadaghanan nga bahin" ingon na.

Pag-port sa usa ka yano nga aplikasyon sa CLI

Ang una nga gihunahuna mao ang pag-port sa aplikasyon avrdude, apan, ingon nga kini nahimo, kini na nahimo dugay na.

Unang pagsulay: walay tan-awon

Ang dili nako masabtan mao na Ang mga app gi-port na sa Haiku sa sobra sa 10 ka tuig - bisan pa sa kamatuoran nga ang OS mismo dili pa nga bersyon 1.0.

Ikaduha nga pagsulay: kinahanglan nga isulat pag-usab

So akong gamiton tap-770, CLI para sa pagkontrolar sa Brother P-Touch 770 printer nga akong gigamit sa pag-imprinta og mga label.
Nag-imprenta kog lainlaing mga label niini, ug tingali nakita na nimo kini sa miaging artikulo. Sa sayo pa, nagsulat ako usa ka gamay nga programa sa pagputos sa GUI sa Python (tungod kay naa kini sa Gtk +, kinahanglan kini isulat pag-usab, ug kini usa ka maayong hinungdan sa pagkat-on).

Ang akong ikalimang adlaw uban sa Haiku: atong i-port ang pipila ka mga programa
Igsoong P-Touch 770 label nga tig-imprenta Mogana ba kini sa Haiku?

Ang tagdumala sa pakete sa Haiku nahibal-an bahin sa mga librarya ug mga mando, busa kung makakuha ako usa ka mensahe nga "dili makit-an ang libintl" kung nagdagan configure - Bag-o lang ko maglansad pkgman install devel:libintl ug ang gikinahanglan nga pakete makit-an. Ingon usab pkgman install cmd:rsync. Aw, ug uban pa.

Gawas kon kini dili molihok:

/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

Tingali ang udev kay base sa Linux ug busa wala na para sa Haiku. Nga nagpasabut nga kinahanglan nako i-edit ang source code nga akong gisulayan pag-compile.
Eh, dili ka makaambak sa imong ulo, ug wala ko kahibalo kung asa magsugod.

Ikatulo nga pagsulay

Nindot unta tmate para sa Haiku, unya akong tugotan ang mga developer sa Haiku nga makonektar sa akong terminal session - kung adunay mahitabo nga sayup. Ang mga panudlo yano ra:

./autogen.sh
./configure
make
make install

Nindot tan-awon, busa nganong dili sulayan kini sa 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

Niini nga lakang akong giablihan ang HaikuDepot ug pangitaon curses.
Adunay nakit-an, nga naghatag kanako usa ka timaan alang sa usa ka labi ka takus nga pangutana:

/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

Miadto na usab ako sa HaikuDepot, ug, siyempre, nakit-an devel:msgpack_c_cpp_devel. Unsa kining talagsaon nga mga ngalan?

/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

Niini nga lakang, akong naamgohan nga ang pag-port sa usa ka programa ngadto sa Haiku nanginahanglan ug daghang kahibalo kaysa gikinahanglan alang sa usa ka yano nga pagtukod pag-usab.
Nakigsulti ko sa mahigalaon nga mga developer sa Haiku, kini nahimo nga adunay bug sa msgpack, ug pagkahuman sa pipila ka minuto nakakita ako usa ka patch sa HaikuPorts. Nakita nako sa akong kaugalingon nga mga mata kung giunsa ang gitul-id nga pakete moadto dinhi (buildslave - mga virtual nga makina).

Ang akong ikalimang adlaw uban sa Haiku: atong i-port ang pipila ka mga programa
Pagtukod sa gitul-id nga msgpack sa buildmaster

Sa tunga-tunga sa mga panahon nagpadala ako og usa ka patch sa upstream aron idugang ang suporta sa Haiku sa msgpack.

Paglabay sa lima ka minuto, ang updated nga msgpack anaa na sa 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.

Sa wala damha maayo. Mao na akong giingon?!

Mibalik ko sa orihinal nga problema:

/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

Karon morag wala’y sala ang msgpack. nag comment ko IMAXLABEL в tty.c busa:

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

Resulta:

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.

Aw, ania na usab kita... By the way:

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

si mr. waddlesplash nagsulti kanimo kung asa ka magkalot:

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

Dinhi nako gi-post config.log.

Gipasabot nila kanako nga adunay laing butang sa libnetwork dugang sa libresolv sa Haiku. Dayag nga ang code kinahanglan nga i-edit pa. Kinahanglang hunahunaon…

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

Ang walay katapusan nga pangutana: unsa ang nahitabo?

/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

Ang parehas nga butang, sa profile ra. Googled ug nakit-an kini. Kung modugang ka -lssp Ang "usahay" makatabang, sulayan nako:

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

Wow! Nagsugod na! Apan…

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

Try ko nga i-debug file dinhi:

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

Ang "Bad port ID" sama na sa usa ka business card haiku. Tingali adunay usa nga adunay ideya kung unsa ang sayup ug kung giunsa kini pag-ayo? Kon mao, akong i-update ang artikulo. Link sa GitHub.

Pag-port sa GUI nga aplikasyon sa Qt.

Gipili nako ang usa ka yano nga aplikasyon sa 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!

Simple ra gyud. Wala pay usa ka minuto!

Packaging aplikasyon sa hpkg gamit haikuporter ug haikuports.

Unsa ang akong sugdan? Walay yano nga dokumentasyon, moadto ko sa #haiku channel sa irc.freenode.net ug makadungog:

  • team package - usa ka ubos nga lebel nga paagi sa paghimo og mga pakete. Sa kadaghanan nga bahin, ang PackageInfo igo na alang kaniya, ingon nga gihulagway sa seksyon nga "Paghimo niini nga usa ka tukma nga .hpkg nga pakete"
  • Kinahanglan kong buhaton ang usa ka butang ingon niana
  • Mahimo magamit hpkg-magbubuhat (kini nahagsa alang kanako, pagreport sa sayup)

Dili klaro kung unsa ang buhaton. Tingali kinahanglan nako ang giya sa pagsugod sa estilo sa Hello World, labing maayo usa ka video. Maayo nga adunay usa ka sayon ​​​​nga pagpaila sa HaikuPorter, sama sa gibuhat sa GNU hello.

Akong gibasa ang mosunod:

haikuporter usa ka himan alang sa paghimo sa kasagarang mga proyekto sa pakete alang sa Haiku. Gigamit niini ang repositoryo sa HaikuPorts isip base sa tanang pakete. Ang mga resipe sa Haikuporter gigamit sa paghimo og mga pakete.

Dugang pa, nahibal-an nako nga:

Dili kinahanglan nga tipigan ang mga resipe sa pagtipig sa HaikuPorts. Makahimo ka og laing repositoryo, ibutang ang mga resipe niini, ug dayon itudlo ang haikuporter niini.

Ang kinahanglan nako - kung dili mangita usa ka paagi aron mapagawas sa publiko ang package. Apan kini usa ka hilisgutan alang sa laing post.

Pag-instalar sa haikuporter ug 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

Pagsulat og resipe

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
}

Pagtipon sa resipe

Gitipigan nako ang file ubos sa ngalan QtQuickApp-1.0.recipe, pagkahuman gilusad nako aikuporter -S ./QuickApp-1.0.recipe. Ang mga dependency gisusi alang sa tanan nga mga pakete sa repositoryo haikuports, nga nagkinahanglan og pipila ka panahon. Mokuha kog kape.

Ngano nga sa yuta kinahanglan nga kini nga pagsusi himuon sa akong lokal nga makina, ug dili sa sentro sa server kausa alang sa tanan?

Matud ni mr. waddlesplash:

Sa ingon nga mahimo nimong isulat pag-usab ang bisan unsang file sa repository 😉 Mahimo nimo nga ma-optimize kini nga gamay, pagkalkula sa kinahanglan nga kasayuran kung kinahanglan, tungod kay ang katapusan nga mga pagbag-o nga nahimo talagsa ra.

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

Kini nahimo nga walay butang sama sa usa ka regular nga file sa resipe nga naglangkob sa source code sa imong aplikasyon. Kinahanglan nimo kini ibutang sa usa ka repository sa format nga HaikuPorts.

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

Kini nga kamatuoran naghimo sa asembliya nga mas hago. Dili ko ganahan niini, apan sa akong hunahuna kini gikinahanglan aron sa katapusan ang tanan nga open source software makita sa HaikuPorts.

Nakuha nako ang mosunod:

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

Unsa may problema? Human sa pagbasa sa irc akong gibuhat:

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

Usa ka makapaikag nga pangutana ang mitungha. Kung magdugang ko og checksum sa resipe - mohaum ba kini sa pinakabag-o nga git commit alang sa padayon nga panagsama? (Gikumpirma sa developer: "Dili kini molihok. Ang mga resipe gidisenyo nga medyo lig-on.")

Alang sa kalingawan, idugang sa resipe:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

Wala gihapon matagbaw:

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

Unsa iyang gibuhat? Human sa tanan, kini usa ka git repository, ang code anaa na direkta, walay bisan unsa nga i-unpack. Gikan sa akong panglantaw, ang himan kinahanglan nga maalamon nga dili mangita alang sa usa ka unpacker kon kini labaw sa GitHub url.

Tingali ang uri git: // magamit

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

Karon kini nagreklamo sama niini:

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

Hmm, nganong komplikado kaayo ang tanan, nganong dili ka "magtrabaho"? Sa tinuud, dili kaayo kasagaran ang paghimo usa ka butang gikan sa GitHub. Kung kini ba nga mga himan nga molihok dayon, nga wala kinahanglana ang pag-setup, o ingon nga gitawag nako kini nga "pagsamok".

Tingali kini molihok sama niini:

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

Dili. Nakuha ko gihapon kini nga katingad-an nga sayup ug gibuhat, ingon sa gihulagway dinhi

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

Naglihok ako sa usa ka gamay nga unahan, apan nganong kini nagsinggit kanako (GitHub dili luwas!) Ug naningkamot gihapon sa pag-unpack sa usa ka butang.

Sumala sa si mr. waddlesplash:

Aw, oo, ang hinungdan mao ang tinguha nga susihon ang integridad sa datos nga nadawat alang sa asembliya. Usa sa mga kapilian mao ang pag-verify sa checksum sa archive, apan mahimo nimo, siyempre, hash ang indibidwal nga mga file, nga dili ipatuman, tungod kay mas dugay pa. Ang sangputanan niini mao ang "insecurity" sa git ug uban pang VCS. Kini lagmit kanunay nga mahitabo, tungod kay ang paghimo og archive sa GitHub sayon ​​​​ra ug kasagaran mas paspas. Aw, sa umaabot, tingali ang mensahe sa sayup dili kaayo mahayag ... (wala na namo i-merge ang maong mga resipe sa 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

Tungod sa karaan nga batasan, mangutana ko sa maayong mga tawo sa channel sa #haiku sa irc.freenode.net network. Ug asa ko kung wala sila? Human sa pahibalo, nakaamgo ko nga kinahanglan nakong gamiton:

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

Okay, nahimong klaro kung unsa ang gibuhat niini - nag-download kini sa usa ka archive nga adunay source code sa usa ka piho nga rebisyon. Kini hungog, gikan sa akong panan-aw, ug dili eksakto kung unsa ang gusto nako, nga mao, ang pag-download sa labing bag-ong rebisyon gikan sa master branch.

Usa sa mga nag-develop nagpatin-aw niini niining paagiha:

Kami adunay kaugalingon nga CI, mao nga ang tanan nga gibutang sa haikuports repository i-package alang sa tanan nga mga tiggamit, ug dili namon gusto nga peligro ang pagkolekta ug paghatud sa "tanan sa pinakabag-o nga bersyon sa ibabaw."

Nakasabot! Sa bisan unsa nga kaso, kini ang nahitabo:

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

Gisubli kini nga ad infinitum. Dayag nga kini usa ka sayup (naa bay aplikasyon? Dili nako kini makit-an).

С haikuporter ug repositoryo haikuports Wala kini gibati nga "nagtrabaho lang", apan isip usa ka developer, adunay pipila ka mga butang nga gusto nako bahin sa pagtrabaho kauban ang Haiku. Sa kasagaran, susama kini sa Open Build Service, usa ka hugpong sa mga himan alang sa pagtukod sa Linux: hilabihan ka gamhanan, nga adunay sistematikong pamaagi, apan sobra ka daghan alang sa akong gamay nga "hello world" nga aplikasyon.

Pag-usab, sumala ni mr. waddlesplash:

Sa tinuud, ang HaikuPorter medyo estrikto pinaagi sa default (dugang adunay usa ka lint mode ingon man usa ka estrikto nga mode aron mahimo kini nga labi ka estrikto!), Apan tungod kay kini nagmugna og mga pakete nga molihok, imbes nga maghimo lamang og mga pakete. Mao nga nagreklamo siya bahin sa wala gipahayag nga mga dependency, mga librarya nga wala gi-import sa husto, dili husto nga mga bersyon, ug uban pa. Ang tumong mao ang pagdakop sa bisan unsa ug sa tanan nga mga problema, lakip na ang umaabot, sa wala pa mahibal-an sa user ang bahin niini (mao kini ang hinungdan nga dili mahimo ang pag-install sa avrdude, tungod kay ang dependency sa tinuud gipiho sa resipe). Ang mga librarya dili lang mga indibidwal nga pakete o bisan sa piho nga mga bersyon sa SO. Gisiguro sa HaikuPorter nga kining tanan naobserbahan sa mga resipe mismo aron malikayan ang mga sayup sa panahon sa pagpatuman.

Sa prinsipyo, kini nga lebel sa kalig-on gipakamatarung sa paghimo sa usa ka operating system, apan kini daw dili kinahanglan alang kanako alang sa usa ka "hello world" nga aplikasyon. Nakahukom ko nga mosulay og lain.

Pagtukod og mga aplikasyon sa hpkg format gamit ang "package create" nga sugo

Mahimong, kini Ang yano nga mga panudlo ba mas maayo alang kanako?

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

Wala damha nga paspas, wala damha nga yano, wala damha nga epektibo. Eksakto kung unsa ang gusto nako, katingalahan!

Pag-instalar - unsa ug asa?

Gibalhin ang QtQuickApp.hpkg file sa ~/config/packagesgamit ang usa ka file manager, pagkahuman ang QtQuickApp mahika nga nagpakita ~/config/apps.
Pag-usab, wala damha nga paspas, yano ug epektibo. Talagsaon, dili katuohan!

Pero... (asa man ta kung wala sila!)

Ang app wala gihapon gikan sa listahan sa menu sa apps ug QuickLaunch. Sa akong hunahuna nahibal-an na nako kung giunsa kini pag-ayo. Sa file manager akong gibalhin ang QtQuickApp.hpkg gikan sa ~/config/packages ngadto sa /system/packages.

Wala, kulang pa. Dayag, ako (maayo, ug ang mga instruksyon) nasipyat sa usa ka butang.

Sa pagtan-aw sa tab nga "Contents" sa HaikuDepot para sa ubang mga aplikasyon, nakita nako nga adunay mga file sama sa /data/mimedb/application/x-vnd... ang mas talagsaon mao /data/deskbar/menu/Applications/….

Aw, unsay akong ibutang didto? Sige na nga...

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

Sigurado ako nga kini nga limbong molihok, apan ang mga pangutana nagpabilin: ngano nga kinahanglan kini, para sa unsa kini? Sa akong hunahuna kini makaguba sa kinatibuk-ang impresyon nga ang sistema sopistikado kaayo.

Sa gipasabot ni Mr. waddlesplash:

Usahay adunay mga aplikasyon nga gikinahanglan sa ubang mga aplikasyon apan wala sa menu. Pananglitan, ang LegacyPackageInstaller sa imong screenshot, nagproseso sa .pkg nga mga archive sa BeOS nga format. Gusto nako nga i-install kini sa mga tiggamit, apan ang ilang presensya sa menu magdala sa kalibog.

Alang sa pipila ka rason morag para nako adunay mas simple nga solusyon, pananglitan Hidden=true sa mga file .desktop sa Linux. Ngano nga dili himuon ang "tinago" nga kasayuran nga usa ka kapanguhaan ug hiyas sa file system?

Ang labi nga dili maliputon mao ang ngalan sa (pipila ka) aplikasyon nga nagpakita sa menu, deskbar, hugot nga gihigot sa dalan.

si mr. Waddlesplash nagpatin-aw niini:

Ang "Deskbar" sa kini nga kaso kinahanglan sabton ingon usa ka klase sa kinatibuk-ang termino (sa parehas nga paagi sa "taskbar", nga nagtumong sa aplikasyon sa Windows ug sa kinatibuk-ang konsepto). Aw, sukad niini deskbar, dili "Deskbar", masabtan usab kini sa susamang paagi.

Ang akong ikalimang adlaw uban sa Haiku: atong i-port ang pipila ka mga programa
2 "halos parehas" nga mga direktoryo nga adunay mga aplikasyon sa kanila

Ngano nga adunay 2 nga mga direktoryo nga adunay mga aplikasyon, ug usab ngano nga ang akong QtQuickApplication sa usa, apan dili sa lain? (Human sa tanan, dili kini usa ka sistema, apan usa ka ikaduha nga tiggamit, nga masabtan nako sa personal).
Naglibog gyud ko ug sa akong hunahuna kini kinahanglan nga mahiusa.

komento ni mr. waddlesplash

Ang katalogo sa Apps adunay mga aplikasyon nga wala kinahanglana sa menu. Apan ang sitwasyon sa menu kinahanglan gayud nga pauswagon, aron mahimo kini nga mas mapasibo.

Aplikasyon, o dili kini mahitabo 😉

Naghunahuna ko: kinahanglan ba gyud nga mag-host sa mga aplikasyon /system/apps, kung ang mga tiggamit makakita kanila didto, kini dili gusto. Tingali mas maayo nga ibutang kini sa laing lugar diin ang tiggamit dili makasugat kanila? Sama sa gibuhat sa Mac OS X, diin ang mga sulud sa mga pakete .app, nga dili makita sa tiggamit sa /Applications, nagtago sa kahiladman sa /System/Library/…“`.

Unsa ang mahitungod sa dependencies?

Sa akong hunahuna kini angay nga ipiho ang mga dependency sa usa ka paagi, dili ba? Mahimo bang isipon ang Qt nga usa ka mandatory nga bahin sa pag-instalar sa Haiku pinaagi sa default? Dili! Ang Qt wala ma-install pinaagi sa default. Mahimo ba nga awtomatik nga makit-an sa usa ka tigtukod sa pakete ang mga dependency pinaagi sa pagsusi sa mga file sa ELF? Gisultihan ko nga gibuhat kini sa HaikuPorter, apan package Dili. Kana tungod kay kini usa lamang ka "package builder" nga nagmugna lang og mga file sa iyang kaugalingon hpkg.

Kinahanglan ba nga himoong mas sopistikado ang Haiku pinaagi sa pagdugang og polisiya nga ang usa ka pakete kinahanglan nga walay mga dependency sa mga pakete sa gawas sa Haiku? haikuports? (Gusto ko, tungod kay ang ingon nga palisiya makapadali sa mga butang - ang sistema mahimo’g awtomatiko nga masulbad ang mga dependency sa matag pakete nga gi-download gikan sa bisan diin, nga wala magsamok sa mga dugang nga gigikanan sa pakete.)

si mr. waddlesplash mipasabut:

Dili namo gusto nga limitahan pag-ayo ang kagawasan sa mga nag-develop, tungod kay klaro nga kung gusto sa CompanyX nga suportahan ang kaugalingon nga set sa software nga adunay mga dependency (ug busa usa ka repository), buhaton kini nga libre nga libre.

Niana nga kaso, mahimong angay nga irekomendar nga ang mga third-party nga mga pakete maglikay sa mga dependency sa bisan unsa nga wala maapil sa haikuports pinaagi sa hingpit nga pagputos sa tanan nga gikinahanglan sa aplikasyon. Apan sa akong hunahuna kini usa ka hilisgutan alang sa umaabot nga artikulo niini nga serye. [Ang tagsulat ba padulong sa AppImage? — gibanabana. tighubad]

Pagdugang og icon sa aplikasyon

Unsa kaha kung gusto nako nga idugang ang usa sa hapsay nga built-in nga mga icon sa mga kapanguhaan sa akong bag-ong nahimo nga aplikasyon? Mopatim-aw nga kini usa ka talagsaon nga hilisgutan, mao nga kini ang basehan sa sunod nga artikulo.

Giunsa pag-organisar ang padayon nga pagtukod sa aplikasyon?

Hunahunaa ang usa ka proyekto sama sa Inkscape (oo, nahibal-an ko nga dili pa kini magamit sa Haiku, apan dali nga ipakita niini). Naa silay source code repository https://gitlab.com/inkscape/inkscape.
Sa matag higayon nga adunay usa nga mohimo sa ilang mga pagbag-o sa repository, magtukod og mga pipeline nga gilansad, pagkahuman ang mga pagbag-o awtomatiko nga gisulayan, gitukod, ug ang aplikasyon giputos sa lainlaing mga pakete, lakip ang AppImage alang sa Linux (usa ka standalone nga pakete sa aplikasyon nga mahimong ma-download alang sa lokal nga pagsulay bisan unsa pa. unsa ang mahimo o dili ma-install sa sistema [Nasayod ko niini! — gibanabana. tighubad]). Ang parehas nga butang mahitabo sa matag hangyo sa paghiusa sa sanga, aron ma-download nimo ang aplikasyon nga gitukod gikan sa code nga gisugyot sa hangyo sa paghiusa sa wala pa maghiusa.

Ang akong ikalimang adlaw uban sa Haiku: atong i-port ang pipila ka mga programa
Paghiusa sa mga hangyo nga adunay mga status sa pagtukod ug ang abilidad sa pag-download sa mga natipon nga binary kung malampuson ang pagtukod (gimarkahan sa berde)

Ang pagtukod nagdagan sa mga sudlanan sa Docker. Nagtanyag ang GitLab nga libre nga mga runner sa Linux, ug sa akong hunahuna mahimo’g posible nga ilakip ang imong kaugalingon nga mga runner (sa ingon, wala nako makita kung giunsa kini molihok alang sa mga sistema sama sa Haiku, nga nahibal-an nako nga wala’y Docker o katumbas, apan alang usab sa FreeBSD walay Docker, mao nga kini nga problema dili talagsaon sa Haiku).

Sa tinuud, ang mga aplikasyon sa Haiku mahimong matukod sa sulod sa usa ka sudlanan sa Docker alang sa Linux. Niini nga sitwasyon, ang asembliya alang sa Haiku mahimong ipaila sa kasamtangan nga mga pipeline. Aduna bay mga cross compiler? O kinahanglan ba nako nga sundon ang tanan nga Haiku sa sulod sa usa ka sudlanan sa Docker gamit ang usa ka butang sama sa QEMU/KVM (nagtuo nga kini molihok sa sulod sa Docker)? Pinaagi sa dalan, daghang mga proyekto ang naggamit sa parehas nga mga prinsipyo. Pananglitan, gibuhat kini ni Scribus - anaa na kini sa Haiku. Usa ka adlaw moabot ang adlaw nga makapadala ko sa ingon Kuhaa ang mga hangyo sa ubang mga proyekto aron idugang ang suporta sa Haiku.

Usa sa mga developers mipasabut:

Alang sa ubang mga proyekto nga gustong maghimo ug mga pakete sa ilang kaugalingon, ang regular nga pamaagi sa CMake/CPack gisuportahan. Ang ubang mga sistema sa pagtukod mahimong suportahan pinaagi sa pagtawag sa programa sa pagtukod sa package direkta, nga maayo kung ang mga tawo interesado niini. Gipakita sa kasinatian: hangtod karon wala’y daghang interes, mao nga ang haikuporter nagtrabaho nga dali alang kanamo, apan, sa katapusan, ang duha nga mga pamaagi kinahanglan magtinabangay. Kinahanglan natong ipaila ang usa ka hugpong sa mga himan alang sa cross-building software gikan sa Linux o bisan unsa nga operating system sa server (Ang Haiku wala gidesinyo nga modagan sa mga server).

Nag standing ovation ko. Ang mga regular nga tiggamit sa Linux nagdala niining tanan nga dugang nga karga ug dugang nga bagahe (seguridad, higpit nga pagkontrol, ug uban pa) nga gikinahanglan alang sa usa ka operating system sa server, apan dili alang sa usa ka personal. Busa ako hingpit nga miuyon nga ang makahimo sa paghimo sa Haiku apps sa Linux mao ang paagi sa pag-adto.

konklusyon

Ang pag-port sa mga aplikasyon sa POSIX ngadto sa Haiku posible, apan mahimong mas mahal kay sa kasagarang pagtukod pag-usab. Ako siguradong magpabilin niini sa dugay nga panahon kung dili tungod sa tabang sa mga tawo gikan sa #haiku channel sa irc.freenode.net network. Apan bisan sila wala kanunay makakita dayon kung unsa ang sayup.

Ang mga aplikasyon nga gisulat sa Qt usa ka dali nga eksepsiyon. Nagbutang ako usa ka yano nga aplikasyon sa demo nga wala’y mga problema.

Ang pagtukod og usa ka pakete alang sa yano nga mga aplikasyon sayon ​​ra usab, apan alang lamang sa mga "tradisyonal nga gipagawas", i.e. nga adunay bersyon nga source code archive nga gituyo alang sa suporta sa haikuports. Alang sa padayon nga pagtukod (pagtukod alang sa matag paghimo sa mga pagbag-o) sa GitHub, ang tanan ingon og dili kaayo yano. Dinhi ang Haiku gibati nga mas sama sa usa ka pag-apod-apod sa Linux kaysa sa resulta sa usa ka Mac, diin kung imong i-klik ang "Pagtukod" nga buton sa XCode makakuha ka usa ka pakete .app, andam nga isulod sa usa ka disk image .dmg, giandam alang sa pag-download sa akong website.
Ang padayon nga pagtukod sa mga aplikasyon nga gibase sa usa ka "server" nga operating system, pananglitan, Linux, lagmit mahimong posible kung adunay panginahanglan gikan sa mga developers, apan sa pagkakaron ang proyekto sa Haiku adunay lain, mas dinalian nga mga buluhaton.

Sulayi kini sa imong kaugalingon! Pagkahuman, ang proyekto sa Haiku naghatag mga imahe alang sa pag-boot gikan sa DVD o USB, nga nahimo ежедневно. Aron ma-install, i-download lang ang imahe ug isulat kini sa usa ka flash drive gamit Etcher

Aduna ka bay pangutana? Gidapit ka namo sa pinulongang Ruso channel sa telegram.

Overview sa sayop: Giunsa pagpusil ang imong kaugalingon sa tiil sa C ug C ++. Koleksyon sa resipe sa Haiku OS

gikan sa tagsulat hubad: kini ang ikalima nga artikulo sa serye bahin sa Haiku.

Listahan sa mga artikulo: Ang una Ang ikaduha Ang ikatulo Ika-upat

Source: www.habr.com

Idugang sa usa ka comment