| OS-RELEASE(5) | os-release | OS-RELEASE(5) |
نام (NAME)
os-release, initrd-release, extension-release - فایل اطلاعات شناسایی سیستمعامل
خلاصه دستور (SYNOPSIS)
توضیحات (DESCRIPTION)
فایلهای /etc/os-release و /usr/lib/os-release حاوی دادههای شناسایی سیستمعامل هستند.
قالب فایل os-release یک فهرست جداشده با خط جدید (newline) از انتساب متغیرهای سازگار با شل و شبیه به متغیرهای محیطی است. امکان سورس کردن (source) این پیکربندی از اسکریپتهای Bourne shell وجود دارد؛ با این حال، فراتر از انتسابهای متغیر صرف، هیچیک از ویژگیهای شل پشتیبانی نمیشوند (این بدان معناست که بسط متغیرها صراحتاً پشتیبانی نمیشود)، که به برنامهها اجازه میدهد این فایل را بدون پیادهسازی یک موتور اجرایی سازگار با شل بخوانند. مقادیر انتساب متغیرها در صورتی که شامل فاصلهها، نقطهویرگولها یا سایر نویسههای خاص خارج از A–Z، a–z، 0–9 باشند باید در نقلقول دوگانه (double quotes) یا تکی (single quotes) محصور شوند. (انتسابهایی که شامل این نویسههای خاص نیستند نیز میتوانند درون نقلقول قرار گیرند، اما این کار اختیاری است.) نویسههای خاص شل ("$"، نقلقولها، بکاسلش، بکتیک) باید مطابق با سبک شل با بکاسلش اسکیپ شوند. تمام رشتهها باید دارای کدگذاری UTF-8 باشند و نباید از نویسههای غیرقابلچاپ استفاده شود. پیوند زدن (الحاق) چندین رشته که بهطور جداگانه درون نقلقول قرار گرفتهاند پشتیبانی نمیشود. خطوطی که با "#" شروع میشوند بهعنوان توضیح (کامنت) تلقی میگردند. خطوط خالی مجاز بوده و نادیده گرفته میشوند.
فایل /etc/os-release بر /usr/lib/os-release اولویت دارد. برنامهها باید وجود فایل اول را بررسی کنند و در صورت وجود، منحصراً از دادههای آن استفاده نمایند و تنها در صورت عدم وجود آن به /usr/lib/os-release رجوع کنند. برنامهها نباید دادههای هر دو فایل را با یکدیگر ترکیب کنند. مسیر /usr/lib/os-release محل توصیهشده برای ذخیره اطلاعات انتشار سیستمعامل بهعنوان بخشی از درخت توزیعکننده (vendor) است. فایل /etc/os-release باید یک پیوند نمادین (symlink) نسبی به /usr/lib/os-release باشد تا با برنامههایی که فقط مسیر /etc/ را بررسی میکنند سازگاری داشته باشد. استفاده از یک پیوند نمادین نسبی به جای پیوند نمادین مطلق برای جلوگیری از شکستن پیوند در محیطهای chroot یا initrd ضروری است.
فایل os-release حاوی دادههایی است که توسط توزیعکننده سیستمعامل تعریف شده و معمولاً نباید توسط مدیر سیستم تغییر یابد.
از آنجا که این فایل صرفاً نامها و شناسهها را کدگذاری میکند، نباید محلیسازی (ترجمه به زبانهای دیگر) شود.
فایلهای /etc/os-release و /usr/lib/os-release ممکن است پیوندهای نمادین به فایلهای دیگر باشند، اما مهم است که این فایل از همان مراحل اولیه بوت در دسترس باشد و بنابراین باید روی سیستمفایل ریشه قرار گیرد.
فایل os-release نباید شامل کلیدهای تکراری باشد. با این وجود، در صورت بروز تکرار، برنامههای خواننده باید ورودیهای بعدی در فایل را انتخاب کنند؛ مشابه رفتاری که یک شل هنگام سورس کردن فایل انجام میدهد. یک خواننده ممکن است درباره ورودیهای تکراری هشدار دهد.
برای مطالعه دلایل مفصلتر پیرامون os-release لطفاً به اعلامیه /etc/os-release[1] مراجعه کنید.
/etc/initrd-release
در initrd[2] و exitrd، فایل /etc/initrd-release نقشی مشابه os-release در سیستم اصلی ایفا میکند. علاوه بر این، وجود این فایل نشان میدهد که سیستم در فاز initrd/exitrd قرار دارد. /etc/os-release باید به /etc/initrd-release پیوند نمادین داده شود (یا برعکس)، تا برنامههایی که فقط به دنبال /etc/os-release میگردند (همانطور که در بالا شرح داده شد) بهدرستی کار کنند.
باقی این سند که درباره os-release صحبت میکند باید بهگونهای درک شود که برای initrd-release نیز اعمالپذیر است.
/usr/lib/extension-release.d/extension-release.IMAGE
فایل /usr/lib/extension-release.d/extension-release.IMAGE نقشی مشابه os-release در سیستم اصلی برای ایمیجهای افزونه (extension images) ایفا میکند و از قواعد و نحو شرحدادهشده در صفحه سرویسهای پرتابل (Portable Services)[3] پیروی میکند. هدف این فایل شناسایی افزونه و امکانپذیر ساختن راستیآزمایی این نکته توسط سیستمعامل است که آیا ایمیج افزونه با سیستمعامل پایه مطابقت دارد یا خیر. این امر معمولاً با بررسی اینکه آیا گزینه ID= افزونه با گزینه ID= میزبان مطابقت دارد یا در گزینه ID_LIKE= میزبان گنجانده شده است، و اینکه یا SYSEXT_LEVEL= وجود داشته و مطابقت دارد، یا اگر وجود ندارد، VERSION_ID= وجود داشته و مطابقت دارد، پیادهسازی میشود. این امر سازگاری ABI/API بین لایهها را تضمین میکند و از ادغام یک ایمیج ناسازگار در یک overlay جلوگیری مینماید.
به منظور شناسایی خود ایمیج افزونه، میتوان همان فیلدهای تعریفشده در زیر را با پیشوند SYSEXT_ به فایل extension-release اضافه کرد (تا از فیلدهای استفادهشده برای تطبیق با ایمیج پایه ابهامزدایی شود). برای مثال: SYSEXT_ID=myext، SYSEXT_VERSION_ID=1.2.3.
در نام فایل extension-release.IMAGE، بخش IMAGE باید دقیقاً با نام فایل ایمیج حاوی آن پس از حذف پسوند مطابقت داشته باشد. در صورتی که تضمین ثبات نام فایل ایمیج و عدم تغییر آن بین مراحل ساخت (build) و استقرار (deployment) ممکن نباشد، میتوان این بررسی را منعطفتر کرد: اگر دقیقاً یک فایل که نام آن با "extension-release.*" مطابقت دارد در این دایرکتوری وجود داشته باشد، و فایل با یک xattr(7) به صورت user.extension-release.strict تنظیمشده روی رشته "0" نشانهگذاری شده باشد، به جای آن استفاده خواهد شد.
باقی این سند که درباره os-release صحبت میکند باید بهگونهای درک شود که برای extension-release نیز اعمالپذیر است.
گزینهها (OPTIONS)
پارامترهای شناسایی سیستمعامل زیر را میتوان با استفاده از os-release تنظیم کرد:
اطلاعات عمومی شناسایی سیستمعامل
NAME=
مثالها: "NAME=Fedora"، "NAME="Debian GNU/Linux"".
ID=
مثالها: "ID=fedora"، "ID=debian".
ID_LIKE=
مثالها: برای یک سیستمعامل با "ID=centos"، انتساب "ID_LIKE="rhel fedora"" مناسب خواهد بود. برای یک سیستمعامل با "ID=ubuntu"، انتساب "ID_LIKE=debian" مناسب است.
PRETTY_NAME=
مثال: "PRETTY_NAME="Fedora 17 (Beefy Miracle)""
FANCY_NAME=
برخلاف PRETTY_NAME= این فیلد نباید شامل اطلاعاتی باشد که در سایر فیلدها وجود دارد، بهویژه نسخه (که پیشتر در VERSION= مشخص شده) یا نام رمزی (که پیشتر در VERSION_CODENAME= مشخص شده است).
مثال: "FANCY_NAME="🍅 \033[31mTomato\033[0;1mOS\033[0m""
اضافهشده در نسخه 260.
CPE_NAME=
مثال: "CPE_NAME="cpe:/o:fedoraproject:fedora:17""
VARIANT=
مثالها: "VARIANT="Server Edition""، "VARIANT="Smart Refrigerator Edition"".
نکته: این فیلد فقط برای اهداف نمایشی است. برای تصمیمگیریهای برنامهنویسی باید از فیلد VARIANT_ID استفاده شود.
اضافهشده در نسخه 220.
VARIANT_ID=
مثالها: "VARIANT_ID=server"، "VARIANT_ID=embedded".
اضافهشده در نسخه 220.
اطلاعات مربوط به نسخه سیستمعامل
VERSION=
مثالها: "VERSION=17"، "VERSION="17 (Beefy Miracle)"".
VERSION_ID=
مثالها: "VERSION_ID=17"، "VERSION_ID=11.04".
VERSION_CODENAME=
مثالها: "VERSION_CODENAME=buster"، "VERSION_CODENAME=xenial".
اضافهشده در نسخه 231.
BUILD_ID=
مثالها: "BUILD_ID="2013-03-20.3""، "BUILD_ID=201303203".
اضافهشده در نسخه 200.
IMAGE_ID=
مثالها: "IMAGE_ID=vendorx-cashier-system"، "IMAGE_ID=netbook-image".
اضافهشده در نسخه 249.
IMAGE_VERSION=
مثالها: "IMAGE_VERSION=33"، "IMAGE_VERSION=47.1rc1".
اضافهشده در نسخه 249.
RELEASE_TYPE=
در صورت تنظیم نشدن یا وجود مقدار ناشناخته، فرض بر این است که انتشار "stable" است.
مثالها: "RELEASE_TYPE=development"، "RELEASE_TYPE=lts".
اضافهشده در نسخه 257.
بهطور خلاصه: اگر بهروزرسانیهای ایمیج بهعنوان واحدهای جامع ساخته و عرضه میشوند، IMAGE_ID+IMAGE_VERSION بهترین گزینه است. در غیر این صورت، اگر بهروزرسانیها در نهایت محتویات قبلاً نصبشده را کاملاً جایگزین کنند، همانند یک توزیع باینری معمول، VERSION_ID باید برای شناسایی نسخههای عمده سیستمعامل استفاده شود. BUILD_ID میتواند در مواردی که نسخه اولیه ایمیج سیستم اهمیت دارد، به جای یا علاوه بر VERSION_ID استفاده شود.
اطلاعات نمایشی و پیوندها
HOME_URL=، DOCUMENTATION_URL=، SUPPORT_URL=، BUG_REPORT_URL=، PRIVACY_POLICY_URL=
مثالها: "HOME_URL="https://fedoraproject.org""، "BUG_REPORT_URL="https://bugzilla.redhat.com"".
SUPPORT_END=
برای مثال، "SUPPORT_END=2001-01-01" بدین معناست که سیستم تا پایان آخرین روز هزاره قبلی پشتیبانی میشد.
اضافهشده در نسخه 252.
LOGO=
مثالها: "LOGO=fedora-logo"، "LOGO=distributor-logo-opensuse"
اضافهشده در نسخه 240.
ANSI_COLOR=
مثالها: "ANSI_COLOR="0;31"" برای قرمز، "ANSI_COLOR="1;34"" برای آبی روشن، یا "ANSI_COLOR="0;38;2;60;110;180"" برای آبی فدورا.
ANSI_COLOR_REVERSE=
اضافهشده در نسخه 259.
VENDOR_NAME=
این نام برای نمایش در رابطهای کاربری "درباره این سیستم" یا رابطهای کاربری بهروزرسانی نرمافزار در مواقعی در نظر گرفته شده است که تمایز توزیعکننده سیستمعامل از خود سیستمعامل مورد نیاز است. این نام بهصورت خوانا برای انسان در نظر گرفته شده است.
مثالها: "VENDOR_NAME="Fedora Project"" برای Fedora Linux، "VENDOR_NAME="Canonical"" برای Ubuntu.
اضافهشده در نسخه 254.
VENDOR_URL=
مقدار باید در قالب RFC3986[5] بوده و نشانیهای "http:" یا "https:" باشد. در این تنظیم باید تنها یک نشانی فهرست شود.
مثالها: "VENDOR_URL="https://fedoraproject.org""، "VENDOR_URL="https://canonical.com"".
اضافهشده در نسخه 254.
EXPERIMENT=
این توضیح برای نمایش در زمان نصب سیستم یا در رابطهای کاربری "درباره این سیستم" در نظر گرفته شده است تا به کاربر هشدار دهد که در حال نصب یا اجرای یک بیلد آزمایشی از سیستمعامل است. اگر RELEASE_TYPE برابر با "experiment" باشد اما این فیلد تنظیم نشده باشد، رابط کاربری همچنان باید به کاربر هشدار دهد، اما قادر نخواهد بود دقیقاً توضیح دهد که چه چیزی در مورد بیلد فعلی سیستمعامل آزمایشی است.
مثالها: "EXPERIMENT="Switch to DNF5"" برای یک ساخت آزمایشی از Fedora Linux که برای آزمایش DNF5 ایجاد شده است، "EXPERIMENT="Port to Apple M3 chip"" برای ساختهای آزمایشی Asahi Linux پورتشده به تراشه Apple M3 SoC، "EXPERIMENT="Mutter !1441: Dynamic triple/double buffering (v4)"" برای ساختهای GNOME OS ایجادشده توسط CI ماتر برای درخواست ادغام !1441.
اضافهشده در نسخه 257.
EXPERIMENT_URL=
مقدار باید در قالب RFC3986[5] بوده و نشانیهای "http:" یا "https:" باشد. در این تنظیم باید تنها یک نشانی فهرست شود.
مثالها، متناظر با مثالهای بالا در EXPERIMENT=: "EXPERIMENT_URL="https://fedoraproject.org/wiki/Changes/SwitchToDnf5""، "EXPERIMENT_URL="https://github.com/AsahiLinux/docs/wiki/M3-Series-Feature-Support""، "EXPERIMENT_URL="https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1441"".
اضافهشده در نسخه 257.
پیشفرضها و متادیتای در سطح توزیع
DEFAULT_HOSTNAME=
اگر نویسه علامت سؤال "?" در نام میزبان ظاهر شود، هنگام اعمال، بهطور خودکار و به روشی امن و قطعی از طریق هش رمزنگاری، با یک نویسه هگزادسیمال مشتقشده از machine-id(5) جایگزین میشود. مثال: "foobar-????-????" بسته به شناسه ماشین محلی، بهطور خودکار به "foobar-92a9-061c" یا مشابه آن بسط مییابد.
برای شرح چگونگی تعیین نام میزبان جایگزین توسط systemd-hostnamed.service(8)، به org.freedesktop.hostname1(5) مراجعه کنید.
اضافهشده در نسخه 248.
ARCHITECTURE=
اضافهشده در نسخه 252.
SYSEXT_LEVEL=
مثالها: "SYSEXT_LEVEL=2"، "SYSEXT_LEVEL=15.14".
اضافهشده در نسخه 248.
CONFEXT_LEVEL=
مثالها: "CONFEXT_LEVEL=2"، "CONFEXT_LEVEL=15.14".
اضافهشده در نسخه 254.
SYSEXT_SCOPE=
اضافهشده در نسخه 250.
CONFEXT_SCOPE=
اضافهشده در نسخه 254.
PORTABLE_PREFIXES=
اضافهشده در نسخه 250.
PORTABLE_SCOPE=
اضافهشده در نسخه 259.
نکات
اگر از این فایل برای تعیین سیستمعامل یا نسخه خاصی از آن استفاده میکنید، از فیلدهای ID و VERSION_ID، و در صورت لزوم با ID_LIKE بهعنوان جایگزین برای ID استفاده نمایید. هنگام جستجو برای یک رشته شناسایی سیستمعامل به منظور ارائه به کاربر، از فیلد PRETTY_NAME استفاده کنید.
توجه داشته باشید که ارائهدهندگان سیستمعامل ممکن است تصمیم بگیرند اطلاعات نسخه را ارائه ندهند، برای مثال به منظور هماهنگی با انتشارهای غلطان (rolling releases). در این حالت، VERSION و VERSION_ID ممکن است تنظیمنشده باقی بمانند. برنامهها نباید به تنظیم بودن این فیلدها اتکا کنند.
ارائهدهندگان سیستمعامل ممکن است قالب فایل را گسترش داده و فیلدهای جدیدی معرفی کنند. اکیداً توصیه میشود برای جلوگیری از تداخل نامها، به فیلدهای جدید یک نام مختص سیستمعامل پیشوند داده شود. برنامههایی که این فایل را میخوانند باید فیلدهای ناشناخته را نادیده بگیرند.
مثال: "DEBIAN_BTS="debbugs://bugs.debian.org"".
مدیران محیطهای اجرایی کانتینر و سندباکس میتوانند دادههای شناسایی میزبان را با ارائه /etc/os-release میزبان (در صورت وجود، و در غیر این صورت /usr/lib/os-release به عنوان جایگزین) در مسیر /run/host/os-release در دسترس برنامهها قرار دهند.
مثالها (EXAMPLES)
مثال ۱. فایل os-release برای Fedora Workstation
NAME=Fedora VERSION="32 (Workstation Edition)" ID=fedora VERSION_ID=32 PRETTY_NAME="Fedora 32 (Workstation Edition)" ANSI_COLOR="0;38;2;60;110;180" LOGO=fedora-logo-icon CPE_NAME="cpe:/o:fedoraproject:fedora:32" HOME_URL="https://fedoraproject.org" DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f32/system-administrators-guide" SUPPORT_URL="https://fedoraproject.org/wiki/Communicating_and_getting_help" BUG_REPORT_URL="https://bugzilla.redhat.com" REDHAT_BUGZILLA_PRODUCT="Fedora" REDHAT_BUGZILLA_PRODUCT_VERSION=32 REDHAT_SUPPORT_PRODUCT="Fedora" REDHAT_SUPPORT_PRODUCT_VERSION=32 PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy" VARIANT="Workstation Edition" VARIANT_ID=workstation
مثال ۲. فایل extension-release برای یک افزونه برای Fedora Workstation 32
ID=fedora VERSION_ID=32
مثال ۳. خواندن os-release در sh(1)
#!/bin/sh -eu
# SPDX-License-Identifier: MIT-0
test -e /etc/os-release && os_release='/etc/os-release' || os_release='/usr/lib/os-release'
. "${os_release}"
echo "Running on ${PRETTY_NAME:-Linux}"
if [ "${ID:-linux}" = "debian" ] || [ "${ID_LIKE#*debian*}" != "${ID_LIKE}" ]; then
echo "Looks like Debian!"
fi
مثال ۴. خواندن os-release در python(1) (نسخههای >= 3.10)
#!/usr/bin/python
# SPDX-License-Identifier: MIT-0
import platform
os_release = platform.freedesktop_os_release()
pretty_name = os_release.get('PRETTY_NAME', 'Linux')
print(f'Running on {pretty_name!r}')
if 'fedora' in [os_release.get('ID', 'linux'), *os_release.get('ID_LIKE', '').split()]:
print('Looks like Fedora!')
برای جزئیات بیشتر به مستندات platform.freedesktop_os_release[7] مراجعه کنید.
مثال ۵. خواندن os-release در python(1) (تمامی نسخهها)
#!/usr/bin/python
# SPDX-License-Identifier: MIT-0
import ast
import re
import sys
def read_os_release():
try:
filename = '/etc/os-release'
f = open(filename)
except FileNotFoundError:
filename = '/usr/lib/os-release'
f = open(filename)
for line_number, line in enumerate(f, start=1):
line = line.rstrip()
if not line or line.startswith('#'):
continue
if m := re.match(r'([A-Z][A-Z_0-9]+)=(.*)', line):
name, val = m.groups()
if val and val[0] in '"\'':
val = ast.literal_eval(val)
yield name, val
else:
print(f'{filename}:{line_number}: bad line {line!r}', file=sys.stderr)
os_release = dict(read_os_release())
pretty_name = os_release.get('PRETTY_NAME', 'Linux')
print(f'Running on {pretty_name!r}')
if 'debian' in [os_release.get('ID', 'linux'), *os_release.get('ID_LIKE', '').split()]:
print('Looks like Debian!')
توجه داشته باشید که نسخه فوق که از پیادهسازی داخلی استفاده میکند در بیشتر موارد ارجح است، و نسخه دستی ارائهشده در اینجا صرفاً جهت ارجاع و مرجع ذکر شده است.
همچنین ببینید (SEE ALSO)
systemd(1), lsb_release(1), hostname(5), machine-id(5), machine-info(5)
یادداشتها (NOTES)
- 1.
- اعلامیه /etc/os-release
- 2.
- initrd
- 3.
- Portable Services
- 4.
- مشخصات Common Platform Enumeration
- 5.
- قالب RFC3986
- 6.
- مشخصات تم آیکون freedesktop.org
- 7.
- platform.freedesktop_os_release
| systemd 261.2 |