
TL; DR : Pemula melihat Haiku untuk pertama kalinya, mencoba port beberapa program dari dunia Linux.

Program porting Haiku pertama saya dikemas dalam format hpkg
Baru-baru ini saya menemukan Haiku, sistem operasi PC yang bagus.
Hari ini saya akan belajar untuk mentransfer program baru ke OS ini. Fokus utama adalah deskripsi pengalaman pertama beralih ke Haiku dari sudut pandang pengembang untuk Linux. Saya minta maaf atas kesalahan bodoh yang dibuat dalam proses, setelah semua, sejak pertama kali saya mengunduh Haiku, belum seminggu berlalu.
Saya ingin mencapai tiga tujuan:
- Port aplikasi CLI sederhana
- Aplikasi port dari GUI ke Qt
- Kemas kemudian dalam format hpkg (karena saya masih berpikir tentang mengadaptasi AppDir dan AppImage untuk Haiku ...)
Mari kita mulai. Di bagian dokumentasi dan pengembangan , serta di wiki HaikuPorts , saya menemukan arah yang benar. Bahkan ada buku PDF online BeOS: Porting aplikasi Unix .
467 halaman - dan ini dari 1997! Melihat ke dalam memang menakutkan, tetapi saya berharap yang terbaik. Kata-kata pengembang menggembirakan: "untuk waktu yang lama, karena BeOS tidak kompatibel dengan POSIX," tetapi Haiku "sebagian besar" sudah seperti itu.
Porting aplikasi CLI sederhana
Pikiran pertama adalah untuk port aplikasi avrdude , tetapi ternyata, itu sudah dilakukan sejak lama.
Upaya pertama: tidak ada yang perlu diperhatikan
Apa yang saya tidak bisa mengerti sama sekali adalah bahwa selama lebih dari 10 tahun, aplikasi telah porting ke Haiku - terlepas dari kenyataan bahwa OS itu sendiri bahkan tidak memiliki versi 1.0.
Upaya kedua: perlu menulis ulang
Jadi, saya akan menggunakan ptouch-770 , CLI untuk mengontrol printer Brother P-Touch 770, di mana saya mencetak label.
Saya mencetak berbagai label di atasnya, dan Anda mungkin sudah melihatnya di artikel sebelumnya. Sebelumnya, saya menulis program pembungkus kecil dengan GUI dengan Python (karena ada di Gtk +, saya harus menulis ulang, yang merupakan alasan bagus untuk mempelajari sesuatu).

Printer label Brother P-Touch 770. Apakah berfungsi di bawah Haiku?
Pengelola paket Haiku tahu tentang perpustakaan dan perintah, jadi jika saya mendapatkan pesan "tidak dapat menemukan libintl" ketika saya menjalankan configure
, saya cukup menjalankan pkgman install devel:libintl
dan paket yang saya butuhkan akan ditemukan. Mirip dengan pkgman install cmd:rsync
. Baik, dll
Kecuali ketika ini tidak berhasil:
/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
Mungkin udev terlalu penuh, jadi tidak ada untuk Haiku. Yang berarti perlunya mengedit kode sumber yang saya coba kompilasi.
Eh, Anda tidak akan melompat di atas kepala Anda, dan saya bahkan tidak tahu harus mulai dari mana.
Upaya ketiga
Akan lebih baik memiliki tmate
untuk Haiku, maka saya akan membiarkan pengembang Haiku terhubung ke sesi terminal saya - kalau-kalau ada yang salah. Petunjuknya cukup sederhana:
./autogen.sh ./configure make make install
Terlihat bagus, jadi mengapa tidak mencobanya di Haiku?
/Haiku/home> git clone https://github.com/tmate-io/tmate/Haiku/home> cd tmate//Haiku/home/tmate> ./autogen.sh (...)/Haiku/home/tmate> ./configure (...) checking for libevent... no checking for library containing event_init... no configure: error: "libevent not found"/Haiku/home/tmate> pkgman install devel:libevent (...) The following changes will be made: in system: install package libevent21-2.1.8-2 from repository HaikuPorts install package libevent21_devel-2.1.8-2 from repository HaikuPorts Continue? [yes/no] (yes) : 100% libevent21-2.1.8-2-x86_64.hpkg [965.22 KiB] (...) [system] Done.checking for ncurses... no checking for library containing setupterm... no configure: error: "curses not found"/Haiku/home/tmate> pkgman install devel:libcurses (...) *** Failed to find a match for "devel:libcurses": Name not found/Haiku/home/tmate> pkgman install devel:curses (...) *** Failed to find a match for "devel:curses": Name not found
Pada langkah ini, saya membuka HaikuDepot dan mencari curses
.
Sesuatu ditemukan, yang memberi saya petunjuk untuk permintaan yang lebih kompeten:
/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
Sekali lagi pergi ke HaikuDepot, dan, tentu saja, menemukan devel:msgpack_c_cpp_devel
. Nama aneh macam apa?
/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
Pada langkah ini, saya menyadari bahwa mem-porting sebuah program ke Haiku membutuhkan pengetahuan yang jauh lebih banyak daripada yang Anda perlukan untuk pembangunan kembali yang sederhana.
Saya berbicara dengan pengembang Haiku yang ramah, ternyata ada kesalahan dalam msgpack, dan setelah beberapa menit saya melihat tambalan, di HaikuPorts. Saya pribadi mengamati bagaimana paket tetap dibangun di sini (buildslave - mesin virtual).

Bangun paket pesan tetap di buildmaster
Sementara itu, kirim tambalan ke hulu untuk menambahkan dukungan Haiku ke msgpack .
Lima menit kemudian, paket pesan yang diperbarui sudah tersedia di Haiku:
/Haiku/home/tmate> pkgman update (...) The following changes will be made: in system: upgrade package msgpack_c_cpp-3.1.1-1 to 3.2.0-2 from repository HaikuPorts upgrade package msgpack_c_cpp_devel-3.1.1-1 to 3.2.0-2 from repository HaikuPorts Continue? [yes/no] (yes) : y 100% msgpack_c_cpp-3.2.0-2-x86_64.hpkg [13.43 KiB] (...) [system] Done.
Luar biasa bagus. Apakah saya mengatakan itu ?!
Kembali ke tugas semula:
/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
Sekarang tampaknya msgpack tidak bersalah. Mengomentari IMAXLABEL
di tty.c
menyukai ini:
tio.c_iflag &= ~(IXON|IXOFF|ICRNL|INLCR|IGNCR|/*IMAXBEL|*/ISTRIP);
Hasil:
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.
Sekali lagi ... Ngomong-ngomong:
/Haiku/home/tmate> ./configure | grep -i OPENAT checking for openat... no
Tuan waddlesplash memberi tahu tempat untuk menggali:
/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.
Di sini saya meletakkan config.log .
Mereka menjelaskan kepada saya bahwa ada sesuatu yang lain di libnetwork ke libresolv di Haiku. Kemungkinan besar perlu untuk mengedit kode lebih lanjut. Saya harus berpikir ...
find . -type f -exec sed -i -e 's|lresolv|lnetwork|g' {} \;
Pertanyaan abadi: apa yang terjadi.
/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
Sama, hanya di profil. Dicari Google dan menemukannya . Jika menambahkan -lssp
"terkadang" membantu, saya mencoba:
/Haiku/home/tmate> ./configure LDFLAGS="-lbsd -lssp" (...)/Haiku/home/tmate> make (...)/Haiku/home/tmate> ./tmate
Wow! Sudah mulai! Tapi ...
[tmate] ssh.tmate.io lookup failure. Retrying in 2 seconds (non-recoverable failure in name resolution)
Saya akan mencoba men-debug file di sini :
/Haiku/home/tmate> strace -f ./tmate >log 2>&1
"ID port buruk" sudah seperti kartu nama haiku . Mungkin seseorang membayangkan apa yang salah, dan bagaimana cara memperbaikinya? Jika ada, saya akan memperbarui artikel. Tautan ke GitHub .
Porting aplikasi GUI ke Qt.
Saya memilih aplikasi QML sederhana.
/> 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!
Sangat sederhana. Kurang dari satu menit!
Mengemas aplikasi dalam hpkg menggunakan haikuporter dan haikuport.
Di mana untuk memulai? Tidak ada dokumentasi sederhana, saya pergi ke saluran #haiku di irc.freenode.net dan saya mendengar:
- Perintah
package
adalah cara tingkat rendah untuk membuat paket. Untuk sebagian besar, PackageInfo sudah cukup untuk itu, seperti yang dijelaskan di bagian "Membuatnya menjadi paket .hpkg yang tepat" - Saya perlu melakukan sesuatu seperti ini
- Anda dapat menggunakan pencipta hpkg (macet, laporan kesalahan )
Tidak jelas apa yang harus dilakukan. Saya kira saya perlu panduan pemula dalam gaya "Hello World!", Idealnya sebuah video. Akan menyenangkan untuk memiliki pengenalan yang mudah ke HaikuPorter, seperti yang dilakukan di GNU halo.
Saya membaca yang berikut ini:
haikuporter
adalah alat untuk membuat proyek batch bersama untuk Haiku. Ia menggunakan repositori HaikuPorts sebagai basis untuk semua paket. Untuk membuat paket, resep haikuporter digunakan.
Selain itu, saya mengetahui bahwa:
Tidak perlu menyimpan resep di brankas HaikuPorts. Anda dapat membuat repositori lain, memasukkan resep ke dalamnya, dan kemudian menunjuk haikuporter ke sana.
Apa yang saya butuhkan - jika Anda tidak mencari cara untuk memposting paket secara publik. Tapi ini adalah topik untuk posting lain.
Instal haikuporter dan haikuport
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
Menulis resep
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 }
Perakitan resep
Saya QtQuickApp-1.0.recipe
file sebagai QtQuickApp-1.0.recipe
, dan kemudian menjalankan aikuporter -S ./QuickApp-1.0.recipe
. Dependensi diperiksa untuk semua paket dalam repositori haikuports , yang membutuhkan waktu. Saya akan pergi minum kopi.
Dan mengapa pemeriksaan ini harus dilakukan pada mesin lokal saya, dan tidak terpusat pada server 1 kali untuk semua orang?
Menurut mr. waddlesplash:
Dengan begitu Anda dapat menulis ulang file apa pun di repositori;) Anda dapat sedikit mengoptimalkan ini dengan menghitung informasi yang diperlukan bila perlu, karena perubahan terbaru sangat jarang.
~/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
Ternyata tidak ada file resep biasa yang berisi kode sumber aplikasi Anda. Anda harus menyimpannya di repositori dalam format HaikuPorts.
~/QtQuickApp> mv QtQuickApp-1.0.recipe ../haikuports/app-misc/QtQuickApp/ ~/QtQuickApp> ../haikuport ~/QtQuickApp> haikuporter -S QtQuickApp-1.0.recipe
Fakta ini membuat perakitan lebih rumit. Saya tidak terlalu menyukainya, tetapi saya pikir itu perlu sehingga, pada akhirnya, semua perangkat lunak sumber terbuka muncul di HaikuPorts.
Saya mendapatkan yang berikut ini:
~/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.
Apa yang salah Setelah membaca irc saya lakukan:
~/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!
Sebuah pertanyaan menarik muncul. Jika saya menambahkan checksum ke resep - akankah itu cocok dengan komit git terbaru untuk integrasi berkelanjutan? (Pengembang mengonfirmasi: "Tidak ada yang akan dihasilkan. Resep dirancang agar relatif stabil.")
Untuk bersenang-senang, tambahkan ke resep:
CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"
Masih tidak senang:
~/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
Apa yang dia lakukan Lagi pula, ini adalah repositori git, kode sudah ada di sana secara langsung, tidak ada yang perlu dibuka. Dari sudut pandang saya, alat harus cukup pintar untuk tidak mencari pembongkar jika berada di atas url dengan GitHub.
Mungkin uri git: // akan bekerja
SOURCE_URI="git://github.com/probonopd/QtQuickApp.git"
Sekarang komplain seperti ini:
Downloading: git://github.com/probonopd/QtQuickApp.git ... Error: Downloading from unsafe sources is disabled in haikuports.conf!
Hmm, dan mengapa semuanya begitu rumit, mengapa Anda tidak bisa "bekerja" saja? Pada akhirnya, tidak jarang untuk membangun sesuatu dengan GitHub. Entah alat itu langsung bekerja, tanpa perlu penyesuaian, atau seperti yang saya sebut "ribut."
Mungkin akan bekerja seperti ini:
SOURCE_URI="git+https://github.com/probonopd/QtQuickApp.git"
Tidak. Masih mendapatkan kesalahan bodoh ini dan melakukan seperti yang dijelaskan di sini
sed -i -e 's|#ALLOW_UNSAFE_SOURCES|ALLOW_UNSAFE_SOURCES|g' /boot/home/config/settings/haikuports.conf
Saya bergerak sedikit lebih jauh, tetapi mengapa itu berteriak pada saya (GitHub tidak aman!) Dan masih mencoba membongkar sesuatu.
Menurut mr. waddlesplash :
Ya, alasannya adalah keinginan untuk memeriksa integritas data yang diperoleh untuk perakitan. Salah satu opsi adalah memverifikasi checksum arsip, tetapi Anda tentu saja dapat juga mengarsip file individual, yang tidak akan dilaksanakan, karena itu membutuhkan waktu lebih lama. Konsekuensi dari ini adalah "ketidakamanan" git dan VCS lainnya. Kemungkinan besar, ini akan selalu terjadi, karena membuat arsip di GitHub cukup mudah dan seringkali lebih cepat. Nah, di masa depan, mungkin pesan kesalahan tidak akan terlalu mencolok ... (kami tidak lagi menggabungkan resep seperti itu di 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
Sebagai kebiasaan lama, saya akan bertanya kepada orang-orang baik di saluran #haiku di jaringan irc.freenode.net. Dan di mana aku tanpa mereka? Setelah diminta, saya menyadari bahwa saya harus menggunakan:
srcGitRev="d0769f53639eaffdcd070bddfb7113c04f2a0de8" SOURCE_URI="https://github.com/probonopd/QtQuickApp/archive/$srcGitRev.tar.gz" SOURCE_DIR="QtQuickApp-$srcGitRev" CHECKSUM_SHA256="db8ab861cfec0ca201e9c7b6c0c9e5e828cb4e9e69d98e3714ce0369ba9d9522"
Ya, menjadi jelas apa yang dilakukannya - mengunduh arsip dengan sumber revisi tertentu. Itu bodoh, dari sudut pandang saya, dan tidak cukup apa yang saya inginkan, yaitu, mengunduh revisi terbaru dari cabang utama.
Salah satu pengembang menjelaskannya seperti ini:
Kami memiliki CI kami sendiri, sehingga segala sesuatu yang ditempatkan di repositori haikuports akan diamankan untuk semua pengguna, dan kami tidak ingin mengambil risiko dengan mengumpulkan dan mengirimkan "semua versi terbaru ke hulu".
Mengerti Bagaimanapun, ini terjadi:
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 (...)
Ia mengulangi iklan tak terhingga ini. Rupanya, ini adalah kesalahan (apakah ada aplikasi? Saya tidak menemukannya).
Dengan haikuporter
dan repositori haikuport Anda tidak merasakan level βhanya berfungsiβ, tetapi sebagai pengembang, saya menyukai beberapa hal tentang bekerja dengan Haiku. Untuk sebagian besar, ini mirip dengan Open Build Service - seperangkat alat untuk membangun rakitan Linux: sangat kuat, dengan pendekatan sistematis, tetapi tidak berguna untuk aplikasi hello world kecil saya.
Sekali lagi, menurut mr. waddlesplash:
Memang, HaikuPorter sangat ketat secara default (ditambah ada mode lint, serta mode ketat, membuatnya bahkan lebih ketat!), Tetapi hanya karena ia menciptakan paket yang akan bekerja, dan bukan hanya membuat paket. Oleh karena itu, ia bersumpah pada dependensi yang tidak diumumkan, perpustakaan tidak diimpor dengan benar, versi yang salah, dll. Tujuannya adalah untuk menangkap semua masalah tanpa terkecuali, termasuk yang akan datang, sebelum pengguna mengetahuinya (karena itu, tidak mungkin menginstal avrdude, karena dependensi sebenarnya ditunjukkan dalam resep). Perpustakaan bukan hanya paket terpisah atau bahkan versi SO yang tidak ditentukan. HaikuPorter memastikan bahwa semua ini diikuti dalam resep untuk menghindari kesalahan runtime.
Pada prinsipnya, tingkat kekakuan ini dibenarkan ketika membuat sistem operasi, tetapi bagi saya sepertinya tidak diperlukan untuk aplikasi hello world. Saya memutuskan untuk mencoba sesuatu yang lain.
Mungkin instruksi sederhana ini cocok untuk saya?
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
Cepat, tak terduga, sederhana, tak terduga, efektif tak terduga. Seperti yang saya suka, luar biasa!
Instalasi - apa dan di mana?
Memindahkan file QtQuickApp.hpkg ke ~/config/packages
menggunakan manajer file, setelah itu QtQuickApp secara ajaib muncul di ~/config/apps
.
Sekali lagi, tanpa diduga cepat, sederhana dan efektif. Luar biasa, luar biasa!
Tapi ... (di mana tanpa mereka!)
Aplikasi ini masih belum ada dalam daftar menu aplikasi dan di QuickLaunch. Saya rasa saya sudah tahu cara memperbaikinya. Di manajer file, saya memindahkan QtQuickApp.hpkg dari ~ / config / packages ke / system / paket.
Nah, masih hilang. Rupanya, saya (baik, instruksi) melewatkan sesuatu.
Setelah memeriksa tab "Contents" di HaikuDepot untuk beberapa aplikasi lain, saya melihat bahwa ada file dalam bentuk /data/mimedb/application/x-vnd...
apa yang bahkan lebih luar biasa, /data/deskbar/menu/Applications/β¦
Nah, dan apa yang harus saya letakkan di sana? Baiklah ...
mkdir -p data/deskbar/menu/Applications/ ( cd data/deskbar/menu/Applications ; ln -s ../../../../apps/QtQuickApp . ) package add QtQuickApp.hpkg apps data
Saya cukup yakin bahwa trik ini akan memberi tumpangan, tetapi pertanyaan tetap ada: mengapa itu diperlukan, untuk apa? Menurut pendapat saya, ini menghancurkan kesan keseluruhan bahwa sistemnya sangat canggih.
Seperti yang dijelaskan oleh mr. waddlesplash:
Terkadang ada aplikasi yang membutuhkan aplikasi lain, tetapi tidak pada menu. Misalnya, LegacyPackageInstaller di tangkapan layar Anda yang memproses arsip .pkg dalam format BeOS. Saya ingin pengguna mengaturnya, tetapi kehadiran mereka di menu akan menyebabkan kebingungan.
Untuk beberapa alasan, menurut saya ada solusi yang lebih sederhana, misalnya Hidden=true
di Linux .desktop
files. Mengapa tidak menjadikan informasi "tersembunyi" sebagai sumber daya dan atribut dari sistem file?
Apa yang tidak terlalu canggih adalah nama aplikasi (tertentu) yang menampilkan menu, deskbar
, terikat erat di sepanjang jalan.
Tuan waddlesplash pada kesempatan ini menjelaskan:
"Deskbar" dalam hal ini harus dipahami sebagai semacam istilah umum (kira-kira sama dengan "taskbar", mengacu pada aplikasi Windows dan konsep umum). Nah, karena ini adalah deskbar
, bukan "Deskbar", ini juga dapat dipahami dengan cara yang sama.

2 direktori "hampir identik" dengan aplikasi di dalamnya
Mengapa ada 2 direktori dengan aplikasi, dan juga mengapa ada satu di QtQuickApplication saya dan tidak di yang lain? (Bagaimanapun, ini bukan satu sistem, tetapi pengguna kedua, yang secara pribadi saya akan mengerti).
Saya benar-benar bingung dan saya pikir kita harus menyatukan ini.
Komentar mr. waddlesplash
Dalam direktori Aplikasi ada aplikasi yang tidak diperlukan dalam menu. Tetapi situasi dengan menu benar-benar perlu ditingkatkan, untuk membuatnya lebih dapat disesuaikan.
Aplikasi, atau ini tidak akan terjadi;)
Saya pikir: apakah benar-benar perlu untuk menempatkan aplikasi di /system/apps
, jika pengguna melihatnya di sana - itu tidak diinginkan. Mungkin lebih baik menempatkan mereka di tempat lain di mana pengguna tidak akan menemui mereka? Sama seperti yang dilakukan pada Mac OS X, di mana isi paket .app
, yang seharusnya tidak terlihat oleh pengguna di /Applications
, disembunyikan di perut / System / Library / ... ``.
Bagaimana dengan dependensi?
Saya pikir ada baiknya menunjukkan ketergantungan entah bagaimana, kan? Bisakah Qt dianggap sebagai bagian wajib dari instalasi Haiku default? Tidak! Qt tidak diinstal secara default. Apakah program pembuatan paket dapat secara otomatis mendeteksi ketergantungan dengan memeriksa file ELF? Saya diberitahu bahwa HaikuPorter benar-benar melakukannya, tetapi package
tidak. Itu karena dia hanya " hpkg
paket", yang dengan sendirinya hanya membuat file hpkg
.
Haruskah Haiku lebih disempurnakan dengan menambahkan kebijakan yang menurutnya suatu paket tidak boleh memiliki ketergantungan pada paket yang tidak termasuk dalam haikuports
? (Saya ingin sekali, karena kebijakan seperti itu membuat tugas lebih mudah - sistem akan dapat secara otomatis menyelesaikan dependensi setiap paket yang diunduh dari mana saja tanpa repot dengan sumber paket tambahan).
Tuan waddlesplash menjelaskan:
, , ( ) β .
-, haikuports, . , , . [ AppImage? β . penerjemah]
? , , .
?
, Inkscape (, , Haiku, ). https://gitlab.com/inkscape/inkscape
.
, - , , , , , AppImage Linux ( , , , [ ! β . ] ). , , , , .

( )
Docker. GitLab runners Linux, , runners (, , Haiku, , , Docker , FreeBSD Docker, Haiku).
Haiku Docker Linux. Haiku . ? Haiku Docker, - QEMU/KVM ( , Docker)? , . , Scribus β Haiku. , , Haiku.
:
, , CMake/CPack. , , , . : , haikuporter , , , . Linux (Haiku ).
. Linux (, ..), , . , Haiku Linux β .
Kesimpulan
POSIX Haiku , , . , #haiku irc.freenode.net. , .
, Qt, β . .
, " ", .. , haikuports. ( ) GitHub . Haiku Linux, Mc, "" XCode .app
, .dmg
, .
"" , , Linux, , , Haiku , .
Coba sendiri! Bagaimanapun, proyek Haiku menyediakan gambar unduhan harian dari DVD atau USB. Untuk menginstal, cukup unduh gambar dan tulis ke USB flash drive menggunakan Etcher
Punya pertanyaan? Kami mengundang Anda ke saluran telegram berbahasa Rusia.
Gambaran Umum Bug: Cara memotret kaki Anda di C dan C ++. Koleksi Resep OS Haiku
: Haiku.
: