انتقل إلى المحتوى الرئيسي

تثبيت المنصة

تأخذك هذه الصفحة من جهاز نظيف إلى تثبيت OktoID محلي مكتمل لهذا الإصدار. تُجري إعداده في متصفح، عبر معالج الإعداد، خطوة بخطوة. كل خطوة تكتب شيئًا، ثم تثبته بفحوصات قبل أن تُفتَح الخطوة التالية. وفي النهاية تكون خدمة الإعداد قد توقفت، وعنوانها يجيب بـ 410 Gone، ويكون لدى التثبيت مزوّد هوية، ومؤسسة ارتكاز جذرية، ووحدة أمان ثبتت سلامتها، ومعرّف لامركزي لمؤسسة الارتكاز وشجرة ثقة جذرها مؤسسة الارتكاز.

ثمة طريق ثانٍ للدخول. فالأمر pnpm stack:up من دون --setup يأخذ كل إجابة من ملف الإجابات ويُعِدّ بيئة التشغيل من دون سؤال، وهو ما يستخدمه التثبيت وتسجيل الدخول. تُعَدّ بيئة التشغيل بإحدى الطريقتين، لا بكلتيهما أبدًا. استخدم هذه الصفحة حين ينبغي أن يرى شخص كل قرار ويؤكده.

قبل أن تبدأ​

تحتاج إلى جهاز مُعَدّ كما يصف الملف docs/development/getting-started.md في المستودع:

  • Node 24 وpnpm، مع تنفيذ pnpm install في المستودع؛
  • Docker مع Compose؛
  • أن تُحَلّ أسماء *.local.oktoid.app إلى 127.0.0.1؛
  • متصفح يثق بجذر التطوير الخاص ببيئة التشغيل (يبيّن القسم التالي أين يوجد).

نفّذ كل أمر في هذه الصفحة من جذر المستودع، بحساب المستخدم الخاص بك. فبرنامج التثبيت يرفض العمل بحساب root (uid 0): إذ ستصبح ملفات الإعداد مملوكة لـ root وستُمنَح خدمة الإعداد مجموعة root.

يجب ألا تكون بيئة التشغيل قد أُعِدّت قط من قبل. فإن كانت قد عملت يومًا، فابدأ من بيئة فارغة:

pnpm stack:reset

تحذف إعادة الضبط كل شيء، بما فيه جذر التطوير. وثِق بالجذر الجديد بعد التشغيل التالي، كما يبيّن التثبيت وتسجيل الدخول.

يقرأ المعالج إجاباته الأولى من ملف الإجابات الخاص بالتثبيت، infra/environments/local/answers.yaml، ويعرضها على شاشاته لتؤكدها أو تغيّرها. وما تغيّره تخزّنه المنصة، ولا يُعاد كتابته إلى الملف.

شغّل بيئة التشغيل مع معالج الإعداد​

pnpm stack:up --setup

يبني التشغيل الأول صور المنصة ويستغرق عدة دقائق. وقرب النهاية يذكر بأي طريقة تُعَدّ بيئة التشغيل، ولماذا:

setup mode: wizard (no setup exists yet and --setup was given)
bootstrap (the unattended converge) was not run: the wizard converges

وينتهي بالعناوين المعتادة، ثم سطرين آخرين، ثم الأوامر التي تمنح الثقة لجذر التطوير:

setup: https://setup.local.oktoid.app/
sign-in code: the file <repository>/infra/compose/.state/local/setup/sign-in-code (mode 0600). It is never printed; read it where you can trust the screen.

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

سجّل الدخول إلى الإعداد​

اقرأ الرمز حيث لا يستطيع أحد رؤية شاشتك:

cat infra/compose/.state/local/setup/sign-in-code

يتألف الرمز من 52 محرفًا، من الأحرف A إلى Z والأرقام 2 إلى 7.

افتح https://setup.local.oktoid.app/. الصفحة هي تسجيل الدخول إلى الإعداد. ألصِق الرمز في حقل رمز الدخول من برنامج التثبيت واختر سجّل الدخول. ولا يهم تكبير الأحرف أو تصغيرها، ولا المسافات، ولا الوصلات.

تسجيل الدخول يستهلك الرمز ويحذف ملفه. ومنذ تلك اللحظة تكون بحوزتك جلسة إعداد:

  • تنتهي بعد 30 دقيقة من دون نشاط، وبعد 4 ساعات مهما بلغت من النشاط. وقبل حدّ الخمول بدقيقتين، تسأل الصفحة هل تريد البقاء مسجَّلًا للدخول؛
  • وعندما تنتهي، أنشئ رمزًا جديدًا بالأمر pnpm stack:setup-code وسجّل الدخول مجددًا. يُفتَح الإعداد عند الخطوة التي توقف عندها، ولا يضيع شيء مما حفظت.

خمسة رموز خاطئة توقف الإعداد. يُجاب الرمز الخامس بعبارة رموز خاطئة كثيرة. توقف الإعداد، وتخرج الخدمة. ومنذ ذلك الحين يعرض عنوان الإعداد الإعداد لا يعمل، وإعادة تحميله لا تُشغّل الخدمة. نفّذ pnpm stack:setup-code، كما تقول تلك الصفحة، أو pnpm stack:up مجددًا: أيّهما يكتب رمزًا جديدًا ويُشغّل الخدمة، ولا يضيع شيء مما حفظت. وإن لم تكن المحاولات الخمس من فعلك، فثمة شخص آخر يستطيع بلوغ هذا العنوان؛ فتوقف واعرف مَن هو قبل المتابعة.

إن قالت الصفحة سبق استخدام هذا الرمز ولم تكن أنت مَن استخدمه، فقد استخدمه شخص آخر. توقف، وأخبِر المسؤول عن أمن الجهاز.

كيف تعمل كل خطوة​

تحمل خطوات المعالج أرقام الإعداد الكامل، من 1 إلى 12. وهذا الإصدار فيه الخطوات من 1 إلى 5، و8، و9، و10، و12؛ وتذكر القائمة على اليسار أيّ الأرقام تضيفها الإصدارات اللاحقة، والأرقام لا تتغير أبدًا.

ولكل شاشة البنية نفسها:

  • النموذج يعرض ما ستكتبه الخطوة، معبّأً من ملف الإجابات. ولا يُكتَب أي سرّ أبدًا: فحقل السرّ يأخذ مرجعًا إلى مخزن الأسرار، مثل secret://oktoid/mail/smtp، ويرفض الإعداد قيمة.
  • الإجراء (ويختلف اسمه من خطوة إلى أخرى) يكتب الخطوة ويشغّل فحوصاتها. وتظهر الفحوصات واحدًا تلو الآخر كلما اكتملت.
  • الفحوصات يثبت كل منها شيئًا واحدًا، وتعرض نجح أو فشل أو يحتاج إلى انتباه أو في الانتظار أو لم يُنفَّذ أو، عندما يُقطَع تشغيل، انقطع. وعندما يفشل فحص، يسمّيه شريط، وينفتح صفّه على ما توقّعه الإعداد، وما حصل عليه، والسبب، وما ينبغي فعله. وتعرض الفحوصات التي تليه لم يُنفَّذ.
  • متابعة لا يُفتَح إلا عندما تنجح كل فحوصات الخطوة. والخطوة 12 هي الاستثناء، وتذكر السبب.

الخطوة المكتملة للقراءة فقط. يمكنك فتحها مجددًا من القائمة على اليسار لقراءتها، لكن الإعداد لن يغيّر ما كتبته.

الخطوة 1: التحقق من مزوّد الهوية​

الصفحة هي التحقق من مزوّد الهوية. في بيئة التشغيل المحلية يكون المزوّد هو Keycloak، وتقول لوحة الاتصال Keycloak، نصّبه برنامج التثبيت. هذه الخطوة تقرأ فقط: لا يُكتَب شيء إلى المزوّد ولا إلى المنصة.

اختر نفّذ التحققات. يعمل فحصان:

الفحصما يثبته
استجاب مزوّد الهوية وقبِل بيانات اعتماد المسؤولشبكة المنصة نفسها تبلغ المزوّد، وبيانات الدخول التي أُعطِيها الإعداد تعمل
قُرئ ما يستطيع الإعداد فعله في المزوّدأيّ صلاحيات الإدارة الأربع تحملها بيانات الدخول: فمع الصلاحيات الأربع كلها، ينشئ الإعداد كل شيء بنفسه

في بيئة تشغيل لم تُعَدّ من قبل، ينجح الفحص الثاني ويقول إن بيانات الدخول يجوز لها إنشاء النطاق، الذي لا وجود له بعد: أما ما يجوز لها فعله داخل النطاق فيُفحَص عندما تنشئه الخطوة 2. وهذه هي النتيجة المتوقعة هنا، لا تحذير.

عندما ينجح كلاهما، اختر متابعة.

إن لم يجب المزوّد، فالسبب هو provider_unreachable. يبلغ الإعداد المزوّد من داخل بيئة التشغيل، لا من متصفحك، لذا فإن عنوانًا يُفتَح في متصفحك قد يظل مغلقًا في وجه المنصة. تحقّق من سجل تشغيل المزوّد بالأمر pnpm stack:logs keycloak ثم أعد تشغيل الفحوصات.

الخطوة 2: المطالبات والبريد والعملاء والحساب الجذري​

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

تحقّق من الاسم الكامل وعنوان البريد الإلكتروني للحساب الجذري (root@local.oktoid.app في بيئة التشغيل المحلية). مربع شخص واحد يشغّل هذه البيئة ويحكمها مؤشَّر، لأن ملف الإجابات المحلي يمنح الحساب الجذري حزمة SOLE_ADMIN. ولا يعرض هذا المربع إلا بيئة تشغيل تطويرية؛ أما في بيئتَي ما قبل الإنتاج والإنتاج فلا وجود له ويُشترَط شخصان.

اختر طبّق هذه الخطوة. تعمل أربعة فحوصات: الفحصان من الخطوة 1 مجددًا، ثم:

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

تذهب الدعوة إلى Mailpit، الذي يلتقط كل رسالة في بيئة تشغيل محلية: http://127.0.0.1:18025. لا حاجة لأن تتبعها الآن. فالخطوة 12 تقرأ هل سجّل الحساب الجذري الدخول، ويمكن إكمال الإعداد قبل أن يفعل؛ ويبيّن التثبيت وتسجيل الدخول، في خطوتيه 2 و3، كيف تتبع الدعوة.

إن كان الحساب الجذري موجودًا ولم تُرسَل الدعوة، تقول الصفحة ذلك وتعرض أرسل الدعوة مجددًا. كل ما عدا ذلك في الخطوة قد كُتِب، ويمكنك المتابعة.

اختر متابعة.

الخطوة 3: تسمية التثبيت وإنشاء مؤسسة الارتكاز​

الصفحة هي تسمية التثبيت وإنشاء مؤسسة الارتكاز الجذرية. مؤسسة الارتكاز الجذرية هي المؤسسة الواقعة في جذر سجل التثبيت: كل مؤسسة أخرى تقع تحتها. تكتب هذه الخطوة مؤسسة الارتكاز، وتفويض الحساب الجذري عليها، وتفويضًا لكل عميل آلي يتصرّف نيابةً عنها. ولا يُنشَر شيء بعد.

الحقلفي بيئة التشغيل المحلية
اسم التثبيتoktoidدائم. أحرف صغيرة وأرقام ووصلات: يصبح الجزء الأول من كل مسار وجزءًا من اسم كل شهادة
اسم النطاقlocal.oktoid.appدائم. إنه داخل كل بيانات ثبوتية يُصدِرها التثبيت
الاسم القانوني لمؤسسة الارتكاز الجذريةOktoID Localيُعرَض بوصفه اسم مرتكز الثقة. ويمكن تصحيح تهجئته لاحقًا
يعمل هذا التثبيت من دون اتصال بالشبكات الخارجيةغير مؤشَّرمعزول عن الشبكات. وعندئذ ترفض الخطوة 8 سجلًّا عامًّا

لا يمكن تغيير اسم التثبيت ولا اسم النطاق بعد هذه الخطوة من دون إعادة إصدار كل ما بُنِي عليهما. اقرأهما مرتين.

اختر أنشئ مؤسسة الارتكاز. يسأل مربع حوار إنشاء مؤسسة الارتكاز بهذه القيم الدائمة؟ اكتب اسم التثبيت، oktoid، واختر أنشئ مؤسسة الارتكاز مجددًا. يعمل فحصان:

الفحصما يثبته
إجابات التثبيت كاملة وصحيحةالإجابات بوصفها كلًّا تجتاز قواعد ملف الإجابات
كُتبت مؤسسة الارتكاز وتفويض الحساب الجذري وتفويضات العملاءالسجل يحفظها

اختر متابعة.

إن قُطِع تشغيل، مثلًا لأن الخدمة أُعيد تشغيلها، فإن الفحوصات التي كانت جارية تعرض انقطع لا فشل: فلا نتيجة لها. اختر أعد تنفيذ الخطوة؛ ولن يُكتَب شيء مرتين. ويبقى الاسم واسم النطاق ثابتين في ذلك التشغيل الثاني، لأن المؤسسة قد تكون موجودة من قبل.

الخطوة 4: إنشاء الحسابات الأولى​

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

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

في بيئة التشغيل المحلية يحكم الحساب الجذري أيضًا، لذا تقول اللوحة اختياري في هذه البيئة. اختر واحدًا:

  • تابع دون إنشائه. يحكم الحساب الجذري. ويذكر سجل تدقيق الخطوة أن حساب الحوكمة قد تم تخطيه، وفي أي بيئة كان ذلك.
  • أدخل الاسم الكامل وعنوان البريد الإلكتروني واختر أنشئ حساب الحوكمة. تعمل ثلاثة فحوصات: أن هناك شخصًا مُسمًّى يستطيع أن يحكم؛ وأن حساب الحوكمة أُنشِئ ومُنِح تفويضه؛ وأن دعوته أُرسِلت. وتصل الدعوة إلى Mailpit.

ثم اختر متابعة.

الخطوة 5: ربط وحدة الأمان​

الصفحة هي ربط وحدة أمان العتاد. تعمل الفحوصات فور فتح الصفحة. وفي بيئة التشغيل المحلية تكون الوحدة هي SoftHSM، وهي وحدة برمجية تحل محل العتاد.

وما تثبته هذه الخطوة هو الوحدة التي سجّلت الخدمة credential (الخدمة التي ستحفظ مفاتيح توقيع التثبيت) الدخولَ إليها عند بدئها: يرسل الإعداد طلبًا إلى credential، فتجيب credential من جلستها الخاصة. فخدمة الإعداد لا تحفظ رمز PIN الخاص بالوحدة ولا تفتح جلسة خاصة بها. لذا تحتاج هذه الخطوة إلى أن تكون credential عاملة.

الفحصما يثبته
حُمّلت مكتبة PKCS#11حمّلت credential مكتبة الوحدة
فُتحت جلسة وتم تسجيل الدخولتحفظ credential جلسة مسجَّلة الدخول على رمزها المميز
قُرئت بيانات تعريف الوحدةتُبلِغ الوحدة عن صانعها وطرازها
وُلّد مفتاح تجريبي ووُقّع به وتُحقّق منه ثم أُتلفتستطيع الوحدة صنع مفتاح والتوقيع به، ويزول مفتاح الاختبار بعد ذلك

الوحدة تعرض مسار مكتبة PKCS#11 والفتحة، وهي تسمية الرمز المميز كما تسمّيها إعدادات credential. وتحت الفحوصات، يعرض ما سُجّل عن الوحدة بيانات التعريف التي أبلغت عنها الوحدة ومخزن المفاتيح بوصفه مُختبَرًا ومتاحًا، وتعدّد الأقسام الرموز المميزة الثلاثة لبيئة التشغيل (oktoid وoktoid-agent وoktoid-audit) مع ما يحفظه كل منها. موجود تعني أن الوحدة عدّدت ذلك الرمز المميز. لم يُبحث عنه تعني أن المكتبة التي حمّلتها credential لا تراه، وهو أمر طبيعي مع SoftHSM، ولا تقول شيئًا عن كونه موجودًا أم لا. ولا يستطيع الإعداد تغيير الأقسام في هذا الإصدار.

عندما تنجح الأربعة كلها، اختر متابعة.

إن فشل فحص الجلسة لأن رمز PIN رُفِض، فلن تعرض الصفحة أعد التحقق: فـ credential تسجّل الدخول فقط عند بدئها، ولا ترسل رمز PIN مجددًا أبدًا من أجل فحص، حتى لا تستطيع الفحوصات المتكررة قفل الوحدة. صحّح مرجع رمز PIN في إعدادات credential وأعد تشغيل credential؛ وعندئذ تعمل الفحوصات مجددًا عند إعادة فتح الصفحة.

الخطوة 8: سجلات البيانات القابلة للتحقق​

الصفحة هي سجلات البيانات القابلة للتحقق. تقرر كيف تُنشَر المعرّفات اللامركزية، ولا تشغّل أي فحوصات: فزر متابعة يحفظ الخيارات، والخطوة 9 تطبّقها.

  • معرّف مؤسسة الارتكاز، أي معرّفها اللامركزي، يستخدم did:webvh، الذي يحتفظ بتاريخ موقّع لكل تغيير. وهو ثابت بمجرد إنشائه: فثقة كل مؤسسة تتسلسل إلى هذا المعرّف، لذا يجب أن يكون تغيير مفتاحه قابلًا للإثبات. ولا يعرض الإعداد أي طريقة أخرى لمؤسسة الارتكاز.
  • طرق المعرّف المتاحة للمؤسسات تقرر ما يجوز أن تختاره المؤسسات التي تُقبَل لاحقًا. did:webvh مفعَّل دائمًا ومحدَّد سلفًا. وdid:web مفعَّل أيضًا عند فتح الخطوة، ما لم يستثنه identifiers.methods في ملف الإجابات؛ وملف الإجابات المحلي لا يضبطه. اقرأ بطاقة did:web قبل أن تُبقيها: فهي لا تحتفظ بتاريخ ولا تدوير مسبق للمفاتيح فيها، لذا لا يستطيع أحد التمييز بين تغيير مفتاح أجرته المؤسسة وآخر أجراه مَن استولى على اسم نطاقها. ولإيقافه، ألغِ تحديد بطاقة did:web قبل أن تختار متابعة. وعند إيقافه، يُرفَض did:web لكل مؤسسة تطلبه؛ أما المعرّفات الموجودة من قبل فتحتفظ بطريقتها.
  • العنوان الأساسي للمعرّفات يقع داخل كل معرّف لامركزي يُنشأ هنا.
  • السجلات الموزّعة العامة (cheqd وHedera) تأتي في إصدار لاحق وتُرفَض حتى ذلك الحين.

يصبح العنوان الأساسي وطريقة مؤسسة الارتكاز دائمَين في الخطوة 9، وتصبح بطاقة الطرق للقراءة فقط حينئذ. اختر متابعة.

الخطوة 9: تشغيل الوكيل الجذري لمؤسسة الارتكاز​

الصفحة هي تشغيل الوكيل الجذري لمؤسسة الارتكاز. تعرض ما تأخذه من الخطوات السابقة، وكيف تُخزَّن المحافظ الرقمية (مخزن واحد فيه ملف تعريف لكل مؤسسة، يُضبَط مرة واحدة للتثبيت)، وما تنشئه: مكان مؤسسة الارتكاز في الوكيل المشترك، ومفاتيح معرّفها اللامركزي، المولَّدة في الوحدة ولا تُصدَّر أبدًا، ومستند المعرّف اللامركزي لمؤسسة الارتكاز، المنشور على اسم نطاقك مع تاريخها، وأيضًا بصيغة did:web للجهات المُتحقِّقة التي تقرأ تلك الصيغة فقط.

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

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

يفصّل الفحص الأخير الطرقَ التي يجوز للمؤسسات استخدامها: methods webvh, web عندما تُرِك did:web مفعَّلًا في الخطوة 8، وmethods webvh عندما أُوقِف.

ثم تعرض الصفحة المعرّف اللامركزي لمؤسسة الارتكاز بوصفه منشورًا: did:webvh:<scid>:oktoid.identity.local.oktoid.app. وقد حلّه الإعداد بمحلِّل المنصة نفسها. ولفحصه بمحلِّل لم تكتبه OktoID، نفّذ هذا الأمر على الخادم، مع المعرّف اللامركزي الذي تعرضه الصفحة:

pnpm oktoid resolve-identifier did:webvh:<scid>:oktoid.identity.local.oktoid.app

إنشاء معرّف لامركزي يشرح ما يطبعه.

اختر متابعة.

الخطوة 10: تأسيس شجرة الثقة​

الصفحة هي تأسيس شجرة الثقة. تقبل مؤسسة الارتكاز في شجرة الثقة الخاصة بها وتنشر الإصدار 1 من إطار الحوكمة: الوثيقة التي تذكر مَن يحكم التثبيت وما يجب أن يستوفيه كل دور ليُقبَل. وتأتي بعد الخطوة 9 لأن الإطار يسمّي مؤسسة الارتكاز بالمعرّف اللامركزي الذي أنشأته الخطوة 9؛ ويملأ الإعداد المعرّف اللامركزي بنفسه، ولا يُكتَب يدويًا أبدًا.

ما تنشره مؤسسة الارتكاز عن نفسها:

  • صندوق بريد الاتصال: واحد على الأقل، وثمانية على الأكثر. يُنشَر كل منها كما كُتِب، لذا استخدم صندوق بريد لدور، لا عنوان بريد شخص أبدًا. وعنوان بيئة التشغيل المحلية هو trust@local.oktoid.app.
  • أين يُرفع النزاع: عنوان https، يُنشَر في الإطار.

إطار الحوكمة، الإصدار 1: في بيئة التشغيل المحلية يُعبَّأ النموذج من الإطار الذي يسمّيه ملف الإجابات، infra/environments/local/framework.v1.yaml. وعندما لا يسمّي ملف الإجابات أي إطار، يقترح الإعداد إصدارًا أول من اسم مؤسسة الارتكاز وأول جهة تواصل لها؛ حرّره ليقول ما اتفقت عليه جهة الحوكمة لديك.

الإصدار 1 يُنشَر مرة واحدة ولا يُحرَّر أبدًا. فالتغيير إصدار جديد، يُجرى خارج الإعداد.

اختر أسّس شجرة الثقة. تعمل ثلاثة فحوصات:

الفحصما يثبته
جهات اتصال مؤسسة الارتكاز ومسار النزاعات والإطار كلها مُعلَنةتُعطى معًا، كما يشترط الإطار
قُرئ الإطار وهو إطار صحيحيجتاز مخطط الإطار
قُبلت مؤسسة الارتكاز في شجرة الثقة الخاصة بها، ونُشر الإصدار 1 من الإطاربيان مؤسسة الارتكاز الموقَّع عن نفسها والإطار كلاهما علني

اختر متابعة.

الخطوة 12: النشر والاختبار الذاتي​

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

اختر شغّل الاختبار الذاتي. تعمل ستة فحوصات:

الفحصما يثبته
الإجابات المخزّنة هي مرجع الإعداداتالإجابات التي يحفظها الإعداد، لا ملف الإجابات، هي ما يتقارب التثبيت انطلاقًا منها
الإعدادات المخزّنة هي الإجابات التي يحملها الإعدادأحدث إصدار مخزَّن من الإعدادات هو ما أكدته على الشاشات
جُلب بيان الثقة لمؤسسة الارتكاز عبر عنوانه المنشور واجتاز التحققجُلِب بالطريقة التي كانت ستجلبه بها مؤسسة أخرى، وتُحُقِّق من سلسلته وإطار حوكمته. وهو مُدَّعًى ذاتيًا: فمؤسسة الارتكاز هي مرتكز الثقة لنفسها
حلّت المنصة معرّف مؤسسة الارتكاز من السجل الذي تنشر منهالمعرّف اللامركزي يُحَلّ. هذه المنصة تفحص نفسها؛ وتذكر الصفحة الفحص المستقل، كما تفعل الخطوة 9
سجّل الحساب الجذري الدخول لأول مرةيُقرَأ من المنصة. ويعرض في الانتظار حتى يقبل الحساب الجذري دعوته
سُجّلت الإعدادات مطبَّقة، وأُكّد استلام سجل التدقيق الخاص بهاالتثبيت يحفظ هذه الإعدادات، ومسار التدقيق قبل السجل

لا يعمل الفحص الأخير إلا إذا لم يفشل أي فحص قبله. ونتيجتان لا تُبقيان الخطوة مفتوحة:

  • تسجيل دخول الحساب الجذري يعرض في الانتظار حتى يعيّن الشخص الذي تسمّيه دعوة الخطوة 2 كلمة مرور وعامل تحقق ثانيًا ويسجّل الدخول مرة واحدة. ولا يستطيع الإعداد فعل ذلك الجزء. كيف تُقبَل الدعوة، تحت الصف، تعدّد ما يفعله ذلك الشخص. ويمكنك إكمال الإعداد من دون ذلك؛ وبعد أن يسجّل الدخول، يقرأ أعد التحقق تسجيلَ الدخول رجوعًا. وذلك التشغيل الثاني لا يكتب شيئًا.
  • بيان الثقة يعرض يحتاج إلى انتباه عندما لا يجيب عنوانه. وذلك لا يقول شيئًا عن صحة التحقق منه. أعد تشغيل الفحوصات حين تجيب الحافة (edge)، أو نفّذ الأمر الذي يسمّيه الشريط على الخادم، قبل أن تُكمل الإعداد.

عندما يفشل فحص، لا تُسجَّل الإعدادات بوصفها مطبَّقة وتبقى الخطوة مفتوحة. وعند فشل بيان الثقة أو المعرّف اللامركزي، يعرض الشريط افتح الخطوة 10 أو افتح الخطوة 9. أصلح السبب واختر أعد الاختبار الذاتي.

وبمجرد إنجاز الخطوة، تعدّد قائمة ما نُشر بيانَ الثقة لمؤسسة الارتكاز، ومستند معرّفها اللامركزي، والمستند نفسه بصيغة did:web، كلٌّ منها منشور عندما يقرؤه هذا التشغيل رجوعًا. والخطوة 12 هي الشاشة الأخيرة، لذا ليس فيها زر متابعة: فإجراؤها الرئيسي الآن هو أكمل الإعداد.

إكمال الإعداد​

اختر أكمل الإعداد في الخطوة 12. يقول مربع الحوار إكمال الإعداد للتثبيت oktoid؟ إن التثبيت يصبح تشغيليًا لما في هذا الإصدار، وإن الإعداد يُغلَق: فهذا العنوان يتوقف عن الإجابة. وعندما يكون الحساب الجذري لم يسجّل الدخول بعد، يقول مربع الحوار ذلك أيضًا: فلا أحد يستطيع تشغيل التثبيت حتى يقبل ذلك الشخص الدعوة ويسجّل الدخول، وبمجرد إغلاق الإعداد لن تستطيع هذه الصفحة إرسال الدعوة مجددًا. فإن كانت الدعوة قد تحتاج إلى إعادة إرسال، فاختر ليس الآن وأرسلها من الخطوة 2 أولًا؛ وبعد الإكمال، يرسلها pnpm stack:root-invite مجددًا من الخادم. وإلا فاختر أكمل الإعداد.

تعدّد صفحة اكتمل الإعداد لهذا الإصدار ما أُعِدّ والخطوة التي أنجزت كلًّا منها، وما تضيفه الإصدارات اللاحقة (سلطة الشهادات ومراسم المفاتيح، وشهادة موقّع الوثائق، وفهرس البيانات الثبوتية، وحساب مُشغّل منصة منفصل، والاختبار الذاتي الكامل والختم)، وما يحدث بعد ذلك. وتُعرَض مرة واحدة: فإعادة تحميلها تعرض فقط أن الإعداد مغلق.

يحدث الإكمال بترتيب ثابت، وأول اثنتين منه هما ما يُغلِق الإعداد:

  1. تسجّل المنصة أن الإعداد اكتمل.
  2. ترفض خدمة الإعداد كل طلب منذ ذلك الحين، بما فيه تسجيل الدخول.
  3. تكتب علامة للحافة، ثم تخرج.
  4. تجيب الحافة بـ 410 Gone على عنوان الإعداد.

تحقّق من كليهما من الطرفية:

curl -sS -o /dev/null -w '%{http_code}\n' \
--cacert infra/compose/.state/local/ca/root.pem https://setup.local.oktoid.app/
docker ps -a --filter name=oktoid-local-setup --format '{{.Names}} {{.Status}}'

الأول يطبع 410. والثاني يعرض حاوية الإعداد بالحالة Exited (0).

ثم تحقّق من بيئة التشغيل كلها:

pnpm stack:verify

إن فشل سطره http://api.local.oktoid.app/ redirects to HTTPS بالرسالة no answer on port 80، فحاوية الحافة هي السبب، لا الإعداد. فالأمر pnpm stack:up يفحص المنفذين 80 و443 ويعيد تشغيل الحافة مرة واحدة عندما لا يجيب أحدهما، لذا ارجع إلى مخرجاته بحثًا عن سطر WARNING: port ... still does not answer. وفي ملف docs/development/troubleshooting.md في المستودع إدخال عن ذلك، تحت TLS، مع أمر إعادة التشغيل الذي يُنفَّذ يدويًا.

منذ الآن، لا يُشغّل pnpm stack:up خدمة الإعداد. ويقول ذلك:

setup mode: unattended (setup is complete; the stored configuration is converged and the setup host is not started)

ويتقارب مع الإعدادات المخزَّنة، لا مع ملف الإجابات. ولتغيير تلك الإعدادات كملف، صدّرها واستورد النسخة المحرَّرة، كما يصف ملف docs/development/local-stack.md في المستودع تحت قسم خدمة الإعداد. ويُرفَض pnpm stack:up --setup الآن برمز خروج 2: فإعادة فتح الإعداد أمر مستقل بذاته.

عندما يضيف إصدار لاحق خطوة​

لا يُفتَح الإعداد مجددًا إلا عندما تثبّت إصدارًا من المنصة يتضمّن إعداده خطوة لم يُنجِزها هذا التثبيت، ولا يُفتَح إلا بأمر تنفّذه أنت:

pnpm stack:setup-reopen

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

sign-in code: <repository>/infra/compose/.state/local/setup/sign-in-code (mode 0600; installer run <id>)

سجّل الدخول كما في تسجيل الدخول إلى الإعداد. الصفحة هي أُعيد فتح الإعداد عند الخطوة n: فالخطوات المنجزة من قبل مدرجة بوصفها منجزة ولا تُغيَّر؛ والخطوات الجديدة موسومة بوسم جديدة في هذا الإصدار. ويبقى التثبيت تشغيليًا ما دامت مفتوحة. أكمل الإعداد مجددًا عندما تنجح.

عندما يحدث خطأ ما​

ما تراهمعناهافعل هذا
setup is complete (the marker ... exists) ورمز خروج 2 من pnpm stack:up --setup، فورًاالإعداد مكتمللا شيء، أو pnpm stack:setup-reopen بعد تثبيت إصدار يضيف خطوة
stack:up يطبع sign-in code: not changedاستُخدِم رمز والإعداد غير مكتمل، فلا يُسَكّ رمز جديد بينما قد يكون أحدهم في وسط المعالجإن انتهت جلستك، فنفّذ pnpm stack:setup-code
انتهت جلسة الإعداد بعد 30 دقيقة دون نشاط، أو بلغت جلسة الإعداد حدّها، وهو 4 ساعاتالجلسة انتهت والرمز مستهلَكpnpm stack:setup-code، ثم سجّل الدخول مجددًا
رموز خاطئة كثيرة. توقف الإعداد، أو الإعداد لا يعمل على عنوان الإعدادخمسة رموز خاطئة أوقفت الخدمةpnpm stack:setup-code أو pnpm stack:up للحصول على رمز جديد؛ وأيّهما يُعِيد تشغيل الخدمة
انتهت صلاحية هذا الرمزمضى عليه أكثر من 24 ساعةpnpm stack:up للحصول على رمز جديد
هذا الرمز لم يصدر عن أمر من برنامج التثبيتملف الرمز لم يكتبه برنامج التثبيتلا تستخدمه. نفّذ pnpm stack:up، وإن لم تكن أنت مَن وضع ذلك الملف هناك، فأخبر جهة الأمن لديك
هذه الخطوة لم تُفتح بعدخطوة قبلها لم تُنجَزيعيدك الإعداد إلى الخطوة الواجب إنجازها الآن
هذه الخطوة مكتملة ولا يمكن تغييرها هناالخطوة المكتملة للقراءة فقط في الإعدادصدّر الإعدادات المخزَّنة وحرّرها واستوردها (docs/development/local-stack.md)
ما زال تنفيذ آخر جاريًاخطوة قيد العملانتظر؛ فالصفحة تعرض فحوصاتها كلما اكتملت
رُفِض stack:setup-code برمز خروج 2لم يُبدَأ إعداد، أو أنه مكتملpnpm stack:up --setup لبدء واحد؛ وpnpm stack:setup-reopen لإعادة فتح واحد

ما الخطوة التالية​