Хайку менен болгон бешинчи күнүм: кээ бир программаларды өткөрөлү

Хайку менен болгон бешинчи күнүм: кээ бир программаларды өткөрөлү

TL; DR: Жаңы келген адам Linux дүйнөсүнөн кээ бир программаларды өткөрүүгө аракет кылган Хайкуну биринчи жолу көрдү.

Хайку менен болгон бешинчи күнүм: кээ бир программаларды өткөрөлү
Менин hpkg форматында пакеттелген биринчи Haiku порту программасы

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

Мен үч максатка жетүүнү каалайм:

  • Жөнөкөй CLI тиркемесин порт
  • Колдонмону GUIден Qtга өткөрүңүз
  • Анан аларды hpkg форматында таңгактоо (анткени мен дагы эле AppDir менен AppImageди Haiku үчүн ыңгайлаштыруу жөнүндө ойлонуп жатам...)

Келиңиз баштайлы. Бөлүмдөрүндө документтер и дизайнОшондой эле Магазин HaikuPorts мен туура багытты таптым. Ал тургай, онлайн PDF китеп бар BeOS: Unix тиркемесин өткөрүү.
467 бет - жана бул 1997-жылдан бери! Ичине кароо коркунучтуу, бирок мен жакшылыкка үмүттөнөм. Иштеп чыгуучунун сөздөрү бекемдээрлик: "бул көп убакыт талап кылынган, анткени BeOS POSIX шайкеш келген эмес", бирок Хайку "көпчүлүк учурда" буга чейин эле ушундай.

Жөнөкөй CLI тиркемесин өткөрүү

Биринчи ой тиркемени портко салуу болду avrdude, бирок, белгилүү болгондой, бул мурунтан эле кылдым илгери-илгери.

Биринчи аракет: көрө турган эч нерсе жок

Мен түшүнө албай жаткан нерсе буга чейин Колдонмолор Хайкуга 10 жылдан ашык убакыттан бери көчүрүлүп келген - OS өзү али 1.0 версиясы дагы эмес экендигине карабастан.

Экинчи аракет: кайра жазуу керек

Андыктан мен колдоном ptouch-770, Энбелгилерди басып чыгаруу үчүн мен колдонгон Brother P-Touch 770 принтерин башкаруу үчүн CLI.
Мен ага ар кандай этикеткаларды басып чыгарам, балким, сиз аны мурунку макалада көргөнсүз. Бир аз мурун, мен Pythonдо кичинекей GUI орогуч программасын жаздым (ал Gtk+ тилинде болгондуктан, аны кайра жазуу керек болот жана бул үйрөнүүгө жакшы себеп).

Хайку менен болгон бешинчи күнүм: кээ бир программаларды өткөрөлү
Brother P-Touch 770 этикетка принтери Haiku менен иштейби?

Haiku топтомунун менеджери китепканалар жана буйруктар жөнүндө билет, андыктан мен иштеп жатканда "libintl таба албай жатам" билдирүүсүн алсам configure - Жаңы эле баштадым pkgman install devel:libintl жана керектүү пакет табылат. Ошо сыяктуу эле pkgman install cmd:rsync. Мейли, ж.б.

Бул иштебегенден башка учурларда:

/Haiku/home> git clone https://github.com/probonopd/ptouch-770
Cloning into 'ptouch-770'...
remote: Enumerating objects: 134, done.
remote: Total 134 (delta 0), reused 0 (delta 0), pack-reused 134
Receiving objects: 100% (134/134), 98.91 KiB | 637.00 KiB/s, done.
Resolving deltas: 100% (71/71), done./Haiku/home> cd ptouch-770//Haiku/home/ptouch-770> make
gcc -Wall -O2 -c -o ptouch-770-write.o ptouch-770-write.c
ptouch-770-write.c:28:10: fatal error: libudev.h: No such file or directory
 #include <libudev.h>
          ^~~~~~~~~~~
compilation terminated.
Makefile:16: recipe for target 'ptouch-770-write.o' failed
make: *** [ptouch-770-write.o] Error 1/Haiku/home/ptouch-770> pkgman install devel:libudev
100% repochecksum-1 [65 bytes]
Validating checksum for Haiku...done.
100% repochecksum-1 [64 bytes]
Validating checksum for HaikuPorts...done.
*** Failed to find a match for "devel:libudev": Name not found/Haiku/home/ptouch-770> pkgman install devel:udev
100% repochecksum-1 [65 bytes]
Validating checksum for Haiku...done.
100% repochecksum-1 [64 bytes]
Validating checksum for HaikuPorts...done.
*** Failed to find a match for "devel:udev": Name not found

Балким, udev өтө Linux негизделген, ошондуктан 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 - виртуалдык машиналар).

Хайку менен болгон бешинчи күнүм: кээ бир программаларды өткөрөлү
buildmasterде оңдолгон msgpack түзүлүүдө

Арасында мен агымга жамаачы жөнөтөм msgpack үчүн Haiku колдоосун кошуу.

Беш мүнөттөн кийин, жаңыртылган msgpack Хайкуда мурунтан эле жеткиликтүү:

/Haiku/home/tmate> pkgman update
(...)
The following changes will be made:
  in system:
    upgrade package msgpack_c_cpp-3.1.1-1 to 3.2.0-2 from repository HaikuPorts
    upgrade package msgpack_c_cpp_devel-3.1.1-1 to 3.2.0-2 from repository HaikuPorts
Continue? [yes/no] (yes) : y
100% msgpack_c_cpp-3.2.0-2-x86_64.hpkg [13.43 KiB]
(...)
[system] Done.

Күтүлбөгөн жерден жакшы. Ошону айттымбы?!

Мен баштапкы көйгөйгө кайтып келем:

/Haiku/home/tmate> make
(...)
In file included from tmux.h:40,
                 from tty.c:32:
compat.h:266: warning: "AT_FDCWD" redefined
 #define AT_FDCWD -100

In file included from tty.c:25:
/boot/system/develop/headers/posix/fcntl.h:62: note: this is the location of the previous definition
 #define AT_FDCWD  (-1)  /* CWD FD for the *at() functions */

tty.c: In function 'tty_init_termios':
tty.c:278:48: error: 'IMAXBEL' undeclared (first use in this function); did you mean 'MAXLABEL'?
  tio.c_iflag &= ~(IXON|IXOFF|ICRNL|INLCR|IGNCR|IMAXBEL|ISTRIP);
                                                ^~~~~~~
                                                MAXLABEL
tty.c:278:48: note: each undeclared identifier is reported only once for each function it appears in
Makefile:969: recipe for target 'tty.o' failed
make: *** [tty.o] Error 1

Эми msgpack күнөөлүү эмес окшойт. Мен комментарий берип жатам IMAXLABEL в tty.c төмөнкүдөй:

tio.c_iflag &= ~(IXON|IXOFF|ICRNL|INLCR|IGNCR|/*IMAXBEL|*/ISTRIP);

жыйынтыгы:

osdep-unknown.c: In function 'osdep_get_cwd':
osdep-unknown.c:32:19: warning: unused parameter 'fd' [-Wunused-parameter]
 osdep_get_cwd(int fd)
               ~~~~^~
make: *** No rule to make target 'compat/forkpty-unknown.c', needed by 'compat/forkpty-unknown.o'.  Stop.

Мейли, кайра барабыз... Айтмакчы:

/Haiku/home/tmate> ./configure | grep -i OPENAT
checking for openat... no

мырза waddlesplash кайда казууну айтат:

/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

Wow! Башталып жатат! Бирок…

[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

"Жаман порт 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 Хайку үчүн жалпы пакет долбоорлорун түзүү куралы болуп саналат. Ал 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. Көз карандылыктар репозиторийдеги бардык пакеттер үчүн текшерилет haikuports, бул бир аз убакытты талап кылат. Мен барып кофе алайын.

Эмне үчүн бул текшерүү бардыгы үчүн бир жолу серверде эмес, менин жергиликтүү машинамда жүргүзүлүшү керек?

мырзанын айтымында. 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

Ал эмне кылып жатат? Кантсе да, бул гит репозиторий, код мурунтан эле бар, таңгактан чыгаруу үчүн эч нерсе жок. Менин көз карашым боюнча, курал 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 коопсуз эмес!) жана дагы эле бир нерсени чечүүгө аракет кылып жатат.

ылайык мырза waddlesplash:

Ооба, себеби, чогултуу үчүн алынган маалыматтардын бүтүндүгүн текшерүү каалоосу болгон. Варианттардын бири - архивдин текшерүү суммасын текшерүү, бирок сиз, албетте, жеке файлдарды хэштей аласыз, алар аткарылбайт, анткени ал алда канча көп убакытты талап кылат. Мунун кесепети гиттин жана башка 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 жана репозиторий haikuports Ал "жөн эле иштейт" деген сезимге ээ эмес, бирок иштеп чыгуучу катары мага Хайку менен иштөөдө жагат. Көпчүлүк учурда, ал 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, BeOS форматында .pkg архивдерин иштетүү. Мен колдонуучулар аларды орнотууну каалайт элем, бирок алардын менюда болушу башаламандыкка алып келет.

Эмнегедир мага, мисалы, жөнөкөй чечим бар окшойт Hidden=true файлдарда .desktop Linux боюнча. Эмне үчүн "жашыруун" маалыматты файлдык системанын ресурсу жана атрибуту кылбайт?

Айрыкча тымызын эмес нерсе, менюну көрсөткөн (кээ бир) тиркеменин аты, deskbar, жолдо катуу байланган.

мырза waddlesplash муну мындайча түшүндүрөт:

Бул учурда "Иш тактасы" жалпы терминдин бир түрү катары түшүнүү керек (Windows тиркемесин да, жалпы концепцияны да билдирген "тапшырма панели" сыяктуу эле). Ооба, ошондон бери deskbar, "Deskbar" эмес, муну да ушундай эле түшүнсө болот.

Хайку менен болгон бешинчи күнүм: кээ бир программаларды өткөрөлү
2 "дээрлик окшош" каталогдор, аларда тиркемелер бар

Эмне үчүн тиркемелери бар 2 каталог бар, ошондой эле эмне үчүн менин QtQuickApplication биринде, бирок экинчисинде эмес? (Анткени, бул бир система эмес, экинчи колдонуучу, бул жеке мен үчүн түшүнүктүү).
Мен чындап эле түшүнбөйм жана бул бирдиктүү болушу керек деп ойлойм.

мырзанын комментарийи. waddlesplash

Колдонмолор каталогу менюда кереги жок тиркемелерди камтыйт. Бирок меню менен кырдаал чындап эле жакшыртылышы керек, аны көбүрөөк ыңгайлаштыруу үчүн.

Колдонмо, болбосо болбойт 😉

Мен таң калдым: чынында эле тиркемелерди жайгаштыруу керекпи? /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'та акысыз жөө күлүктөрдү сунуштайт жана мен ага өзүңүздүн жөө күлүктөрүңүздү кошууга болот деп ойлойм (Баса, бул Haiku сыяктуу системалар үчүн кандай иштээрин түшүнбөйм, мен билем Docker же эквиваленти жок, бирок ошондой эле FreeBSD үчүн Docker жок, андыктан бул көйгөй Хайку үчүн гана эмес).

Идеалында, Haiku тиркемелери Linux үчүн Docker контейнеринин ичинде курулса болот. Мындай кырдаалда Хайку үчүн монтажды иштеп жаткан түтүктөргө киргизүүгө болот. Кайчылаш компиляторлор барбы? Же мен бардык Haiku'ну Docker контейнеринин ичинде QEMU/KVM сыяктуу нерсени колдонуп эмуляциялашым керекпи (ал Докердин ичинде ушундай иштейт деп ойлосок)? Айтмакчы, көптөгөн долбоорлор ушул сыяктуу принциптерди колдонушат. Мисалы, Scribus муну жасайт - ал Хайку үчүн мурунтан эле жеткиликтүү. Бир күнү мен жөнөтө турган күн келет ушундай Хайку колдоосун кошуу үчүн башка долбоорлорго сурамдарды тартыңыз.

Иштеп чыгуучулардын бири түшүндүрөт:

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

Мен дүркүрөгөн кол чаап жатам. Кадимки Linux колдонуучулары ушул кошумча жүктү жана кошумча жүктү (коопсуздук, катуу көзөмөл ж.б.) көтөрүшөт, алар сервердин операциялык системасы үчүн зарыл, бирок жеке үчүн эмес. Ошентип, мен Linux'та Haiku колдонмолорун түзө алуу - бул бара турган жол дегенге толугу менен кошулам.

жыйынтыктоо

POSIX тиркемелерин Хайкуга өткөрүү мүмкүн, бирок кадимки кайра курууга караганда кымбатыраак болушу мүмкүн. Эгер irc.freenode.net тармагындагы #haiku каналындагы адамдардын жардамы болбогондо, мен муну менен көпкө чейин тыгылып калмакмын. Бирок алар да эмне болуп жатканын дароо эле көрө беришчү эмес.

Qt менен жазылган тиркемелер жеңил өзгөчө болуп саналат. Мен эч кандай көйгөйсүз жөнөкөй демо тиркемени чогулттум.

Жөнөкөй тиркемелер үчүн пакетти түзүү да оңой, бирок "салттуу түрдө чыгарылгандар" үчүн, б.а. haikuports колдоо үчүн арналган булак кодунун версияланган архивдери бар. GitHub менен үзгүлтүксүз куруу (ар бир өзгөртүүлөрдү киргизүү үчүн куруу) үчүн баары анчалык деле жөнөкөй эместей көрүнөт. Бул жерде Хайку Macтагы натыйжага караганда Linux дистрибуциясындай сезилет, анда XCodeдогу “Куруу” баскычын басканда сиз пакетке ээ болосуз. .app, дисктин сүрөтүнө киргизүүгө даяр .dmg, менин веб-сайтымда жүктөө үчүн даярдалган.
"Сервердик" операциялык тутумга негизделген тиркемелерди үзгүлтүксүз куруу, мисалы, Linux, эгер иштеп чыгуучулардан суроо-талап болсо мүмкүн болот, бирок учурда Хайку долбоорунда башка, актуалдуу милдеттер бар.

Өзүңүз байкап көрүңүз! Анткени, Хайку долбоору түзүлгөн DVD же USB жүктөө үчүн сүрөттөрдү камсыз кылат ежедневно. Орнотуу үчүн, жөн гана сүрөттү жүктөп алып, флэш-дискке жазыңыз Etcher

Суроолоруңуз барбы? Сиздерди орус тилдүү окууга чакырабыз телеграмма каналы.

Катага сереп салуу: C жана C++ тилдеринде бутуңузга кантип ок атуу керек. Haiku OS рецепт жыйнагы

чейин жазуучу котормо: бул Хайку жөнүндө сериянын бешинчи макаласы.

Макалалардын тизмеси: биринчи экинчи үчүнчү Төртүнчү

Source: www.habr.com

Комментарий кошуу