Хайкумен бесінші күнім: кейбір бағдарламаларды жіберейік

Хайкумен бесінші күнім: кейбір бағдарламаларды жіберейік

TL; DR: Жаңадан келген адам Linux әлемінен кейбір бағдарламаларды тасымалдауға тырысып жатқан Хайкуды бірінші рет көрді.

Хайкумен бесінші күнім: кейбір бағдарламаларды жіберейік
Менің hpkg пішімінде оралған бірінші Haiku порты бағдарламасы

Жақында Мен компьютерлерге арналған таңқаларлық жақсы операциялық жүйе Haiku-ны таптым.
Бүгін мен осы операциялық жүйеге жаңа бағдарламаларды тасымалдауды үйренемін. Негізгі назар Linux әзірлеушісінің көзқарасы бойынша Хайкуға ауысудың алғашқы тәжірибесінің сипаттамасы болып табылады. Жолда жіберген ақымақ қателіктерім үшін кешірім сұраймын, өйткені Хайкуды алғаш жүктеп алғаныма бір апта да болған жоқ.

Мен үш мақсатқа қол жеткізгім келеді:

  • Қарапайым CLI қолданбасын порттаңыз
  • Қолданбаны GUI интерфейсінен Qt
  • Содан кейін оларды hpkg пішімінде ораңыз (өйткені мен AppDir және AppImage қолданбаларын Haiku үшін бейімдеу туралы әлі де ойлап жүрмін...)

Бастайық. Бөлімдер бойынша құжаттама и әзірлеу, сонымен қатар уики HaikuPorts-тен мен дұрыс бағытты таптым. Тіпті онлайн PDF кітабы бар BeOS: Unix қолданбасын тасымалдау.
467 бет - бұл 1997 жылдан бастап! Ішіне қарау қорқынышты, бірақ мен жақсылыққа үміттенемін. Әзірлеушінің сөздері жігерлендіреді: «бұл көп уақытты алды, өйткені BeOS POSIX сәйкес келмеді», бірақ Хайку «көбінесе» солай.

Қарапайым CLI қолданбасын тасымалдау

Бірінші ой қолданбаны портқа жіберу болды avrdude, бірақ, белгілі болғандай, бұл қазірдің өзінде жасадық ерте ертеде.

Бірінші әрекет: қарауға ештеңе жоқ

Менің түсінбейтін нәрсем қазірдің өзінде Қолданбалар Haiku жүйесіне 10 жылдан астам тасымалданды - операциялық жүйенің өзі әлі 1.0 нұсқасы болмағанына қарамастан.

Екінші әрекет: қайта жазу керек

Сондықтан мен қолданамын ptouch-770, Жапсырмаларды басып шығару үшін пайдаланатын Brother P-Touch 770 принтерін басқаруға арналған CLI.
Мен оған әртүрлі белгілерді басып шығарамын, сіз оны алдыңғы мақалада көрген боларсыз. Біраз бұрын, мен Python тілінде шағын GUI орауыш бағдарламасын жаздым (ол Gtk+ тілінде болғандықтан, оны қайта жазу керек болады және бұл үйренуге жақсы себеп).

Хайкумен бесінші күнім: кейбір бағдарламаларды жіберейік
Brother P-Touch 770 жапсырма принтері. Ол Хайкумен жұмыс істей ме?

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 әзірлеушілерімен сөйлестім, msgpack-та қате бар екені анықталды және бірнеше минуттан кейін мен HaikuPorts-та патчты көремін. Түзетілген пакетті өз көзіммен көріп тұрмын осында бара жатыр (Buildslave - виртуалды машиналар).

Хайкумен бесінші күнім: кейбір бағдарламаларды жіберейік
buildmaster бағдарламасында түзетілген msgpack құрастыру

Уақыт арасында мен жоғары ағынға патч жіберемін msgpack бағдарламасына Haiku қолдауын қосу үшін.

Бес минуттан кейін жаңартылған 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.

Олар маған Хайкудағы 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

«Нашар порт идентификаторы» қазірдің өзінде визит картасы сияқты хайку. Мүмкін біреу ненің дұрыс емес екенін және оны қалай түзетуге болатынын түсінетін шығар? Олай болса, мақаланы жаңартамын. сілтемесі 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 Хайку үшін ортақ пакеттік жобаларды жасауға арналған құрал болып табылады. Ол 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!

Қызық сұрақ туындады. Рецептке бақылау сомасын қоссам - ол үздіксіз интеграция үшін соңғы 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 қауіпсіз емес!) және әлі де бір нәрсені ашуға тырысады.

бойынша Мырза. вадлсплаш:

Иә, себебі құрастыру үшін алынған деректердің тұтастығын тексеру ниеті болды. Опциялардың бірі - мұрағаттың бақылау сомасын тексеру, бірақ сіз, әрине, жеке файлдарды хэштей аласыз, олар орындалмайды, өйткені бұл әлдеқайда ұзағырақ уақыт алады. Мұның салдары 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-ке ұқсайды, Linux құрылымдарын құруға арналған құралдар жиынтығы: өте қуатты, жүйелі тәсілмен, бірақ менің кішкентай «сәлем әлем» қолданбасы үшін артық.

Тағы да, мырзаның айтуынша. ваддлесплаш:

Шынында да, 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 ішінен /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, жолда қатты байланған.

Мырза. waddlesplash мұны түсіндіреді:

Бұл жағдайда «жұмыс үстелі» жалпы терминнің бір түрі ретінде түсінілуі керек (Windows қолданбасына да, жалпы тұжырымдамаға да қатысты «тапсырмалар тақтасы» сияқты). Міне, содан бері deskbar, «Жұмыс үстелі» емес, мұны да дәл осылай түсінуге болады.

Хайкумен бесінші күнім: кейбір бағдарламаларды жіберейік
Қосымшалары бар 2 «дерлік бірдей» каталогтар

Неліктен қолданбалары бар 2 каталог бар, сонымен қатар менің QtQuickApplication неге бірінде, бірақ екіншісінде жоқ? (Ақыр соңында, бұл бір жүйе емес, екінші пайдаланушы, бұл маған түсінікті болар еді).
Мен шынымен шатастырамын және менің ойымша, бұл біртұтас болуы керек.

мырзаның пікірі. вадлсплаш

Қолданбалар каталогында мәзірде қажет емес қолданбалар бар. Бірақ мәзірдің жағдайын жақсарту керек, оны теңшеуге болады.

Өтініш, әйтпесе ол болмайды 😉

Мен таң қалдым: қолданбаларды орналастыру шынымен қажет пе? /system/apps, егер пайдаланушылар оларды сол жерде көрсе, бұл қажет емес. Мүмкін, оларды пайдаланушы оларды кездестірмейтін басқа жерге орналастырған дұрыс шығар? Бұл Mac OS X жүйесінде жасалғандай, онда пакеттердің мазмұны .app, ол пайдаланушыға көрінбеуі керек /Applications, /Жүйе/Кітапхана/…“` тереңдігінде жасыру.

Тәуелділіктер туралы не деуге болады?

Менің ойымша, тәуелділіктерді қандай да бір түрде көрсету керек, солай емес пе? Qt әдепкі бойынша Хайку орнатудың міндетті бөлігі деп санауға бола ма? Жоқ! Qt әдепкі бойынша орнатылмаған. Пакет құрастырушы ELF файлдарын тексеру арқылы тәуелділіктерді автоматты түрде анықтай ала ма? Маған HaikuPorter мұны шынымен жасайды деп айтты, бірақ package Жоқ. Себебі бұл жай ғана файлдарды өздігінен жасайтын «пакет құрастырушы». hpkg.

Пакеттің Хайкудан тыс пакеттерге тәуелділігі болмауы керек деген саясатты қосу арқылы Хайкуды күрделірек ету керек пе? haikuports? (Мен қалаймын, өйткені мұндай саясат жағдайды айтарлықтай жеңілдетеді - жүйе қосымша пакет көздерімен араласпай, кез келген жерден жүктелген әрбір пакеттің тәуелділіктерін автоматты түрде шеше алады.)

Мырза. waddlesplash түсіндіреді:

Әзірлеушілердің еркіндігін соншалықты шектегіміз келмейді, өйткені CompanyX тәуелділіктермен (демек, репозиторий) өзінің бағдарламалық қамтамасыз ету жинағын қолдағысы келсе, ол мұны толығымен еркін жасайтыны анық.

Бұл жағдайда қолданбаға қажеттінің барлығын толығымен орау арқылы үшінші тарап пакеттеріне haikuports құрамына кірмейтін кез келген нәрсеге тәуелділіктен аулақ болуды ұсынған жөн. Бірақ бұл осы сериядағы болашақ мақаланың тақырыбы деп ойлаймын. [Автор AppImage-ке бет алды ма? — шамамен. аудармашы]

Қолданба белгішесін қосу

Жаңадан жасалған қолданбамның ресурстарына ұқыпты кірістірілген белгішелердің бірін қосқым келсе ше? Бұл таңғажайып тақырып болғандықтан келесі мақалаға негіз болады екен.

Үздіксіз қолданбаларды құрастыруды қалай ұйымдастыруға болады?

Inkscape сияқты жобаны елестетіп көріңіз (иә, мен оның Хайкуда әлі қол жетімді емес екенін білемін, бірақ оны көрсету ыңғайлы). Олардың бастапқы кодының репозиторийі бар https://gitlab.com/inkscape/inkscape.
Репозиторийге біреу өз өзгертулерін енгізген сайын, құрастыру құбырлары іске қосылады, содан кейін өзгерістер автоматты түрде тексеріледі, құрастырылады және қолданба әртүрлі бумаларға, соның ішінде Linux үшін AppImage (жергілікті тестілеу үшін жүктеп алуға болатын оқшау қолданбалар пакеті) пакетіне оралады. жүйеде не орнатылуы мүмкін немесе орнатылмауы мүмкін [біліп едім! — шамамен. аудармашы]). Әрбір филиалды біріктіру сұрауымен бірдей нәрсе болады, сондықтан біріктіру алдында біріктіру сұрауында ұсынылған кодтан құрастырылған қолданбаны жүктеп алуға болады.

Хайкумен бесінші күнім: кейбір бағдарламаларды жіберейік
Сұрауларды құрастыру күйлерімен және құрастыру сәтті болса, құрастырылған екілік файлдарды жүктеп алу мүмкіндігімен біріктіру (жасыл түспен белгіленген)

Құрастыру Docker контейнерлерінде жұмыс істейді. GitLab Linux жүйесінде тегін жүгірушілерді ұсынады және менің ойымша, өзіңіздің жүгірушілеріңізді қосуға болады (айтпақшы, мен бұл Docker немесе баламасы жоқ Haiku сияқты жүйелер үшін қалай жұмыс істейтінін түсінбеймін, бірақ сонымен қатар FreeBSD үшін Docker жоқ, сондықтан бұл мәселе Хайкуға ғана тән емес).

Ең дұрысы, Haiku қолданбалары Linux үшін Docker контейнерінің ішіне салынуы мүмкін. Бұл жағдайда Хайкуға арналған жинақты қолданыстағы құбырларға енгізуге болады. Кросс компиляторлар бар ма? Немесе QEMU/KVM сияқты нәрсені пайдаланып Docker контейнеріндегі барлық Haiku-ны эмуляциялауым керек пе (ол Docker ішінде осылай жұмыс істейді деп есептеймін)? Айтпақшы, көптеген жобаларда ұқсас принциптер қолданылады. Мысалы, Scribus мұны жасайды - ол Хайку үшін қол жетімді. Бір күні жіберетін күнім келеді осындай Хайку қолдауын қосу үшін басқа жобаларға сұрауларды тартыңыз.

Әзірлеушілердің бірі түсіндіреді:

Пакеттерді өздері жасағысы келетін басқа жобалар үшін әдеттегі CMake/CPack әдісіне қолдау көрсетіледі. Басқа құрастыру жүйелеріне пакеттің құрастыру бағдарламасына тікелей қоңырау шалу арқылы қолдау көрсетуге болады, бұл адамдар оған қызығушылық танытса жақсы. Тәжірибе көрсеткендей, осы уақытқа дейін қызығушылық болған жоқ, сондықтан haikuporter біз үшін ыңғайлы жұмыс істеді, бірақ, сайып келгенде, екі әдіс бірге жұмыс істеуі керек. Linux немесе кез келген басқа серверлік операциялық жүйе (Haiku серверлерде жұмыс істеуге арналмаған) кросс-құрылымдық бағдарламалық қамтамасыз ету үшін құралдар жинағын енгізуіміз керек.

Мен ұзақ қол шапалақтаймын. Тұрақты Linux пайдаланушылары осы қосымша жүктің барлығын және қосымша багажды (қауіпсіздік, қатаң бақылау және т.б.) алып жүреді, олар жеке үшін емес, серверлік операциялық жүйе үшін қажет. Сондықтан мен Linux жүйесінде Haiku қолданбаларын құру мүмкіндігімен толық келісемін.

қорытынды

POSIX қолданбаларын Haiku-ға тасымалдау мүмкін, бірақ әдеттегі қайта құруға қарағанда қымбатырақ болуы мүмкін. Егер irc.freenode.net желісіндегі #haiku арнасының адамдары болмаса, мен мұнымен ұзақ уақыт бойы қатып қалар едім. Бірақ олар ненің дұрыс емес екенін әрдайым бірден байқамады.

Qt тілінде жазылған қолданбалар оңай ерекшелік болып табылады. Мен қарапайым демо-қосымшаны еш қиындықсыз жинадым.

Қарапайым қосымшалар үшін пакетті құру өте оңай, бірақ тек «дәстүрлі түрде шығарылатындар» үшін, яғни. Хайкупорттарда қолдау көрсетуге арналған нұсқаланған бастапқы код мұрағаттары бар. GitHub көмегімен үздіксіз құрастыру (әрбір өзгертулер үшін құрастыру) үшін бәрі оңай емес сияқты. Мұнда Хайку Mac жүйесіндегі нәтижеге қарағанда Linux дистрибуциясы сияқты сезінеді, онда XCode ішіндегі «Құру» түймесін басқан кезде сіз буманы аласыз. .app, диск кескініне кірістіруге дайын .dmg, менің веб-сайтымда жүктеуге дайындалды.
«Сервер» операциялық жүйесіне негізделген қосымшаларды үздіксіз құру, мысалы, Linux, әзірлеушілер тарапынан сұраныс болған жағдайда мүмкін болады, бірақ қазіргі уақытта Хайку жобасында басқа, неғұрлым өзекті міндеттер бар.

Өзіңіз көріңіз! Өйткені, Haiku жобасы жасалған DVD немесе USB-ден жүктеуге арналған кескіндерді ұсынады күн сайын. Орнату үшін суретті жүктеп алып, оны пайдаланып флэш-дискке жазыңыз Эчер

Сұрақтарыңыз бар ма? Сіздерді орыстілді курсқа шақырамыз жеделхат арнасы.

Қатені шолу: C және C++ тілінде аяққа қалай атуға болады. Haiku OS рецептер жинағы

-дан автор аударма: бұл Хайку туралы сериядағы бесінші мақала.

Мақалалар тізімі: Бірінші Екінші Үшінші Төртінші

Ақпарат көзі: www.habr.com

пікір қалдыру