Skip to Content
Building Osسكربتات بدء التشغيل

سكربتات بدء التشغيل

ينشئ os.startup_scripts عملا systemd واحدا محدودا للصورة الناتجة. يعلن كل إدخال أمر صدفة، والحزم المطلوبة، ومستخدم التنفيذ، ووحدة الترتيب.

سكربتات بدء التشغيل شيفرة قادرة على الجذر ما لم يقل run_as خلاف ذلك. يجب أن تلقى المراجعة نفسها لأي سكربت تثبيت.

الشكل القانوني

{ "os": { "startup_scripts": [ { "name": "write-build-marker", "description": "Create a local readiness marker after networking is available.", "command": "set -Eeuo pipefail\ninstall -d -m 0755 /var/lib/example\nprintf '%s\\n' ready > /var/lib/example/build-ready", "packages": [], "run_as": "root", "after": "network-online.target" } ] } }

الحقول هي description وcommand، لا الحقل القديم script. run_as وafter يستخدمان أيضا snake_case. after سلسلة وحدة systemd واحدة، لا مصفوفة.

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

صمّم لإعادة المحاولة والفشل الجزئي

يمكن مقاطعة الإقلاع بعد حدوث بعض الآثار الجانبية. اكتب السكربتات بحيث يكمل استدعاء آخر بأمان أو يخرج بحالة واضحة قابلة للفحص.

من الأنماط الجيدة:

  • الكتابة إلى ملف مؤقت، والتحقق منه، ثم إعادة التسمية ذريا؛
  • التحقق مما إذا كان المستخدمون أو الأدلة أو إدخالات الإعداد موجودة أصلا؛
  • استخدام install للمالك والوضع الصريحين؛
  • تطبيق set -Eeuo pipefail ومعالجة النتائج غير الصفرية المتوقعة عن عمد؛
  • استخدام مهلات شبكة محدودة وعدد إعادة محاولة محدود؛ و
  • كتابة علامة الجاهزية فقط بعد نجاح كل الخطوات المطلوبة.

لا تعتمد على sleep كفحص جاهزية. افحص التبعية الفعلية.

التنزيلات الخارجية

تجنب curl ... | sh. إذا كان يجب أن يجلب الإقلاع الأول مخرجا:

  1. استخدم HTTPS مع التحقق من الشهادة؛
  2. ثبّت المخرج أو إصدار المصدر المتوقع؛
  3. تحقق من بصمة تشفير أو توقيع معتمد قبل التنفيذ؛
  4. اضبط مهلات الاتصال والإجمالي؛
  5. افشل مغلقا إذا فشل التحقق؛ و
  6. تجنب تسجيل بيانات الاعتماد أو عناوين URL الموقّعة.

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

الأسرار

لا تضمّن أبدا بيانات اعتماد نصا واضحا في الوصفة أو الأمر أو URL أو العلامة المولَّدة. JSON الوصفة وسجلات البناء أدلة محتفظ بها ويمكن أن يراها المشغّلون. استخدم آلية التحاق أو تسليم أسرار معتمدة وقت النشر وحدد نطاق بيان الاعتماد الناتج للهدف.

هوية التنفيذ

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

التحقق

اختبر النتائج لا حالة خروج الوحدة فقط:

{ "type": "file_contains", "description": "The startup unit wrote its readiness marker.", "params": { "path": "/var/lib/example/build-ready", "content": "ready" } }

اختبر أيضا إقلاعا ثانيا، وتبعية غير متاحة، والاستعادة من تشغيل أول مقاطَع. افحص systemctl status وسجل الوحدة عند الفشل.