المستقبل هنا أو مشفر مباشرة في المتصفح

سوف أخبرك عن الموقف الغريب الذي حدث لي ، وكيف أصبح مساهماً في مشروع مشهور.

منذ وقت ليس ببعيد كنت مشغولة بفكرة واحدة: تشغيل Linux مباشرة من UEFI ...
الفكرة ليست جديدة وهناك عدد من الأدلة حول هذا الموضوع. واحد منهم يمكن أن ينظر إليه هنا.

في الواقع ، أسفرت محاولاتي الطويلة الأمد لحل هذه المشكلة عن حل جيد التنسيق. الحل يعمل تمامًا وأستخدمه في أجزاء من أجهزتي المنزلية. يوصف هذا الحل بمزيد من التفاصيل هنا .

يكمن جوهر UEFI-Boot في دمج قسم ESP (قسم نظام EFI) مع دليل / boot. أي توجد جميع النواة وصور التمهيد (initrd) في نفس القسم الذي يمكن من خلاله UEFI تشغيل الملفات القابلة للتنفيذ ، وعلى وجه الخصوص ، تشغيل لوادر تمهيد النظام. لكن نواة Linux نفسها مبنية بالفعل في العديد من التوزيعات باستخدام خيار UEFISTUB ، والذي يسمح بتشغيل kernel من UEFI.

يحتوي هذا الحل على لحظة واحدة غير سارة - يتم تهيئة قسم ESP في FAT32 ، حيث يستحيل إنشاء روابط ثابتة (يقوم النظام بإنشائها بانتظام عند تحديث initrd). لا يوجد شيء جنائي بشكل خاص حول هذا ، لكن ليس من الجيد رؤية تحذيرات النظام عند تحديث مكونات kernel ...

هناك طريقة أخرى.

يمكن لمدير التمهيد UEFI (الذي تحتاج إلى تسجيل محمل نظام التشغيل) تحميله إلى جانب برامج تشغيل / تحميل Linux. حتى تتمكن من تحميل برنامج تشغيل نظام الملفات حيث لديك / التمهيد مباشرة من هناك تحميل النواة باستخدام UEFI. يجب وضع السائق ، بالطبع ، في قسم ESP. هذا ما تفعله لوادر GRUB. ولكن الأبرز هو أن جميع وظائف GRUB المستخدمة بشكل متكرر موجودة بالفعل في UEFI. بتعبير أدق في مدير التنزيل. ولكي تكون أكثر مملة ، فإن مدير التمهيد UEFI لديه خيارات أكثر في بعض المناطق.

يبدو أنه حل جميل ، ولكن هناك "BUT" واحدًا (أو بالأحرى كان ، لكن كان هناك المزيد عن ذلك لاحقًا). الحقيقة هي أن نظام التشغيل UEFI واضح ومباشر. لا يوجد شيء مثل تثبيت نظام الملفات أو ربط برنامج التشغيل بجهاز معين. هناك مكالمة نظام تحمل اسم الشرطي Map (Eng.) والذي يأخذ كل برنامج تشغيل بدوره ويحاول توصيله مع الجميع ، على الأقل الأجهزة المناسبة. وإذا تمكن الجهاز من التقاط برنامج التشغيل ، فسيتم إنشاء التعيين - وهو سجل ملزم. هذا هو بالضبط كيفية تهيئة برنامج التشغيل الذي تم تحميله حديثًا في الكومة المشتركة مع كافة الأجهزة الأخرى. وكل ما هو ضروري هو وضع بت واحد (LOAD_OPTION_FORCE_RECONNECT) في 1 في سجل التمهيد الخاص ببرنامج التشغيل وسوف تقوم UEFI بإعادة تعيين نفس المخطط العام بعد تحميله.

لكن هذا ليس بالأمر السهل. الأداة المساعدة efibootmgr القياسية (التي يتم من خلالها تكوين إدارة إلغاء تحميل UEFI) لا تعرف كيف (أو بالأحرى لم تكن تعرف كيف) لتعيين هذا البت. اضطررت لوضعها بيدي من خلال إجراء معقد وخطير إلى حد ما.

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

مرت عدة أيام ، ولكن لم يهتم أحد بطلباتي. وبدافع من الفضول نظرت إلى المصدر ... متشعب ، وأحسب "على ركبتي" كيفية إضافة هذه الميزة ... "على ركبتي" لأنني لم أقم بتعيين شيء مثل ذلك وقمت بتحرير المصدر مباشرة في المتصفح.

C (لغة برمجة) أعرفها بشكل سطحي للغاية ، لكنني رميت حلاً حولها (بشكل رئيسي نسخ ولصق) ... جيدًا ، ثم فكرت - وعلى الأقل لدي الكثير من الأخطاء هناك (تم جمع محاولاتي السابقة لتعديل كود C الخاص بشخص آخر من العاشر) سأصدر طلب سحب. حسن التصميم .

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

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

لقد فوجئت بحقيقة أنني ، من دون معرفة اللغة حقًا ، وعدم إعداد أي شيء بنفسي (اعتمادًا على التبعيات ، أحتاج إلى مجموعة صغيرة من المكتبات للتجميع) ، وحتى دون أن أبدأ برنامج التحويل البرمجي ، فقد "ظهرت" ميزة عمل ومفيدة في المتصفح .

ومع ذلك ، تم تعليق طلبي دون رد فعل منذ 19 مارس 2019 ، وبدأت بالفعل في نسيانه.

ولكن بالأمس ، تمت إضافة هذا الطلب لإتقان.



إذن ما قصتي. وهو يتعلق بحقيقة أنه ، في إطار التقنيات الحديثة ، اتضح أنه يمكن بالفعل كتابة الكود الحقيقي في متصفح دون الحاجة إلى نشر أي أدوات تطوير وتبعيات محليًا.

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

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


All Articles