MACHINE-ID(5)

الاسم
machine-id - ملف تهيئة معرف الآلة المحلي

موجز

/etc/machine-id

الوصف

يحتوي ملف /etc/machine-id على معرف الآلة الفريد للنظام المحلي الذي يُعيَّن أثناء التثبيت أو الإقلاع. معرف الآلة هو معرف سداسي عشري، مكون من 32 حرفًا، بأحرف صغيرة، وينتهي بسطر جديد. عند فك ترميزه من السداسي العشري، يقابل هذا قيمة 16 بايت/128 بت. لا يجوز أن يكون هذا المعرف كله أصفارًا.

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

قد يُعيَّن معرف الآلة، مثلًا عند الإقلاع عبر الشبكة، باستخدام معامل سطر أوامر النواة systemd.machine_id= أو بتمرير الخيار --machine-id= إلى systemd. المعرف المُحدَّد بهذه الطريقة له أولوية أعلى وسيُستخدم بدلًا من المعرف المخزن في /etc/machine-id.

لا يتغير معرف الآلة بناءً على التهيئة المحلية أو الشبكية أو عند استبدال العتاد. بسبب هذا وطوله الأكبر، فهو بديل أكثر فائدة لاستدعاء gethostid(3) الذي تحدده POSIX.

يلتزم معرف الآلة هذا بنفس التنسيق والمنطق كمعرف آلة D-Bus.

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

التهيئة

يجب أن يكون لكل آلة معرف غير فارغ في التشغيل العادي. يجب أن يكون معرف كل آلة فريدًا. لتحقيق هذه الأهداف، يمكن تهيئة /etc/machine-id بعدة طرق مختلفة.

لتركيبات نظام التشغيل العادية، حيث يُنشأ صورة مخصصة لآلة معينة، يجب ملء /etc/machine-id أثناء التثبيت.

قد تستخدم أدوات التثبيت systemd-machine-id-setup(1) لتهيئة معرف الآلة في وقت التثبيت، لكن يمكن أيضًا كتابة /etc/machine-id باستخدام أي وسائل أخرى.

لصور نظام التشغيل التي تُنشأ مرة واحدة وتُستخدم على آلات متعددة، مثلًا للحاويات أو في السحابة، يجب أن يكون /etc/machine-id إما مفقودًا أو ملفًا فارغًا في صورة نظام الملفات العامة (الفرق بين الخيارين موصوف تحت "دلالات الإقلاع الأول" أدناه). سيُولَّد معرف أثناء الإقلاع ويُحفظ في هذا الملف إذا أمكن. يُوصى بوجود ملف فارغ في مكانه لأنه يسمح بتركيب ملف مؤقت فوق الملف الحقيقي، في حالة استخدام الصورة للقراءة فقط وعندما يُركب /etc للقراءة فقط في الإقلاع المبكر. انظر أيضًا Safely Building Images[1].

قد يُستخدم systemd-firstboot(1) لتهيئة /etc/machine-id على صور النظام المثبتة (ولكن غير المُقلعة).

عند إقلاع آلة باستخدام systemd(1)، سيُثبَّت معرف الآلة. إذا تم تحديد خيارات systemd.machine_id= أو --machine-id= (انظر القسم الأول)، ستُستخدم هذه القيمة. وإلا، ستُستخدم القيمة في /etc/machine-id. إذا كان هذا الملف فارغًا أو مفقودًا، سيحاول systemd استخدام معرف آلة D-Bus من /var/lib/dbus/machine-id، وقيمة خيار سطر أوامر النواة container_uuid، وKVM DMI product_uuid أو devicetree vm,uuid (على أنظمة KVM)، ومعرف Xen hypervisor uuid، وأخيرًا UUID مُولَّد عشوائيًا. يمكن تعيين systemd.machine_id=firmware لتوليد معرف الآلة من البرنامج الثابت.

بعد تثبيت معرف الآلة، سيحاول systemd(1) حفظه في /etc/machine-id. إذا فشل هذا، سيحاول تركيب ملف مؤقت فوق /etc/machine-id. يعتبر خطأً إذا كان نظام الملفات للقراءة فقط ولا يحتوي على ملف /etc/machine-id (ربما فارغ).

سيحاول systemd-machine-id-commit.service(8) كتابة معرف الآلة إلى نظام الملفات إذا كان /etc/machine-id أو /etc/ للقراءة فقط أثناء الإقلاع المبكر لكنه يصبح قابلاً للكتابة لاحقًا.

دلالات الإقلاع الأول

يُستخدم /etc/machine-id لتحديد ما إذا كان الإقلاع هو الأول. القواعد هي كما يلي:

    1. يمكن استخدام وسيط أمر النواة systemd.condition_first_boot= لتجاوز منطق الكشف الآلي، انظر kernel-command-line(7).

    2. خلاف ذلك، إذا لم يكن الملف /etc/machine-id موجوداً، فإن هذا يُعد أول تشغيل للنظام.وأثناء مرحلة التشغيل المبكرة (early boot)، سيقوم نظام systemd بكتابة السلسلة "uninitialized\n" (غير مهيأ) في هذا الملف، ثم يقوم بتركيب (overmount) ملف مؤقت فوقه يحتوي على معرف الجهاز الفعلي.وفي وقت لاحق (بعد الوصول إلى الهدف first-boot-complete.target)، سيُكتب معرف الجهاز الحقيقي بشكل دائم على القرص الثابت.

    3. إذا احتوى /etc/machine-id على السلسلة "uninitialized"، يُعتبر الإقلاع أيضًا إقلاعًا أول. تنطبق نفس الآلية المذكورة أعلاه.

    4. إذا كان /etc/machine-id موجودًا وفارغًا، لا يُعتبر الإقلاع إقلاعًا أول. لا يزال systemd يوصل ربطًا ملفًا يحتوي على معرف الآلة الفعلي فوقه ويحاول لاحقًا إيداعه على القرص (إذا كان /etc/ قابلاً للكتابة).

    5. إذا احتوى /etc/machine-id بالفعل على معرف آلة صالح، فهذا ليس إقلاعًا أول.

إذا تم اكتشاف إقلاع أول وفقًا للقواعد أعلاه، تُشغل الوحدات ذات ConditionFirstBoot=yes ويؤدي systemd خطوات تهيئة إضافية، ولا سيما الضبط المسبق للوحدات.

العلاقة بمعرفات OSF UUID

لاحظ أن معرف الآلة تاريخيًا ليس UUID من OSF كما هو محدد بواسطة RFC 4122[2], ولا دليل Microsoft GUID ؛ ومع ذلك ، بدءًا من نظام v30 ، تتأهل معرفات الآلة المنشأة حديثًا كـ البديل 1 الإصدار 4 UUIDs ، وفقًا لـ RFC 4122.

للحفاظ على التوافق مع التثبيتات الحالية، يجب على تطبيق يتطلب UUID متوافقًا تمامًا مع RFC 4122 فك تشفير معرف الآلة، ثم (بشكل غير قابل للعكس) تطبيق العمليات التالية لتحويله إلى UUID صالح من النوع 1 الإصدار 4 وفقًا لـ RFC 4122. مع كون "id" مصفوفة أحرف غير موقعة:

    /* Set UUID version to 4 --- truly random generation */
    id[6] = (id[6] & 0x0F) | 0x40;
    /* Set the UUID variant to DCE */
    id[8] = (id[8] & 0x3F) | 0x80;

(هذا الكود مستوحى من "generate_random_uuid()" في drivers/char/random.c من مصادر نواة لينكس.)

التاريخ

ينشأ تنسيق ملف التهيئة البسيط لـ /etc/machine-id من ملف /var/lib/dbus/machine-id الذي قدمته D-Bus. في الواقع، قد يكون هذا الملف الأخير رابطًا رمزيًا إلى /etc/machine-id.

انظر أيضًا

systemd(1), systemd-machine-id-setup(1), gethostid(3), hostname(5), machine-info(5), os-release(5), sd-id128(3), sd_id128_get_machine(3), systemd-firstboot(1)

ملاحظات

1.  بناء الصور بأمان
    https://systemd.io/BUILDING_IMAGES

2.  RFC 4122
    https://tools.ietf.org/html/rfc4122

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.