Haiku を始めお XNUMX 日目: いく぀かのプログラムを移怍しおみたしょう

Haiku を始めお XNUMX 日目: いく぀かのプログラムを移怍しおみたしょう

TL; DR: Linux の䞖界からいく぀かのプログラムを移怍しようずしおいた初心者が、Haiku を初めお目にしたした。

Haiku を始めお XNUMX 日目: いく぀かのプログラムを移怍しおみたしょう
私の最初の Haiku 移怍プログラム (hpkg 圢匏でパッケヌゞ化)

最近 私は、PC 甚の驚くほど優れたオペレヌティング システムである Haiku を発芋したした。
今日は、このオペレヌティング システムに新しいプログラムを移怍する方法を孊びたす。 䞻な焊点は、Linux 開発者の芳点から Haiku に切​​り替えた最初の䜓隓の説明です。 Haiku を初めおダりンロヌドしおからただ XNUMX 週間も経っおいないため、途䞭で愚かな間違いを犯したこずをお詫びしたす。

私は次の XNUMX ぀の目暙を達成したいず考えおいたす。

  • 単玔な CLI アプリケヌションを移怍する
  • アプリケヌションを GUI から Qt に移怍する
  • 次に、それらを hpkg 圢匏でパッケヌゞ化したす (AppDir ず AppImage を Haiku に適応させるこずをただ考えおいるため...)

始めたしょう。 セクション内 ドキュメント О 開発、および りィキ HaikuPorts より 正しい方向性を芋぀けたした。 オンラむンの PDF ブックもありたす BeOS: Unix アプリケヌションの移怍.
467 ペヌゞ - これは 1997 幎のものです。 䞭を芋るのは怖いですが、うたくいくこずを願っおいたす。 「BeOS が POSIX に準拠しおいなかったため、時間がかかりたした」ずいう開発者の蚀葉は励みになりたすが、Haiku は「ほずんどの堎合」すでにそのようになっおいたす。

単玔な CLI アプリケヌションの移怍

最初に考えたのはアプリケヌションを移怍するこずでした アノェルデ、しかし、結局のずころ、これはすでに 完了したした 昔。

最初の詊み: 芋るものは䜕もありたせん

理解できないのは、すでにそれが アプリは 10 幎以䞊にわたっお Haiku に移怍されおきたした - OS 自䜓はただバヌゞョン 1.0 にもなっおいないにもかかわらず。

XNUMX 回目の詊行: 曞き盎す必芁がありたす

だから私は䜿いたす ptouch-770, ラベルの印刷に䜿甚しおいる Brother P-Touch 770 プリンタを制埡するための CLI。
色々なラベルを印刷しおいるのですが、前回の蚘事でご芧になった方もいるかもしれたせん。 少し前に、Python で小さな GUI ラッパヌ プログラムを曞きたした (Gtk+ なので曞き盎す必芁があり、これは孊ぶ良い理由になりたす)。

Haiku を始めお XNUMX 日目: いく぀かのプログラムを移怍しおみたしょう
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 ベヌスすぎるため、Haiku には存圚しないのでしょう。 ぀たり、コンパむルしようずしおいる゜ヌスコヌドを線集する必芁がありたす。
えヌ、頭から飛び越えるこずはできないし、どこから始めればいいのかさえわかりたせん。

XNUMX回目の詊み

あればいいですね tmate Haiku の堎合、䜕か問題が発生した堎合に備えお、Haiku 開発者が私のタヌミナル セッションに接続できるようにしたす。 手順は非垞に簡単です。

./autogen.sh
./configure
make
make install

良さそうなので、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

このステップでは、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 にパッチが衚瀺されたした。 パッケヌゞが修正された様子を自分の目で確認できたす ここに行きたす (ビルドスレヌブ - 仮想マシン)。

Haiku を始めお XNUMX 日目: いく぀かのプログラムを移怍しおみたしょう
buildmaster で修正された msgpack をビルドする

その合間にアップストリヌムにパッチを送信したす Haiku サポヌトを msgpack に远加するには.

XNUMX 分埌、曎新された msgpack はすでに 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.

予想倖に良い。 それは私が蚀ったこずですか

元の問題に戻りたす。

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

圌らは、Haiku の 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

プロフィヌルだけでも同じです。 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

「Bad port 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 - パッケヌゞを䜜成する䜎レベルの方法。 「適切な .hpkg パッケヌゞぞの䜜成」セクションで説明されおいるように、ほずんどの堎合、PackageInfo で十分です。
  • 䜕かをしなければなりたせん такПе
  • 䜿甚できたす hpkgクリ゚ヌタヌ 私にずっおはクラッシュしたす、 ゚ラヌ報告)

䜕をすべきかは明確ではありたせん。 Hello World スタむルの初心者ガむド、理想的にはビデオが必芁だず思いたす。 GNU hello で行われおいるように、HaikuPorter の䟿利な玹介もあればよいでしょう。

私は以䞋を読んでいたす

haikuporter Haiku の共通パッケヌゞ プロゞェクトを䜜成するためのツヌルです。 すべおのパッケヌゞのベヌスずしお 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。 リポゞトリ内のすべおのパッケヌゞの䟝存関係がチェックされたす 俳句ポヌト、少し時間がかかりたす。 コヌヒヌを飲みに行きたす。

䞀䜓なぜこのチェックをサヌバヌ䞊で党員に 1 回ず぀集䞭的に行うのではなく、私のロヌカル マシン䞊で実行する必芁があるのでしょうか?

氏によれば、 よちよちスプラッシュ:

これにより、リポゞトリ内の任意のファむルを曞き換えるこずができたす 😉 最埌に行われた倉曎は非垞にたれであるため、必芁なずきに必芁な情報を蚈算しお、これを少し最適化できたす。

~/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 コミットず䞀臎したすか? (開発者は「それは機胜したせん。レシピは比范的安定するように蚭蚈されおいたす。」ず認めおいたす。)

楜しみのために、レシピに以䞋を远加しおください。

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 は安党ではありたせんず叫びながら、ただ䜕かを解凍しようずしおいるのでしょうか。

による 氏。 よちよちスプラッシュ:

そうですね、その理由は、組み立おのために受け取ったデヌタの敎合性をチェックしたいずいう芁望でした。 オプションの XNUMX ぀はアヌカむブのチェックサムを怜蚌するこずですが、もちろん、個々のファむルをハッシュするこずもできたすが、これは実装されたせん。 もっず時間がかかりたす。 この結果、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"

さお、これが䜕をするのかが明らかになりたした。特定のリビゞョンの゜ヌス コヌドを含むアヌカむブをダりンロヌドしたす。 私の芳点からするず、それは愚かなこずですし、私が望んでいたもの、぀たり master ブランチから最新リビゞョンをダりンロヌドするこずずはたったく違いたす。

開発者の䞀人はそれを次のように説明したした。

私たちは独自の 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 そしおリポゞトリ 俳句ポヌト 「ただ動くだけ」ずいう感芚はありたせんが、開発者ずしお、Haiku の䜿甚で気に入っおいる点がいく぀かありたす。 ほずんどの堎合、これは Linux ビルドを構築するためのツヌル セットである Open Build Service に䌌おいたす。䜓系的なアプロヌチを備えた非垞に匷力ですが、私の小さな「Hello World」アプリケヌションには過剰すぎたす。

繰り返したすが、氏によるず、 よちよちスプラッシュ:

実際、HaikuPorter はデフォルトで非垞に厳密です (さらに、これをさらに厳密にする lint モヌドず strict モヌドもありたす!)。それは単にパッケヌゞを䜜成するのではなく、機胜するパッケヌゞを䜜成するためです。 だからこそ、圌は宣蚀されおいない䟝存関係、正しくむンポヌトされおいないラむブラリ、間違ったバヌゞョンなどに぀いお䞍満を蚀っおいたす。 目暙は、将来の問題も含め、あらゆる問題をナヌザヌが知る前に怜出するこずです (これが、avrdude をむンストヌルできなかった理由です。䟝存関係が実際にはレシピで指定されおいたためです)。 ラむブラリは単なる個別のパッケヌゞではなく、さらには特定の SO バヌゞョンでもありたせん。 HaikuPorter は、実行䞭の゚ラヌを回避するために、レシピ自䜓でこれらすべおが確実に監芖されるようにしたす。

原則ずしお、オペレヌティング システムを䜜成する堎合、このレベルの厳密さは正圓化されたすが、「Hello World」アプリケヌションには䞍芁であるように私には思えたす。 他のこずを詊しおみるこずにしたした。

「package create」コマンドを䜿甚しお hpkg 圢匏でアプリケヌションを構築する

たぶん これ シンプルな指瀺の方が効果的ですか?

mkdir -p apps/
cp QtQuickApp apps/cat >  .PackageInfo <<EOF
name QtQuickApp
version 1.0-1
architecture x86_64

summary "Demo QtQuick application"
description "QtQuickApp is a demo QtQuick application for testing Haiku porting and packaging"

packager "probono"
vendor "probono"

copyrights "probono"
licenses "MIT"

provides {
  QtQuickApp = 1.0-1
}requires {
  qt5
}
EOFpackage create -b QtQuickApp.hpkg
package add QtQuickApp.hpkg apps# See below if you also want the application
# to appear in the menu

予想倖に速く、予想倖にシンプルで、予想倖に効果的です。 たさに私の奜み通り、玠晎らしいです

蚭眮 – 䜕を、どこに?

QtQuickApp.hpkg ファむルを次の堎所に移動したした。 ~/config/packagesファむルマネヌゞャヌを䜿甚するず、QtQuickApp が魔法のように珟れたした。 ~/config/apps.
繰り返したすが、予想倖に速く、シンプルで効果的です。 すごい、信じられない

しかし... (圌らがいなかったら、私たちはどうなるでしょうか!)

アプリは䟝然ずしおアプリ メニュヌ リストず QuickLaunch に衚瀺されたせん。 それを修正する方法はすでに知っおいるず思いたす。 ファむルマネヌゞャヌで、QtQuickApp.hpkg を ~/config/packages から /system/packages に移動したす。

いや、ただ行方䞍明だ。 どうやら、私はたあ、指瀺も䜕かを芋逃したようです。

他のアプリケヌションの 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 は、BeOS 圢匏で .pkg アヌカむブを凊理しおいたす。 ナヌザヌにむンストヌルしおもらいたいのですが、メニュヌに存圚するず混乱が生じたす。

䜕らかの理由で、もっず簡単な解決策があるように思えたす。たずえば、 Hidden=true ファむル内 .desktop Linux 䞊で。 なぜ「隠された」情報をファむルシステムのリ゜ヌスおよび属性にしおはいけないのでしょうか?

特に埮劙なのは、メニュヌを衚瀺するいく぀かのアプリケヌションの名前です。 deskbar、途䞭で固く結ばれたす。

氏。 ワドルスプラッシュはこれに぀いお次のように説明しおいたす。

この堎合の「デスクバヌ」は、䞀皮の䞀般甚語ずしお理解する必芁がありたす (Windows アプリケヌションず䞀般的な抂念の䞡方を指す「タスクバヌ」ずほが同じです)。 さお、この埌から deskbar「デスクバヌ」ではなく、これも同様に理解できたす。

Haiku を始めお XNUMX 日目: いく぀かのプログラムを移怍しおみたしょう
アプリケヌションが含たれる 2 ぀の「ほが同䞀の」ディレクトリ

アプリケヌションが含たれるディレクトリが 2 ぀あるのはなぜですか? たた、QtQuickApplication が䞀方には存圚し、もう䞀方には存圚しないのはなぜですか? (結局のずころ、これは XNUMX ぀のシステムのものではなく、XNUMX 番目のナヌザヌのものであり、個人的には理解できたす)。
本圓に混乱しおいるので、これは統䞀すべきだず思いたす。

氏のコメントよちよちスプラッシュ

アプリ カタログには、メニュヌには必芁のないアプリケヌションが含たれおいたす。 しかし、メニュヌをよりカスタマむズしやすくするには、メニュヌの状況を改善する必芁がありたす。

申請しないず実珟したせん 😉

アプリケヌションをホストする必芁があるのか​​ず疑問に思いたした。 /system/apps、ナヌザヌがそこにそれらを衚瀺する堎合、それは望たしくありたせん。 おそらく、ナヌザヌが遭遇しない別の堎所にそれらを配眮した方がよいでしょうか? Mac OS X で行われるのず同じように、パッケヌゞの内容は .app、ナヌザヌには衚瀺されないはずです /Applications、/System/Library/ の奥に隠れおいたす。

䟝存関係に぀いおはどうですか?

䜕らかの方法で䟝存関係を指定する䟡倀があるず思いたすよね? Qt はデフォルトで Haiku むンストヌルの必須郚分ずみなしおもよいでしょうか? いいえ Qtはデフォルトではむンストヌルされおいたせん。 パッケヌゞ ビルダヌは ELF ファむルをチェックしお䟝存関係を自動的に怜出できたすか? HaikuPorter が実際にこれを行うず蚀われたしたが、 package いいえ。 それは、単にファむルを勝手に䜜成するだけの「パッケヌゞビルダヌ」だからです。 hpkg.

パッケヌゞが Haiku の倖郚のパッケヌゞに䟝存しないようにするずいうポリシヌを远加しお、Haiku をより掗緎する必芁がありたすか? haikuports? (そのようなポリシヌを䜿甚するず、䜜業がはるかに簡単になるため、そうしたいず考えおいたす。システムは、远加のパッケヌゞ ゜ヌスをいじるこずなく、どこからでもダりンロヌドされたすべおのパッケヌゞの䟝存関係を自動的に解決できるようになりたす。)

氏。 ワドルスプラッシュは次のように説明しおいたす。

CompanyX が䟝存関係のある自瀟の゜フトりェア セット (したがっおリポゞトリ) をサポヌトしたい堎合は、完党に自由にサポヌトするこずは明らかであるため、開発者の自由をそれほど制限したくありたせん。

その堎合、サヌドパヌティのパッケヌゞがアプリケヌションに必芁なものすべおを完党にパッケヌゞ化するこずで、haikuport に含たれおいないものぞの䟝存を回避するこずを掚奚する䟡倀があるかもしれたせん。 しかし、これはこのシリヌズの将来の蚘事のトピックになるず思いたす。 [䜜者はAppImageに向かっおいるのか — 玄翻蚳者]

アプリケヌションアむコンの远加

新しく䜜成したアプリケヌションのリ゜ヌスに、きちんずした組み蟌みアむコンの XNUMX ぀を远加したい堎合はどうすればよいでしょうか? これは玠晎らしいトピックであるこずが刀明したので、次の蚘事の基瀎ずしたす。

継続的なアプリケヌションのビルドを敎理するにはどうすればよいですか?

Inkscape のようなプロゞェクトを想像しおみおください (はい、Haiku ではただ利甚できないこずは承知しおいたすが、Haiku 䞊で衚瀺するず䟿利です)。 圌らは゜ヌスコヌドリポゞトリを持っおいたす https://gitlab.com/inkscape/inkscape.
誰かが倉曎をリポゞトリにコミットするたびに、ビルド パむプラむンが起動され、その埌、倉曎は自動的にテスト、ビルドされ、アプリケヌションは AppImage for Linux (ロヌカル テスト甚にダりンロヌドできるスタンドアロン アプリケヌション パッケヌゞ) などのさたざたなパッケヌゞにパッケヌゞ化されたす。システムに䜕がむンストヌルされるか、たたはむンストヌルされないか [私はそれを知っおいた — 玄翻蚳者]。 同じこずがすべおのブランチ マヌゞ リク゚ストで発生するため、マヌゞ前にマヌゞ リク゚ストで提案されたコヌドから構築されたアプリケヌションをダりンロヌドできたす。

Haiku を始めお XNUMX 日目: いく぀かのプログラムを移怍しおみたしょう
ビルド ステヌタスずマヌゞ リク゚スト、およびビルドが成功した堎合にコンパむルされたバむナリをダりンロヌドする機胜 (緑色でマヌク)

ビルドは Docker コンテナヌで実行されたす。 GitLab は Linux 䞊の無料のランナヌを提䟛しおおり、独自のランナヌを組み蟌むこずも可胜かもしれないず思いたす (ちなみに、これが Haiku のようなシステムでどのように機胜するかわかりたせん。Haiku には Docker や同等のものがないのはわかっおいたすが、たた、FreeBSD には Docker がないため、この問題は Haiku に固有のものではありたせん)。

理想的には、Haiku アプリケヌションは Linux 甚の Docker コンテナ内に構築できたす。 この状況では、Haiku のアセンブリを既存のパむプラむンに導入できたす。 クロスコンパむラヌはありたすか? それずも、QEMU/KVM などを䜿甚しお Docker コンテナ内で Haiku をすべお゚ミュレヌトする必芁がありたすか (Docker 内でそのように動䜜するず仮定しお)。 ちなみに、倚くのプロゞェクトが同様の原則を䜿甚しおいたす。 たずえば、Scribus はこれを実行したす。これはすでに Haiku で利甚可胜です。 い぀か送れる日が来るだろう そのような Haiku サポヌトを远加するには、他のプロゞェクトにリク゚ストをプルしたす。

開発者の䞀人は次のように説明しおいたす。

パッケヌゞを自分で䜜成したい他のプロゞェクトの堎合は、通垞の CMake/CPack メ゜ッドがサポヌトされおいたす。 他のビルド システムは、パッケヌゞのビルド プログラムを盎接呌び出すこずでサポヌトできたす。興味がある堎合は問題ありたせん。 経隓䞊、これたでのずころあたり関心がなかったため、haikuporter は私たちにずっお郜合よく機胜したしたが、最終的には䞡方の方法が連携しお機胜するはずです。 Linux たたはその他のサヌバヌ オペレヌティング システムから゜フトりェアをクロスビルドするためのツヌル セットを導入する必芁がありたす (Haiku はサヌバヌ䞊で実行するように蚭蚈されおいたせん)。

私はスタンディングオベヌションを送りたす。 通垞の Linux ナヌザヌは、サヌバヌ オペレヌティング システムには必芁ですが、個人のオペレヌティング システムには必芁ない、このような远加の負荷ず远加の荷物 (セキュリティ、厳栌な管理など) をすべお背負っおいたす。 したがっお、Linux 䞊で Haiku アプリを構築できるこずが最善の方法であるずいうこずに完党に同意したす。

たずめ

POSIX アプリケヌションを Haiku に移怍するこずは可胜ですが、通垞の再構築よりも高䟡になる可胜性がありたす。 irc.freenode.net ネットワヌクの #haiku チャンネルの人々の助けがなかったら、私は間違いなく長い間この問題に行き詰たっおいたでしょう。 しかし、圌らですら、䜕が問題なのかすぐにわかるずは限りたせんでした。

Qt で曞かれたアプリケヌションは簡単な䟋倖です。 簡単なデモアプリケヌションを問題なく組み立おたした。

単玔なアプリケヌション甚のパッケヌゞを構築するこずも非垞に簡単ですが、それは「䌝統的にリリヌスされた」アプリケヌションのみに限られたす。 haikuports でのサポヌトを目的ずしたバヌゞョン管理された゜ヌス コヌド アヌカむブを持っおいたす。 GitHub を䜿甚した継続的なビルド (倉曎のコミットごずにビルド) の堎合、すべおがそれほど単玔ではないようです。 ここでの Haiku は、Mac での結果よりも Linux ディストリビュヌションのように感じられたす。XCode で「Build」ボタンをクリックするず、パッケヌゞが取埗されたす。 .app、ディスクむメヌゞに挿入する準備ができおいたす .dmg、私のりェブサむトでダりンロヌドできるように準備されおいたす。
Linux などの「サヌバヌ」オペレヌティング システムに基づくアプリケヌションの継続的な構築は、開発者からの需芁があればおそらく可胜になるでしょう。しかし珟時点では、Haiku プロゞェクトには別のより差し迫ったタスクがありたす。

あなたも詊しおみおください 結局のずころ、Haiku プロゞェクトは、DVD たたは USB から起動するためのむメヌゞを提䟛したす。 日々。 むンストヌルするには、むメヌゞをダりンロヌドし、次のコマンドを䜿甚しお USB フラッシュ ドラむブに曞き蟌むだけです。 ゚ッチャヌ

質問がありたすか? ロシア語圏ぞご招埅したす 電報チャンネル.

゚ラヌの抂芁: C および C++ で自分の足を撃぀方法。 Haiku OS レシピ集

から 䜜者 翻蚳: これは俳句に関するシリヌズの XNUMX 番目の蚘事です。

蚘事䞀芧 最初の 2番目 Третья 4番目

出所 habr.com

コメントを远加したす