حاولت تنزيل وبناء حزمة discourse في Nix، لكنها فشلت بسبب خطأ يبدو أنه يتعلق بتبعيات pnpm:
ERR_PNPM_INVALID_DEPENDENCY_NAME رفض وضع تبعية تحت /build/source/frontend/discourse-types/node_modules مع الاسم المستعار غير صالح "@types/@glimmer__component"
ERROR: فشل pnpm في تثبيت التبعيات
إذا رأيت ERR_PNPM_NO_OFFLINE_TARBALL أعلاه، اتبع هذه الخطوات لإصلاح المشكلة:
1. اضبط pnpmDeps.hash على "" (سلسلة فارغة)
2. ابنِ الاشتقاق وانتظر حتى يفشل بسبب عدم تطابق التجزئة (hash)
3. انسخ قيمة 'got: sha256-' مرة أخرى إلى حقل pnpmDeps.hash
إذا رأيت ERR_PNPM_LOCKFILE_CONFIG_MISMATCH أعلاه، حاول تغيير إصدار pnpm
تم العثور على 'pnpm' بالإصدار '10.34.4'
error: لا يمكن بناء '/nix/store/k90f0nxqhlyb1bym9lg5xl6pfjz4vamf-discourse-assets-2026.1.4.drv'.
السبب: فشل المُنشئ برمز خروج 1.
مسارات الإخراج:
/nix/store/biwwabb1xl58v4ywqmmc7d4vm0sl78q3-discourse-assets-2026.1.4-node_modules
/nix/store/jsbd94c63h63yq5xvrp27m5l1sg6667c-discourse-assets-2026.1.4-generated
/nix/store/n278iw1v8kzswvwm8f6n6g15gkw6wb0q-discourse-assets-2026.1.4-frontend
/nix/store/qnxglj6z2n8fn46af9rp7161634brcgk-discourse-assets-2026.1.4
آخر 25 سطرًا من السجلات:
> التقدم: تم حل 1909، إعادة استخدام 1263، تنزيل 0، إضافة 0
> التقدم: تم حل 1909، إعادة استخدام 1907، تنزيل 0، إضافة 65
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 435
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 530
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 672
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 838
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 1036
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 1175
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 1464
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 1767
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 1907
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 1908
> التقدم: تم حل 1909، إعادة استخدام 1909، تنزيل 0، إضافة 1909، انتهى
> ERR_PNPM_INVALID_DEPENDENCY_NAME رفض وضع تبعية تحت /build/source/frontend/discourse-types/node_modules مع الاسم المستعار غير صالح "@types/@glimmer__component"
>
> ERROR: فشل pnpm في تثبيت التبعيات
>
> إذا رأيت ERR_PNPM_NO_OFFLINE_TARBALL أعلاه، اتبع هذه الخطوات لإصلاح المشكلة:
> 1. اضبط pnpmDeps.hash على "" (سلسلة فارغة)
> 2. ابنِ الاشتقاق وانتظر حتى يفشل بسبب عدم تطابق التجزئة (hash)
> 3. انسخ قيمة 'got: sha256-' مرة أخرى إلى حقل pnpmDeps.hash
>
> إذا رأيت ERR_PNPM_LOCKFILE_CONFIG_MISMATCH أعلاه، حاول تغيير إصدار pnpm
> تم العثور على 'pnpm' بالإصدار '10.34.4'
>
لعرض السجلات الكاملة، نفذ:
nix log /nix/store/k90f0nxqhlyb1bym9lg5xl6pfjz4vamf-discourse-assets-2026.1.4.drv
error: لا يمكن بناء '/nix/store/9n8grwvci4gd2c64i9wm5ggw5v4r63xf-discourse-2026.1.4.drv'.
السبب: فشل تبعية واحدة.
مسارات الإخراج:
/nix/store/l9xhbd5scihfln5jr9vh1c6l4xznaall-discourse-2026.1.4
error: فشل البناء بسبب فشل التبعية
لم أرَ هذه المشكلة في أي مكان آخر، وفكرت أنكم قد ترغبون في معرفة ذلك.
هذا مجرد تنزيل حزمة Discourse من nixpkgs باستخدام مدير الحزم Nix. تعمل المشتقات (Derivations) من خلال استنساخ حزمة ما وتجميعها مباشرةً من المصدر.
كنت أقوم بتثبيت حزمة بشكل مؤقت كما أفعل مع أي نظام NixOS آخر. لم يكن الأمر مخصصًا للتطوير أو الإنتاج تحديدًا، بل أردت التحقق مما إذا كان بإمكاني استخدام Discourse عبر سطر الأوامر (CLI). لم يتمكن متصفحي ذو الواجهة النصية (TUI) من عرض بعض عناصر واجهة المستخدم، لذا فكرت في تجربة حزمة Nix هذه لمعرفة ما إذا كانت تجربة المستخدم أكثر ملاءمة.
جربت تنزيلًا/تجميعًا بسيطًا عبر Nix وواجهت الخطأ المذكور أعلاه.
مثير للاهتمام. أعتقد أن الحزمة ليست رسمية من Discourse. نظرة سريعة على قائمة المُحافظين لا تظهر أي عضو من فريق Discourse سمعت به من قبل. بالإضافة إلى ذلك، لا توجد #وثائق حول هذا الأمر据我所知.
let
version = "2026.1.4";
src = fetchFromGitHub {
owner = "discourse";
repo = "discourse";
rev = "v${version}";
sha256 = "sha256-kQYDKZIMsWByuCZQfUlwhoIew5QykVylRMh6xvrHIBY=";
};
in
# ...
لذلك، فهو يستخرج من `discourse/discourse`، وباقي عملية الاشتقاق (derivation) عبارة ببساطة عن خطوات بناء، وأين تضع الملفات، وماذا تفعل مع أخطاء بناء معينة …إلخ
معامل `src` هذا يشبه إلى حد ما المتغير، لأنه ينتقل عبر باقي عملية الاشتقاق
أيضًا، لا تحتاج إلى التثبيت الكامل لنظام nixOS لاختبار هذا.
متجر الحزم nix متاح تقريبًا على أي جهاز.
`nix-shell -p discourse`
حيث يبدأ `nix-shell` غلافًا (shell) يصبح فيه أي حزمة أو حزم محددة عبر `-p` متاحة على النظام. بمجرد إغلاق الغلاف، لم تعد تلك الحزم مثبّتة.
لا أملك تشبيهًا من apt لوصف nix كمفهوم، لكن إذا كان الماء يأخذ شكل الحاوية التي يحويها، فإن nix هو حاوية تأخذ شكل محتواها. المشكلة التي يسعى `nix` إلى حلها هي “يعمل على جهازي”، بمعنى أنه إذا تم تجميع البرنامج وتشغيله، فسيتم تجميعه وتشغيله عبر nix.
شكرًا لك على التقرير! لقد قمت بالتحقق، ويبدو أن هذه مشكلة تتعلق بعدم تطابق إصدار pnpm في حزمة Nix، وليس مشكلة في تجزئة الاعتماديات (dependency hash).
يُعلن إصدار Discourse v2026.1.4 عن استخدام pnpm@10.28.0، بينما يستخدم تعبير Nix حزمة pnpm_10 المتغيرة، والتي تحل حاليًا إلى الإصدار 10.34.4. يرفض إصدار pnpm الأحدث هذا بعض المستعarents (aliases) للاعتماديات التي يستخدمها هذا الإصدار من Discourse.
الإصلاح المحتمل في Nixpkgs هو تثبيت الـ derivation على إصدار قديم متوافق من pnpm، ربما الحزمة الموجودة pnpm_10_29_2، أو تحديدًا 10.28.0، ثم تحديث pnpmDeps.hash إذا لزم الأمر.
بما أن حزمة Nix تُدار من قبل المجتمع، فسيكون من الضروري إجراء هذا الإصلاح في Nixpkgs، لكنني آمل أن يشير هذا إلى الصائحين إلى الاتجاه الصحيح.
ربما استعجلت في تحديد هذه المسألة كمُحسَلة، لأنني لم أجرِ أي اختبار فعلي لها حتى الآن، ههه
يسمح Nixpkgs بتطبيق طبقات (overlays) وتجاوزات (overrides) على حزمه محليًا. يمكنني محاولة تنفيذ تلك التغييرات على الـ derivation بنفسي عندما يتوفر لي بعض الوقت، ثم أعود إليكم بنتائج ما توصلت إليه.
كانت النسخة من Discourse في nixpkgs قديمة نسبيًا، تعود إلى شهر يناير، لذا فتحت طلبًا للدمج (PR) لتحديثها. لم يسبق لي أن ساهمت في nixpkgs من قبل، لذا سنرى كيف ستسير الأمور.