Миний Хайкутай тав дахь өдөр: хэдэн програмаа оруулъя

Миний Хайкутай тав дахь өдөр: хэдэн програмаа оруулъя

TL, DR: Шинэхэн хүн Линуксийн ертөнцөөс зарим программуудыг оруулах гэж оролдож байгаа Хайкуг анх удаа харсан.

Миний Хайкутай тав дахь өдөр: хэдэн програмаа оруулъя
Миний анхны Хайку программыг hpkg форматаар нь багцалсан

Саяхан Би компьютерт зориулсан гайхалтай сайн үйлдлийн систем болох Haiku-г олж мэдсэн.
Өнөөдөр би энэ үйлдлийн системд шинэ программуудыг хэрхэн оруулах талаар сурах болно. Гол анхаарал нь Linux хөгжүүлэгчийн үүднээс Хайку руу шилжих анхны туршлагыг тайлбарлах явдал юм. Хайкуг анх татаад долоо хоноогүй байгаа тул замдаа хийсэн тэнэг алдаанууддаа хүлцэл өчье.

Би гурван зорилгодоо хүрэхийг хүсч байна:

  • Энгийн CLI програмыг холбоно уу
  • Програмыг GUI-ээс Qt руу шилжүүлнэ үү
  • Дараа нь тэдгээрийг hpkg форматаар багцлана (би одоо хүртэл AppDir болон AppImage-г Haiku-д тохируулах талаар бодож байгаа...)

Эхэлцгээе. Хэсэгт баримт бичиг и хөгжил, мөн түүнчлэн вики HaikuPorts-аас би зөв чиглэлийг олсон. Онлайн PDF ном хүртэл байдаг BeOS: Unix програмыг шилжүүлэх.
467 хуудас - энэ бол 1997 оных! Дотроо харах нь аймшигтай ч хамгийн сайн сайхныг хүсье. Хөгжүүлэгчийн хэлсэн үгс урам зоригтой байдаг: "BeOS нь POSIX-д нийцэхгүй байсан тул удаан хугацаа зарцуулсан" гэвч Хайку "ихэнхдээ" ийм байна.

Энгийн CLI програмыг зөөвөрлөх

Эхний бодол бол програмыг зөөх явдал байв avrdude, гэхдээ энэ нь аль хэдийн болсон хийж байсан эрт дээр үеэс.

Эхний оролдлого: үзэх зүйл алга

Миний ойлгохгүй байгаа зүйл бол аль хэдийн Хайку руу 10 гаруй жилийн турш програмуудыг зөөвөрлөсөн - Хэдийгээр үйлдлийн систем өөрөө 1.0 хувилбар хараахан болоогүй байна.

Хоёр дахь оролдлого: дахин бичих шаардлагатай

Тиймээс би ашиглах болно ptouch-770, Миний шошго хэвлэхэд ашигладаг Brother P-Touch 770 принтерийг удирдахад зориулсан CLI.
Би үүн дээр янз бүрийн шошго хэвлэдэг бөгөөд та үүнийг өмнөх нийтлэлээс үзсэн байх. Хэсэг хугацааны өмнө би Python хэл дээр жижиг GUI ороох програм бичсэн (энэ нь Gtk+ дээр байгаа тул дахин бичих шаардлагатай болно, энэ нь сурах сайн шалтгаан юм).

Миний Хайкутай тав дахь өдөр: хэдэн програмаа оруулъя
Ах P-Touch 770 шошго хэвлэгч. Хайкутай ажиллах уу?

Хайку багцын менежер нь номын сан, командуудын талаар мэддэг тул хэрэв би ажиллуулж байх үед "libintl олж чадахгүй байна" гэсэн мессеж ирвэл configure -Би дөнгөж сая хөөрлөө pkgman install devel:libintl мөн шаардлагатай багцыг олох болно. Үүний нэгэн адил pkgman install cmd:rsync. За, гэх мэт.

Энэ нь ажиллахгүй байхаас бусад тохиолдолд:

/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 нь хэтэрхий Линукс дээр суурилдаг тул Haiku-д байдаггүй. Энэ нь би эмхэтгэх гэж байгаа эх кодыг засах хэрэгтэй гэсэн үг юм.
Өө, чи толгой дээгүүрээ үсэрч чадахгүй, би хаанаас эхлэхээ ч мэдэхгүй байна.

Гурав дахь оролдлого

Байвал сайхан байх болно 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

Энэ алхамд би HaikuDepot-ыг нээж хайлт хийнэ 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

Дахин би HaikuDepot-д очсон бөгөөд мэдээжийн хэрэг олсон 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-д алдаа гарсан бөгөөд хэдэн минутын дараа би HaikuPorts-д засвар байгааг олж харлаа. Би өөрийн нүдээр хэрхэн зассан багцыг харж байна энд явж байна (buildslave - виртуал машинууд).

Миний Хайкутай тав дахь өдөр: хэдэн програмаа оруулъя
buildmaster дээр залруулсан msgpack-г үүсгэж байна

Энэ хооронд би дээд урсгал руу нөхөөс илгээдэг msgpack-д Haiku дэмжлэг нэмэх.

Таван минутын дараа шинэчлэгдсэн 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-ээс гадна libnetwork-д өөр зүйл байгааг тайлбарласан. Кодыг цаашид засварлах шаардлагатай байгаа бололтой. Бодох хэрэгтэй…

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

Үүнтэй ижил зүйл, зөвхөн профайл дээр. Googled болон энийг оллоо. Хэрэв та нэмбэл -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.

GUI програмыг Qt руу шилжүүлэх.

Би энгийн 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!

Үнэхээр энгийн. Нэг минут хүрэхгүй хугацаа!

haikuporter болон haikuports ашиглан hpkg програмуудыг савлах.

Би юунаас эхлэх ёстой вэ? Энгийн баримт бичиг байхгүй, би irc.freenode.net дээрх #haiku суваг руу ороод дараах зүйлийг сонсдог.

  • баг package - багц үүсгэх доод түвшний арга. Ихэнх тохиолдолд PackageInfo нь "Үүнийг зөв .hpkg багц болгох" хэсэгт тайлбарласны дагуу түүнд хангалттай.
  • Би ямар нэг зүйл хийх хэрэгтэй байна ийм
  • Ашиглаж болно hpkg-бүтээгч (энэ нь миний хувьд сүйрч байна, алдаа мэдээлэх)

Юу хийх нь тодорхойгүй байна. Надад Hello World загварын анхан шатны гарын авлага, хамгийн тохиромжтой нь видео хэрэгтэй байна гэж бодож байна. GNU hello-д бичсэн шиг HaikuPorter-ийн тохиромжтой танилцуулгатай байвал сайхан байх болно.

Би дараах зүйлийг уншиж байна.

haikuporter нь Хайкугийн нийтлэг багц төслүүдийг бий болгох хэрэгсэл юм. Энэ нь HaikuPorts репозиторыг бүх багцын суурь болгон ашигладаг. Хайкупортерын жорыг багц үүсгэхэд ашигладаг.

Нэмж хэлэхэд би дараахь зүйлийг олж мэдэв.

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

Хоолны жор бичиж байна

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

Таны програмын эх кодыг агуулсан ердийн жор файл гэж байдаггүй. Та үүнийг HaikuPorts форматаар хадгалах газарт хадгалах хэрэгтэй.

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

Энэ баримт нь угсралтыг илүү төвөгтэй болгодог. Энэ нь надад тийм ч их таалагддаггүй, гэхдээ эцэст нь бүх нээлттэй эхийн программ хангамж HaikuPorts дээр гарч ирэхэд зайлшгүй шаардлагатай гэж бодож байна.

Би дараахь зүйлийг авна.

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

Сонирхолтой асуулт гарч ирэв. Хэрэв би жор дээр хяналтын нийлбэр нэмбэл энэ нь тасралтгүй нэгтгэх хамгийн сүүлийн үеийн git commit-тэй таарах уу? (Хөгжүүлэгч баталдаг: "Энэ ажиллахгүй. Жорууд нь харьцангуй тогтвортой байхаар хийгдсэн.")

Хөгжилтэй байхын тулд жор дээр нэмнэ үү:

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

Тэр юу хийж байна вэ? Эцсийн эцэст, энэ бол 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

Би жаахан урагшилж байна, гэхдээ яагаад над руу хашгирч байна (GitHub аюулгүй биш!) Тэгээд ямар нэг зүйлийг задлах гэж оролдсон хэвээр байна.

Дагуу ноён waddlesplash:

За, тийм ээ, шалтгаан нь угсрахаар хүлээн авсан мэдээллийн бүрэн бүтэн байдлыг шалгах хүсэл байв. Сонголтуудын нэг бол архивын шалгах нийлбэрийг шалгах явдал боловч та мэдээж хэрэг бие даасан файлуудыг хэш болгож болно, учир нь үүнийг хэрэгжүүлэхгүй. Энэ нь илүү удаан хугацаа шаарддаг. Үүний үр дагавар нь git болон бусад VCS-ийн "найдваргүй байдал" юм. GitHub дээр архив үүсгэх нь маш хялбар бөгөөд ихэвчлэн хурдан байдаг тул энэ нь үргэлж ийм байх магадлалтай. Ирээдүйд алдааны мэдэгдэл тийм ч тод биш байх болов уу ... (бид 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

Би хуучин зуршлаасаа болж irc.freenode.net сүлжээний #haiku сувгаар сайн хүмүүсээс асуудаг. Тэгээд тэдэнгүйгээр би хаана байх байсан бэ? Зөвлөмжийн дараа би ашиглах ёстой гэдгээ ойлгосон:

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

За, энэ нь юу хийдэг нь тодорхой болсон - энэ нь тодорхой хувилбарын эх код бүхий архивыг татаж авдаг. Энэ бол миний бодлоор тэнэг бөгөөд яг миний хүссэн зүйл биш, тухайлбал мастер салбараас хамгийн сүүлийн хувилбарыг татаж авах нь тэнэг юм.

Хөгжүүлэгчдийн нэг үүнийг дараах байдлаар тайлбарлав.

Бид өөрийн гэсэн CI-тэй тул haikuports-ын санд байршуулсан бүх зүйлийг бүх хэрэглэгчдэд зориулж багцалсан байх ба "хамгийн сүүлийн үеийн хувилбарын бүх зүйлийг" цуглуулж, хүргэх эрсдэлд орохыг хүсэхгүй байна.

Ойлголоо! Ямар ч тохиолдолд ийм зүйл тохиолдсон:

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 болон хадгалах газар хайкупортууд Энэ нь "зүгээр л ажиллана" гэсэн мэдрэмжгүй ч хөгжүүлэгчийн хувьд Хайкүтэй ажиллахад таалагддаг зүйл бий. Ихэнх тохиолдолд энэ нь Open Build Service-тэй төстэй бөгөөд Линукс бүтээхэд зориулагдсан хэрэгслүүдийн багц юм: маш хүчирхэг, системчилсэн арга барилтай, гэхдээ миний жижиг "Сайн уу ертөнц" програмын хувьд хэтэрхий их юм.

Дахин хэлэхэд, ноён. waddlesplash:

Үнэн хэрэгтээ, HaikuPorter нь анхдагч байдлаар нэлээд хатуу байдаг (мөн үүнийг илүү хатуу болгохын тулд хөвөн горим, мөн хатуу горим байдаг!), гэхдээ зөвхөн багц үүсгэхээс илүүтэйгээр ажиллах багцуудыг бий болгодог. Тийм ч учраас тэрээр зарлагдаагүй хамаарал, номын сангууд зохих ёсоор импортлогдоогүй, буруу хувилбар гэх мэт гомдоллож байна. Зорилго нь хэрэглэгчийг энэ талаар мэдэхээс өмнө аливаа асуудлыг, түүний дотор ирээдүйн асуудлуудыг барьж авах явдал юм (ийм учраас avrdude-г суулгах боломжгүй байсан, учир нь энэ хамаарлыг жор дээр заасан байсан). Номын сангууд нь зөвхөн бие даасан багцууд эсвэл бүр тодорхой SO хувилбарууд биш юм. HaikuPorter нь гүйцэтгэлийн явцад алдаа гарахаас зайлсхийхийн тулд энэ бүгдийг жор дээр ажиглаж байхыг баталгаажуулдаг.

Зарчмын хувьд үйлдлийн системийг бий болгоход ийм хатуу чанга байх нь үндэслэлтэй боловч "Сайн уу ертөнц" програмын хувьд энэ нь надад хэрэггүй юм шиг санагддаг. Би өөр зүйл туршиж үзэхээр шийдсэн.

"Багц үүсгэх" командыг ашиглан 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-аас /систем/багцууд руу шилжүүлнэ.

Үгүй ээ, одоо болтол алга. Би (за, зааварчилгаа) ямар нэг зүйлийг алдсан бололтой.

HaikuDepot дахь "Агуулга" табыг бусад зарим програмын хувьд харвал би ийм файлууд байгааг олж харав. /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 үүнийг тайлбарлав:

Энэ тохиолдолд "Ширээний самбар" гэдэг нь нэг төрлийн ерөнхий нэр томъёо гэж ойлгох ёстой (Windows програм болон ерөнхий ойлголтыг хоёуланг нь илэрхийлдэг "даалгавар самбар"-тай ижилхэн). За, үүнээс хойш deskbar, "Ширээний самбар" биш, үүнийг мөн ижил төстэй байдлаар ойлгож болно.

Миний Хайкутай тав дахь өдөр: хэдэн програмаа оруулъя
Програмтай 2 "бараг ижил" лавлах

Яагаад аппликешн бүхий 2 лавлах байдаг, мөн яагаад миний QtQuickApplication нэгд нь байдаг, нөгөөд нь байдаггүй вэ? (Эцсийн эцэст энэ бол нэг систем биш, харин хоёр дахь хэрэглэгч бөгөөд энэ нь надад ойлгомжтой байх болно).
Би үнэхээр эргэлзэж байна, үүнийг нэгтгэх ёстой гэж бодож байна.

сэтгэгдэл ноён. waddlesplash

Програмын каталог нь цэсэнд шаардлагагүй програмуудыг агуулдаг. Гэхдээ цэстэй холбоотой нөхцөл байдлыг үнэхээр сайжруулж, илүү тохируулах боломжтой болгох шаардлагатай байна.

Өргөдөл, тэгэхгүй бол болохгүй 😉

Би гайхсан: үнэхээр програмуудыг байршуулах шаардлагатай юу? /system/apps, хэрэв хэрэглэгчид тэднийг тэнд харвал энэ нь хүсээгүй юм. Магадгүй тэдгээрийг хэрэглэгч таарахгүй өөр газар байрлуулах нь дээр болов уу? Яг л энэ нь Mac OS X дээр хийгдсэнтэй адил бөгөөд багцын агуулгууд байдаг .app, энэ нь хэрэглэгчдэд харагдахгүй байх ёстой /Applications, /Систем/Номын сан/-ын гүнд нуугдаж байна…“`.

Хамааралтай байдлын талаар юу хэлэх вэ?

Ямар нэгэн байдлаар хамаарлыг зааж өгөх нь зүйтэй гэж бодож байна, тийм үү? Qt нь анхдагчаар Хайку суулгацын заавал байх ёстой хэсэг гэж үзэж болох уу? Үгүй ээ! Qt-г анхдагчаар суулгаагүй. Багц бүтээгч нь ELF файлуудыг шалгах замаар хамаарлыг автоматаар илрүүлж чадах уу? HaikuPorter үнэхээр үүнийг хийдэг гэж надад хэлсэн, гэхдээ package Үгүй Учир нь энэ нь зүгээр л өөрөө файл үүсгэдэг "багц бүтээгч" юм hpkg.

Багц Хайкугаас гадуурх багцаас хамааралгүй байх ёстой гэсэн бодлогыг нэмж Хайкуг илүү боловсронгуй болгох ёстой юу? haikuports? (Ийм бодлого нь ажлыг ихээхэн хөнгөвчлөх тул систем нь нэмэлт багцын эх сурвалжтай хутгалдахгүйгээр хаанаас ч татаж авсан багц бүрийн хамаарлыг автоматаар шийдвэрлэх боломжтой болохыг би хүсч байна.)

ноён waddlesplash тайлбарлав:

Хөгжүүлэгчдийн эрх чөлөөг бид тийм ч их хязгаарлахыг хүсэхгүй байна, учир нь CompanyX нь хамааралтай программ хангамжийг (тиймээс репозитортой) дэмжихийг хүсвэл үүнийг бүрэн чөлөөтэй хийх нь ойлгомжтой.

Энэ тохиолдолд гуравдагч талын багцууд haikuport-д ороогүй аливаа зүйлээс хамааралгүй байхын тулд програмд ​​шаардлагатай бүх зүйлийг бүрэн багцлахыг зөвлөж байна. Гэхдээ энэ бол энэ цувралын ирээдүйн нийтлэлийн сэдэв гэж би бодож байна. [Зохиогч AppImage руу явж байна уу? - ойролцоогоор. орчуулагч]

Програмын дүрсийг нэмж байна

Хэрэв би шинээр үүсгэсэн програмынхаа нөөцөд цэвэрхэн суулгасан дүрсүүдийн нэгийг нэмэхийг хүсвэл яах вэ? Энэ бол гайхалтай сэдэв тул дараагийн нийтлэлийн үндэс болно.

Тасралтгүй програм бүтээх ажлыг хэрхэн зохион байгуулах вэ?

Inkscape шиг төслийг төсөөлөөд үз дээ (тиймээ, энэ нь Хайку хэл дээр хараахан гараагүй гэдгийг би мэдэж байна, гэхдээ үүнийг харуулахад тохиромжтой). Тэд эх кодын хадгалах газартай https://gitlab.com/inkscape/inkscape.
Хадгалах газарт хэн нэгэн өөрчлөлт хийх болгонд дамжуулах шугамыг эхлүүлж, дараа нь өөрчлөлтүүдийг автоматаар туршиж, бүтээж, програмыг Linux-д зориулсан AppImage (хэрэглээгүй орон нутгийн туршилтанд татаж авах боломжтой бие даасан програмын багц) зэрэг янз бүрийн багцуудад багцалдаг. систем дээр юу суулгаагүй байж болох юм [Би мэдэж байсан! - ойролцоогоор. орчуулагч]). Салбар нэгтгэх хүсэлт бүрт ижил зүйл тохиолддог тул та нэгтгэхээсээ өмнө нэгтгэх хүсэлтэд санал болгосон кодоос бүтээсэн програмыг татаж авах боломжтой.

Миний Хайкутай тав дахь өдөр: хэдэн програмаа оруулъя
Хүсэлтийг бүтээх статустай нэгтгэх, хэрэв бүтээц амжилттай бол эмхэтгэсэн хоёртын файлуудыг татаж авах боломжтой (ногооноор тэмдэглэсэн)

Бүтээлт нь Docker контейнерт ажилладаг. GitLab нь Линукс дээр үнэгүй гүйгчдийг санал болгодог бөгөөд би өөрийн гүйгчдийг оруулах боломжтой гэж бодож байна (Дашрамд хэлэхэд, энэ нь Docker эсвэл түүнтэй адилтгах систем байхгүй гэдгийг би мэднэ Haiku гэх мэт системүүдэд хэрхэн ажиллахыг мэдэхгүй байна, гэхдээ би Мөн FreeBSD-д Docker байхгүй тул энэ асуудал зөвхөн Хайкуд хамаарахгүй).

Хамгийн тохиромжтой нь Хайку программуудыг Линукст зориулсан Docker контейнер дотор хийж болно. Ийм нөхцөлд Хайкугийн угсралтыг одоо байгаа дамжуулах хоолойд оруулж болно. Хөрвүүлэгч хөрвүүлэгч байдаг уу? Эсвэл би QEMU/KVM гэх мэт зүйлийг ашиглан Docker контейнер дотор бүх Хайкуг дуурайх ёстой юу (энэ нь Docker дотор ийм байдлаар ажиллана гэж үзвэл)? Дашрамд хэлэхэд, олон төсөл ижил төстэй зарчмуудыг ашигладаг. Жишээлбэл, Scribus үүнийг хийдэг - энэ нь Хайкуд аль хэдийн бэлэн болсон. Нэг л өдөр би илгээх өдөр ирнэ ийм Хайкугийн дэмжлэгийг нэмэхийн тулд бусад төслүүдэд хүсэлт гаргах.

Хөгжүүлэгчдийн нэг тайлбарлав:

Өөрөө багц үүсгэх хүсэлтэй бусад төслүүдийн хувьд ердийн CMake/CPack аргыг дэмждэг. Багцын бүтээх программ руу шууд залгаснаар бусад бүтээх системийг дэмжих боломжтой бөгөөд хэрэв хүмүүс үүнийг сонирхож байвал зүгээр. Туршлагаас харахад: өнөөг хүртэл тийм ч их сонирхолгүй байсан тул haikuporter бидэнд тохиромжтой байсан ч эцсийн дүндээ хоёр арга нь хамтдаа ажиллах ёстой. Бид Линукс эсвэл бусад серверийн үйлдлийн системээс (Хайку нь сервер дээр ажиллахад зориулагдаагүй) программ хангамжийг хооронд нь бий болгох хэрэгслүүдийг нэвтрүүлэх ёстой.

Би зогсолтгүй алга ташиж байна. Линуксийн байнгын хэрэглэгчид серверийн үйлдлийн системд шаардлагатай энэ бүх нэмэлт ачаа, нэмэлт ачаа тээшийг (хамгаалалт, хатуу хяналт гэх мэт) авч явдаг боловч хувийн системд биш. Тиймээс Линукс дээр Хайку аппликейшн бүтээх боломжтой гэдэгтэй би бүрэн санал нийлж байна.

дүгнэлт

POSIX програмуудыг Хайку руу шилжүүлэх боломжтой боловч ердийн дахин бүтээхээс илүү үнэтэй байж болно. Хэрэв irc.freenode.net сүлжээний #haiku сувгийн хүмүүсийн тусламж байгаагүй бол би үүнийг удаан хугацаанд тэвчих байсан нь гарцаагүй. Гэхдээ тэд ч гэсэн юу болсныг тэр дор нь олж хараагүй.

Qt дээр бичигдсэн програмууд нь амархан үл хамаарах зүйл юм. Би ямар ч асуудалгүйгээр энгийн нэг демо програмыг эвлүүлсэн.

Энгийн програмуудад зориулсан багц бүтээх нь маш хялбар боловч зөвхөн "уламжлалт байдлаар гаргасан" програмуудад зориулагдсан, жишээлбэл. haikuports-д дэмжлэг үзүүлэх зорилготой хувилбарт эх кодын архивтай байх. GitHub-тэй тасралтгүй бүтээх (өөрчлөлт бүрийн хувьд бүтээх) хувьд бүх зүйл тийм ч хялбар биш юм шиг санагддаг. Энд Хайку нь Mac дээрх үр дүнгээс илүү Линукс түгээлт шиг санагдаж, XCode дээрх "Бүтээх" товчийг дарахад багц гарч ирнэ. .app, дискний дүрсэнд оруулахад бэлэн байна .dmg, миний вэбсайт дээр татаж авахаар бэлтгэсэн.
"Сервер" үйлдлийн систем, жишээлбэл, Линукс дээр суурилсан програмуудыг тасралтгүй бүтээх нь хөгжүүлэгчдээс эрэлт хэрэгцээтэй байгаа тохиолдолд боломжтой болох магадлалтай, гэхдээ одоогоор Хайку төсөл өөр, илүү тулгамдсан ажлуудтай байна.

Та өөрөө туршаад үзээрэй! Эцсийн эцэст, Хайку төсөл нь үүсгэсэн DVD эсвэл USB-ээс ачаалах зургийг өгдөг Ежедневно. Суулгахын тулд зургийг татаж аваад USB флаш диск рүүгээ бичээрэй Etcher

Асуулт байна уу? Бид таныг Орос хэлтэй сургалтанд урьж байна цахилгаан суваг.

Алдааны тойм: C болон C++ хэл дээр хэрхэн хөл рүүгээ буудах вэ. Хайку үйлдлийн системийн жорын цуглуулга

Эхлээд зохиогч нь орчуулга: Энэ бол Хайкугийн тухай цувралын тав дахь нийтлэл юм.

Нийтлэлийн жагсаалт: Эхнийх нь Хоёр дахь нь Гурав дахь нь Дөрөвдүгээр

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх