د هایکو سره زما پنځمه ورځ: راځئ چې ځینې پروګرامونه پورټ کړو

د هایکو سره زما پنځمه ورځ: راځئ چې ځینې پروګرامونه پورټ کړو

د تمديد؛ DR: یو نوي ځوان د لومړي ځل لپاره هایکو ولید، هڅه یې کوله چې د لینکس نړۍ څخه ځینې پروګرامونه پورټ کړي.

د هایکو سره زما پنځمه ورځ: راځئ چې ځینې پروګرامونه پورټ کړو
زما لومړی د هایکو پورټ شوی برنامه ، په hpkg فارمیټ کې بسته شوې

په دې وروستیو کې ما هایکو کشف کړ، د کمپیوټر لپاره د حیرانتیا وړ ښه عملیاتي سیسټم.
نن زه به دا زده کړم چې څنګه دې عملیاتي سیسټم ته نوي پروګرامونه پورټ کړم. اصلي تمرکز د لینوکس پراختیا کونکي له نظره هایکو ته د بدلولو لومړۍ تجربې توضیح کول دي. زه په لاره کې د کومې احمقانه تېروتنې لپاره بخښنه غواړم، ځکه چې د هایکو لومړی ډاونلوډ کولو څخه یوه اونۍ هم نه ده شوې.

زه غواړم چې درې موخې ترلاسه کړم:

  • د ساده CLI غوښتنلیک پورټ کړئ
  • د GUI څخه Qt ته غوښتنلیک پورټ کړئ
  • بیا یې په hpkg فارمیټ کې بسته کړئ (ځکه چې زه لاهم د هایکو لپاره د AppDir او AppImage تطبیق په اړه فکر کوم ...)

راځه چي پیل یی کړو. په برخو کې اسناد и پراختیااو همدارنګه په ويکي د هایکو پورټس څخه ما سم لور وموندله. حتی یو آنلاین PDF کتاب هم شتون لري BeOS: د یونیکس غوښتنلیک پورټ کول.
467 مخونه - او دا د 1997 څخه دی! دا دننه لیدل ویره لري، مګر زه د غوره لپاره هیله لرم. د پراختیا کونکي ټکي هڅونکي دي: "دا ډیر وخت نیولی ځکه چې BeOS د POSIX مطابق نه و ،" مګر هایکو "د ډیری برخې لپاره" دمخه ورته دی.

د ساده CLI غوښتنلیک پورټ کول

لومړی فکر دا و چې غوښتنلیک پورټ کړئ ایرډود، مګر، لکه څنګه چې معلومه شوه، دا لا دمخه دی کړي دي ډیر وخت مخکې

لومړی هڅه: د لیدلو لپاره هیڅ شی

هغه څه چې زه یې نه پوهیږم هغه لا دمخه دی ایپس د 10 کلونو لپاره هایکو ته لیږدول شوي - د دې حقیقت سره سره چې OS پخپله حتی لاهم 1.0 نسخه نده.

دوهمه هڅه: د بیا لیکلو اړتیا

نو زه به کار واخلم ptouch-770د ورور P-Touch 770 پرنټر کنټرول لپاره CLI چې زه یې د لیبلونو چاپولو لپاره کاروم.
زه پدې باندې مختلف لیبلونه چاپوم ، او تاسو ممکن دا دمخه په تیرو مقالو کې لیدلي وي. یو څه دمخه ، ما په Python کې د GUI ریپر یو کوچنی برنامه لیکلې وه (ځکه چې دا په Gtk + کې دی ، دا باید بیا لیکل شي ، او دا د زده کړې ښه دلیل دی).

د هایکو سره زما پنځمه ورځ: راځئ چې ځینې پروګرامونه پورټ کړو
ورور P-Touch 770 لیبل پرنټر. ایا دا د هایکو سره کار کوي؟

د هایکو بسته بندۍ مدیر د کتابتونونو او امرونو په اړه پوهیږي، نو که زه د چلولو په وخت کې "لبینتل موندلی نه شم" پیغام ترلاسه کړم. configure - زه یوازې پیلوم pkgman install devel:libintl او اړین بسته به وموندل شي. همداسې pkgman install cmd:rsync. ښه، etc.

پرته له دې چې دا کار نه کوي:

/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

شاید udev ډیر لینکس میشته وي او له همدې امله د هایکو لپاره شتون نلري. دا پدې مانا ده چې زه اړتیا لرم د سرچینې کوډ ترمیم کړم چې زه یې د راټولولو هڅه کوم.
هو، تاسو نشئ کولی په خپل سر ټوپ کړئ، او زه حتی نه پوهیږم چې چیرته پیل وکړم.

دریمه هڅه

دا به ښه وي چې ولري tmate د هایکو لپاره، نو زه به د هایکو پراختیا کونکو ته اجازه ورکړم چې زما ترمینل ناستې سره وصل شي - که چیرې یو څه غلط شي. لارښوونې خورا ساده دي:

./autogen.sh
./configure
make
make install

ښه ښکاري، نو ولې په هایکو کې هڅه نه کوئ؟

/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

پدې مرحله کې زه د هایکو ډیپو خلاصوم او لټون کوم curses.
یو څه وموندل شو، کوم چې ما د یوې وړ پوښتنې لپاره اشاره راکړه:

/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

بیا زه هایکو ډیپو ته لاړم، او البته، زه وموم devel:msgpack_c_cpp_devel. دا عجیب نومونه څه دي؟

/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

په دې مرحله کې، ما پوهیده چې هایکو ته د برنامه پورټ کول د ساده بیا رغونې لپاره د اړتیا په پرتله خورا ډیر پوهه ته اړتیا لري.
ما د هایکو د دوستانه پراختیا کونکو سره خبرې وکړې، دا معلومه شوه چې په msgpack کې بګ شتون لري، او د څو دقیقو وروسته زه په هایکو پورټس کې یو پیچ وینم. زه کولی شم په خپلو سترګو وګورم چې څنګه سم شوی بسته دلته ځي (buildslave - مجازی ماشینونه).

د هایکو سره زما پنځمه ورځ: راځئ چې ځینې پروګرامونه پورټ کړو
په بلډ ماسټر کې د سم شوي پیغام پیک جوړول

د وخت په مینځ کې زه یو پیچ اپ سټریم ته لیږم msgpack ته د هایکو ملاتړ اضافه کولو لپاره.

پنځه دقیقې وروسته، تازه شوی پیغام پیک لا دمخه په هایکو کې شتون لري:

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

په غیر متوقع ډول ښه. دا هغه څه دي چې ما وویل؟!

زه بیرته اصلي ستونزې ته راګرځم:

/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

اوس داسې ښکاري چې msgpack ګناه نه ده. زه تبصره کوم IMAXLABEL в tty.c نو:

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

پایلې:

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.

ښه، دلته موږ بیا ځو ... په لاره کې:

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

ښاغلی. waddlesplash تاسو ته وایی چی چیرته کیندل شی:

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

دلته ما پوسټ کړی config.log.

دوی ماته څرګنده کړه چې په هایکو کې د libresolv سربیره په لیبنټ ورک کې بل څه شتون لري. په ښکاره ډول کوډ باید نور ترمیم شي. فکر کول پکار دي…

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

ابدي پوښتنه: څه روان دي؟

/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

ورته شی، یوازې په پروفایل کې. ګوګل او دا وموندل. که تاسو اضافه کړئ -lssp "کله ناکله" مرسته کوي، زه هڅه کوم:

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

وا! دا پیل دی! خو…

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

زه به د پاکولو هڅه وکړم دلته فایل:

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

"خراب بندر ID" دمخه د سوداګرۍ کارت په څیر دی هایکو. شاید یو څوک فکر وکړي چې څه غلط دی او څنګه یې حل کړئ؟ که داسې وي، زه به مقاله تازه کړم. ته لینک GitHub.

Qt ته د GUI غوښتنلیک پورټ کول.

زه یو ساده 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!

واقعیا ساده. له یوې دقیقې لږ!

د هایکوپورټر او هایکوپورټونو په کارولو سره په hpkg کې د بسته بندۍ غوښتنلیکونه.

زه باید له څه سره پیل وکړم؟ هیڅ ساده اسناد نشته، زه په irc.freenode.net کې د #haiku چینل ته لاړم او واورم:

  • ټیم package - د کڅوړو جوړولو لپاره د ټیټې کچې لاره. د ډیری برخې لپاره، PackageInfo د هغې لپاره کافي ده، لکه څنګه چې په برخه کې تشریح شوي "دا په مناسبه .hpkg بسته کې جوړول"
  • زه باید یو څه وکړم لکه
  • کارول کیدی شي hpkg - جوړونکی (دا زما لپاره خرابیږي، د تېروتنې راپور ورکول)

دا روښانه نده چې څه وکړي. زما په اند زه د هیلو ورلډ سټایل پیل کونکي لارښود ته اړتیا لرم ، په مثالي توګه یوه ویډیو. دا به ښه وي چې د هایکو پورټر لپاره مناسب پیژندنه هم ولرئ، لکه څنګه چې په GNU هیلو کې ترسره کیږي.

زه لاندې لوستل کوم:

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

د ترکیب لیکل

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
}

د ترکیب راټولول

زه د نوم لاندې فایل خوندي کوم QtQuickApp-1.0.recipe، له هغې وروسته زه پیلوم aikuporter -S ./QuickApp-1.0.recipe. انحصار په ذخیره کې د ټولو کڅوړو لپاره چک کیږي هایکوپورټس، کوم چې یو څه وخت نیسي. زه به یو څه قهوه راوړم.

ولې په ځمکه کې دا چک باید زما په محلي ماشین کې ترسره شي، او په مرکزي سرور کې د هرچا لپاره یو ځل نه وي؟

د ښاغلي په وینا. waddlesplash:

د دې سره تاسو کولی شئ په ذخیره کې کوم فایل بیا ولیکئ

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

دا معلومه شوه چې د منظم ترکیب فایل په څیر هیڅ شی شتون نلري چې ستاسو د غوښتنلیک سرچینې کوډ لري. تاسو اړتیا لرئ دا د هایکو پورټ فارمیټ کې په ذخیره کې وساتئ.

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

دا حقیقت مجلس ډیر پیچلی کوي. زه په ځانګړې توګه دا نه خوښوم، مګر زه فکر کوم چې دا اړینه ده چې بالاخره د خلاصې سرچینې سافټویر په هایکو پورټس کې ښکاره شي.

زه لاندې ترلاسه کوم:

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

څه ستونزه ده؟ د irc لوستلو وروسته زه دا کوم:

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

یوه جالبه پوښتنه را پیدا شوه. که زه په ترکیب کې چکسم اضافه کړم - ایا دا به د دوامداره ادغام لپاره د وروستي ګیټ ژمنې سره سمون ولري؟ (پراختیا کونکي تاییدوي: "دا به کار ونکړي. ترکیبونه ډیزاین شوي ترڅو نسبتا مستحکم وي.")

د ساتیرۍ لپاره، په ترکیب کې اضافه کړئ:

CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"

لا هم راضي نه یم:

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

هغه څه کوي؟ په هرصورت ، دا د ګیټ ذخیره ده ، کوډ دمخه مستقیم شتون لري ، د خلاصولو لپاره هیڅ شتون نلري. زما له نظره، وسیله باید دومره هوښیار وي چې د یو انپیکر په لټه کې نه وي که دا د GitHub url څخه پورته وي.

شاید uri git:// به کار وکړي

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

اوس داسې شکایت کوي:

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

هو، ولې هرڅه دومره پیچلي دي، ولې تاسو "یوازې کار" نشئ کولی؟ په هرصورت ، دا د GitHub څخه یو څه رامینځته کول غیر معمولي ندي. ایا دا هغه وسیلې دي چې سمدلاسه کار کوي ، پرته له دې چې تنظیم کولو ته اړتیا ولري ، یا لکه څنګه چې زه ورته "فزنګ" وایم.

شاید دا به د دې په څیر کار وکړي:

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

نه زه لاهم دا عجیب تېروتنه لرم او کوم، لکه څنګه چې دلته تشریح شوي

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

زه یو څه نور حرکت کوم ، مګر ولې دا په ما چیغې کوي (ګیټ هب خوندي نه دی!) او لاهم هڅه کوي یو څه خلاص کړي.

د ښاغلی. waddlesplash:

ښه، هو، دلیل د غونډې لپاره د ترلاسه شوي معلوماتو بشپړتیا چک کولو هیله وه. یو له اختیارونو څخه د آرشیف چیک سم تصدیق کول دي ، مګر تاسو کولی شئ ، البته ، انفرادي فایلونه هش کړئ ، کوم چې به پلي نشي ، ځکه چې دا ډیر وخت نیسي. د دې پایله د git او نورو VCS "ناامني" ده. دا به ډیری احتمال تل قضیه وي ، ځکه چې په GitHub کې آرشیف رامینځته کول خورا اسانه او ډیری وختونه ګړندي دي. ښه، په راتلونکي کې، شاید د خطا پیغام به دومره روښانه نه وي ... (موږ نور په هایکو پورټ کې دا ډول ترکیبونه نه یوځای کوو).

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

د زوړ عادت له مخې، زه د irc.freenode.net شبکې # هایکو چینل کې د ښو خلکو څخه پوښتنه کوم. او زه به له دوی پرته چیرته وم؟ د اشارې وروسته، ما پوهیده چې زه باید وکاروم:

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

ښه، دا روښانه شوه چې دا څه کوي - دا د یو ځانګړي بیاکتنې د سرچینې کوډ سره آرشیف ډاونلوډ کوي. دا احمق دی، زما له نظره، او په حقیقت کې هغه څه نه چې ما غوښتل، د بیلګې په توګه، د ماسټر څانګې څخه وروستی بیاکتنه ډاونلوډ کړئ.

یو له پراختیا کونکو څخه دا پدې ډول تشریح کوي:

موږ خپل CI لرو، نو هر هغه څه چې د هایکوپورټ ذخیره کې ځای په ځای شوي د ټولو کاروونکو لپاره بسته بندي کیږي، او موږ نه غواړو چې "هر څه په وروستي نسخه کې اپسټریم کې راټول او وړاندې کړو."

پوه شو! په هرصورت، دا هغه څه دي چې پیښ شوي:

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

دا دا اعلان انفینیتم تکراروي. ظاهرا دا یوه تېروتنه ده (ایا یو غوښتنلیک شتون لري؟ زه یې نشو موندلی).

С haikuporter او ذخیره هایکوپورټس دا د "یوازې کار کولو" احساس نلري، مګر د پراختیا کونکي په توګه، ځینې شیان شتون لري چې زه د هایکو سره کار کولو په اړه خوښوم. د ډیری برخې لپاره ، دا د خلاص جوړونې خدمت ته ورته دی ، د لینکس جوړونې جوړولو لپاره د وسیلو سیټ: خورا پیاوړی ، د سیسټمیک چلند سره ، مګر زما د کوچني "هیلو ورلډ" غوښتنلیک لپاره خورا ډیر.

بیا، د ښاغلي په وینا. waddlesplash:

په حقیقت کې، هایکو پورټر د ډیفالټ له مخې خورا سخت دی (پلس د لینټ حالت او همدارنګه یو سخت حالت شتون لري ترڅو دا نور هم سخت کړي!)، مګر یوازې دا چې دا بستې رامینځته کوي چې کار به وکړي، نه یوازې د کڅوړو جوړولو پر ځای. له همدې امله هغه د غیر اعلان شوي انحصار، کتابتونونو په سمه توګه نه وارد شوي، ناسم نسخې او داسې نور په اړه شکایت کوي. هدف دا دی چې هر ډول او ټولې ستونزې په ګوته کړي ، په شمول د راتلونکي په شمول ، مخکې لدې چې کارونکي پدې اړه پوه شي (له همدې امله د avrdude نصب کول ممکن ندي ، ځکه چې انحصار واقعیا په ترکیب کې مشخص شوی و). کتابتونونه یوازې انفرادي کڅوړې یا حتی ځانګړي SO نسخې ندي. HaikuPorter ډاډ ورکوي چې دا ټول پخپله په ترکیبونو کې لیدل کیږي ترڅو د اجرا کولو پرمهال د غلطیو مخه ونیسي.

په اصولو کې، د عملیاتي سیسټم رامینځته کولو پر مهال د سختۍ دا کچه توجیه کیږي، مګر دا زما لپاره د "هیلو نړۍ" غوښتنلیک لپاره غیر ضروري ښکاري. ما پریکړه وکړه چې یو بل څه هڅه وکړم.

د "package create" کمانډ په کارولو سره د hpkg فارمیټ کې غوښتنلیکونه جوړول

امکان لری، دا ایا ساده لارښوونې زما لپاره ښه کار کوي؟

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

په غیر متوقع ډول چټک، غیر متوقع ډول ساده، غیر متوقع ډول اغیزمن. دقیقا څنګه زه دا خوښوم ، حیرانونکی!

نصب - څه او چیرته؟

د QtQuickApp.hpkg فایل ته لیږدول شوی ~/config/packagesد فایل مدیر په کارولو سره ، له هغې وروسته QtQuickApp په جادویی ډول څرګند شو ~/config/apps.
بیا بیا، په غیر متوقع ډول چټک، ساده او اغیزمن. حیرانوونکی، د نه منلو وړ!

مګر ... (موږ به له دوی پرته چیرته یو!)

ایپ لاهم د ایپس مینو لیست او QuickLaunch څخه ورک دی. زه فکر کوم چې زه دمخه پوهیږم چې دا څنګه حل کړم. د فایل مدیر کې زه QtQuickApp.hpkg له ~/config/packages څخه /system/packages ته حرکت کوم.

نه، لا تر اوسه ورک دی. په ښکاره ډول، ما (ښه، او لارښوونې) یو څه له لاسه ورکړ.

د ځینو نورو غوښتنلیکونو لپاره په هایکو ډیپو کې د "محتوا" ټب ته په کتلو سره ، ما ولیدل چې دلته فایلونه شتون لري لکه /data/mimedb/application/x-vnd... تر دې هم د پام وړ څه دي، /data/deskbar/menu/Applications/….

ښه، زه باید هلته څه واچوم؟ زه نو...

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

زه ډاډه یم چې دا چل به کار وکړي، مګر پوښتنې پاتې دي: ولې دا اړینه ده، د څه لپاره؟ زه فکر کوم چې دا ټول تاثر خرابوي چې سیسټم خورا پیچلی دی.

لکه څنګه چې د ښاغلي لخوا تشریح شوی. waddlesplash:

ځینې ​​​​وختونه داسې غوښتنلیکونه شتون لري چې نور غوښتنلیکونه ورته اړتیا لري مګر په مینو کې ندي. د مثال په توګه، ستاسو په سکرین شاټ کې LegacyPackageInstaller، په BeOS بڼه کې د .pkg آرشیف پروسس کول. زه غواړم کاروونکي دا نصب کړي، مګر په مینو کې د دوی شتون به د ګډوډۍ لامل شي.

د ځینو دلیلونو لپاره دا ماته داسې ښکاري چې یو ساده حل شتون لري، د بیلګې په توګه Hidden=true په فایلونو کې .desktop په لینکس کې. ولې "پټ" معلومات د فایل سیسټم سرچینه او ځانګړتیا نه جوړوي؟

هغه څه چې په ځانګړي ډول فرعي ندي د (ځینې) غوښتنلیک نوم دی چې مینو ښیې ، deskbarپه لاره کې په کلکه تړل شوی.

ښاغلی. waddlesplash دا تشریح کوي:

په دې حالت کې "ډېسکبار" باید د یو ډول عمومي اصطلاح په توګه وپیژندل شي (په ورته ډول د "ټاسک بار" په څیر، چې د وینډوز غوښتنلیک او عمومي مفهوم دواړو ته اشاره کوي). ښه، له دې راهیسې deskbar، نه د "ډېزبار" ، دا هم په ورته ډول پوهیدلی شي.

د هایکو سره زما پنځمه ورځ: راځئ چې ځینې پروګرامونه پورټ کړو
2 "تقریبا ورته ورته" لارښودونه په دوی کې د غوښتنلیکونو سره

ولې د غوښتنلیکونو سره 2 لارښودونه شتون لري، او همدارنګه ولې زما QtQuickApplication په یوه کې دی، مګر په بل کې نه؟ (په هرصورت، دا یو سیسټم نه دی، مګر دویم کارن دی، کوم چې زما لپاره به په شخصي توګه د پوهیدو وړ وي).
زه واقعیا مغشوش یم او زه فکر کوم چې دا باید متحد وي.

د ښاغلي لخوا تبصره waddlesplash

د ایپس کتلاګ هغه غوښتنلیکونه لري چې په مینو کې ورته اړتیا نلري. مګر د مینو سره وضعیت واقعیا ښه کیدو ته اړتیا لري ، ترڅو دا نور دودیز کړي.

غوښتنلیک، یا دا به پیښ نشي 😉

ما حیران کړل: ایا دا واقعیا اړینه ده چې غوښتنلیکونه کوربه کړئ؟ /system/apps، که کاروونکي دوی هلته وګوري، دا ناغوښتل دي. شاید دا به غوره وي چې دوی په بل ځای کې ځای په ځای کړئ چیرې چې کارونکي به ورسره مخ نشي؟ لکه څنګه چې دا په Mac OS X کې ترسره شوی، چیرې چې د کڅوړو مینځپانګې .app، کوم چې باید د کارونکي لپاره نه لیدل کیږي /Applicationsد /سیسټم/کتابتون/…“ په ژورو کې پټول.

د انحصار په اړه څه؟

زه فکر کوم چې دا په یو ډول د انحصارونو مشخص کولو ارزښت لري ، سمه ده؟ ایا Qt د ډیفالټ لخوا د هایکو نصبولو لازمي برخه ګڼل کیدی شي؟ نه! Qt په ډیفالټ نه نصب شوی. ایا د کڅوړې جوړونکی کولی شي په اتوماتيک ډول د ELF فایلونو په چک کولو سره انحصار کشف کړي؟ ما ته ویل شوي وو چې هایکو پورټر په حقیقت کې دا کوي، مګر package نه. دا ځکه چې دا یوازې یو "پکیج جوړونکی" دی چې یوازې پخپله فایلونه رامینځته کوي hpkg.

ایا هایکو باید د یوې پالیسۍ په اضافه کولو سره نور پیچلي شي چې یوه کڅوړه باید د هایکو څخه بهر په کڅوړو پورې تړاو ونلري؟ haikuports؟ (زه غواړم، ځکه چې دا ډول پالیسي به شیان خورا اسانه کړي - سیسټم به په اتوماتيک ډول د هر ځای څخه ډاونلوډ شوي هر کڅوړې انحصار حل کړي، پرته له دې چې د اضافي کڅوړې سرچینې سره ګډوډ شي.)

ښاغلی. waddlesplash تشریح کوي:

موږ نه غواړو د پراختیا کونکو آزادي دومره محدوده کړو ، ځکه چې دا څرګنده ده چې که CompanyX غواړي د انحصار سره د خپل سافټویر سیټ ملاتړ وکړي (او له همدې امله ذخیره) ، نو دا به په بشپړ ډول په آزاده توګه ترسره کړي.

په دې حالت کې، دا ممکن د سپارښتنې وړ وي چې د دریمې ډلې کڅوړې په هر هغه څه باندې له انحصار څخه ډډه وکړي چې په هایکوپورټ کې شامل ندي په بشپړ ډول د غوښتنلیک سره اړین هرڅه بسته کولو سره. مګر زه فکر کوم چې دا پدې لړۍ کې د راتلونکي مقالې لپاره موضوع ده. [ایا لیکوال د AppImage په لور روان دی؟ - نږدې ژباړن]

د غوښتنلیک آیکون اضافه کول

څه که زه غواړم زما د نوي جوړ شوي غوښتنلیک سرچینو کې یو له پاک جوړ شوي عکسونو څخه اضافه کړم؟ دا معلومه شوه چې دا یوه حیرانونکې موضوع ده، نو دا به د راتلونکې مقالې اساس وي.

د دوامداره غوښتنلیک جوړونه څنګه تنظیم کړئ؟

د انکسکیپ په څیر د یوې پروژې تصور وکړئ (هو، زه پوهیږم چې دا لاهم په هایکو کې شتون نلري، مګر دا د ښودلو لپاره مناسبه ده). دوی د سرچینې کوډ ذخیره لري https://gitlab.com/inkscape/inkscape.
هرکله چې څوک په ذخیره کې خپل بدلونونه ژمن کړي، د پایپ لاینونو جوړول پیل کیږي، وروسته له دې چې بدلونونه په اتوماتيک ډول ازمول کیږي، جوړ شوي، او غوښتنلیک په مختلفو کڅوړو کې بسته بندي کیږي، په شمول د لینکس لپاره د AppImage (د یو سټینډ اپلیکیشن کڅوړه چې د محلي ازموینې لپاره ډاونلوډ کیدی شي پرته له دې چې په سیسټم کې څه نصب کیدی شي یا نه [زه پوهیدم! - نږدې ژباړن]). ورته شی د هرې څانګې ادغام غوښتنې سره پیښیږي ، نو تاسو کولی شئ د ضمیمه کیدو دمخه د ضمیمه غوښتنې کې وړاندیز شوي کوډ څخه جوړ شوی غوښتنلیک ډاونلوډ کړئ.

د هایکو سره زما پنځمه ورځ: راځئ چې ځینې پروګرامونه پورټ کړو
غوښتنې د جوړیدو حالتونو سره یوځای کړئ او د مرتب شوي بائنری ډاونلوډ کولو وړتیا که چیرې جوړونه بریالۍ وي (په شنه نښه شوي)

جوړونه د ډاکر کانټینرونو کې پرمخ ځي. GitLab په لینوکس کې وړیا چلونکي وړاندیز کوي، او زه فکر کوم چې دا ممکن وي چې ستاسو خپل رنرونه شامل کړئ (په لاره کې، زه نه ګورم چې دا به څنګه د هایکو په څیر سیسټمونو لپاره کار وکړي، کوم چې زه پوهیږم Docker یا مساوي نلري، مګر همدارنګه د FreeBSD لپاره هیڅ ډاکر نشته، نو دا ستونزه د هایکو لپاره ځانګړې نه ده).

په مثالي توګه، د هایکو غوښتنلیکونه د لینکس لپاره د ډاکر کانټینر دننه جوړ کیدی شي. په دې حالت کې، د هایکو لپاره مجلس په موجوده پایپ لاینونو کې معرفي کیدی شي. ایا کراس کمپیلر شتون لري؟ یا زه باید ټول هایکو د ډاکر کانټینر دننه د QEMU/KVM په څیر د یو څه په کارولو سره تقلید کړم (فرض کړئ چې دا به د ډاکر دننه کار وکړي)؟ په لاره کې، ډیری پروژې ورته اصول کاروي. د مثال په توګه، سکریبس دا کار کوي - دا دمخه د هایکو لپاره شتون لري. یوه ورځ به راشي چې زه یې ولیږم داسې د هایکو ملاتړ اضافه کولو لپاره نورو پروژو ته غوښتنې راوباسئ.

یو له پراختیا کونکو څخه تشریح کوي:

د نورو پروژو لپاره چې غواړي پخپله کڅوړې رامینځته کړي ، د منظم CMake/CPack میتود ملاتړ کیږي. نور جوړونکي سیسټمونه د بسته بندۍ برنامې مستقیم زنګ وهلو سره ملاتړ کیدی شي ، کوم چې ښه دی که خلک ورسره علاقه ولري. تجربه ښیي: تر دې دمه ډیره علاقه نه وه ، نو هایکوپورټر زموږ لپاره مناسب کار کړی ، مګر په نهایت کې ، دواړه میتودونه باید یوځای کار وکړي. موږ باید د لینکس یا کوم بل سرور عملیاتي سیسټم څخه د کراس جوړونې سافټویر لپاره د وسیلو سیټ معرفي کړو (هایکو په سرورونو کې د چلولو لپاره ډیزاین شوی نه دی).

زه ولاړ اواز ورکوم. د لینکس منظم کارونکي دا ټول اضافي بار او اضافي سامان (امنیت، سخت کنټرول، او نور) لیږدوي چې د سرور عملیاتي سیسټم لپاره اړین دي، مګر د شخصي لپاره نه. نو زه په بشپړ ډول موافق یم چې په لینکس کې د هایکو ایپسونو رامینځته کولو وړتیا د تګ لاره ده.

پایلې

هایکو ته د POSIX غوښتنلیکونو پورټ کول ممکن دي، مګر ممکن د عادي بیا رغونې په پرتله خورا ګران وي. زه به خامخا د دې سره د اوږدې مودې لپاره پاتې وم که چیرې دا د irc.freenode.net شبکه کې د # هایکو چینل څخه د خلکو مرستې نه وې. مګر حتی دوی تل سمدستي نه لیدل چې څه غلط وو.

په Qt کې لیکل شوي غوښتنلیکونه یو اسانه استثنا ده. ما یو ساده ډیمو غوښتنلیک پرته له کومې ستونزې سره یوځای کړ.

د ساده غوښتنلیکونو لپاره د کڅوړې رامینځته کول هم خورا اسانه دي ، مګر یوازې د "دودیز ډول خوشې شوي" لپاره ، د بیلګې په توګه. په هایکوپورټونو کې د ملاتړ لپاره د نسخې سرچینې کوډ آرشیفونه درلودل. د GitHub سره د دوامداره جوړونې (د هر بدلون لپاره رامینځته کول) لپاره ، هرڅه داسې ښکاري چې دومره ساده ندي. دلته هایکو په ماک کې د پایلې په پرتله د لینکس توزیع په څیر احساس کوي ، چیرې چې تاسو په ایکس کوډ کې د "بڼ" تڼۍ کلیک وکړئ تاسو یو بسته ترلاسه کوئ. .app، د ډیسک عکس کې دننه کولو لپاره چمتو دی .dmg، زما په ویب پاڼه کې د ډاونلوډ لپاره چمتو شوی.
د "سرور" عملیاتي سیسټم پراساس د غوښتنلیکونو دوامداره جوړول ، د مثال په توګه ، لینکس به ډیر احتمال ولري که چیرې د پراختیا کونکو غوښتنه شتون ولري ، مګر دا مهال د هایکو پروژه نور ، ډیر فشار لرونکي دندې لري.

دا پخپله هڅه وکړئ! په هرصورت، د هایکو پروژه د DVD یا USB څخه د بوټ کولو لپاره عکسونه چمتو کوي، تولید شوي د. د نصبولو لپاره، یوازې عکس ډاونلوډ کړئ او د فلش ډرایو په کارولو سره یې ولیکئ ایتچرګر

ایا تاسو کومه پوښتنه لرئ؟ موږ تاسو ته بلنه درکوو چې په روسیه کې خبرې وکړي د تلیګرام چینل.

د تېروتنې کتنه: څنګه په C او C++ کې په پښو کې ځان ډزې وکړئ. د هایکو OS ترکیب ټولګه

له لیکوال ژباړه: دا د هایکو په اړه د لړۍ پنځمه مقاله ده.

د مقالو لیست: لومړی دوهم دریم څلورم

سرچینه: www.habr.com

Add a comment