วันที่ห้าของฉันกับไฮกุ: มาพอร์ตบางโปรแกรมกัน

วันที่ห้าของฉันกับไฮกุ: มาพอร์ตบางโปรแกรมกัน

TL; DR: มือใหม่เห็นไฮกุครั้งแรก พยายามพอร์ทบางโปรแกรมจากโลก Linux

วันที่ห้าของฉันกับไฮกุ: มาพอร์ตบางโปรแกรมกัน
โปรแกรมพอร์ต Haiku โปรแกรมแรกของฉัน บรรจุในรูปแบบ hpkg

เมื่อเร็ว ๆ นี้ ฉันค้นพบ Haiku ซึ่งเป็นระบบปฏิบัติการที่ดีสำหรับพีซีอย่างน่าประหลาดใจ
วันนี้ฉันจะได้เรียนรู้วิธีย้ายโปรแกรมใหม่ไปยังระบบปฏิบัติการนี้ จุดสนใจหลักคือคำอธิบายประสบการณ์ครั้งแรกในการเปลี่ยนมาใช้ไฮกุจากมุมมองของนักพัฒนา Linux ฉันขอโทษสำหรับความผิดพลาดโง่ๆ ที่ฉันทำระหว่างทาง เนื่องจากฉันดาวน์โหลด Haiku ครั้งแรกมาได้ไม่ถึงสัปดาห์ด้วยซ้ำ

ฉันต้องการบรรลุเป้าหมายสามประการ:

  • พอร์ตแอปพลิเคชัน CLI อย่างง่าย
  • พอร์ตแอปพลิเคชันจาก GUI ไปยัง Qt
  • จากนั้นจัดแพ็คเกจในรูปแบบ hpkg (เนื่องจากฉันยังคิดที่จะปรับใช้ AppDir และ AppImage สำหรับ Haiku...)

มาเริ่มกันเลย. ในส่วนต่างๆ เอกสาร и การพัฒนาเช่นเดียวกับใน วิกิพีเดีย จาก HaikuPorts ฉันพบทิศทางที่ถูกต้องแล้ว มีแม้กระทั่งหนังสือ PDF ออนไลน์ BeOS: การย้ายแอปพลิเคชัน Unix.
467 หน้า - และนี่คือจากปี 1997! การมองเข้าไปข้างในนั้นน่ากลัว แต่ฉันหวังว่าจะดีที่สุด คำพูดของนักพัฒนาให้กำลังใจว่า “ใช้เวลานานมากเพราะ BeOS ไม่รองรับ POSIX” แต่ไฮกุ “ส่วนใหญ่” ก็เป็นแบบนั้นอยู่แล้ว

การย้ายแอปพลิเคชัน CLI อย่างง่าย

ความคิดแรกคือการพอร์ตแอปพลิเคชัน สวัสดีแต่ปรากฏว่ามันก็เป็นเช่นนั้นแล้ว ได้ทำ กระโน้น.

ลองครั้งแรก: ไม่มีอะไรให้ดู

สิ่งที่ฉันไม่เข้าใจก็คือสิ่งนั้นแล้ว แอปได้รับการย้ายไปยัง Haiku มานานกว่า 10 ปี - แม้ว่าระบบปฏิบัติการจะยังไม่เป็นเวอร์ชัน 1.0 ก็ตาม

ความพยายามครั้งที่สอง: จำเป็นต้องเขียนใหม่

ดังนั้นฉันจะใช้ ptouch-770, CLI สำหรับควบคุมเครื่องพิมพ์ Brother P-Touch 770 ที่ผมใช้พิมพ์ฉลาก
ฉันพิมพ์ฉลากต่างๆ ไว้บนนั้น และคุณอาจเห็นมันแล้วในบทความที่แล้ว ก่อนหน้านี้เล็กน้อย ฉันเขียนโปรแกรม wrapper GUI ขนาดเล็กใน Python (เนื่องจากอยู่ใน Gtk+ จึงจำเป็นต้องเขียนใหม่และนี่เป็นเหตุผลที่ดีในการเรียนรู้)

วันที่ห้าของฉันกับไฮกุ: มาพอร์ตบางโปรแกรมกัน
เครื่องพิมพ์ฉลาก Brother P-Touch 770 จะใช้ได้กับ Haiku หรือไม่?

ตัวจัดการแพ็คเกจ Haiku รู้เกี่ยวกับไลบรารีและคำสั่ง ดังนั้นหากฉันได้รับข้อความ "ไม่พบ 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 อาจใช้ Linux มากเกินไป ดังนั้นจึงไม่มีอยู่ในไฮกุ ซึ่งหมายความว่าฉันต้องแก้ไขซอร์สโค้ดที่ฉันพยายามรวบรวม
เอ๊ะคุณไม่สามารถกระโดดข้ามหัวได้และฉันไม่รู้ด้วยซ้ำว่าจะเริ่มจากตรงไหน

ลองครั้งที่สาม

มันคงจะดีถ้ามี 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

ในขั้นตอนนี้ ฉันตระหนักว่าการย้ายโปรแกรมไปยัง Haiku ต้องใช้ความรู้มากกว่าที่จำเป็นสำหรับการสร้างใหม่แบบง่ายๆ
ฉันได้พูดคุยกับนักพัฒนา Haiku ที่เป็นมิตร ปรากฎว่ามีข้อบกพร่องใน msgpack และหลังจากนั้นไม่กี่นาที ฉันก็เห็นแพตช์ใน HaikuPorts ฉันเห็นด้วยตาตัวเองว่าแพ็คเกจได้รับการแก้ไขอย่างไร กำลังไปที่นี่ (buildslave - เครื่องเสมือน)

วันที่ห้าของฉันกับไฮกุ: มาพอร์ตบางโปรแกรมกัน
การสร้าง msgpack ที่ถูกต้องบน buildmaster

ในระหว่างนี้ฉันจะส่งแพตช์ไปที่อัปสตรีม เพื่อเพิ่มการรองรับ Haiku ให้กับ msgpack.

ห้านาทีต่อมา 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

นาย. เดินเตาะแตะ บอกคุณว่าจะขุดที่ไหน:

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

พวกเขาอธิบายให้ฉันฟังว่ามีอย่างอื่นใน libnetwork นอกเหนือจาก libresolv บน Haiku เห็นได้ชัดว่ารหัสจะต้องมีการแก้ไขเพิ่มเติม ต้องคิด…

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

สิ่งเดียวกันเฉพาะในโปรไฟล์เท่านั้น Google และ พบสิ่งนี้. ถ้าคุณเพิ่ม -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

“รหัสพอร์ตไม่ถูกต้อง” ก็เหมือนกับนามบัตรอยู่แล้ว ไฮกุ. อาจมีคนมีความคิดว่ามีอะไรผิดปกติและจะแก้ไขได้อย่างไร ถ้าเป็นเช่นนั้นฉันจะอัปเดตบทความ เชื่อมโยงไปยัง 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!

เรียบง่ายจริงๆ ไม่ถึงนาที!

การใช้งานบรรจุภัณฑ์ในหน่วย hpkg โดยใช้ haikuporter และ haikuports

ฉันควรเริ่มต้นด้วยอะไร? ไม่มีเอกสารง่ายๆ ฉันไปที่ช่อง #haiku บน irc.freenode.net และได้ยิน:

  • ทีม package - วิธีระดับต่ำในการสร้างแพ็คเกจ โดยส่วนใหญ่ PackageInfo ก็เพียงพอสำหรับเธอ ดังที่อธิบายไว้ในส่วน "การทำให้เป็นแพ็คเกจ .hpkg ที่เหมาะสม"
  • ฉันจำเป็นต้องทำอะไรบางอย่าง นี้
  • สามารถใช้ hpkg-ผู้สร้าง (มันขัดข้องสำหรับฉัน การรายงานข้อผิดพลาด)

ยังไม่ชัดเจนว่าต้องทำอย่างไร ฉันเดาว่าฉันต้องการคู่มือสำหรับผู้เริ่มต้นใช้งานสไตล์ Hello World ซึ่งควรจะเป็นวิดีโอ คงจะดีไม่น้อยถ้ามีการแนะนำ HaikuPorter ที่สะดวก เช่นเดียวกับที่ทำใน GNU สวัสดี

ฉันกำลังอ่านสิ่งต่อไปนี้:

haikuporter เป็นเครื่องมือสำหรับสร้างโครงการแพ็คเกจทั่วไปสำหรับไฮกุ ใช้พื้นที่เก็บข้อมูล HaikuPorts เป็นฐานสำหรับแพ็คเกจทั้งหมด สูตร Haikuporter ใช้ในการสร้างแพ็คเกจ

นอกจากนี้ ฉันพบว่า:

ไม่จำเป็นต้องจัดเก็บสูตรอาหารไว้ในที่เก็บข้อมูล HaikuPorts คุณสามารถสร้างที่เก็บอื่น ใส่สูตรอาหารลงไป แล้วชี้ haikuporter ไปที่นั้น

สิ่งที่ฉันต้องการ - หากไม่ได้มองหาวิธีที่จะเผยแพร่แพ็คเกจสู่สาธารณะ แต่นี่เป็นหัวข้อสำหรับโพสต์อื่น

การติดตั้ง haikuporter และ 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. มีการตรวจสอบการขึ้นต่อกันสำหรับแพ็กเกจทั้งหมดในที่เก็บ ไฮคูพอร์ตซึ่งต้องใช้เวลาพอสมควร ฉันจะไปซื้อกาแฟ

เหตุใดการตรวจสอบนี้จึงควรดำเนินการบนเครื่องของฉัน และไม่ควรดำเนินการที่ศูนย์กลางบนเซิร์ฟเวอร์เพียงครั้งเดียวสำหรับทุกคน

ตามที่นาย. เดินเตาะแตะ:

ด้วยเหตุนี้คุณจึงสามารถเขียนไฟล์ใด ๆ ในพื้นที่เก็บข้อมูลใหม่ได้ 😉 คุณสามารถเพิ่มประสิทธิภาพได้เล็กน้อย โดยคำนวณข้อมูลที่จำเป็นเมื่อจำเป็น เนื่องจากการเปลี่ยนแปลงครั้งล่าสุดที่เกิดขึ้นนั้นค่อนข้างหายาก

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

มีคำถามที่น่าสนใจเกิดขึ้น ถ้าฉันเพิ่มเช็คซัมให้กับสูตร มันจะตรงกับคอมไพล์ล่าสุดสำหรับการรวมอย่างต่อเนื่องหรือไม่ (ผู้พัฒนายืนยันว่า: “มันใช้งานไม่ได้ สูตรอาหารได้รับการออกแบบมาให้ค่อนข้างเสถียร”)

เพื่อความสนุกสนาน เพิ่มสูตร:

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 มีโค้ดอยู่แล้วโดยตรง ไม่มีอะไรให้แตก จากมุมมองของฉัน เครื่องมือควรจะฉลาดพอที่จะไม่มองหาตัวแกะกล่องหากอยู่เหนือ URL ของ GitHub

บางที 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 ไม่ปลอดภัย!) และยังคงพยายามแกะบางสิ่งออก

ตามที่ นาย. เดินเตาะแตะ:

ใช่แล้ว เหตุผลก็คือต้องการตรวจสอบความสมบูรณ์ของข้อมูลที่ได้รับสำหรับการประกอบ หนึ่งในตัวเลือกคือการตรวจสอบผลรวมของไฟล์เก็บถาวร แต่แน่นอนว่าคุณสามารถแฮชไฟล์แต่ละไฟล์ได้ซึ่งจะไม่ถูกนำไปใช้เพราะ มันใช้เวลานานกว่ามาก ผลที่ตามมาคือ “ความไม่มั่นคง” ของ 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 แล้วฉันจะอยู่ที่ไหนถ้าไม่มีพวกเขา? หลังจากคำใบ้ ฉันก็รู้ว่าฉันควรใช้:

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 ซึ่งเป็นชุดเครื่องมือสำหรับสร้างบิลด์ Linux: ทรงพลังอย่างยิ่งพร้อมแนวทางที่เป็นระบบ แต่ต้องใช้มากเกินไปสำหรับแอปพลิเคชัน "hello world" ขนาดเล็กของฉัน

ตามคำบอกเล่าของนายอีกครั้ง เดินเตาะแตะ:

แท้จริงแล้ว HaikuPorter ค่อนข้างจะเข้มงวดโดยค่าเริ่มต้น (แถมยังมีโหมด lint และโหมดเข้มงวดเพื่อให้เข้มงวดยิ่งขึ้นอีกด้วย!) แต่เพียงเพราะมันสร้างแพ็คเกจที่จะใช้งานได้ แทนที่จะแค่สร้างแพ็คเกจเท่านั้น นั่นเป็นเหตุผลที่เขาบ่นเกี่ยวกับการขึ้นต่อกันที่ไม่ได้ประกาศ ไลบรารีที่นำเข้าไม่ถูกต้อง เวอร์ชันที่ไม่ถูกต้อง ฯลฯ เป้าหมายคือการตรวจจับปัญหาใดๆ และทั้งหมด รวมถึงปัญหาในอนาคต ก่อนที่ผู้ใช้จะทราบ (นี่คือสาเหตุว่าทำไมจึงไม่สามารถติดตั้ง avrdude ได้ เนื่องจากมีการระบุการขึ้นต่อกันไว้ในสูตรจริง ๆ ) ไลบรารีไม่ได้เป็นเพียงแพ็คเกจเดี่ยวๆ หรือแม้แต่เวอร์ชัน SO ที่เฉพาะเจาะจง HaikuPorter ช่วยให้มั่นใจได้ว่าทั้งหมดนี้ถูกสังเกตในสูตรเพื่อหลีกเลี่ยงข้อผิดพลาดระหว่างการดำเนินการ

โดยหลักการแล้ว ความเข้มงวดระดับนี้เป็นสิ่งที่สมเหตุสมผลเมื่อสร้างระบบปฏิบัติการ แต่ดูเหมือนว่าไม่จำเป็นสำหรับฉันสำหรับแอปพลิเคชัน "hello world" ฉันตัดสินใจลองอย่างอื่น

การสร้างแอปพลิเคชันในรูปแบบ 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

ไม่หรอก ยังขาดอยู่ เห็นได้ชัดว่าฉัน (และคำแนะนำ) พลาดบางสิ่งบางอย่างไป

เมื่อดูที่แท็บ "เนื้อหา" ใน 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

ฉันค่อนข้างแน่ใจว่าเคล็ดลับนี้จะได้ผล แต่คำถามยังคงอยู่: เหตุใดจึงจำเป็น มีไว้เพื่ออะไร? ฉันคิดว่าสิ่งนี้ทำลายความประทับใจโดยรวมที่ว่าระบบมีความซับซ้อนมาก

ตามที่นายอธิบาย เดินเตาะแตะ:

บางครั้งมีแอพพลิเคชั่นที่แอพพลิเคชั่นอื่นต้องการแต่ไม่มีอยู่ในเมนู ตัวอย่างเช่น LegacyPackageInstaller ในภาพหน้าจอของคุณ กำลังประมวลผลไฟล์เก็บถาวร .pkg ในรูปแบบ BeOS ฉันต้องการให้ผู้ใช้ติดตั้ง แต่การมีอยู่ของพวกเขาในเมนูจะทำให้เกิดความสับสน

ด้วยเหตุผลบางอย่างสำหรับฉัน ดูเหมือนว่ามีวิธีแก้ไขปัญหาที่ง่ายกว่า เป็นต้น Hidden=true ในไฟล์ .desktop บนลินุกซ์ ทำไมไม่ทำให้ข้อมูลที่ "ซ่อน" เป็นทรัพยากรและคุณลักษณะของระบบไฟล์ล่ะ?

สิ่งที่ไม่ละเอียดอ่อนเป็นพิเศษคือชื่อของแอปพลิเคชั่น (บางตัว) ที่แสดงเมนู deskbarผูกแน่นตลอดเส้นทาง

นาย. wadlesplash อธิบายสิ่งนี้:

“เดสก์บาร์” ในกรณีนี้ควรเข้าใจว่าเป็นคำทั่วไป (ในลักษณะเดียวกับ “ทาสก์บาร์” ซึ่งหมายถึงทั้งแอปพลิเคชัน Windows และแนวคิดทั่วไป) ก็ตั้งแต่นี้. deskbarไม่ใช่ "เดสก์บาร์" ก็สามารถเข้าใจได้ในลักษณะเดียวกัน

วันที่ห้าของฉันกับไฮกุ: มาพอร์ตบางโปรแกรมกัน
2 ไดเร็กทอรี "เกือบจะเหมือนกัน" ที่มีแอปพลิเคชันอยู่ในนั้น

เหตุใดจึงมี 2 ไดเร็กทอรีที่มีแอปพลิเคชัน และทำไม QtQuickApplication ของฉันถึงอยู่ในไดเร็กทอรีเดียว แต่ไม่ใช่ในไดเร็กทอรีอื่น (ท้ายที่สุดแล้วนี่ไม่ใช่ระบบเดียว แต่เป็นผู้ใช้คนที่สองซึ่งฉันจะเข้าใจเป็นการส่วนตัวได้)
ฉันสับสนจริงๆ และฉันคิดว่านี่ควรจะรวมเป็นหนึ่งเดียว

ความคิดเห็นโดยนาย เดินเตาะแตะ

แค็ตตาล็อก Apps ประกอบด้วยแอปพลิเคชันที่ไม่จำเป็นในเมนู แต่สถานการณ์ของเมนูจำเป็นต้องได้รับการปรับปรุงจริงๆ เพื่อให้สามารถปรับแต่งได้มากขึ้น

การสมัครหรือมันจะไม่เกิดขึ้น😉

ฉันสงสัยว่า: จำเป็นจริงๆ หรือไม่ที่จะต้องโฮสต์แอปพลิเคชันต่างๆ /system/appsหากผู้ใช้เห็นที่นั่นก็เป็นสิ่งที่ไม่พึงประสงค์ บางทีมันอาจจะดีกว่าถ้าวางไว้ในที่อื่นที่ผู้ใช้จะไม่พบมัน? เช่นเดียวกับที่ทำใน Mac OS X โดยที่เนื้อหาของแพ็คเกจ .appซึ่งไม่ควรปรากฏให้ผู้ใช้เห็น /Applicationsซ่อนอยู่ในส่วนลึกของ /System/Library/…“`

แล้วการพึ่งพาล่ะ?

ฉันคิดว่ามันคุ้มค่าที่จะระบุการพึ่งพาใช่ไหม? Qt สามารถถือเป็นส่วนบังคับของการติดตั้ง Haiku ได้หรือไม่? ไม่! Qt ไม่ได้ติดตั้งตามค่าเริ่มต้น ตัวสร้างแพ็คเกจสามารถตรวจจับการขึ้นต่อกันโดยอัตโนมัติโดยการตรวจสอบไฟล์ ELF ได้หรือไม่ ฉันได้รับแจ้งว่า HaikuPorter ทำสิ่งนี้จริง ๆ แต่ package เลขที่ นั่นเป็นเพราะมันเป็นเพียง "ตัวสร้างแพ็คเกจ" ที่เพิ่งสร้างไฟล์ด้วยตัวเอง hpkg.

ไฮกุควรมีความซับซ้อนมากขึ้นโดยการเพิ่มนโยบายว่าแพ็คเกจไม่ควรมีการพึ่งพาแพ็คเกจภายนอกไฮกุหรือไม่ haikuports? (ฉันต้องการทำ เนื่องจากนโยบายดังกล่าวจะทำให้สิ่งต่างๆ ง่ายขึ้นมาก - ระบบจะสามารถแก้ไขการขึ้นต่อกันของทุกแพ็คเกจที่ดาวน์โหลดจากทุกที่ได้โดยอัตโนมัติ โดยไม่ต้องยุ่งกับแหล่งแพ็คเกจเพิ่มเติม)

นาย. wadlesplash อธิบายว่า:

เราไม่ต้องการจำกัดเสรีภาพของนักพัฒนามากนัก เนื่องจากเห็นได้ชัดว่าหาก CompanyX ต้องการสนับสนุนชุดซอฟต์แวร์ของตัวเองที่มีการขึ้นต่อกัน (และด้วยเหตุนี้จึงเป็นพื้นที่เก็บข้อมูล) บริษัทก็จะทำเช่นนั้นได้อย่างอิสระโดยสมบูรณ์

ในกรณีนั้น อาจคุ้มค่าที่จะแนะนำให้แพ็คเกจจากภายนอกหลีกเลี่ยงการพึ่งพาสิ่งใดๆ ที่ไม่รวมอยู่ในไฮคูพอร์ตด้วยการบรรจุทุกสิ่งที่จำเป็นเข้ากับแอปพลิเคชันให้สมบูรณ์ แต่ฉันคิดว่านี่เป็นหัวข้อสำหรับบทความในอนาคตในชุดนี้ [ผู้เขียนกำลังมุ่งหน้าไปยัง AppImage หรือไม่? — ประมาณ นักแปล]

การเพิ่มไอคอนแอปพลิเคชัน

จะเป็นอย่างไรหากฉันต้องการเพิ่มไอคอนในตัวอันเรียบร้อยให้กับทรัพยากรของแอปพลิเคชันที่สร้างขึ้นใหม่ของฉัน ปรากฎว่านี่เป็นหัวข้อที่น่าทึ่งดังนั้นจึงจะเป็นพื้นฐานสำหรับบทความถัดไป

จะจัดระเบียบการสร้างแอปพลิเคชันอย่างต่อเนื่องได้อย่างไร?

ลองนึกภาพโปรเจ็กต์อย่าง Inkscape (ใช่ ฉันรู้ว่ายังไม่มีในไฮกุ แต่แสดงบนโปรเจ็กต์ได้สะดวก) พวกเขามีพื้นที่เก็บข้อมูลซอร์สโค้ด https://gitlab.com/inkscape/inkscape.
ทุกครั้งที่มีคนยอมรับการเปลี่ยนแปลงกับพื้นที่เก็บข้อมูล จะมีการเปิดตัวไปป์ไลน์บิวด์ หลังจากนั้นการเปลี่ยนแปลงจะถูกทดสอบ สร้าง และแอปพลิเคชันจะบรรจุลงในแพ็คเกจต่างๆ โดยอัตโนมัติ รวมถึง AppImage สำหรับ Linux (แพ็คเกจแอปพลิเคชันแบบสแตนด์อโลนที่สามารถดาวน์โหลดสำหรับการทดสอบภายในเครื่องได้โดยไม่คำนึงถึง สิ่งที่อาจจะหรืออาจจะไม่ติดตั้งบนระบบ [ฉันรู้แล้ว! — ประมาณ นักแปล]). สิ่งเดียวกันนี้เกิดขึ้นกับทุกคำขอรวมสาขา ดังนั้นคุณจึงสามารถดาวน์โหลดแอปพลิเคชันที่สร้างจากโค้ดที่เสนอในคำขอรวมก่อนที่จะรวมได้

วันที่ห้าของฉันกับไฮกุ: มาพอร์ตบางโปรแกรมกัน
รวมคำขอที่มีสถานะบิลด์และความสามารถในการดาวน์โหลดไบนารีที่คอมไพล์แล้วหากบิลด์สำเร็จ (ทำเครื่องหมายเป็นสีเขียว)

บิลด์ทำงานในคอนเทนเนอร์ Docker GitLab ให้บริการนักวิ่งฟรีบน Linux และฉันคิดว่าอาจเป็นไปได้ที่จะรวมนักวิ่งของคุณเองด้วย (อย่างไรก็ตาม ฉันไม่เห็นว่ามันจะทำงานอย่างไรกับระบบอย่าง Haiku ซึ่งฉันรู้ว่าไม่มี Docker หรือเทียบเท่า แต่ สำหรับ FreeBSD นั้นไม่มี Docker ดังนั้นปัญหานี้จึงไม่ได้เกิดขึ้นเฉพาะกับ Haiku)

ตามหลักการแล้ว แอปพลิเคชัน Haiku สามารถสร้างภายในคอนเทนเนอร์ Docker สำหรับ Linux ได้ ในสถานการณ์เช่นนี้ การประกอบไฮกุสามารถนำไปใช้กับไปป์ไลน์ที่มีอยู่ได้ มีคอมไพเลอร์ข้ามหรือไม่? หรือฉันควรจำลองไฮกุทั้งหมดภายในคอนเทนเนอร์ Docker โดยใช้บางอย่างเช่น QEMU/KVM (สมมติว่ามันจะทำงานแบบนั้นภายใน Docker) อย่างไรก็ตาม หลายโครงการใช้หลักการที่คล้ายกัน ตัวอย่างเช่น Scribus ทำสิ่งนี้ - ไฮกุพร้อมใช้งานแล้ว วันหนึ่งจะมาถึงเมื่อผมส่งได้ เช่นนี้ ดึงคำขอไปยังโปรเจ็กต์อื่นเพื่อเพิ่มการรองรับไฮกุ

นักพัฒนาคนหนึ่งอธิบายว่า:

สำหรับโปรเจ็กต์อื่นๆ ที่ต้องการสร้างแพ็คเกจด้วยตนเอง รองรับวิธี CMake/CPack ปกติ ระบบ build อื่นๆ สามารถรองรับได้โดยการเรียกโปรแกรม build ของแพ็คเกจโดยตรง ซึ่งเป็นเรื่องปกติหากผู้คนสนใจ ประสบการณ์แสดงให้เห็น: จนถึงขณะนี้ยังไม่มีความสนใจมากนัก ดังนั้น haikuporter จึงทำงานตามความสะดวกสำหรับเรา แต่ท้ายที่สุดแล้ว ทั้งสองวิธีควรทำงานร่วมกัน เราควรแนะนำชุดเครื่องมือสำหรับซอฟต์แวร์ข้ามอาคารจาก Linux หรือระบบปฏิบัติการเซิร์ฟเวอร์อื่นๆ (ไฮกุไม่ได้ออกแบบมาให้ทำงานบนเซิร์ฟเวอร์)

ฉันปรบมือให้ ผู้ใช้ลีนุกซ์ทั่วไปจะบรรทุกสัมภาระเพิ่มเติมและสัมภาระเพิ่มเติม (การรักษาความปลอดภัย การควบคุมที่เข้มงวด ฯลฯ) ซึ่งจำเป็นสำหรับระบบปฏิบัติการเซิร์ฟเวอร์ แต่ไม่ใช่สำหรับระบบปฏิบัติการส่วนบุคคล ดังนั้นฉันจึงเห็นด้วยอย่างยิ่งว่าการสามารถสร้างแอป Haiku บน Linux เป็นหนทางไป

ข้อสรุป

การย้ายแอปพลิเคชัน POSIX ไปยัง Haiku เป็นไปได้ แต่อาจมีราคาแพงกว่าการสร้างใหม่ทั่วไป ฉันคงติดอยู่กับเรื่องนี้ไปอีกนานแน่ถ้าไม่ได้รับความช่วยเหลือจากผู้คนจากช่อง #ไฮกุ บนเครือข่าย irc.freenode.net แต่ถึงแม้พวกเขาจะไม่เห็นสิ่งผิดปกติในทันทีเสมอไป

แอปพลิเคชันที่เขียนด้วย Qt ถือเป็นข้อยกเว้นที่ง่ายดาย ฉันรวบรวมแอปพลิเคชันสาธิตง่ายๆ ไว้ด้วยกันโดยไม่มีปัญหาใดๆ

การสร้างแพ็คเกจสำหรับแอปพลิเคชันแบบง่ายนั้นค่อนข้างง่ายเช่นกัน แต่สำหรับแอปพลิเคชันที่ "เผยแพร่แบบดั้งเดิม" เท่านั้น เช่น มีไฟล์เก็บถาวรซอร์สโค้ดเวอร์ชันที่มีจุดประสงค์เพื่อรองรับใน haikuports สำหรับการสร้างอย่างต่อเนื่อง (สร้างสำหรับทุกการเปลี่ยนแปลง) ด้วย GitHub ดูเหมือนว่าทุกอย่างจะไม่ง่ายนัก ที่นี่ไฮกุให้ความรู้สึกเหมือนเป็นการกระจาย Linux มากกว่าผลลัพธ์บน Mac โดยที่เมื่อคุณคลิกปุ่ม "สร้าง" ใน XCode คุณจะได้รับแพ็คเกจ .appพร้อมที่จะแทรกลงในดิสก์อิมเมจ .dmgเตรียมไว้ให้ดาวน์โหลดบนเว็บไซต์ของฉัน
การสร้างแอปพลิเคชันอย่างต่อเนื่องโดยใช้ระบบปฏิบัติการ "เซิร์ฟเวอร์" เช่น Linux มักจะเป็นไปได้หากมีความต้องการจากนักพัฒนา แต่ในขณะนี้โครงการ Haiku มีงานอื่นที่เร่งด่วนกว่า

ลองด้วยตัวเอง! ท้ายที่สุดแล้ว โปรเจ็กต์ Haiku ได้จัดเตรียมอิมเมจสำหรับการบูทจาก DVD หรือ USB ที่สร้างขึ้น ประจำวัน. หากต้องการติดตั้ง เพียงดาวน์โหลดอิมเมจแล้วเขียนลงในแฟลชไดรฟ์โดยใช้ นักแกะ

คุณมีคำถามใดๆ? เราขอเชิญคุณเข้าร่วมการพูดภาษารัสเซีย ช่องโทรเลข.

ภาพรวมข้อผิดพลาด: วิธียิงตัวเองด้วย C และ C++ รวมสูตร Haiku OS

จาก นักบิน การแปล: นี่เป็นบทความที่ห้าในซีรีส์เกี่ยวกับไฮกุ

รายการบทความ: เป็นครั้งแรก สอง สาม ที่สี่

ที่มา: will.com

เพิ่มความคิดเห็น