RPM-LUA(7)

الاسم

rpm-lua - مفسر Lua المضمن في RPM

موجز

%scriptlet -p <lua>

%{lua:...}

الوصف
Lua هي لغة برمجة عامة الغرض صُممت خصيصًا لتُضمن في البرامج الأخرى، ويضم RPM مفسر Lua مضمنًا للاستخدام في rpm-macros(7) المتقدمة وبريمجات المعاملات.

يجعل مفسر Lua المضمن أشياءً متنوعة ممكنة كانت صعبة أو مستحيلة باستخدام وحدات الماكرو المجردة أو سكريبتات الصدفة الخارجية، مثل المساعدة في القضاء على حلقات الاعتمادية في بريمجات الحزم.

وحدات الماكرو

  الوصول إلى وحدات الماكرو
يتضمن امتداد rpm وظائف متنوعة للتعامل مع وحدات الماكرو، ولكن الطريقة الأكثر ملاءمة للوصول إلى rpm-macroproc(7) من بيئة Lua في RPM هي عبر جدول macros العام.

لا تفرق Lua بين صيغ فهرس الجدول واسم الحقل، لذا فإن macros.foo و macros['foo'] متكافئان، استخدم ما يناسب الغرض بشكل أفضل.

مثل أي جدول Lua حقيقي، تٌعاد العناصر غير الموجودة كقيمة nil، ويمكن استخدام التعيين لتعريف أو إلغاء تعريف وحدات الماكرو.

مثال:
    if not macros.yours then
        macros.my = 'my macro'
    end

    local v = { '_libdir', '_bindir', '_xbindir' }
    for _, v in ipairs(v) do
        if not macros[v] then
            macros[v] = 'default'
        end
    end

تتشارك جميع وحدات الماكرو بيئة تنفيذ Lua العامة نفسها.

  استدعاء وحدات الماكرو الوسيطية
يمكن استدعاء وحدات الماكرو الوسيطية (بما في ذلك جميع وحدات الماكرو المدمجة) بطريقة Lua أصلية عبر جدول macros، باستخدام صيغة macros.الاسم() أو macros[الاسم]().

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

مثال 1:
    macros.with('foo')

مثال 2:
    macros.dostuff({'one', 'two', 'three'})

  إرجاع البيانات
حسب التعريف، فإن أي شيء يُطبع عبر print() في Lua سينتهي به المطاف في توسعة الماكرو. يمكن لوحدات ماكرو Lua أيضًا أن تستخدم return لإرجاع مخرجاتها، مما يجعل برمجة وحدات الماكرو المساعدة تبدو أكثر طبيعية.

مثال:
    %sum() %{lua:
       local v = 0
       for _, a in ipairs(arg) do
           v = v + tonumber(a)
       end
       return v
    }

  الخيارات والمعطيات
تستقبل وحدات ماكرو Lua الوسيطية خياراتها ومعطياتها في جدولين محليين هما opt و arg، حيث يحتوي opt على قيم الخيارات المعالجة مفهرسة بحرف الخيار، ويحتوي arg على معطيات مفهرسة رقميًا.

يتواجد هذان الجدولان دائمًا بغض النظر عما إذا كانت الخيارات أو المعطيات قد مُررت بالفعل لتبسيط الاستخدام.

مثال:
    %foo(a:b) %{lua:
    if opt.b then
       print('do b')
    else
       print('or not')
    end
    if opt.a == 's' then
       print('do s')
    end
    if #arg == 0 then
       print('no arguments :(')
    else
       for i = 1, #arg do
          print(arg[i])
       end
    end
    }

البريمجات
يمكن استخدام Lua الداخلية كمفسر لأي من بريمجات معاملات RPM، بما في ذلك المشغلات ومشغلات الملفات:

مثال:
    %pre -p <lua>
    print('أهلاً من Lua')

بينما تُعد /bin/sh العريقة عادةً أكثر ملاءمة لأنشطة السكريبت المتعلقة بالتحزيم، فإن مفسر Lua المضمن له ميزات فريدة لبريمجات المعاملات: فهي لا تضيف أي اعتماديات إضافية للحزم، وبالتالي يمكن أن تساعد في القضاء على حلقات الاعتمادية. يمكن أن يكون هذا فرقًا حاسمًا في مجموعة حزم "التمهيد" المبكرة في التثبيت الأولي.

على وجه الخصوص، يُعد سكريبت Lua المضمن هو الخيار الوحيد القابل للاستخدام بشكل عام في بريمجات %pretrans أثناء التثبيت الأولي للنظام.

كما أن Lua المضمنة أسرع بكثير من تنفيذ مفسر قد يكون ثقيلاً لمجرد تشغيل سطرين من سكريبت صدفة.

ملاحظة: يجب ألا تضع البريمجات التي تستخدم Lua الداخلية افتراضات حول مشاركة بيئة التنفيذ مع بريمجات أخرى.

  المعطيات
يمكن الوصول إلى معطيات البريمجات من جدول arg عام.

ملاحظة: في Lua، تبدأ الفهارس عادةً من 1 (واحد) بدلاً من 0 (صفر)، وللأفضل أو للأسوأ، يتبع تطبيق RPM هذه الممارسة. وبالتالي فإن فهارس معطيات البريمجات تختلف بواحد عن التوقعات العامة بناءً على معطيات البريمجات التقليدية. المعطى الذي يحتوي على عدد نسخ الحزم المثبتة هو arg[2] والمعطى المماثل لأهداف المشغلات هو arg[3]، مقارنة بـ $1 و $2 التقليديين في سكريبتات الصدفة.

مثال:
    %postun -p <lua>
    if arg[2] == 0  then
        print("erasing")
    end

  الحزم القابلة للنقل
تحمل بريمجات الحزم القابلة للنقل بالإضافة إلى ذلك جدول RPM_INSTALL_PREFIX عاماً يحتوي على جميع البوادئ الممكنة للحزمة.

أُضيف: 4.18.0

  حالة الخروج
بينما لا ينبغي السماح للبريمجات بالفشل بشكل طبيعي، يمكنك الإشارة إلى حالة فشل البريمج باستخدام دالة error(الرسالة، [المستوى]) في Lua إذا احتجت لذلك.

ملفات SPEC
في سياق تحليل ملف rpm-spec(5) باستخدام rpmbuild(1) أو rpmspec(1)، تحتوي بيئة Lua في RPM على الجداول العامة التالية الخاصة بملف spec:

patches
    أسماء ملفات الرقع في ملف spec، بنفس الترتيب الذي ظهرت به في ملف spec.

patch_nums
    أرقام الرقع في ملف spec، بنفس الترتيب الذي ظهرت به في ملف spec.

sources
    أسماء ملفات المصادر في ملف spec، بنفس الترتيب الذي ظهرت به في ملف spec.

source_nums
    أرقام المصادر في ملف spec، بنفس الترتيب الذي ظهرت به في ملف spec.

مثال:
    for i, p in ipairs(patches) do
        print(string.format("echo %d: %sn", patch_nums[i], patches[i]))
    end

الامتدادات
بالإضافة إلى مكتبات Lua القياسية (رهناً بإصدار Lua الذي رُبط به RPM)، تتوفر الامتدادات التالية في مفسر Lua الداخلي لـ RPM. يمكن استخدامها في جميع السياقات التي يمكن استخدام Lua الداخلية فيها.

  امتداد rpm

تتوفر الدوال التالية الخاصة بـ RPM:

b64decode(المعطى)
    إجراء فك ترميز base64 على المعطى. انظر أيضًا b64encode().

    مثال:
        blob = 'binary data'
        print(blob)
        e = rpm.b64encode(blob)
        print(e)
        d = rpm.b64decode(e)
        print(d)

b64encode(المعطى [، طول_السطر])
    إجراء ترميز base64 على المعطى. يمكن تحديد طول السطر اختيارياً عبر المعطى الثاني. انظر أيضًا b64decode().

define("الاسم المتن")
    تعريف ماكرو عام باسم الاسم ومتنه المتن. انظر أيضًا وحدات الماكرو.

    مثال:
        rpm.define('foo 1')

execute(المسار [، معطى1 [،...])
    تنفيذ أمر خارجي. هذا مفيد لتنفيذ أوامر مساعدة خارجية دون الاعتماد على الصدفة. المسار هو الأمر المراد تنفيذه، يليه عدد اختياري من المعطيات لتمريرها إلى الأمر.

    لتحكم أفضل في تنفيذ العملية والمخرجات، انظر rpm.spawn().

    أُضيف: 4.15.0

    مثال:
        rpm.execute('ls', '-l', '/')
expand(المعطى)
    إجراء توسعة ماكرو RPM على السلسلة النصية المعطى. انظر أيضًا وحدات الماكرو.

    مثال:
        rpm.expand('%{_libdir}/mydir')

glob(النمط، [الأعلام])
    إرجاع جدول بأسماء المسارات التي تطابق النمط. إذا كانت الأعلام تحتوي على c، فيُعاد النمط في حالة عدم وجود تطابقات.

    مثال:
        for i, p in ipairs(rpm.glob('*')) do
            print(p)
        end

interactive()
    إطلاق جلسة تفاعلية للاختبار والتنقيح. استخدم rpmlua(1) بدلاً من ذلك.

    مثال:
        rpm --eval "%{lua: rpm.interactive()}"

isdefined(الاسم)
    اختبار ما إذا كان الماكرو الاسم معرفاً وما إذا كان وسيطياً، تُعاد النتيجة في قيمتين منطقيتين. انظر أيضًا وحدات الماكرو. (أُضيف: 4.17.0)

    مثال:
        if rpm.isdefined('_libdir') then
            ...
        end

load(المسار)
    تحميل ملف ماكرو من المسار المعطى. مكافئ لماكرو %{load:...} المدمج.

    مثال:
        rpm.load('my.macros')

open(المسار، [الوضع[.الأعلام]])
    فتح دفق ملف باستخدام مرافق الإدخال والإخراج في RPM، مع دعم لضغط وفك ضغط شفافين.

    المسار هو سلسلة اسم الملف، متبوعة اختيارياً بسلسلة الوضع لتحديد سلوك الفتح:
    •   a: الفتح للإلحاق
    •   w: الفتح للكتابة، مع القطع
    •   r: الفتح للقراءة (مبدئي)
    •   +: الفتح للقراءة والكتابة
    •   x: الإخفاق في حال وجود الملف

    ويُتبع اختيارياً بـ rpm-payloadflags(7) للضغط وفك الضغط.

    أُضيف: 4.17.0

    مثال:
        f = rpm.open('some.txt.gz', 'r.gzdio')
        print(f:read())

    كائن rpm.fd المُعاد يملك الدوال (methods) التالية:

    fd:close()

    غلق دفق الملف.

    مثال:
        f = rpm.open('file')
        f:close()

    fd:flush()

    إفراغ دفق الملف.

    مثال:
        f = rpm.open('file', 'w')
        f:write('foo')
        f:flush()
        f:close()

    fd:read([len])

    قراءة البيانات من دفق الملف بما يصل إلى len من البايتات، أو قراءة الملف كاملاً إذا لم يُحدد الطول.

    مثال:
        f = rpm.open('/some/file')
        print(f:read())

    fd:seek(mode, offset)

    إعادة تعيين إزاحة الملف للدفق. mode هو أحد الخيارات set أو cur أو end، والإزاحة (offset) تكون مرتبطة بالوضع المختاد: مطلقة، أو نسبية للوضع الحالي، أو نسبية للنهاية. لا تدعم كل الدفق عمليات الإزاحة.

    يُعيد إزاحة الملف بعد العملية.

    انظر أيضًا lseek(3).

    مثال:
        f = rpm.open('newfile', 'w')
        f:seek('set', 555)
        f:close()

    fd:write(buf [, len])

    كتابة البيانات الموجودة في buf إلى دفق الملف، إما بالكامل أو بما يصل إلى len من البايتات إذا حُدد الطول.

    مثال:
        f = rpm.open('newfile', 'w')
        f:write('data data')
        f:close()

    fd:reopen(mode)

    إعادة فتح دفق بوضع جديد (انظر rpm.open()).

    مثال:
        rpm.open('some.txt.gz')
        f = f:reopen('r.gzdio')
        print(f:read())}

redirect2null(fdno) (مهجور)
    إعادة توجيه واصف الملف fdno إلى /dev/null (كان يُعرف قبل الإصدار 4.16 باسم posix.redirect2null())

    هذه الدالة مهجورة ومتاحة فقط لحزم RPM v4 من أجل التوافقية مع الإصدارات السابقة. استخدم `rpm.spawn()` أو `rpm.execute()` بدلاً منها.

        pid = posix.fork()
        if pid == 0 then
            posix.redirect2null(2)
            assert(posix.exec('/bin/awk'))
        elseif pid > 0 then
            posix.wait(pid)
        end

spawn({command} [, {actions}])
    تفريخ (Spawn)، أي تنفيذ، برنامج خارجي.

    {command} هو جدول يتكون من الأمر ووسائطه. يمكن استخدام جدول ثانٍ اختياري لتمرير إجراءات متنوعة متعلقة بتنفيذ الأمر، والإجراءات المدعومة حالياً هي:

        | الإجراء  | الوسيط (الوسائط) | الوصف
        |---------|----------------------
        | *stdin* | المسار        | إعادة توجيه المدخل القياسي إلى المسار
        | *stdout*| المسار        | إعادة توجيه المخرج القياسي إلى المسار
        | *stderr*| المسار        | إعادة توجيه الخطأ القياسي إلى المسار

    يُعيد حالة خروج الأمر: صفر عند النجاح، أو صف (nil, message, code) عند الإخفاق.

    أُضيف: 4.20

    مثال:
        rpm.spawn({'systemctl', 'restart', 'httpd'}, {stderr='/dev/null'})

undefine(name)
    إلغاء تعريف ماكرو. انظر أيضًا MACROS.

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

    مثال:
        rpm.undefine('zzz')

vercmp(v1, v2)
    إجراء مقارنة إصدار RPM على سلاسل الوسائط. يُعيد -1 أو 0 أو 1 إذا كان v1 أصغر من أو يساوي أو أكبر من v2. انظر rpm-version(7).

    ملاحظة: في RPM الأقدم من 4.16 كانت هذه العملية تعمل على أجزاء الإصدار فقط، وهو ما لا يعطي نتائج صحيحة على سلاسل EVR الكاملة.

    مثال:
        rpm.vercmp('1.2-1', '2.0-1')

ver(evr), ver(e, v, r)
    إنشاء كائن إصدار RPM. يأخذ هذا إما سلسلة evr تُحلل إلى مكوناتها، أو العصر (epoch) والإصدار (version) والإطلاق (release) في وسائط منفصلة (يمكن أن تكون سلاسل أو أرقاماً). للكائن ثلاث سمات: e للعصر، وv للإصدار، وr للإطلاق، ويمكن طباعته بصيغة EVR الخاصة به ويدعم المقارنة الأصلية في Lua.

    أُضيف: 4.17.0

    مثال:
        v1 = rpm.ver('5:1.0-2)
        v2 = rpm.ver(3, '5a', 1)
        if v1 < v2 then
           ...
        end

        if v1.e then
           ...
        end

  امتداد posix

تقدم مكتبة Lua القياسية مجموعة محدودة نوعاً ما من عمليات الإدخال والإخراج (io). يعزز امتداد posix بشكل كبير ما يمكن القيام به من Lua.

الدوال التالية متاحة في مساحة أسماء posix، أي لاستدعائها استخدم posix.function(). تركز هذه الوثائق على اتفاقيات واجهة برمجة تطبيقات Lua، وللمزيد من المعلومات حول استدعاءات النظام المقابلة ارجع إلى دليل النظام، مثل access(3) لـ posix.access().

access(path [, mode])
    اختبار إمكانية الوصول إلى الملف/الدليل path. انظر access(3). إذا حُذف mode فسيُختبر الوجود، وإلا فإنه مزيج من الاختبارات التالية:
    •   r: قابل للقراءة
    •   w: قابل للكتابة
    •   x: قابل للتنفيذ
    •   f: موجود

    مثال:
        if posix.access('/bin/rpm', 'x') then
            ...
        end

chdir(path)
    تغيير دليل العمل الحالي إلى path. انظر chdir(1).

    مثال:
        posix.chdir('/tmp')

chmod(path, mode)
    تغيير وضع الملف/الدليل. يمكن أن يكون الوضع إما رقماً ثمانياً كما في استدعاء النظام chmod(2)، أو تمثيلاً نصياً مشابهاً لـ chmod(1).

    مثال:
        posix.chmod('aa', 600)
        posix.chmod('bb', 'rw-')
        posix.chmod('cc', 'u+x')

chown(path, user, group)
    تغيير المالك/المجموعة للملف/الدليل path. وسائط user و group قد تكون إما قيم معرفات رقمية أو أسماء مستخدمين/مجموعات. انظر chown(2) و chown(1).

    ملاحظة: هذه عملية ذات امتيازات.

    مثال:
        posix.chown('aa', 0, 0)
        posix.chown('bb', 'nobody', 'nobody')

ctermid()
    الحصول على اسم الطرفية المتحكمة. انظر ctermid(3).

    مثال:
        print(posix.ctermid())

dir([path])
    الحصول على محتويات الدليل - مثل readdir(3). إذا حُذف path، يُستخدم الدليل الحالي.

    مثال:
        for i,p in pairs(posix.dir('/')) do
            print(p..'n')
        end

errno()
    الحصول على رسالة strerror(3) والرقم المقابل لـ errno(3) الحالي.

    مثال:
        f = '/zzz'
        if not posix.chmod(f, 100) then
            s, n = posix.errno()
            print(f, s)
        end

exec(path [, args...]) (مهجور)
    تنفيذ برنامج. لا يمكن القيام بذلك إلا بعد posix.fork().

    هذه الدالة مهجورة ومتاحة فقط لحزم RPM v4 من أجل التوافقية مع الإصدارات السابقة. استخدم rpm.spawn() أو rpm.execute() بدلاً منها.

files([path])
    التكرار عبر محتويات الدليل. إذا حُذف المسار، يُستخدم الدليل الحالي.

    مثال:
        for f in posix.files('/') do
            print(f..'n')
        end

fork() (مهجور)
    تفريخ (Fork) عملية جديدة. انظر fork(2).

    هذه الدالة مهجورة ومتاحة فقط لحزم RPM v4 من أجل التوافقية مع الإصدارات السابقة. استخدم rpm.spawn() أو rpm.execute() بدلاً منها.

    مثال:
        pid = posix.fork()
        if pid == 0 then
            posix.exec('/foo/bar')
        elseif pid > 0 then
            posix.wait(pid)
        end

getcwd()
    الحصول على الدليل الحالي. انظر getcwd(3).

    مثال:
        if posix.getcwd() ~= '/' then
            ...
        endif

getenv(name)
    الحصول على متغير بيئة. انظر getenv(3).

    مثال:
        if posix.getenv('HOME') ~= posix.getcwd() then
            print('not at home')
        end

getgroup(group)
    الحصول على معلومات group(5) لمجموعة ما. قد يكون group إما معرفاً رقمياً أو اسم مجموعة. إذا حُذف، تُستخدم المجموعة الحالية. يُعيد جدولاً يحتوي على الحقلين name و gid المحددين لاسم المجموعة ومعرفها على التوالي، وفهارس من 1 فصاعداً تحدد أعضاء المجموعة.

    مثال:
        print(posix.getgroup('wheel').gid)

getlogin()
    احصل على اسم الولوج. راجع getlogin(3).

    مثال:
        n = posix.getlogin()

getpasswd([المستخدم [, المحدد]])
    احصل على معلومات passwd(5) لحساب مستخدم. قد يكون المستخدم إما معرفًا رقميًا أو اسم مستخدم. إذا أُغفل، استُخدم المستخدم الحالي. قد يكون معامل المحدد الاختياري أحد ما يلي:
    •   name
    •   uid
    •   gid
    •   dir
    •   shell
    •   gecos
    •   passwd

    إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.

    مثال:
        pw = posix.getpasswd(posix.getlogin(), 'shell')|

getprocessid([المحدد])
    احصل على معلومات حول العملية الحالية. قد يكون معامل المحدد الاختياري أحد
    •   egid: معرف المجموعة الفعال
    •   euid: معرف المستخدم الفعال
    •   gid: معرف المجموعة
    •   uid: معرف المستخدم
    •   pgrp: معرف مجموعة الأب
    •   pid: معرف العملية
    •   ppid: معرف العملية الأب

    إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.

    مثال:
        if posix.getprocessid('pid') == 1 then
            ...
        end

kill(pid [, الإشارة])
    أرسل signal(7) (إشارة) إلى عملية. يجب أن تكون الإشارة قيمة رقمية، مثلاً: 9 لـ SIGKILL. إذا أُغفلت، استُخدمت SIGTERM. راجع أيضًا kill(2).

    مثال:
        posix.kill(posix.getprocessid('pid'))

link(المسار_القديم, المسار_الجديد)
    أنشئ اسمًا جديدًا عند المسار_الجديد لملف موجود في المسار_القديم، ويعرف أيضًا بالوصلة الصلبة. راجع أيضًا link(2).

    مثال:
        f = rpm.open('aaa', 'w')
        posix.link('aaa', 'bbb')

mkdir(المسار)
    أنشئ دليلًا جديدًا في المسار. راجع أيضًا mkdir(2).

    مثال:
        posix.mkdir('/tmp')

mkfifo(المسار)
    أنشئ FIFO أو ما يعرف بأنبوب مسمى في المسار. راجع أيضًا mkfifo(2).

    مثال:
        posix.mkfifo('/tmp/badplace')

pathconf(المسار [, المحدد])
    احصل على معلومات pathconf(3) لـ المسار. قد يكون المحدد الاختياري أحد
    •   link_max
    •   max_canon
    •   max_input
    •   name_max
    •   path_max
    •   pipe_buf
    •   chown_restricted
    •   no_trunc
    •   vdisable.

    إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.

    مثال:
        posix.pathconf('/', 'path_max')

putenv(السلسلة)
    غيّر أو أضف متغير بيئة. راجع أيضًا putenv(3).

    مثال:
        posix.putenv('HOME=/me')

readlink(المسار)
    اقرأ قيمة الوصلة الرمزية عند المسار. راجع أيضًا readlink(2).

    مثال:
        posix.mkdir('aaa')
        posix.symlink('aaa', 'bbb')
        print(posix.readlink('bbb'))

rmdir(المسار)
    أزل دليلاً المسار. راجع أيضًا rmdir(2).

    مثال:
        posix.rmdir('/tmp')

setgid(المجموعة)
    اضبط هوية المجموعة. قد تُحدد المجموعة إما كمعرف رقمي أو اسم مجموعة. راجع أيضًا setgid(2).

    ملاحظة: هذه عملية ذات امتيازات.

setuid(المستخدم)
    اضبط هوية المستخدم. قد يُحدد المستخدم إما كمعرف رقمي أو اسم مستخدم. راجع أيضًا setuid(2).

    ملاحظة: هذه عملية ذات امتيازات.

    مثال:
        posix.setuid('nobody')

sleep(الثواني)
    نَمْ لمدة قدرها الثواني. راجع أيضًا sleep(3).

    مثال:
        posix.sleep(5)

stat(المسار [, المحدد])
    احصل على معلومات stat(3) لملف في المسار. قد يكون المحدد الاختياري أحد
    •   mode
    •   ino
    •   dev
    •   nlink
    •   uid
    •   gid
    •   size
    •   atime
    •   mtime
    •   ctime
    •   type.

    إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.

    مثال:
        print(posix.stat('/tmp', 'mode'))|

        s1 = posix.stat('f1')
        s2 = posix.stat('f2')
        if s1.ino == s2.ino and s1.dev == s2.dev then
            ...
        end

symlink(المسار_القديم, المسار_الجديد)
    أنشئ وصلة رمزية عند المسار_الجديد تشير إلى المسار_القديم. راجع أيضًا symlink(2).

    مثال:
        posix.mkdir('aaa')
        posix.symlink('aaa', 'bbb')

sysconf([المحدد])
    احصل على معلومات sysconf(3). قد يكون معامل المحدد الاختياري أحد ما يلي:
    •   arg_max
    •   child_max
    •   clk_tck
    •   ngroups_max
    •   stream_max
    •   tzname_max
    •   open_max
    •   job_control
    •   saved_ids
    •   version.

    إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.

    مثال:
        posix.sysconf('open_max')|

times([المحدد])
    احصل على أوقات العملية والعمليات الأبناء المنتظرة times(2). قد يكون معامل المحدد الاختياري أحد
    •   utime
    •   stime
    •   cutime
    •   cstime
    •   elapsed

    إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.

    مثال:
        t = posix.times()
        print(t.utime, t.stime)

ttyname([fd])
    احصل على اسم الطرفية المرتبطة بواصف الملف fd. إذا أُهمل fd، يُستخدم 0 (أي المدخل المبدئي). انظر ttyname(3).

    مثال:
        if not posix.ttyname() then
            ...
        endif

umask([mode])
    احصل على umask(2) للعملية أو اضبطه. يمكن تحديد mode كعدد ثماني أو سلسلة نمط نصية بشكل مشابه لـ posix.chmod().

    مثال:
        print(posix.umask())
        posix.umask(222)
        posix.umask('ug-w')
        posix.umask('rw-rw-r--')

uname(format)
    احصل على معلومات uname(2) حول النظام الحالي. توجيهات التنسيق التالية مدعومة:

    •   %m: اسم نوع العتاد
    •   %n: اسم هذه العقدة
    •   %r: مستوى الإصدارة الحالي لهذا التنفيذ
    •   %s: اسم نظام التشغيل هذا
    •   %v: مستوى النسخة الحالي لهذا التنفيذ

    مثال:
        print(posix.uname('%s %r'))

utime(path [, mtime [, ctime]])
    غيّر أزمنة الوصول والتعديل الأخيرة. يُعبر عن mtime و ctime بالثواني منذ حقبة يونكس (epoch). انظر utime(2).

    إذا أُهمل mtime أو ctime، يُستخدم الوقت الحالي، بشكل مشابه لـ touch(1).

    مثال:
        posix.mkdir('aaa')
        posix.utime('aaa', 0, 0)

wait([pid]) (مهجور)
    انتظر عملية وليدة. إذا حُدد pid فانتظر تلك الوليدة تحديدًا. انظر أيضًا wait(2).

    هذه الدالة مهجورة ومتاحة فقط لحزم RPM v4 من أجل التوافقية مع الإصدارات السابقة. استخدم rpm.spawn() أو rpm.execute() بدلاً منها.

    مثال:
        pid = posix.fork()
        if pid == 0 then
            posix.exec('/bin/ls'))
        elseif pid > 0 then
            posix.wait(pid)
        end

setenv(name, value [, overwrite])
    غيّر أو أضف متغير البيئة name. الوسيط الاختياري overwrite هو قيمة منطقية تحدد السلوك عندما يكون هناك متغير موجود مسبقًا بنفس الاسم. انظر أيضًا setenv(3).

    مثال:
        posix.setenv('HOME', '/me', true)

unsetenv(name)
    أزل المتغير name من البيئة. انظر أيضًا unsetenv(3).

    مثال:
        posix.unsetenv('HOME')

التوسيع والتخصيص
عند الاستهلال، ينفذ RPM سكربت استهلال لوا عام init.lua من الدليل الذي يتوسع إليه %getconfdir، وعادة ما يكون /usr/lib/rpm/init.lua. يمكن استخدام هذا لتخصيص بيئة لوا في rpm دون إعادة تجميع RPM.

بالنسبة لمفسر لوا المضمن، يُبحث عن الوحدات المحملة باستخدام require بشكل رئيس من %{getconfdir}/lua/. يعد %_rpmluadir اختصارًا لهذا المسار.

انظر أيضًا
rpm-macros(7) rpm-payloadflags(7) rpmlua(1) rpm-version(7)

https://www.lua.org/

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

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

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