يومي الخامس مع هايكو: لننفذ بعض البرامج


TL ؛ DR : رأى المبتدئين Haiku لأول مرة ، في محاولة لنقل بعض البرامج من عالم Linux.



بلدي أول برنامج Haiku استدار تعبئتها في شكل hpkg لها


لقد اكتشفت مؤخرًا Haiku ، وهو نظام تشغيل جيد للكمبيوتر بشكل غير متوقع.
سأتعلم اليوم نقل برامج جديدة إلى نظام التشغيل هذا. التركيز الرئيسي هو وصف أول تجربة للتبديل إلى هايكو من وجهة نظر المطور لنظام التشغيل Linux. أعتذر عن الأخطاء الغبية التي ارتكبت في هذه العملية ، لأنه منذ أن قمت بتنزيل Haiku لأول مرة ، لم يمر أسبوع.


أريد تحقيق ثلاثة أهداف:


  • ميناء تطبيق CLI بسيط
  • تطبيق الميناء من واجهة المستخدم الرسومية إلى كيو تي
  • قم بتجميعها لاحقًا بتنسيق hpkg (بما أنني ما زلت أفكر في تكييف AppDir و AppImage لـ Haiku ...)

لنبدأ. في أقسام التوثيق والتطوير ، وكذلك في HaikuPorts wiki ، وجدت الاتجاه الصحيح. حتى أن هناك كتاب PDF على الإنترنت BeOS: Porting a Unix application .
467 صفحة - وهذا من 1997! النظر إلى الداخل أمر مخيف ، لكن أتمنى الأفضل. كلمات المطور مشجعة: "لفترة طويلة ، لأن BeOS لم يكن متوافقًا مع POSIX" ، ولكن Haiku "بالنسبة للجزء الأكبر" مثل هذا بالفعل.


ترقية تطبيق CLI بسيط


كانت الفكرة الأولى هي نقل تطبيق avrdude ، ولكن كما اتضح ، فقد تم بالفعل منذ فترة طويلة.


المحاولة الأولى: لا شيء لمشاهدة


ما لا أستطيع فهمه على الإطلاق هو أنه منذ أكثر من 10 سنوات ، تم نقل التطبيقات إلى Haiku - على الرغم من أن نظام التشغيل نفسه لا يمتلك حتى الإصدار 1.0.


المحاولة الثانية: تحتاج إلى إعادة كتابة


لذلك ، سوف أستخدم ptouch-770 ، CLI للتحكم في طابعة Brother P-Touch 770 ، التي أقوم بطباعة الملصقات عليها.
أقوم بطباعة تسميات مختلفة عليها ، وربما تكون قد رأيتها بالفعل في مقال سابق. في وقت سابق ، كتبت برنامج غلاف صغير مع واجهة المستخدم الرسومية في بيثون (لأنه في 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 ممتلئ للغاية ، لذلك لا وجود لهيكو. مما يعني الحاجة إلى تعديل شفرة المصدر التي أحاول تجميعها.
لا ، لن تقفز فوق رأسك ، ولا أعرف حتى من أين أبدأ.


المحاولة الثالثة


سيكون من الجيد الحصول على tmate لـ Haiku ، ثم أسمح لمطوري 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 

ذهب مرة أخرى إلى 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 - الأجهزة الافتراضية).



بناء msgpack ثابتة على buildmaster


في غضون ذلك ، أرسل التصحيح إلى المنبع لإضافة دعم Haiku إلى msgpack .


بعد خمس دقائق ، تتوفر 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 

السيد. يخبر 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 .


أوضحوا لي أن هناك شيئًا آخر في 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 

نفس الشيء ، فقط في الملف الشخصي. غوغلد وجدت . إذا كانت إضافة -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 

يشبه "معرف منفذ غير صالح" بالفعل بطاقة عمل haiku . ربما شخص ما يتصور ما هو الخطأ ، وكيفية اصلاحها؟ إذا كان أي شيء ، سوف أقوم بتحديث المقال. رابط إلى جيثب .


ترقية تطبيق واجهة المستخدم الرسومية إلى كيو تي.


اخترت تطبيق 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-creator (إنه تعطل ، تقرير عن الخطأ )

ليس من الواضح ما يجب القيام به. أفترض أنني بحاجة إلى دليل للمبتدئين بأسلوب "Hello World!" ، من الناحية المثالية شريط فيديو. سيكون من الجيد أن يكون لديك مقدمة مناسبة لـ HaikuPorter ، كما حدث في جنو مرحبا.


قرأت ما يلي:


haikuporter هي أداة لإنشاء مشاريع دفعية مشتركة لـ Haiku. ويستخدم مستودع HaikuPorts كقاعدة لجميع الحزم. لإنشاء حزم ، يتم استخدام وصفات haikuporter.

بالإضافة إلى ذلك ، أجد أن:


ليست هناك حاجة للحفاظ على الوصفات في قبو HaikuPorts. يمكنك إنشاء مستودع آخر ، ووضع الوصفات فيه ، ثم توجيه haikuporter إليه.

فقط ما أحتاج إليه - إذا كنت لا تبحث عن وسيلة لنشر الحزمة علنًا. لكن هذا موضوع لنشر آخر.


تثبيت haikuporter و haikuports


 cd /boot/home/ git clone https://github.com/haikuports/haikuporter --depth=50 git clone https://github.com/haikuports/haikuports --depth=50 ln -s /boot/home/haikuporter/haikuporter /boot/home/config/non-packaged/bin/ # make it runnable from anywhere cd haikuporter cp haikuports-sample.conf /boot/home/config/settings/haikuports.conf sed -i -e 's|/mydisk/haikuports|/boot/home/haikuports|g' /boot/home/config/settings/haikuports.conf 

كتابة وصفة


 SUMMARY="Demo QtQuick application" DESCRIPTION="QtQuickApp is a demo QtQuick application for testing Haiku porting and packaging" HOMEPAGE="https://github.com/probonopd/QtQuickApp" COPYRIGHT="None" LICENSE="MIT" REVISION="1" SOURCE_URI="https://github.com/probonopd/QtQuickApp.git" #PATCHES="" ARCHITECTURES="x86_64" PROVIDES=" QtQuickApp = $portVersion " REQUIRES=" haiku " BUILD_REQUIRES=" haiku_devel cmd:qmake "BUILD() { qmake . make $jobArgs }INSTALL() { make install } 

الجمعية وصفة


QtQuickApp-1.0.recipe الملف كـ 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! 

نشأ سؤال مثير للاهتمام. إذا أضفت مجموعًا اختباريًا إلى الوصفة - فهل سيتطابق مع أحدث التزام من أجل التكامل المستمر؟ (يؤكد المطور: "لن يأتي شيء منه. تم تصميم الوصفات لتكون مستقرة نسبيًا.")


للمتعة ، أضف إلى الوصفة:


 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 

ماذا يفعل؟ إنه مستودع بوابة ، الرمز موجود بالفعل مباشرة ، لا يوجد شيء لتفريغه. من وجهة نظري ، يجب أن تكون الأداة ذكية بما يكفي لعدم البحث عن أداة فك الحزم إذا كانت أعلى عنوان 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 غير آمن!) وما زلت أحاول تفريغ شيء ما.


وفقا للسيد. 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 

كعادة قديمة ، سأطلب من الناس الطيبين على قناة #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 لجميع المستخدمين ، ولا نريد المخاطرة بجمع وتسليم "جميع أحدث إصدار إلى upstream".

حصلت عليه! في أي حال ، حدث هذا:


 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 لا تشعر أن المستوى "يعمل فقط" ، ولكن كمطور ، أحب بعض الأشياء عن العمل مع Haiku. بالنسبة للجزء الأكبر ، يشبه هذا خدمة Open Build Service - مجموعة من الأدوات لبناء مجموعات Linux: قوية للغاية ، مع منهجية منهجية ، ولكن لا لزوم لها لتطبيقي hello world الصغير.


مرة أخرى ، وفقا للسيد. waddlesplash:


في الواقع ، HaikuPorter صارم للغاية بشكل افتراضي (بالإضافة إلى وجود وضع الوبر ، وكذلك وضع صارم ، مما يجعله أكثر صرامة!) ، ولكن فقط لأنه يخلق حزم ستعمل ، وليس فقط إنشاء حزم. لذلك ، أقسم على التبعيات غير المعلنة والمكتبات التي لم يتم استيرادها بشكل صحيح ، والإصدارات غير الصحيحة ، إلخ. الهدف من ذلك هو اكتشاف جميع المشكلات دون استثناء ، بما في ذلك المشكلات المستقبلية ، قبل أن يكتشف المستخدم ذلك (وبالتالي ، لم يكن من الممكن تثبيت avrdude ، لأن التبعية تمت الإشارة إليها فعليًا في الوصفة). المكتبات ليست مجرد حزم منفصلة أو حتى إصدارات غير محددة من SO. يضمن HaikuPorter اتباع كل هذا في الوصفات لتجنب أخطاء وقت التشغيل.

من حيث المبدأ ، يكون هذا المستوى من الدقة مبررًا عند إنشاء نظام التشغيل ، لكن يبدو لي غير ضروري لتطبيق hello world. قررت تجربة شيء آخر.


بناء التطبيقات بتنسيق 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 / الحزم إلى / system / الحزم.


ناه ، لا يزال في عداد المفقودين. على ما يبدو ، لقد فاتني شيء جيد.


بعد الاطلاع على علامة التبويب "المحتويات" في 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 في ملفات Linux .desktop . لماذا لا تجعل المعلومات "المخفية" مورداً وسمة لنظام الملفات؟


ما ليس متطورًا بشكل خاص هو اسم التطبيق (المحدد) الذي يعرض القائمة ، deskbar ، مقيد بإحكام على طول الطريق.


السيد. يشرح waddlesplash في هذه المناسبة:


يجب فهم "Deskbar" في هذه الحالة على أنه نوع من المصطلح العام (تقريبًا يشبه "شريط المهام" ، مع الإشارة إلى كل من تطبيق Windows والمفهوم العام). حسنًا ، نظرًا لأن هذا deskbar ، وليس "طاولة مكتب" ، يمكن فهم ذلك أيضًا بطريقة مماثلة.


2 الدلائل "متطابقة تقريبا" مع التطبيقات في نفوسهم


لماذا يوجد دليلان مع التطبيقات ، وأيضًا لماذا يوجد أحد تطبيقات QtQuickApplication الخاصة بي وليس في الآخر؟ (بعد كل شيء ، هذا ليس نظامًا واحدًا ، بل هو المستخدم الثاني الذي أفهمه شخصيًا).
أنا في حيرة من أمري وأعتقد أن علينا توحيد هذا.


التعليق السيد. waddlesplash


في دليل التطبيقات ، هناك تطبيقات غير مطلوبة في القائمة. لكن الوضع في القائمة يحتاج بالفعل إلى تحسين ، لجعله أكثر قابلية للتخصيص.

التطبيق ، أو لن يحدث هذا ؛)


اعتقدت: هل من الضروري حقًا وضع التطبيقات في /system/apps ، إذا رأى المستخدمون هناك - فهذا غير مرغوب فيه. ربما من الأفضل وضعها في مكان آخر لن يواجهها المستخدم؟ تمامًا مثلما تم ذلك على نظام Mac OS X ، حيث يتم إخفاء محتويات حزم .app ، والتي يجب ألا تكون مرئية للمستخدم /Applications ، في أحشاء / System / Library / ... `.


ماذا عن التبعيات؟


أعتقد أنه يجدر الإشارة إلى التبعيات بطريقة ما ، أليس كذلك؟ يمكن اعتبار كيو تي جزء إلزامي من التثبيت الافتراضي هايكو؟ كلا! لم يتم تثبيت كيو تي بشكل افتراضي. هل يمكن لبرنامج بناء الحزم اكتشاف التبعيات تلقائيًا عن طريق فحص ملفات ELF؟ قيل لي أن HaikuPorter يفعل حقا ، ولكن package لا. ذلك لأنه مجرد " hpkg رزم" ، والذي يقوم في حد ذاته بإنشاء ملفات hpkg .


هل ينبغي تحسين Haiku بإضافة سياسة لا ينبغي أن يكون لحزمة ما تبعيات على الحزم غير المدرجة في haikuports ؟ (أرغب في ذلك كثيرًا ، نظرًا لأن مثل هذه السياسة تجعل المهمة أسهل كثيرًا - فسيكون النظام قادرًا على حل تبعيات كل حزمة يتم تنزيلها تلقائيًا من أي مكان دون التقيد بمصادر الحزمة الإضافية).


السيد. يشرح waddlesplash:


, , ( ) — .

-, haikuports, . , , . [ AppImage? — . الترجمة]



? , , .


?


, Inkscape (, , Haiku, ). https://gitlab.com/inkscape/inkscape .
, - , , , , , AppImage Linux ( , , , [ ! — . ] ). , , , , .



( )


Docker. GitLab runners Linux, , runners (, , Haiku, , , Docker , FreeBSD Docker, Haiku).


Haiku Docker Linux. Haiku . ? Haiku Docker, - QEMU/KVM ( , Docker)? , . , Scribus — Haiku. , , Haiku.


:


, , CMake/CPack. , , , . : , haikuporter , , , . Linux (Haiku ).

. Linux (, ..), , . , Haiku Linux — .


استنتاج


POSIX Haiku , , . , #haiku irc.freenode.net. , .


, Qt, — . .


, " ", .. , haikuports. ( ) GitHub . Haiku Linux, Mc, "" XCode .app , .dmg , .
"" , , Linux, , , Haiku , .


جربه بنفسك! بعد كل شيء ، يوفر مشروع Haiku صور التنزيل اليومية من قرص DVD أو USB. للتثبيت ، ما عليك سوى تنزيل الصورة وكتابتها على محرك أقراص فلاش USB باستخدام Etcher


لديك سؤال؟ نحن ندعوك إلى قناة برقية باللغة الروسية.


علة نظرة عامة: كيف تطلق النار على نفسك في القدم في C و C ++. Haiku OS وصفة مجموعة


: Haiku.


:

Source: https://habr.com/ru/post/ar463803/


All Articles