SYSUPDATE.FEATURES(5) sysupdate.features SYSUPDATE.FEATURES(5)

sysupdate.features - قابلیت‌ها و ویژگی‌های ابزار به‌روزرسانی خودکار سیستم

/etc/sysupdate.d/*.feature
/run/sysupdate.d/*.feature
/usr/local/lib/sysupdate.d/*.feature
/usr/lib/sysupdate.d/*.feature

«قابلیت‌های اختیاری» (Optional Features) عملکردهایی هستند که توسط systemd-sysupdate(8) ارائه می‌شوند و به یک توزیع اجازه می‌دهند مجموعه‌هایی از تعاریف انتقال sysupdate.d(5) را تعریف کند که قرار است توسط مدیر سیستم فعال یا غیرفعال شوند.

هنگامی که یک قابلیت فعال است، انتقال‌های متعلق به آن هنگام بررسی و بارگیری به‌روزرسانی‌ها، پاک‌سازی (vacuuming) و در تمام موقعیت‌های دیگر در نظر گرفته می‌شوند. در واقع، انتقال‌های متعلق به یک قابلیت همیشه همگام با بقیه بخش‌های هدف مربوطه‌شان به‌روزرسانی خواهند شد. این تفاوت اصلی میان یک قابلیت اختیاری و یک مؤلفه (component) در systemd-sysupdate(8) است. هنگامی که یک قابلیت غیرفعال است، انتقال‌های آن هنگام بررسی و بارگیری به‌روزرسانی‌ها در نظر گرفته نمی‌شوند، اما systemd-sysupdate همچنان در حین پاک‌سازی و سایر شرایطی که نیاز به تعیین مالکیت منابع سیستم قبلاً بارگیری‌شده دارد، آن‌ها را در نظر می‌گیرد. systemd-sysupdate هر زمان که یک قابلیت غیرفعال شود، تمام نمونه‌های انتقال‌های آن را پاک‌سازی می‌کند و در عمل آن را حذف نصب می‌نماید.

قابلیت‌های اختیاری توسط فایل‌های sysupdate.d/*.feature که در زیر تعریف شده‌اند، شرح داده می‌شوند. انتقال‌ها می‌توانند از طریق تنظیم Features= اعلام کنند که متعلق به یک قابلیت هستند. تعاریف قابلیت‌ها از فایل‌های دراپ‌این (drop-in) پشتیبانی می‌کنند که بیش از همه برای بازنویسی تنظیم Enabled= استفاده می‌شوند. همچنین می‌توان آن‌ها را ماسک کرد تا در دسترس بودن قابلیت به طور کامل پنهان شود.

هر فایل *.feature شامل یک بخش است: [Feature].

این بخش ویژگی‌های عمومی این قابلیت را تعریف می‌کند.

Description=

توضیح کوتاه و خوانا برای انسان درباره این قابلیت. این ممکن است به عنوان برچسبی برای این قابلیت استفاده شود، بنابراین رشته باید قابلیت را به طور معناداری در میان قابلیت‌های موجود در sysupdate.d/ مشخص کند.

در نسخه ۲۵۷ اضافه شد.

Documentation=

یک نشانی وب (URL) قابل‌نمایش به کاربر برای مستندات مربوط به این قابلیت. این تنظیم از بسط مشخص‌کننده‌ها پشتیبانی می‌کند؛ برای جزئیات در مورد مشخص‌کننده‌های پشتیبانی‌شده به زیر مراجعه کنید.

در نسخه ۲۵۷ اضافه شد.

AppStream=

نشانی وب (URL) به یک فایل XML کاتالوگ AppStream[1]. این ممکن است توسط مراکز نرم‌افزاری (مانند نرم‌افزار گنوم یا KDE Discover) برای ارائه فراداده‌های غنی در مورد این قابلیت استفاده شود. این شامل نام‌های نمایشی، گزارش‌های تغییرات، نمادها و موارد دیگر است. این تنظیم از بسط مشخص‌کننده‌ها پشتیبانی می‌کند؛ برای جزئیات در مورد مشخص‌کننده‌های پشتیبانی‌شده به زیر مراجعه کنید.

در نسخه ۲۵۷ اضافه شد.

Enabled=

اینکه آیا این قابلیت فعال است یا خیر. در صورت نامشخص بودن، این قابلیت به طور پیش‌فرض غیرفعال است.

در نسخه ۲۵۷ اضافه شد.

مشخص‌کننده‌ها ممکن است در تنظیمات Documentation= و AppStream= استفاده شوند. بسط‌های زیر پشتیبانی می‌شوند:

جدول 1. مشخص‌کننده‌های موجود

مشخص‌کننده مفهوم جزئیات
"%a" معماری یک رشته کوتاه که معماری سیستم محلی را مشخص می‌کند. رشته‌ای مانند x86، x86-64 یا arm64. برای فهرست کامل، به معماری‌های تعریف‌شده برای ConditionArchitecture= در systemd.unit(5) مراجعه کنید.
"%A" نسخه ایمیج سیستم‌عامل شناسه نسخه ایمیج سیستم‌عاملِ سیستم در حال اجرا، همان‌طور که از فیلد IMAGE_VERSION= در /etc/os-release خوانده می‌شود. اگر تنظیم نشده باشد، به یک رشته خالی تبدیل می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%b" شناسه بوت شناسه بوت سیستم در حال اجرا، قالب‌بندی‌شده به صورت رشته. برای اطلاعات بیشتر به random(4) مراجعه کنید.
"%B" شناسه ساخت سیستم‌عامل شناسه ساخت سیستم‌عاملِ سیستم در حال اجرا، همان‌طور که از فیلد BUILD_ID= در /etc/os-release خوانده می‌شود. اگر تنظیم نشده باشد، به یک رشته خالی تبدیل می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%H" نام میزبان نام میزبان سیستم در حال اجرا.
"%l" نام کوتاه میزبان نام میزبان سیستم در حال اجرا، کوتاه‌شده در اولین نقطه برای حذف هرگونه مؤلفه دامنه.
"%m" شناسه ماشین شناسه ماشینِ سیستم در حال اجرا، قالب‌بندی‌شده به صورت رشته. برای اطلاعات بیشتر به machine-id(5) مراجعه کنید.
"%M" شناسه ایمیج سیستم‌عامل شناسه ایمیج سیستم‌عاملِ سیستم در حال اجرا، همان‌طور که از فیلد IMAGE_ID= در /etc/os-release خوانده می‌شود. اگر تنظیم نشده باشد، به یک رشته خالی تبدیل می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%o" شناسه سیستم‌عامل شناسه سیستم‌عاملِ سیستم در حال اجرا، همان‌طور که از فیلد ID= در /etc/os-release خوانده می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%v" انتشار هسته همانند خروجی دستور uname -r.
"%w" شناسه نسخه سیستم‌عامل شناسه نسخه سیستم‌عاملِ سیستم در حال اجرا، همان‌طور که از فیلد VERSION_ID= در /etc/os-release خوانده می‌شود. اگر تنظیم نشده باشد، به یک رشته خالی تبدیل می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%W" شناسه گونه سیستم‌عامل شناسه گونهٔ (واریانت) سیستم‌عاملِ سیستم در حال اجرا، همان‌طور که از فیلد VARIANT_ID= در /etc/os-release خوانده می‌شود. اگر تنظیم نشده باشد، به یک رشته خالی تبدیل می‌شود. برای اطلاعات بیشتر به os-release(5) مراجعه کنید.
"%T" دایرکتوری فایل‌های موقت این یا /tmp است یا مسیری که "$TMPDIR"، "$TEMP" یا "$TMP" روی آن تنظیم شده‌اند. (توجه داشته باشید که دایرکتوری ممکن است بدون خط مورب انتهایی مشخص شود.)
"%V" دایرکتوری برای فایل‌های موقت بزرگ‌تر و پایدار این یا /var/tmp است یا مسیری که "$TMPDIR"، "$TEMP" یا "$TMP" روی آن تنظیم شده‌اند. (توجه داشته باشید که دایرکتوری ممکن است بدون خط مورب انتهایی مشخص شود.)
"%%" علامت تک‌درصد از "%%" به جای "%" برای مشخص کردن یک علامت تک‌درصد استفاده کنید.

مثال 1. ابزارهای توسعه برای سیستم‌عامل مبتنی بر ایمیج (Image-Based OS)

ما از "foobarOS" فرضی شرح داده شده در sysupdate.d(5) به عنوان سیستم‌عامل پایه نمونه استفاده خواهیم کرد. اکثریت قریب به اتفاق کاربران foobarOS نیازی به کامپایلر، سیستم ساخت، دیباگر و سایر ابزارهای توسعه به عنوان بخشی از سیستم‌عامل خود ندارند. با این حال، توسعه‌دهندگان خود foobarOS نیاز دارند که این ابزارهای ساخت در دسترس باشند. بنابراین، foobarOS باید یک ایمیج افزونه سیستم (به systemd-sysext(8) مراجعه کنید) حاوی این ابزارهای توسعه ارائه دهد، و این ایمیج باید همگام با سیستم‌عامل پایه زیرین به‌روزرسانی شود. این یک مورد کاربرد عالی برای یک قابلیت اختیاری سیستم‌عامل است، پس بیایید یکی تعریف کنیم:

# /usr/lib/sysupdate.d/devel.feature
[Feature]
Description=Development Tools
Documentation=https://developer.example.com/foobarOS/getting-started
Enabled=false

مورد بالا قابلیت "devel" را تعریف کرده و به طور پیش‌فرض آن را غیرفعال می‌کند. اکنون بیایید یک انتقال مرتبط با این قابلیت تعریف کنیم:

# /usr/lib/sysupdate.d/50-devel.transfer
[Transfer]
Features=devel
ProtectVersion=%A
[Source]
Type=url-file
Path=https://download.example.com
MatchPattern=foobarOS_@v_devel.raw.xz
[Target]
Type=regular-file
Path=/var/lib/extensions
MatchPattern=foobarOS_@v_devel.raw
Mode=0444
InstancesMax=2

با این دو فایل، ما قابلیتی به نام "devel" ایجاد کرده‌ایم که در صورت فعال بودن، نسخه مناسب "https://download.example.com/foobarOS_@v_devel.raw.xz" را در حین هر به‌روزرسانی سیستم‌عامل بارگیری و از حالت فشرده خارج کرده و در "/var/lib/extensions/foobarOS_@v_devel.raw" قرار می‌دهد.

توسعه‌دهندگان foobarOS می‌توانند قابلیت "devel" را در ایستگاه‌های کاری خود با ایجاد دراپ‌این زیر فعال کنند:

# /etc/sysupdate.d/devel.feature.d/enable.conf
[Feature]
Enabled=true

مثال 2. راه‌اندازهای انحصاری (Proprietary Drivers)

فرض کنید که بسیاری از کاربران foobarOS دارای پردازنده گرافیکی ساخت شرکت MVISUAL هستند. به دلیل فقدان مستندات و دشواری در مهندسی معکوس سخت‌افزار، راه‌اندازهای متن‌باز برای پردازنده‌های گرافیکی MVISUAL قادر به استفاده مناسب از عملکرد گرافیکی و محاسباتی موجود نیستند. شرکت MVISUAL یک راه‌انداز انحصاری قابل‌توزیع مجدد برای کارت‌های خود ارائه می‌دهد و توسعه‌دهندگان foobarOS برای پاسخگویی به نیازهای کاربرانشان آن‌ها را توزیع می‌کنند.

راه‌انداز MVISUAL دارای چند بخش مختلف است که برای کارکرد آن باید نصب شوند: یک افزونه UKI برای پیکربندی خط فرمان هسته، یک ایمیج افزونه سیستم initrd برای افزودن ماژول هسته MVISUAL به initrd، و یک ایمیج افزونه سیستم معمولی برای افزودن راه‌اندازهای انحصاری فضای کاربری اوپن‌جی‌ال (OpenGL) و ولکان (Vulkan). همه این‌ها باید با نسخه سیستم‌عامل اصلی قفل (همگام) شوند.

بیایید با تعریف یک قابلیت اختیاری به نام "mvisual-driver" شروع کنیم:

# /usr/lib/sysupdate.d/mvisual-driver.feature
[Feature]
Description=MVISUAL Proprietary GPU Driver
Documentation=https://support.example.com/foobarOS/mvisual
AppStream=https://metadata.example.com/mvisual-driver-%A.xml.gz

توجه داشته باشید که ما فراداده AppStream را برای این قابلیت تعریف می‌کنیم، زیرا می‌خواهیم مراکز نرم‌افزاری آن را به کاربران نهایی نمایش دهند. سپس، بیایید انتقال‌های مربوطه را تعریف کنیم:

# /usr/lib/sysupdate.d/50-mvisual-userspace.transfer
[Transfer]
Features=mvisual-driver
ProtectVersion=%A
[Source]
Type=url-file
Path=https://download.example.com
MatchPattern=foobarOS_@v_mvisual_userspace.raw.xz
[Target]
Type=regular-file
Path=/var/lib/extensions
MatchPattern=foobarOS_@v_mvisual.raw
Mode=0444
InstancesMax=2
# /usr/lib/sysupdate.d/70-mvisual-initrd.transfer
[Transfer]
Features=mvisual-driver
ProtectVersion=%A
[Source]
Type=url-file
Path=https://download.example.com
MatchPattern=foobarOS_@v_mvisual_initrd.raw.xz
[Target]
Type=regular-file
Path=/EFI/Linux
PathRelativeTo=boot
MatchPattern=foobarOS_@v.efi.extra.d/foobarOS_mvisual.raw
Mode=0444
InstancesMax=2
# /usr/lib/sysupdate.d/90-mvisual-addon.transfer
[Transfer]
Features=mvisual-driver
ProtectVersion=%A
[Source]
Type=url-file
Path=https://download.example.com
MatchPattern=foobarOS_@v_mvisual_addon.efi.xz
[Target]
Type=regular-file
Path=/EFI/Linux
PathRelativeTo=boot
MatchPattern=foobarOS_@v.efi.extra.d/foobarOS_mvisual.addon.efi
Mode=0444
InstancesMax=2

مثال 3. قابلیت‌های متقاطع (Intersecting Features)

فرض کنید که MVISUAL ابزارهای ویژه‌ای را برای کمک به توسعه‌دهنده توزیع جهت عیب‌یابی خرابی‌ها در راه‌انداز انحصاری خود منتشر می‌کند. بیایید یک انتقال تعریف کنیم:

# /usr/lib/sysupdate.d/50-mvisual-debugger.transfer
[Transfer]
RequisiteFeatures=devel mvisual-driver
ProtectVersion=%A
[Source]
Type=url-file
Path=https://download.example.com
MatchPattern=foobarOS_@v_devel.raw.xz
[Target]
Type=regular-file
Path=/var/lib/extensions
MatchPattern=foobarOS_@v_devel.raw
Mode=0444
InstancesMax=2

این انتقال تنها در صورتی استفاده خواهد شد که هر دو قابلیت "devel" و "mvisual-driver" فعال باشند.

systemd(1)، systemd-sysupdate(8)، sysupdate.d(5)

1.
کاتالوگ AppStream
systemd 261.2