SYSTEMD.ENVIRONMENT-GENERATOR(7)

الاسم
systemd.environment-generator - مولدات ملفات البيئة لـ systemd

موجز

/usr/lib/systemd/system-environment-generators/some-generator

/usr/lib/systemd/user-environment-generators/some-generator

    /run/systemd/system-environment-generators/*
    /etc/systemd/system-environment-generators/*
    /usr/local/lib/systemd/user-environment-generators/*
    /usr/lib/systemd/system-environment-generators/*

    /run/systemd/user-environment-generators/*
    /etc/systemd/user-environment-generators/*
    /usr/local/lib/systemd/user-environment-generators/*
    /usr/lib/systemd/user-environment-generators/*

الوصف

المولدات هي برامج تنفيذية صغيرة توجد في /usr/lib/systemd/system-environment-generators/ والدلائل الأخرى المذكورة أعلاه. سيقوم systemd(1) بتنفيذ هذه البرامج الثنائية في وقت مبكر جدًا عند بدء تشغيل كل مدير وعند إعادة تحميل الإعدادات، قبل تشغيل المولدات الموصوفة في systemd.generator(7) وقبل بدء أي وحدات. يمكن لمولدات البيئة تجاوز البيئة التي يصدرها المدير إلى الخدمات والعمليات الأخرى.

يتم تحميل المولدات من مجموعة من المسارات المحددة أثناء التجميع، كما هو مذكور أعلاه. يتم تحميل مولدات بيئة النظام والمستخدم من الدلائل التي تنتهي أسماؤها بـ system-environment-generators/ و user-environment-generators/، على التوالي. المولدات الموجودة في الدلائل المذكورة سابقًا تتجاوز تلك التي تحمل الاسم نفسه في الدلائل الأدنى في القائمة [1]. يمكن استخدام رابط رمزي إلى /dev/null أو ملف فارغ لإخفاء مولد، وبالتالي منعه من التشغيل. يُرجى ملاحظة أن ترتيب الدليلين ذوي الأولوية الأعلى معكوس بالنسبة لمسار تحميل الوحدة، والمولدات في /run/ تستبدل تلك الموجودة في /etc/.

بعد تثبيت مولدات جديدة أو تحديث الإعدادات، يمكن تنفيذ systemctl daemon-reload. سيعيد هذا تشغيل جميع المولدات، وتحديث إعدادات البيئة. سيتم استخدامه لأي خدمات تبدأ لاحقًا.

يتم تنفيذ مولدات ملفات البيئة بشكل مشابه لمولدات ملفات الوحدات الموصوفة في systemd.generator(7)، مع الاختلافات التالية:

    • يتم تنفيذ المولدات بشكل تسلسلي بالترتيب الأبجدي الرقمي للمكون النهائي لاسمها. يتم تحليل مخرجات كل مولد فورًا واستخدامها لتحديث البيئة للمولدات التي تعمل بعده. وبالتالي، يمكن للمولدات اللاحقة استخدام و/أو تعديل مخرجات المولدات السابقة.

    • يتم تشغيل المولدات بواسطة كل مثيل مدير، ويمكن أن تكون مخرجاتها مختلفة لكل مستخدم.

يُوصى باستخدام بادئات رقمية لأسماء المولدات لتبسيط الترتيب.

أمثلة

مثال 1. مولد بسيط يوسع متغير بيئة إذا كان دليل موجودًا في نظام الملفات

    # 50-xdg-data-dirs.sh

    #!/bin/sh
    # SPDX-License-Identifier: MIT-0

    # set the default value
    XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share/:/usr/share}"

    # add a directory if it exists
    if [ -d /opt/foo/share ]; then
        XDG_DATA_DIRS="/opt/foo/share:${XDG_DATA_DIRS}"
    fi

    # write our output
    echo "XDG_DATA_DIRS=${XDG_DATA_DIRS}"

مثال 2. مولد أكثر تعقيدًا يقرأ الإعدادات الحالية ويغير متغيرًا واحدًا

    # 90-rearrange-path.py

    #!/usr/bin/python
    # SPDX-License-Identifier: MIT-0

    """

    أداة تجريبية لتوليد بيئة systemd تضمن أن تكون مجلدات bin
    دائمًا بعد مجلدات sbin المطابقة في المسار.
    (تقوم بتغيير /sbin:/bin:/foo/bar إلى /bin:/sbin:/foo/bar.)

    يوضح هذا المولد كيفية تجاوز الإعدادات التي ربما أنشأتها
    المولدات السابقة. قد يكون من الأسهل كتابة ذلك بلغة bash، ولكن دعونا نكتبه
    بلغة Python فقط لإثبات قدرتنا على ذلك، وليكون بمثابة نموذج لمولدات
    أكثر إثارة للاهتمام.

    """

    import os
    import pathlib

    def rearrange_bin_sbin(path):
        """Make sure any pair of .../bin, .../sbin directories is in this order

        >>> rearrange_bin_sbin('/bin:/sbin:/usr/sbin:/usr/bin')
        '/bin:/sbin:/usr/bin:/usr/sbin'
        """
        items = [pathlib.Path(p) for p in path.split(':')]
        for i in range(len(items)):
            if 'sbin' in items[i].parts:
                ind = items[i].parts.index('sbin')
                bin = pathlib.Path(*items[i].parts[:ind], 'bin', *items[i].parts[ind + 1 :])
                if bin in items[i + 1 :]:
                    j = i + 1 + items[i + 1 :].index(bin)
                    items[i], items[j] = items[j], items[i]
        return ':'.join(p.as_posix() for p in items)

    if __name__ == '__main__':
        # This should be always set. If it is not, we will just crash, which is OK too.
        path = os.environ['PATH']
        new = rearrange_bin_sbin(path)
        if new != path:
            print(f'PATH={new}')

المثال 3. تنقيح مولد

    SYSTEMD_LOG_LEVEL=debug VAR_A=something VAR_B="something else" \
    /usr/lib/systemd/system-environment-generators/path-to-generator

انظر أيضًا

systemd-environment-d-generator(8)، systemd.generator(7)، systemd(1)، systemctl(1)

ملاحظات

1.  💣💥🧨💥💥💣 يرجى ملاحظة أن ملفات الضبط تلك يجب أن تكون متوفرة في جميع الأوقات. إذا كان /usr/local/ قسماً منفصلاً، فقد لا يكون متوفراً أثناء بدء التشغيل المبكر، ويجب عدم استخدامه للضبط.

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

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

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