Рӯзи панҷуми ман бо Ҳайку: биёед баъзе барномаҳоро интиқол диҳем

Рӯзи панҷуми ман бо Ҳайку: биёед баъзе барномаҳоро интиқол диҳем

ХИБ; DR: Навоваре бори аввал Ҳайкуро дид, ки кӯшиш мекунад баъзе барномаҳоро аз ҷаҳони Linux интиқол диҳад.

Рӯзи панҷуми ман бо Ҳайку: биёед баъзе барномаҳоро интиқол диҳем
Аввалин барномаи интиқолшудаи ман Haiku, ки дар формати hpkg бастабанди шудааст

Бештар Ман Haiku-ро кашф кардам, ки системаи оператсионии аҷиб барои компютерҳои фардӣ.
Имрӯз ман мефаҳмам, ки чӣ тавр ба ин системаи оператсионӣ интиқол додани барномаҳои навро меомӯзам. Диққати асосӣ тавсифи таҷрибаи аввалини гузариш ба Ҳайку аз нуқтаи назари таҳиягари Linux мебошад. Ман барои хатогиҳои аблаҳонае, ки дар роҳ содир кардаам, бахшиш мепурсам, зеро ҳатто як ҳафта нагузаштааст, ки ман Haiku-ро бори аввал зеркашӣ кардам.

Ман мехоҳам ба се ҳадаф ноил шавам:

  • Замимаи оддии CLI-ро порт кунед
  • Як барномаро аз GUI ба Qt интиқол диҳед
  • Сипас онҳоро дар формати hpkg бастабандӣ кунед (зеро ман то ҳол дар бораи мутобиқ кардани AppDir ва AppImage барои Haiku фикр мекунам...)

Биёед оғоз кунем. Дар бахшхо ҳуҷҷатҳо и кор кардан, инчунин дар вики аз HaikuPorts ман самти дурустро ёфтам. Ҳатто як китоби онлайни PDF вуҷуд дорад BeOS: Интиқоли барномаи Unix.
467 саҳифа - ва ин аз соли 1997 аст! Ба дарун нигоҳ кардан даҳшатнок аст, аммо ман умедворам, ки беҳтарин. Суханони таҳиягар рӯҳбаландкунандаанд: "ин муддати тӯлонӣ гирифт, зеро BeOS ба POSIX мувофиқ набуд", аммо Ҳайку "дар аксарият" аллакай ҳамин тавр аст.

Интиқоли як барномаи оддии CLI

Аввалин фикр ин интиқол додани барнома буд аврдуде, аммо, чунон ки маълум шуд, ин аллакай кардаанд кайхо пеш.

Кӯшиши аввал: ҳеҷ чиз барои тамошо

Он чизе ки ман намефаҳмам, ин аст, ки аллакай Барномаҳо дар тӯли зиёда аз 10 сол ба Haiku интиқол дода мешаванд - сарфи назар аз он, ки худи OS ҳатто версияи 1.0 нест.

Кӯшиши дуюм: бояд аз нав навишта шавад

Пас ман истифода хоҳам кард ptouch-770, CLI барои идоракунии принтери Brother P-Touch 770, ки ман барои чопи тамғакоғазҳо истифода мекунам.
Ман дар он тамғакоғазҳои гуногун чоп мекунам ва шумо шояд онро дар мақолаи қаблӣ дидаед. Каме пештар ман як барномаи хурди печонидани GUI дар Python навиштам (азбаски он дар Gtk + аст, он бояд аз нав навишта шавад ва ин як сабаби хуб барои омӯхтан аст).

Рӯзи панҷуми ман бо Ҳайку: биёед баъзе барномаҳоро интиқол диҳем
Принтерҳои чопгари бародар 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 асос ёфтааст ва аз ин рӯ барои Haiku вуҷуд надорад. Ин маънои онро дорад, ки ман бояд рамзи сарчашмаеро, ки ман кӯшиш мекунам, таҳрир кунам.
Э, шумо наметавонед аз болои сари худ ҷаҳида шавед ва ман ҳатто намедонам, ки аз куҷо сар кунам.

Кӯшиши сеюм

Хеле хуб мешуд tmate барои Ҳайку, он гоҳ ман ба таҳиягарони Ҳайку иҷозат медиҳам, ки ба сеанси терминали ман пайваст шаванд - агар чизе хато кунад. Дастурҳо хеле соддаанд:

./autogen.sh
./configure
make
make install

Ба назар хуб аст, пас чаро онро дар Ҳайку намесанҷед?

/Haiku/home> git clone https://github.com/tmate-io/tmate/Haiku/home> cd tmate//Haiku/home/tmate> ./autogen.sh
(...)/Haiku/home/tmate> ./configure
(...)
checking for libevent... no
checking for library containing event_init... no
configure: error: "libevent not found"/Haiku/home/tmate> pkgman install devel:libevent
(...)
The following changes will be made:
  in system:
    install package libevent21-2.1.8-2 from repository HaikuPorts
    install package libevent21_devel-2.1.8-2 from repository HaikuPorts
Continue? [yes/no] (yes) :
100% libevent21-2.1.8-2-x86_64.hpkg [965.22 KiB]
(...)
[system] Done.checking for ncurses... no
checking for library containing setupterm... no
configure: error: "curses not found"/Haiku/home/tmate> pkgman install devel:libcurses
(...)
*** Failed to find a match for "devel:libcurses": Name not found/Haiku/home/tmate> pkgman install devel:curses
(...)
*** Failed to find a match for "devel:curses": Name not found

Дар ин қадам ман HaikuDepot ва ҷустуҷӯро мекушоям curses.
Чизе ёфт шуд, ки ба ман барои пурсиши салоҳиятдор ишора кард:

/Haiku/home/tmate> pkgman install devel:libncurses
(...)
100% ncurses6_devel-6.1-1-x86_64.hpkg [835.62 KiB]
(...)./configure
(...)
checking for msgpack >= 1.1.0... no
configure: error: "msgpack >= 1.1.0 not found"/Haiku/home/tmate> pkgman install devel:msgpack
(...)
*** Failed to find a match for "devel:msgpack": Name not found/Haiku/home/tmate> pkgman install devel:libmsgpack
(...)
*** Failed to find a match for "devel:libmsgpack": Name not found

Боз ба ХайкуДепот рафтам ва, албатта, ёфтам 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 - мошинҳои виртуалӣ).

Рӯзи панҷуми ман бо Ҳайку: биёед баъзе барномаҳоро интиқол диҳем
Сохтани msgpack ислоҳшуда дар buildmaster

Дар байни вақт ман як ямоқи ба болооб мефиристам барои илова кардани дастгирии 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.

Онҳо ба ман фаҳмонданд, ки дар libnetwork ба ғайр аз libresolv дар Ҳайку чизи дигаре ҳаст. Эҳтимол, кодро минбаъд таҳрир кардан лозим аст. Фикр кардан лозим…

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!

Дар ҳақиқат оддӣ. Камтар аз як дақиқа!

Барномаҳои бастабандӣ дар hpkg бо истифода аз haikuporter ва haikuports.

Ман бояд аз чӣ оғоз кунам? Ҳеҷ ҳуҷҷати оддӣ нест, ман ба канали #haiku дар irc.freenode.net меравам ва мешунавам:

  • гурӯҳ package - роҳи сатҳи пасти эҷоди бастаҳо. Дар аксари ҳолатҳо, PackageInfo барои ӯ кифоя аст, тавре ки дар фасли "Сохтани он ба бастаи дурусти .hpkg" тавсиф шудааст.
  • Ман бояд чизе кунам чунин
  • Истифода кардан мумкин аст hpkg-офаринанда (барои ман меафтад, гузориш додани хатогиҳо)

Чӣ бояд кард, маълум нест. Гумон мекунам, ки ба ман дастури ибтидоии сабки Hello World лозим аст, ки беҳтарин видео. Хуб мебуд, ки муқаддимаи қулай бо HaikuPorter низ дошта бошед, чунон ки дар GNU hello анҷом дода мешавад.

Ман инҳоро хондам:

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. Вобастагӣ барои ҳама бастаҳои репозиторий тафтиш карда мешавад хайкупортхо, ки каме вақт мегирад. Ман меравам, ки қаҳва гирам.

Чаро дар рӯи замин ин санҷиш бояд дар мошини маҳаллии ман анҷом дода шавад, на ба таври мутамарказ дар сервер барои ҳама?

Ба гуфтаи ҷаноби. waddlesplash:

Бо он ки шумо метавонед ҳама гуна файлро дар репозиторий аз нав нависед 😉 Шумо метавонед онро каме оптимизатсия кунед ва ҳангоми зарурат маълумоти заруриро ҳисоб кунед, зеро тағйироти охирини воридшуда хеле каманд.

~/QtQuickApp> haikuporter  QtQuickApp-1.0.recipe
Checking if any dependency-infos need to be updated ...
Looking for stale dependency-infos ...
Error: QtQuickApp not found in repository

Маълум мешавад, ки файли рецепти муқаррарӣ, ки рамзи сарчашмаи барномаи шуморо дар бар мегирад, вуҷуд надорад. Шумо бояд онро дар анбори формати HaikuPorts нигоҳ доред.

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

Чунин факт кори монтажро душвортар мегардонад. Ба ман махсусан маъқул нест, аммо ман фикр мекунам, ки ин зарур аст, то дар ниҳоят ҳама нармафзори кушодаасос дар HaikuPorts пайдо шаванд.

Ман инҳоро мегирам:

~/QtQuickApp> haikuporter -S QtQuickApp-1.0.recipe
Checking if any dependency-infos need to be updated ...
        updating dependency infos of QtQuickApp-1.0
Looking for stale dependency-infos ...
Error: QtQuickApp-1.0.recipe not found in tree.

Чӣ чиз ғалат аст? Пас аз хондани irc ман мекунам:

~/QtQuickApp> haikuporter -S QtQuickApp
Checking if any dependency-infos need to be updated ...
        updating dependency infos of QtQuickApp-1.0
Looking for stale dependency-infos ...
----------------------------------------------------------------------
app-misc::QtQuickApp-1.0
        /boot/home/haikuports/app-misc/QtQuickApp/QtQuickApp-1.0.recipe
----------------------------------------------------------------------Downloading: https://github.com/probonopd/QtQuickApp.git ...
--2019-07-14 16:12:44--  https://github.com/probonopd/QtQuickApp.git
Resolving github.com... 140.82.118.3
Connecting to github.com|140.82.118.3|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://github.com/probonopd/QtQuickApp [following]
--2019-07-14 16:12:45--  https://github.com/probonopd/QtQuickApp
Reusing existing connection to github.com:443.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘/boot/home/haikuports/app-misc/QtQuickApp/download/QtQuickApp.git’
     0K .                                                     1.34M=0.06s
2019-07-14 16:12:45 (1.34 MB/s) - ‘/boot/home/haikuports/app-misc/QtQuickApp/download/QtQuickApp.git’ saved [90094]
Validating checksum of QtQuickApp.git
Warning: ----- CHECKSUM TEMPLATE -----
Warning: CHECKSUM_SHA256="cf906a65442748c95df16730c66307a46d02ab3a12137f89076ec7018d8ce18c"
Warning: -----------------------------
Error: No checksum found in recipe!

Саволи ҷолиб ба миён омад. Агар ман ба дорухат маблағи чек илова кунам - оё он ба охирин ӯҳдадориҳои git барои ҳамгироии пайваста мувофиқат мекунад? (Таҳиягар тасдиқ мекунад: "Ин кор намекунад. Рецептҳо барои нисбатан устувор тарҳрезӣ шудаанд.")

Барои фароғат, ба дорухат илова кунед:

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

Аз одати кӯҳна, ман меравам аз одамони хуб дар канали #haiku дар шабакаи 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 монанд аст: бениҳоят пурқувват, бо равиши систематикӣ, аммо барои барномаи хурди ман "салом ҷаҳон".

Боз, ба гуфтаи ҷаноби. waddlesplash:

Воқеан, HaikuPorter аз рӯи нобаёнӣ хеле сахтгир аст (илова бар ин, режими линт ва инчунин режими қатъӣ вуҷуд дорад, ки онро боз ҳам сахттар кунад!), балки танҳо аз он сабаб, ки он бастаҳоеро эҷод мекунад, ки на танҳо эҷод кардани бастаҳо, кор мекунанд. Аз ин рӯ, ӯ аз вобастагии эълоннашуда, китобхонаҳо дуруст ворид карда нашудаанд, версияҳои нодуруст ва ғайра шикоят мекунанд. Ҳадаф ин аст, ки ҳама ва ҳама мушкилот, аз ҷумла мушкилоти оянда, пеш аз он ки корбар дар бораи он огоҳ бошад (аз ин рӯ насб кардани avrdude имконнопазир буд, зеро вобастагӣ воқеан дар дорухат нишон дода шудааст). Китобхонаҳо на танҳо бастаҳои инфиродӣ ё ҳатто версияҳои мушаххаси SO мебошанд. HaikuPorter кафолат медиҳад, ки ҳамаи ин дар худи рецептҳо мушоҳида карда мешавад, то ҳангоми иҷроиш хатогиҳоро пешгирӣ кунад.

Аслан, ин сатҳи сахтгирӣ ҳангоми эҷоди системаи оператсионӣ асоснок аст, аммо барои ман барои барномаи "салом ҷаҳон" нолозим менамояд. Ман қарор додам, ки чизи дигареро санҷам.

Сохтани замимаҳо дар формати hpkg бо истифода аз фармони "баста эҷод кардан"

Мумкин ки, ин Оё дастурҳои оддӣ барои ман беҳтар кор мекунанд?

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

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

packager "probono"
vendor "probono"

copyrights "probono"
licenses "MIT"

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

Ба таври ғайричашмдошт зуд, ғайричашмдошт оддӣ, ғайричашмдошт самаранок. Маҳз чӣ гуна ба ман маъқул аст, аҷиб!

Насбкунӣ - чӣ ва дар куҷо?

Файли QtQuickApp.hpkg ба ~/config/packagesбо истифода аз мудири файл, ки пас аз он QtQuickApp ҷодугарӣ пайдо шуд ~/config/apps.
Боз, ба таври ғайричашмдошт зуд, оддӣ ва самаранок. Аҷиб, бениҳоят!

Аммо... (бе онҳо мо куҷо мешудем!)

Барнома то ҳол дар рӯйхати менюи барномаҳо ва QuickLaunch мавҷуд нест. Ман фикр мекунам, ки ман аллакай медонам, ки чӣ тавр онро ислоҳ кунам. Дар менеҷери файл ман QtQuickApp.hpkg-ро аз ~/config/packages ба /система/бастаҳо интиқол медиҳам.

Не, ҳоло ҳам нест. Эҳтимол, ман (хуб ва дастурҳо) чизеро аз даст додаам.

Пас аз дидани ҷадвали "Мундариҷа" дар HaikuDepot барои баъзе замимаҳои дигар, ман дидам, ки чунин файлҳо мавҷуданд /data/mimedb/application/x-vnd... боз хам ачоибтар он аст /data/deskbar/menu/Applications/….

Хуб, дар он ҷо чӣ бояд гузорам? Биё...

mkdir -p data/deskbar/menu/Applications/
( cd data/deskbar/menu/Applications ; ln -s ../../../../apps/QtQuickApp . )
package add QtQuickApp.hpkg apps data

Ман комилан боварӣ дорам, ки ин ҳилла кор хоҳад кард, аммо саволҳо боқӣ мемонанд: ин барои чӣ лозим аст, барои чӣ? Ман фикр мекунам, ки ин таассуроти умумиро, ки система хеле мураккаб аст, хароб мекунад.

Тавре ки оқои шарҳ дод. waddlesplash:

Баъзан барномаҳое ҳастанд, ки ба дигар барномаҳо ниёз доранд, аммо дар меню нестанд. Масалан, LegacyPackageInstaller дар скриншоти шумо, коркарди бойгониҳои .pkg дар формати BeOS. Ман мехоҳам, ки корбарон онҳоро насб кунанд, аммо ҳузури онҳо дар меню боиси нофаҳмиҳо мешавад.

Барои баъзе сабабҳо ба ман чунин менамояд, ки ҳалли соддатар вуҷуд дорад, масалан Hidden=true дар файлҳо .desktop дар Linux. Чаро иттилооти "пинҳон"-ро ба захира ва атрибути системаи файлӣ табдил надиҳед?

Он чизе, ки махсусан нозук нест, номи (баъзе) барномаест, ки менюро намоиш медиҳад, deskbar, дар сари рох сахт бастаанд.

Ҷаноб. waddlesplash инро шарҳ медиҳад:

"Панели мизи корӣ" дар ин ҳолат бояд ҳамчун як истилоҳи умумӣ фаҳмида шавад (ба мисли "панели вазифаҳо", ки ҳам ба барномаи Windows ва ҳам консепсияи умумӣ дахл дорад). Хуб, аз ин deskbar, на "панели мизи корӣ", инро низ ба ҳамин тарз фаҳмидан мумкин аст.

Рӯзи панҷуми ман бо Ҳайку: биёед баъзе барномаҳоро интиқол диҳем
2 феҳристи "тақрибан якхела" бо барномаҳо дар онҳо

Чаро 2 феҳрист бо барномаҳо вуҷуд дорад ва инчунин чаро QtQuickApplication ман дар як аст, аммо дар дигараш не? (Охир, ин як система нест, балки корбари дуюм аст, ки шахсан барои ман фаҳмо аст).
Ман воқеан ошуфтаам ва фикр мекунам, ки ин бояд ягона бошад.

шарҳи оқои ваддлсплаш

Каталоги Барномаҳо дорои барномаҳое мебошад, ки дар меню лозим нестанд. Аммо вазъият бо меню воқеан бояд беҳтар карда шавад, то он бештар танзимшаванда бошад.

Ариза, вагарна ин рӯй нахоҳад дод 😉

Ман ҳайрон шудам: оё дар ҳақиқат ҷойгир кардани барномаҳо лозим аст /system/apps, агар корбарон онҳоро дар он ҷо бубинанд, ин номатлуб аст. Шояд беҳтар мебуд, ки онҳоро дар ҷои дигаре ҷойгир кунед, ки корбар бо онҳо дучор наояд? Ҳамон тавре ки он дар Mac OS X иҷро шудааст, ки дар он мундариҷаи бастаҳо .app, ки дар он набояд барои корбар намоён бошад /Applications, пинҳон дар умқи /System/Library/…“`.

Дар бораи вобастагӣ чӣ гуфтан мумкин аст?

Ман фикр мекунам, ки вобастагӣҳоро бо ягон роҳ муайян кардан лозим аст, дуруст? Оё Qt як қисми ҳатмии насби Haiku бо нобаёнӣ баррасӣ мешавад? Не! Qt бо нобаёнӣ насб карда нашудааст. Оё созандаи баста метавонад ба таври худкор вобастагиҳоро тавассути тафтиши файлҳои ELF муайян кунад? Ба ман гуфтанд, ки HaikuPorter воқеан ин корро мекунад, аммо package Не. Сабаб он аст, ки он танҳо як "созандаи баста" аст, ки танҳо худаш файлҳоро эҷод мекунад hpkg.

Оё Ҳайку бояд бо илова кардани сиёсат, ки баста набояд аз бастаҳои берун аз Ҳайку вобастагӣ дошта бошад, мураккабтар карда шавад? haikuports? (Ман инро мехоҳам, зеро чунин сиёсат корҳоро хеле осонтар мекунад - система метавонад вобастагии ҳар як бастаи аз ҳама ҷо зеркашидашударо бидуни халалдоршавӣ бо манбаъҳои иловагии бастаҳо ҳал кунад.)

Ҷаноб. waddlesplash мефаҳмонад:

Мо намехоҳем, ки озодии таҳиягаронро ин қадар маҳдуд кунем, зеро маълум аст, ки агар CompanyX мехоҳад маҷмӯи нармафзори худро бо вобастагӣ (ва аз ин рӯ анбор) дастгирӣ кунад, он ин корро комилан озод мекунад.

Дар ин ҳолат, тавсия додан лозим аст, ки бастаҳои тарафи сеюм аз вобастагӣ ба чизе, ки ба haikuports дохил нашудаанд, бо бастабандии пурраи ҳама чизҳое, ки бо барнома лозиманд, канорагирӣ кунанд. Аммо ман фикр мекунам, ки ин мавзӯъ барои мақолаи оянда дар ин силсила аст. [Оё муаллиф ба сӯи AppImage меравад? — тахминан. тарҷумон]

Илова кардани нишонаи барнома

Чӣ мешавад, агар ман мехоҳам яке аз нишонаҳои тозаи дарунсохтро ба захираҳои замимаи навтаъсиси худ илова кунам? Маълум мешавад, ки ин як мавзӯи аҷиб аст, бинобар ин он барои мақолаи навбатӣ асос хоҳад буд.

Сохтмони пайвастаи барномаҳоро чӣ гуна бояд ташкил кард?

Тасаввур кунед, ки лоиҳа ба монанди Inkscape (бале, ман медонам, ки он ҳанӯз дар Haiku дастрас нест, аммо барои намоиш дар он қулай аст). Онҳо як анбори коди сарчашма доранд https://gitlab.com/inkscape/inkscape.
Ҳар дафъае, ки касе тағйироти худро ба анбор ворид мекунад, қубурҳои бунёдӣ оғоз мешаванд, ки баъд аз он тағиротҳо ба таври худкор санҷида мешаванд, сохта мешаванд ва барнома ба бастаҳои гуногун, аз ҷумла AppImage барои Linux бастабандӣ карда мешавад (бастаи барномаи мустақил, ки новобаста аз он, барои санҷиши маҳаллӣ зеркашӣ карда мешавад) он чиро, ки дар система насб кардан мумкин аст ё не [Ман инро медонистам! — тахминан. тарҷумон]). Бо ҳар як дархости якҷоякунии филиалҳо ҳамин чиз рӯй медиҳад, аз ин рӯ шумо метавонед пеш аз якҷояшавӣ замимаи аз рамзи дар дархости якҷоякунӣ пешниҳодшуда сохташударо зеркашӣ кунед.

Рӯзи панҷуми ман бо Ҳайку: биёед баъзе барномаҳоро интиқол диҳем
Якҷоя кардани дархостҳо бо ҳолати сохтмон ва қобилияти зеркашии бинарҳои тартибдодашуда, агар сохтмон муваффақ бошад (бо ранги сабз ишора шудааст)

Сохта дар контейнерҳои Docker кор мекунад. GitLab давандагони ройгонро дар Linux пешниҳод мекунад ва ман фикр мекунам, ки метавон давандагони шахсии худро дохил кардан мумкин бошад (дар омади гап, ман намедонам, ки ин барои системаҳое мисли Ҳайку чӣ гуна кор мекунад, ки ман медонам, ки Docker ё муодили он надоранд, аммо инчунин барои FreeBSD ягон Docker вуҷуд надорад, бинобар ин ин мушкилот танҳо барои Haiku нест).

Идеалӣ, барномаҳои Haiku метавонанд дар дохили контейнери Docker барои Linux сохта шаванд. Дар ин вазъият монтажи Хайку метавонад ба қубурҳои мавҷуда ворид карда шавад. Оё компиляторҳои кросс вуҷуд доранд? Ё ман бояд тамоми Ҳайкуро дар дохили контейнери Docker бо истифода аз чизе ба монанди QEMU/KVM тақлид кунам (фарз мекунем, ки он дар дохили Docker ҳамин тавр кор мекунад)? Зимнан, бисёр лоиҳаҳо принсипҳои шабеҳро истифода мебаранд. Масалан, Scribus ин корро мекунад - он аллакай барои Haiku дастрас аст. Рузе мерасад, ки ман мефиристам чунин аст Барои илова кардани дастгирии Haiku дархостҳоро ба лоиҳаҳои дигар кашед.

Яке аз таҳиягарон шарҳ медиҳад:

Барои лоиҳаҳои дигаре, ки мехоҳанд бастаҳоро худашон созанд, усули муқаррарии CMake/CPack дастгирӣ карда мешавад. Дигар системаҳои сохтмонро тавассути занг задан ба барномаи сохтани бастаҳо дастгирӣ кардан мумкин аст, ки ин хуб аст, агар одамон ба он таваҷҷӯҳ дошта бошанд. Тачриба нишон медихад: то хол шавку хаваси зиёд набуд, бинобар ин хайкупортер барои мо мувофик кор мекард, вале дар нихояти кор хар ду усул бояд якчоя кор кунанд. Мо бояд маҷмӯи асбобҳоро барои нармафзори байнисоҳавӣ аз Linux ё дигар системаи оператсионии сервер ҷорӣ кунем (Haiku барои кор дар серверҳо тарҳрезӣ нашудааст).

Ман кафкубии бардавом мекунам. Истифодабарандагони муқаррарии Linux ҳамаи ин бори иловагӣ ва бағоҷи иловагиро (бехатарӣ, назорати қатъӣ ва ғ.), ки барои системаи оператсионии сервер заруранд, мебардоранд, аммо на барои системаи шахсӣ. Ҳамин тавр, ман комилан розӣ ҳастам, ки қобилияти сохтани барномаҳои Haiku дар Linux роҳи рафтан аст.

хулоса

Интиқоли замимаҳои POSIX ба Ҳайку имконпазир аст, аммо метавонад аз барқарорсозии маъмулӣ гаронтар бошад. Агар кӯмаки одамони канали #haiku дар шабакаи irc.freenode.net намебуд, ман бешубҳа муддати тӯлонӣ бо ин мемондам. Аммо ҳатто онҳо на ҳамеша дарҳол диданд, ки чӣ нодуруст аст.

Барномаҳои дар Qt навишташуда истиснои осон мебошанд. Ман як барномаи оддии намоиширо бе ягон мушкилот ҷамъ овардам.

Сохтани маҷмӯа барои барномаҳои оддӣ низ хеле осон аст, аммо танҳо барои барномаҳои "анъанавӣ баровардашуда", яъне. дорои бойгониҳои версияи рамзи сарчашма, ки барои дастгирӣ дар haikuports пешбинӣ шудаанд. Барои сохтани пайваста (сохтани ҳар як тағирот) бо GitHub, ҳама чиз он қадар оддӣ нест. Дар ин ҷо Ҳайку назар ба натиҷа дар Mac бештар ба тақсимоти Linux монанд аст, ки дар он вақте ки шумо тугмаи "Сохтани" -ро дар XCode пахш мекунед, шумо баста мегиред. .app, барои ворид шудан ба тасвири диск омода аст .dmg, барои зеркашӣ дар вебсайти ман омода шудааст.
Сохтани пайвастаи замимаҳо дар асоси системаи оператсионии «сервер», масалан, Linux, эҳтимоли зиёд имконпазир мегардад, агар талабот аз ҷониби таҳиягарон вуҷуд дошта бошад, аммо дар айни замон лоиҳаи Ҳайку вазифаҳои дигари мубрами бештар дорад.

Худатон кӯшиш кунед! Дар ниҳоят, лоиҳаи Ҳайку тасвирҳоро барои боркунӣ аз DVD ё USB, тавлидшуда таъмин мекунад ежедневно. Барои насб кардан, танҳо тасвирро зеркашӣ кунед ва бо истифода аз он ба диски флешдор нависед Эшер

Оё шумо ягон савол доред? Шуморо ба забони русӣ даъват мекунем канали телеграмма.

Шарҳи хато: Чӣ тавр дар C ва C ++ худро ба пои худ тир парронед. Маҷмӯаи дорухатҳои Haiku OS

аз муаллиф Тарҷума: ин мақолаи панҷум дар силсилаи Ҳайку мебошад.

Рӯйхати мақолаҳо: Аввал Дуюм Сеюм Чорум

Манбаъ: will.com

Илова Эзоҳ