انتقل إلى المحتوى

التثبيت، والصفحات، والتحديث

ترجمة صفحة Installing, the pages, updating. النص الإنجليزي هو المرجع إن اختلفا، والمشطوب فيه مشطوب هنا كما هو.

التثبيت

مثبّت واحد، يحدّد الجهاز قبل أن يثبّت أي شيء

يقرأ رقم تجميع اللوحة (src/opnsense/scripts/xgs/board.sh) ولا يثبّت إلا قطع تلك اللوحة: AMDA0201 (XGS 126/136) تأخذ مجموعة ARMADA أدناه، وAMDA0202 (جُرّبت على XGS 3300) تأخذ مجموعة OCTEON TX: 08-octep ومصادر التعريف والوحدة المبنية عبر متابِع النواة. أي لوحة أخرى لا تأخذ شيئًا، ولا لوحة ARMADA على ناقلها طرف OCTEON TX. وكل مجموعة تزيل قطع الأخرى إن كانت نسخة أقدم قد وضعتها. ويحتاج بناء وحدة OCTEON TX إلى أن تكون مصادر النواة العاملة موجودة مسبقًا في /usr/src-<series>-<sha> (contrib/npuep/fetch-sources.sh)؛ انظر octeon-tx.

git clone https://github.com/AbdelmonemAwad/os-xgs-npu
cd os-xgs-npu
./install/install.sh

قبل أن تلوم أي شيء هنا على شبكة بلا إنترنت، تأكد أن الجدار الناري يستطيع حلّ الأسماء

يترك OPNsense الجديد محلّل الأسماء يستعلم بنفسه من الخوادم الجذرية، فإن كان المزوّد لا يسمح بذلك فشل كل استعلام. كلّف هذا معظم يوم على هذا الجهاز.

host example.com 127.0.0.1

SERVFAIL يعني المحلّل، لا مسار البيانات. والحل أن تعطي النظام خوادم أسماء وتجعل المحلّل يحيل إليها بدل الاستعلام بنفسه: System - Settings - General - DNS servers، ثم Services - Unbound DNS - Query Forwarding - Use System Nameservers.

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

على لوحة ARMADA يضع المثبّت خطّافَي إقلاع مبكّرين، ويثبّت الوحدة إن كانت قد بُنيت:

  • 06-npuctl يخرج المعالج المساعد من إعادة الضبط بنبضة. فهو يخرج من التشغيل محبوسًا، ولا شيء في OPNsense يطلقه، ولهذا يقلع الجهاز ومعالجه المساعد صامت بلا منافذ.
  • 07-npuep يحمّل التعريف وينتظر ظهور الواجهات، لأن كل خطّاف مبكّر يعمل قبل أن يهيّئ OPNsense واجهاته، والخطّاف الذي يعود مبكرًا جدًّا يتركها خارج تلك الجولة.

وحدة النواة تُبنى على الجهاز ولا تأتي حزمة جاهزة: فهي بلغة C على ترويسات تلك النواة. contrib/npuep/fetch-sources.sh ينزّل المصادر المطابقة للنواة العاملة، مثبّتةً على النسخة التي تذكرها النواة في uname -v؛ وcontrib/npuep/build.sh يبني عليها ويختم الناتج بالنواة التي بُني لها؛ والمثبّت ينسخ الاثنين إلى /boot/modules.

وذلك الختم ليس مجرد تسجيل. فاعتماد الوحدة على النواة مجالٌ يمتد إلى آخر فرعها، فالوحدة المبنية لنواة 15.x خاطئة تُحمَّل دون أي اعتراض بدل أن تُرفض، فلا يأتي الفشل الصاخب الذي صُمّم المشروع حوله. لذلك يقارن install/verify.sh الختم، ويسجّل compat.json قيمة kern_version لا أسماء الإصدارات، التي لا تتغير حين يشحن OPNsense مجموعة نواة جديدة داخل السلسلة نفسها.

والخطّافان مرقّمان فوق 05-upgrade الخاص بـ OPNsense، الذي يُتمّ مجموعة برمجيات معلّقة ويعيد التشغيل من داخل تسلسل الإقلاع المبكر. وحين كانا مرقّمين تحته، 01 و02، كان هذا الكود يشغّل المعالج المساعد ثم يُعاد تشغيل الجهاز من تحته.

ولا يمكن تحميل الوحدة مسبقًا من loader.conf، لسببين لا لسبب واحد: نبضة إعادة الضبط لم تحدث بعد في تلك المرحلة فلا جهاز حيًّا يُربط به، واستعادة BAR التي يحتاجها هذا العتاد لا تحدث إلا في مسار kldload. انظر porting-notes.

والخطّافان مكتوبان بحيث لا يكونان أبدًا سبب فشل إقلاع جدار ناري: عتاد غير معروف، أو وحدة مفقودة، أو معالج مساعد لا يجيب، كلٌّ منها يسجّل السبب ويخرج بالرمز 0.

في واجهة الويب

كل صفحة أدناه مصوّرة على جهاز، بالإنجليزية والعربية، في الصفحات واحدة واحدة.

كل شيء في قسم واحد من القائمة الرئيسية، XGS Coprocessor XGS (اختُصر في 2026-10-18 لأن الاسم الطويل انكسر على سطرين في القائمة المطوية)، بين Interfaces وFirewall: Overview وSettings وPorts وIPsec وUpdates وLog File. في صفحة الإعدادات كل إعدادات الإضافة: التسريع، وصانع التدفقات، وIPsec في المحرّك، وتدفقات النفق في XGS 3300، ومهلة الاستقبال في XGS 136 وتثبيت التشفير فيه، ووضع الإطارات الكبيرة في شريحة المبدّل، ولا تعرض إلا ما في الجهاز؛ وكل إعداد يُكتب حيث يسري، والصفحة تقول متى تلزم إعادة التشغيل. والجهاز الذي ضُبطت إعدادات IPsec فيه يدويًّا تفتح الصفحة عليه كما هي. وكل نصوص القسم بالعربية أيضًا (139 نصًّا في 2026-10-17، حين كان كتالوج OPNsense نفسه يغطي 20%)، تُدمج في كتالوج الواجهة عند التثبيت وفي كل إقلاع. انظر coprocessor-section؛ جُرّب من سطر الأوامر على XGS 3300 وXGS 136 في 2026-10-17، أما الصفحات في المتصفح فليس بعد.

تفتح Overview، منذ 2026-10-18، برسم للوحة الأمامية: كل منفذ بترتيبه على الهيكل، في مجموعة لكل نوع (النحاس، والأقفاص، ووحدة التوسعة)، ووصلته ضوء؛ والمنفذ رابط إلى صفحة Ports. وتحت البطاقات تقول Last restart ما سجّلته شريحة المعالج الرئيسي سببًا لإعادة الضبط التي بدأ بها هذا الإقلاع (إعادة تشغيل، أو مؤقت المراقبة في العتاد، أو خطأ عتاد غير مصحَّح، أو ارتفاع الحرارة، أو دبوس إعادة الضبط، أو زر التشغيل)، من السجل الذي تصفه problem-reports. وحدود اللوحة ترسم شريطًا لما هو مستخدم من كل جدول. والقيمة المكوّنة من أرقام وحدها تبقى من اليسار إلى اليمين، فلا تعرض العربية "8 / 16" على أنها "16 / 8". وفي لوحة المعلومات أداة رابعة، XGS Offloaded Flows: الاتصالات في العتاد مقابل حجم الجدول، والقفزات التالية، وما صُنع وما استُرد وما أُحيي وما رُفض، من أرقام التعريف دون جدوله، ولا معدّل نقل، لأن الاتصال المُمرَّر لا يصل أبدًا إلى عدّادات المعالج الرئيسي. جُرّبت في 2026-10-18 ببيانات XGS 136 نفسه، بالسمتين ومن اليمين إلى اليسار (الصفحة وحدها بعيدًا عن الجهاز)، والقرّاء على XGS 136.

ما يبقى مع الجدار الناري يقرّره المالك، منذ 2026-10-18. ففي Offloaded Flows زر Return to host على كل اتصال: يتركه المعالج المساعد، ويمرّره المعالج الرئيسي من بعدها، ولا يقترب منه صانع التدفقات حتى يترك pf حالته، فالاتصال الذي يريد أحدٌ مراقبته أو تشكيله أو التقاطه يمكن إخراجه دون إطفاء التسريع. وفي Settings قائمة Never offloaded: عناوين وشبكات ومنافذ (192.168.1.10، 10.0.0.0/8، 2001:db8::/32، port 22)، واحد في كل سطر أو مفصولة بفواصل وحتى 64، لا تُصنع اتصالاتها أبدًا، ويكفي أن يطابق أحد طرفي الاتصال. تُطبَّق عند حفظ الصفحة، فتُخرج فورًا ما تسمّيه من اتصالات في العتاد، وفي كل إقلاع قبل أن يبدأ صانع التدفقات؛ والمُدخل الذي لا يُقرأ يُذكر في تقرير التطبيق ويُطبَّق الباقي. والزر يُمنح مع الإعدادات، لا مع صلاحية القراءة الخاصة بالصفحة. وبطاقة خامسة تعدّ الاتصالات المُعادة يدويًّا وعدد مرات رفض القائمة، أي المحاولات لا الاتصالات. جُرّب في 2026-10-18 باتصالات حية على XGS 3300 (كل نوع من المُدخلات، والقائمة من حفظ الصفحة نفسها، وعند الإقلاع، واتصال مُعاد) وعلى XGS 136 (اتصال مُعاد، والقائمة عند الإقلاع وعلى اتصال حي)، وعلى XGS 136 بعد فتح مُدخلات واجهتي منفذين يدويًّا، لأن تعريفه يتركهما مغلقين ولا يُصنع اتصال هناك بغير ذلك (#483).

قائمة حظر تقطع المفتوح أصلًا، منذ 2026-10-19. القاعدة التي تحظر قائمةً (اسمًا مستعارًا يُملأ من جدول URL أو من مصدر) لا توقف إلا الاتصالات الجديدة؛ أما الاتصال الذي فُتح قبل إدراج عنوانه فيستمر، في الجدار الناري وفي المعالج المساعد. وفي Settings خيار Cut open connections when listed: تُقارن الأسماء المستعارة المختارة هناك كل دقيقة، وعند حفظ الصفحة، بما كانت تحمله من قبل، وكل اتصال أحد طرفيه فيما أضافته القائمة يُقطع: تُقتل حالته في pf بمعرّفها، ويتركه المعالج المساعد مع حالته. واختيار قائمة يقطع ما تسمّيه أصلًا، وسجل XGS يقول ما قُطع. ولا تُعرض الأسماء المستعارة الداخلية (__lan_network وأمثالها)، فقطع أحدها يقطع شبكة كاملة. قيس على الجهازين: تدفق في العتاد توقف خلال ثانيتين من إدراج عنوانه، وعبر مهمة الدقيقة خلال 34 و60 ثانية (lists-cut-2026-10-19).

اتصالات تُقطع ببصمة TLS، منذ 2026-10-19. بصمة JA4 تسمّي البرنامج الذي فتح اتصال TLS، أي ما تعرضه رسالته الأولى، لا العنوان الذي ذهب إليه، فتظل تطابق البرنامج الذي يغيّر خادمه. وفي Settings خيار Cut connections by TLS fingerprint: قائمة بصمات JA4، واحدة في كل سطر. يقرأ سجل نظام كشف التسلل في OPNsense نفسه، ويجب أن يكون مفعّلًا (ووضع IDS، الذي يستمع فقط، يكفي)، وسجل TLS فيه يحمل JA4: Services: Intrusion Detection: Administration، الوضع المتقدم، Enable eve TLS logging، وja4 في Eve TLS custom logging، على الواجهات التي تدخل منها الاتصالات. يُقرأ السجل كل ثانيتين، وكل اتصال يظهر فيه ببصمة مدرجة يُقطع: تُقتل حالاته في pf بمعرّفاتها، ويتركه المعالج المساعد معها. وإدراج بصمة يقطع ما هو مفتوح بها أصلًا. ولإيجاد بصمة، يسرد /usr/local/opnsense/scripts/xgs/ja4_cut.py --seen البصمات في السجل، الأكثر تكرارًا أولًا، ومع كلٍّ آخر اتصال عرضها. قيس على XGS 3300: تُسجَّل البصمة قبل أن يدخل اتصالها العتاد، ومن تدفقين من البرنامج نفسه لم يتوقف إلا صاحب البصمة المدرجة (ja4-cut-2026-10-19). لم يُقس على XGS 136.

الحركة غير المعتادة، مُبلَّغًا عنها، منذ 2026-10-19. في Settings خيار Watch for unusual traffic، مطفأ حتى يُشغَّل. كل دقيقة يقرأ اتصالات الجدار الناري كل عشر ثوانٍ ويبلّغ في سجل XGS، ولا يحظر أبدًا: مسح منافذ (مضيف يجرّب 100 منفذ أو أكثر على عنوان واحد خلال دقيقة)، ومسح عناوين (مضيف يصل إلى 256 عنوانًا جديدًا أو أكثر)، ومضيف يرسل أو يستقبل أو يفتح أكثر بكثير مما اعتاد، بعد أن يكون له تاريخ ساعة. قيس على XGS 3300 (anomaly-2026-10-19).

حركة العتاد تُعدّ حيث ينظر OPNsense، منذ 2026-10-19، على الجهازين. الاتصال الذي يمرّره المعالج المساعد لا يراه pf ولا الواجهات، فتتوقف عدّاداتها (صفحة الجلسات، وإحصاءات القواعد، ورسوم الحركة، ولوحة المعلومات) لحظة دخوله العتاد. والمعالج المساعد يعدّ ما يمرّره ويخبر المعالج الرئيسي مرة في الثانية تقريبًا؛ وفي Settings خياران، Count hardware traffic in pf وCount hardware traffic on the interfaces، مفعّلان افتراضيًّا، يضيفان تلك الأعداد إلى حالات pf وقواعده وإلى عدّادات الواجهات. قيس: حملت حالة pf الاتصال كله حتى آخر حزمة، وعدّ المنفذان تدفقًا بفارق 327 حزمة من 5.1 مليون (hw-counters-2026-10-19). ليس بعد على XGS 136. وعلى XGS 136 منذ اليوم نفسه: بلغت حالة pf ما عبر السلك، بفارق 0 حزمة من 1.37 مليون في الاتجاهين، وكل واجهة حتى الإطار الواحد (xgs136-counts-2026-10-19).

تقارير المشكلات

ما يخطئ على الجهاز (سطر من التعريف يقول إن شيئًا فشل، أو خطأ من إحدى إضافات الجهاز، أو تحديث فاشل، أو وحدة تعريف بُنيت لنواة أخرى، أو انهيار النواة، أو إعادة تشغيل دون إيقاف) يُكتب، ويُنظَّف من كل عنوان ورقم تسلسلي واسم، ويُرفع بلاغًا على GitHub في مستودع الجزء الذي يخصه، عبر وسيط المشروع، فلا يحتاج أحد حسابًا على GitHub. تلقائي افتراضيًّا، ويقال ذلك في تنبيه حتى يختار المالك؛ ويدوي أو مطفأ من XGS: Problem Reports، التي تعرض ما يُرسل بالضبط. انظر problem-reports وrelay/README.md؛ جُرّب على جهاز مصطنع عبر tools/test-reporter.py وrelay/test.mjs، أما على جهاز حقيقي فليس بعد.

إعدادات OPNsense نفسه لهذا العتاد

صفحة System: Settings: Miscellaneous في OPNsense، قُرئت خيارًا خيارًا مقابل الجهازين: تضبط الإضافة Thermal Sensors على amdtemp مرة واحدة، حيث لم يُختر شيء، فتصل حرارة المعالج إلى لوحة معلومات OPNsense (38.6 و53.6 درجة مئوية في الخمول، قيست على الجهازين في 2026-10-17) وتعرضها الصفحة. وقيس PowerD على XGS 3300 وتُرك مطفأً: في وضع hiadaptive لم يكلّف شيئًا يُقاس (5.36 مقابل 5.31 Gbit/s عند MTU 1500، وزمن ذهاب وإياب 0.98 مقابل 1.02 ms) ولم يكسب شيئًا يُقاس في الخمول. والذاكرة التبديلية والسجلات في الذاكرة والصافرة تُركت كما هي، لكلٍّ سببه. انظر appliance-defaults.

التحديث

System - Firmware - XGS Coprocessor. XGS - Updates. هذا المشروع ليس في مستودع حزم OPNsense، فلا تعرضه System - Firmware - Updates أبدًا؛ هذه الصفحة تعرضه. والخطوات مصوّرة في تحديث الجهاز خطوة خطوة.

  • Check for updates يسأل GitHub عن أحدث نسخة على main نجحت كل فحوصها، فالنسخة التي فحوصها جارية أو فاشلة لا تُعرض أبدًا مهما كانت جديدة، ويسرد ما تغيّر منذ المثبّت، الأحدث أولًا أحدث إصدار (منذ 2026-10-18)، ويسرد كل إصدار منذ المثبّت بأسطر ملاحظاته، وهي قسمه في CHANGELOG.md. ويصدر الإصدار حين يجهز إصلاح، أو حين تتجمع تحسينات (RELEASING.md)، فلا تُعرض دمجات اليوم واحدة واحدة. وإلى الأمام فقط: الجهاز الذي يعمل بشيء أحدث لا يُعاد إلى الوراء.
  • Update ينزّل ذلك النسخة الإصدار ويشغّل install/install.sh الذي يحمله، وهو السكربت نفسه الذي يشغّله التثبيت اليدوي. وتُبنى وحدة التعريف للنواة العاملة وتُختم، وتتابع الصفحة السجل أثناء البناء تعرض الصفحة شريط تقدّم (منذ 2026-10-18): ست خطوات (التنزيل، والفك، وأقسام المثبّت، ومصادر النواة، وبناء التعريف، والإنهاء) وساعة. ويُقرأ مما يتركه التحديث، لا يُقدَّر من الوقت أبدًا: أثناء البناء من ملفات الكائنات التي تظهر بجانب المصادر، فعبارة "5 من 9 ملفات مصدر تُرجمت" تعني ذلك تمامًا. ويبقى السجل في تبويبه. وقبل هذا كانت الصفحة تعرض سطرًا ثابتًا واحدًا، ويبقى السجل عند == kernel module == طوال البناء، الذي يكتب سجلًا خاصًّا به.
  • What changed يسرد كل إصدار أحدث من المثبّت، وحين لا يوجد أحدث، ما يحمله أحدث إصدار نفسه بدل تبويب فارغ. والتثبيت الذي هو نسخة لا إصدار (يدويًّا، أو من الصفحة قبل أن تتبع الإصدارات) يقول ذلك، والمتقدم على أحدث إصدار يُقال له إن الإصدار التالي سيُعرض.
  • Channel (منذ 2026-10-18): Releases، الافتراضية والمناسبة لجهاز في الخدمة، أو Test التي تتبع main (كل تغيير بمجرد دمجه ونجاح فحوصه، قبل أن يصبح جزءًا من إصدار) بعد تحذير. وهي الملف ذو السطر الواحد /var/db/os-xgs-npu/update/branch الذي يقرؤه المحدِّث دائمًا، فالطرفية والصفحة تضبطان الشيء نفسه؛ وتغييرها يُسقط آخر فحص، لأنه كان للقناة الأخرى. جُرّب على XGS 136: ضُبطت على main، وقُرئت، ثم ضُبطت على releases.
  • التعريف الجديد يُحمَّل في الإقلاع التالي، لا قبله: فإعادة تحميله تأخذ المنافذ الأمامية، وعلى XGS 3300 منفذ WAN أحدها. ثم تعرض الصفحة Reboot now، أو ينتظر التحديث الإقلاع التالي للجدار الناري أيًّا كان. لا شيء يعيد التشغيل وحده.

ما هو مثبّت يُسجَّل في /usr/local/share/os-xgs-npu/installed.json: النسخة، مقروءةً من نسخة git، أو من الختم الذي يتركه التحديث، أو من الختم الذي تحمله صورة xgs-image-builder. والفحص بلا مصادقة، ويسمح GitHub بستين طلبًا كهذا في الساعة من العنوان الواحد؛ والفحص يكلّف حتى سبعة.

جُرّب في آلة QEMU افتراضية ثُبّتت من صورة XGS 3300 (مجموعة OCTEON TX، دون المعالج المساعد): الفحص، والتحديث من الصفحة، والأزرار محبوسة أثناء البناء، وReboot now، والصفحة بعد الإقلاع. لم يُشغَّل بعد على جهاز حقيقي.

الإقلاع الأول يُسند المنافذ الأمامية

على جهاز كل منافذه الأمامية غير مُسندة، يعدّ أول إقلاع يراها ثلاثين ثانية تنازليًّا على الطرفية ثم يُسندها بأسمائها على الهيكل: Port2 هو WAN على XGS 3300، وPort1 على XGS 136، وكل منفذ أمامي آخر عضو في جسر واحد، هو LAN، على 192.168.1.1/24؛ ومنفذ الإدارة، حيث يوجد (في XGS 3300)، يصير MGMT على 192.168.100.1/24، والاثنان مع DHCP. وأي مفتاح أثناء العدّ يترك الإسناد لقائمة الطرفية أو للواجهة. والجهاز الذي ضُبطت منافذه يدويًّا لا يُمسّ أبدًا. انظر interface-assignment؛ جُرّب تحت QEMU باللوحتين، ولم يُقلع بعد على جهاز منافذه غير مُسندة وأُقلع على XGS 3300 (مع وحدة 4x10G: خمسة عشر منفذًا في الجسر) وعلى XGS 136 في 2026-10-17: أسند كلٌّ منهما نفسه، ووزّع عناوين على LAN وMGMT، ووصل إلى الإنترنت عبر WAN.

وحدات التوسعة

على XGS 3300 تنتمي وحدة FleXi في الفتحة الأمامية إلى المعالج المساعد، وتظهر منافذها واجهاتٍ بعد منافذ اللوحة الاثني عشر، بأسمائها المكتوبة على المعدن: A1 إلى A4 لوحدة 4x10G في الفتحة A. ولا شيء في الكود يسمّي وحدة: في كل إقلاع يقرأ التشغيل قاعدة بيانات المنصة في المعالج المساعد نفسه ويربطها، بالعنوان، بالمنافذ التي يبلّغ عنها NetAgent، فالوحدة التي لم يرها أحد هنا تُربط بالطريقة نفسها. قيس مع وحدة 4x10G (AMDA0207): ست عشرة واجهة، ومنافذ الوحدة الأربعة مسمّاة وواحد منها بوصلة؛ ولم تُقس الحركة عبر منفذ وحدة بعد. انظر expansion-modules.