| KERNEL-INSTALL(8) | kernel-install | KERNEL-INSTALL(8) |
نام (NAME)
kernel-install - افزودن و حذف ایمیجهای هسته و initramfs در پارتیشن بوت
خلاصه دستور (SYNOPSIS)
kernel-install [OPTIONS...] add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE...]
kernel-install [OPTIONS...] add-all
kernel-install [OPTIONS...] remove KERNEL-VERSION
kernel-install [OPTIONS...] inspect [KERNEL-VERSION] [KERNEL-IMAGE] [INITRD-FILE...]
kernel-install [OPTIONS...] list
توضیحات (DESCRIPTION)
دستور kernel-install برای نصب و حذف ایمیجهای هسته و initrd [1] در و از پارتیشن بوت استفاده میشود که در اینجا با عنوان $BOOT به آن اشاره شده است. این پارتیشن معمولاً یکی از مسیرهای /boot/، /efi/ یا /boot/efi/ خواهد بود، به ادامه مراجعه کنید.
دستور kernel-install فایلهای اجرایی (با عنوان «پلاگین») موجود در دایرکتوری /usr/lib/kernel/install.d/ و دایرکتوری محلی مدیریتی /etc/kernel/install.d/ را اجرا میکند. تمام فایلها بدون در نظر گرفتن دایرکتوری که در آن قرار دارند، به صورت سراسری مرتب شده و به ترتیب لغوی (lexicographic) اجرا میشوند. با این حال، فایلهای با نام یکسان جایگزین یکدیگر میشوند. فایلهای موجود در /etc/kernel/install.d/ نسبت به فایلهای با نام یکسان در /usr/lib/kernel/install.d/ اولویت دارند. از این سازوکار میتوان در صورت نیاز برای بازنویسی و جایگزینی فایلهای اجرایی ارائهشده توسط سیستم با یک فایل محلی استفاده کرد؛ ایجاد یک پیوند نمادین در /etc/kernel/install.d/ همنام با یک فایل اجرایی در /usr/lib/kernel/install.d/ که به /dev/null اشاره کند، آن فایل اجرایی را به طور کامل غیرفعال میکند. فایلهای اجرایی باید دارای پسوند ".install" باشند؛ از سایر پسوندها صرفنظر میشود.
یک فایل اجرایی قرار داده شده در این دایرکتوریها باید در صورت موفقیت مقدار 0 را برگرداند. همچنین ممکن است مقدار 77 را بازگرداند تا کل عملیات خاتمه یابد (فایلهای اجرایی که بعداً در ترتیب لغوی قرار دارند نادیده گرفته خواهند شد).
دستورات (COMMANDS)
دستورات زیر پشتیبانی میشوند:
add [[[KERNEL-VERSION] KERNEL-IMAGE] [INITRD-FILE ...]]
فایلهای اجرایی از /usr/lib/kernel/install.d/*.install و /etc/kernel/install.d/*.install (یعنی همان پلاگینها) با آرگومانهای زیر فراخوانی میشوند:
add KERNEL-VERSION $BOOT/ENTRY-TOKEN/KERNEL-VERSION/ KERNEL-IMAGE [INITRD-FILE ...]
آرگومان سوم مستقیماً به مسیری اشاره دارد که ایمیجهای هسته، ایمیجهای initrd و سایر منابع برای ورودیهای نوع اول (#1) UAPI.1 Boot Loader Specification[2] در آن قرار میگیرند («دایرکتوری ورودی» یا entry directory). اگر از سایر طرحهای بارگذار بوت (boot loader) استفاده شود، این پارامتر ممکن است نادیده گرفته شود.
رشته ENTRY-TOKEN معمولاً همان شناسه ماشین (machine ID) است و قرار است نصب محلی روی سیستم را شناسایی کند. برای جزئیات به بخشهای زیر مراجعه کنید.
دستور kernel-install در صورت فعال بودن، مسیر $BOOT/ENTRY-TOKEN/KERNEL-VERSION را ایجاد میکند (متغیر $KERNEL_INSTALL_LAYOUT را ببینید).
سه پلاگین پیشفرض در این حالت عملیات زیر را اجرا میکنند:
50-depmod.install
90-loaderentry.install
اگر مقدار $KERNEL_INSTALL_LAYOUT برابر با "bls" نباشد، این پلاگین هیچ کاری انجام نمیدهد.
90-uki-copy.install
اگر فایل $KERNEL_INSTALL_STAGING_AREA/uki.efi وجود نداشته باشد و آرگومان KERNEL-IMAGE دارای پسوند ".efi" باشد، پلاگین ایمیج را در مسیر $BOOT/EFI/Linux/ENTRY-TOKEN-KERNEL-VERSION.efi کپی میکند. همچنین، فایلهای موجود در KERNEL-IMAGE.extra.d/ و $KERNEL_INSTALL_STAGING_AREA/uki.efi.extra.d"/ در مسیر $BOOT/EFI/Linux/ENTRY-TOKEN-KERNEL-VERSION.efi.extra.d/ کپی میشوند.
اگر مقدار $KERNEL_INSTALL_LAYOUT برابر با "uki" نباشد، این پلاگین هیچ کاری انجام نمیدهد.
افزودهشده در نسخه 198.
add-all
افزودهشده در نسخه 255.
remove KERNEL-VERSION
فایلهای اجرایی از /usr/lib/kernel/install.d/*.install و /etc/kernel/install.d/*.install (یعنی همان پلاگینها) با آرگومانهای زیر فراخوانی میشوند:
remove KERNEL-VERSION $BOOT/ENTRY-TOKEN/KERNEL-VERSION/
سپس، kernel-install دایرکتوری ورودی $BOOT/ENTRY-TOKEN/KERNEL-VERSION/ و محتویات آن را (در صورت وجود) حذف میکند.
سه پلاگین پیشفرض در این حالت عملیات زیر را اجرا میکنند:
50-depmod.install
90-loaderentry.install
90-uki-copy.install
افزودهشده در نسخه 198.
inspect [[[KERNEL-VERSION] KERNEL-IMAGE] [INITRD-FILE ...]]
مسیرها و پارامترهای گوناگون پیکربندیشده یا شناساییشده خودکار را نمایش میدهد. به طور ویژه مقادیر متغیرهای محیطی مختلف $KERNEL_INSTALL_* فهرستشده در زیر را همانطور که به پلاگینها ارسال میشوند نشان میدهد. میتوان از گزینه --json برای دریافت خروجی این زیردستور در قالب یک شیء JSON استفاده کرد.
افزودهشده در نسخه 251.
list
افزودهشده در نسخه 255.
سازگاری با سامانه ساخت هسته (COMPATIBILITY WITH THE KERNEL BUILD SYSTEM)
installkernel [OPTIONS...] VERSION VMLINUZ [MAP] [INSTALLATION-DIR]
هنگامی که به صورت installkernel فراخوانی شود، این برنامه آرگومانها را همانطور که توسط دستور make install سامانه ساخت هسته مشخص شده است میپذیرد. پارامترهای VERSION و VMLINUZ نسخه هسته و باینری هسته را مشخص میکنند. دو پارامتر دیگر (MAP و INSTALLATION-DIR) در حال حاضر نادیده گرفته میشوند.
پارتیشن $BOOT (THE $BOOT PARTITION)
پارتیشنی که هستهها و قطعهکدهای UAPI.1 Boot Loader Specification[2] در آن قرار دارند، $BOOT نامیده میشود. دستور kernel-install موقعیت این پارتیشن را با بررسی به ترتیب مسیرهای /efi/، /boot/ و /boot/efi/ تعیین میکند. اولین مکانی که در آن $BOOT/loader/entries/ یا $BOOT/ENTRY-TOKEN/ وجود داشته باشد استفاده میشود.
گزینهها (OPTIONS)
گزینههای زیر پشتیبانی میشوند:
--esp-path=
--boot-path=
--make-entry-directory=yes|no|auto
افزودهشده در نسخه 254.
--entry-type=type1|type2|all
افزودهشده در نسخه 258.
--entry-token=
اگر روی machine-id تنظیم شود، ورودیها بر اساس شناسه ماشین سیستم در حال اجرا نامگذاری میشوند (به عنوان مثال "b0e793a9baf14b5fa13ecbe84ff637ac"). برای جزئیات بیشتر درباره مفهوم و فایل شناسه ماشین، machine-id(5) را ببینید.
اگر روی os-id تنظیم شود، ورودیها بر اساس شناسه سیستمعامل سیستم در حال اجرا نامگذاری میشوند، یعنی فیلد ID= در os-release(5) (به عنوان مثال "fedora"). به طور مشابه، اگر روی os-image-id تنظیم شود، ورودیها بر اساس شناسه ایمیج سیستمعامل در حال اجرا نامگذاری میشوند، یعنی فیلد IMAGE_ID= در os-release (به عنوان مثال "vendorx-cashier-system").
اگر روی auto (پیشفرض) تنظیم شود، فایل /etc/kernel/entry-token (یا $KERNEL_INSTALL_CONF_ROOT/entry-token) در صورت وجود خوانده شده و مقدار ذخیرهشده در آن استفاده میشود. در غیر این صورت، اگر شناسه ماشین محلی مقداردهی شده باشد، از آن استفاده میشود. در غیر این صورت، مقدار IMAGE_ID= از os-release در صورت تنظیم بودن استفاده خواهد شد. در غیر این صورت، مقدار ID= از os-release در صورت تنظیم بودن استفاده خواهد شد. در غیر این صورت، یک شناسه ماشین تصادفی ایجاد شده و استفاده میشود.
استفاده از شناسه ماشین برای نامگذاری ورودیها عموماً ارجحیت دارد، با این حال مواردی وجود دارد که استفاده از سایر شناسهها گزینه بهتری است. به طور مشخص: در صورتی که دادههای هویتی حاصل از شناسه ماشین نباید در پارتیشن (رمزنگارینشده) $BOOT_ROOT ذخیره شوند، یا در صورتی که شناسه باید در اولین بوت ایجاد شود و هنگام آمادهسازی ورودیها هنوز مشخص نیست. توجه داشته باشید که استفاده از شناسه ماشین این مزیت را دارد که چندین نصب موازی از یک سیستمعامل یکسان میتوانند روی یک رسانه مشترک همزیستی داشته باشند و ورودیهای بارگذار بوت خود را به طور مستقل بهروزرسانی کنند. هنگام استفاده از شناسهای دیگر (مانند شناسه سیستمعامل یا شناسه ایمیج سیستمعامل)، نصبهای موازی از سیستمعامل یکسان تلاش خواهند کرد تا از همان نام ورودی استفاده کنند. برای پشتیبانی از نصبهای موازی، برنامه نصب (installer) هنگام افزودن نصب دوم باید از توکن ورودی متفاوتی استفاده کند.
افزودهشده در نسخه 254.
-v, --verbose
افزودهشده در نسخه 242.
--root=root
افزودهشده در نسخه 255.
--image=image
افزودهشده در نسخه 255.
-h, --help
--version
--no-pager
--json=MODE
--image-policy=policy
--no-legend
محیط (ENVIRONMENT)
متغیرهای محیطی صادر شده برای پلاگینها (Environment variables exported for plugins)
اگر از گزینه --verbose استفاده شود، متغیر $KERNEL_INSTALL_VERBOSE=1 برای پلاگینها صادر (export) خواهد شد. در این حالت پلاگینها ممکن است گزارشهای لاگ بیشتری ثبت کنند.
متغیر $KERNEL_INSTALL_IMAGE_TYPE=uki|pe|unknown برای پلاگینها تنظیم میشود تا نوع ایمیج هسته را مشخص کند.
uki
افزودهشده در نسخه 254.
pe
افزودهشده در نسخه 254.
unknown
افزودهشده در نسخه 254.
متغیر $KERNEL_INSTALL_MACHINE_ID برای پلاگینها روی شناسه ماشین مورد نظر تنظیم میشود. این شناسه همیشه یک شناسه ۱۲۸ بیتی است. به طور معمول از /etc/machine-id خوانده میشود، اما میتواند از طریق $MACHINE_ID نیز بازنویسی شود (به بخش زیر مراجعه کنید). اگر از طریق این روشها تعیین نشود، یک مقدار پشتیبان توسط kernel-install ایجاد شده و تنها برای همان یک بار فراخوانی استفاده میشود.
متغیر $KERNEL_INSTALL_ENTRY_TOKEN برای پلاگینها روی «توکن» ورودی مورد نظر تنظیم میشود. این مقداری هویتی است که برای شناسایی نصب محلی استفاده خواهد شد و اغلب همان شناسه ماشین است، یعنی معادل با $KERNEL_INSTALL_MACHINE_ID، اما میتواند نوع دیگری از شناسه نیز باشد، به عنوان مثال یک رشته ثابت یا مقادیر ID= و IMAGE_ID= از /etc/os-release. رشته ارائهشده در اینجا برای نامگذاری ورودیهای مشخصات بارگذار بوت (Boot Loader Specification) یا دایرکتوریهایی که ایمیج هسته و ایمیجهای دیسک رم اولیه (initial RAM disk) در آنها قرار میگیرند، استفاده میشود.
توجه داشته باشید اگرچه $KERNEL_INSTALL_ENTRY_TOKEN و $KERNEL_INSTALL_MACHINE_ID اغلب روی مقادیر یکسان تنظیم میشوند، دومی تضمین شده است که یک شناسه معتبر ۳۲ کاراکتری در قالب هگزادسیمال حروف کوچک باشد، در حالی که اولی میتواند هر رشته کوتاهی باشد. توکن ورودی مورد استفاده در صورت وجود از /etc/kernel/entry-token خوانده میشود. در غیر این صورت، چند نامزد احتمالی در زیر مسیر $BOOT برای دایرکتوریهای ورودی نوع اول مشخصات بارگذار بوت بررسی میشوند و در صورت یافت شدن، توکن ورودی از آن استخراج میشود. اگر این کار موفقیتآمیز نباشد، مقدار $KERNEL_INSTALL_MACHINE_ID به عنوان مقدار پشتیبان (fallback) استفاده خواهد شد.
متغیر $KERNEL_INSTALL_BOOT_ROOT برای پلاگینها روی مسیر مطلق دایرکتوری ریشه (معمولاً نقطه اتصال یا mount point) ساختاری که ورودیهای بارگذار بوت، ایمیجهای هسته و منابع مرتبط باید در آن قرار گیرند تنظیم میشود. این مسیر معمولاً همان مسیری است که پارتیشن XBOOTLDR یا ESP (پارتیشن سیستمی EFI) در آن سوار شدهاند، و از نظر مفهومی نیز با نام $BOOT شناخته میشود. میتوان آن را با تنظیم $BOOT_ROOT بازنویسی کرد (به بخش زیر مراجعه کنید).
متغیر $KERNEL_INSTALL_LAYOUT=auto|bls|uki|other|... برای پلاگینها تنظیم میشود تا طرحبندی نصب را مشخص کند. نامهای طرحبندی اضافی را میتوان بر اساس توافق تعریف کرد. اگر پلاگینی از طرحبندی خاصی استفاده میکند، توصیه میشود نام طرحبندی اختصاصی خود را اعلان کرده و در زمان نصب اولیه، مقدار layout= را در install.conf پیکربندی کند. مقادیر زیر در حال حاضر پشتیبانی میشوند:
bls
پیادهسازیشده توسط 90-loaderentry.install.
افزودهشده در نسخه 250.
uki
پیادهسازیشده توسط 90-uki-copy.install.
افزودهشده در نسخه 253.
other
افزودهشده در نسخه 250.
auto
خالی گذاشتن مقدار طرحبندی اثر یکسانی دارد. این حالت پیشفرض است.
افزودهشده در نسخه 254.
متغیرهای $KERNEL_INSTALL_INITRD_GENERATOR و $KERNEL_INSTALL_UKI_GENERATOR برای پلاگینها تنظیم میشوند تا تولیدکننده initrd و/یا UKI را انتخاب کنند. این مقدار میتواند به صورت initrd_generator= و uki_generator= در install.conf پیکربندی شود، به ادامه مراجعه کنید.
متغیر $KERNEL_INSTALL_STAGING_AREA برای پلاگینها روی مسیری به یک دایرکتوری تنظیم میشود. پلاگینها میتوانند فایلهای خود را در این دایرکتوری قرار دهند، و این فایلها بر اساس نام و پسوند فایل به عنوان بخشی از ورودی بارگذار بوت نصب خواهند شد: فایلهایی با نام initrd* به عنوان INITRD-FILEها نصب میشوند، و فایلهایی با نام microcode* قبل از INITRD-FILEها اضافه میشوند.
متغیرهای محیطی قابل فهم برای kernel-install (Environment variables understood by kernel-install)
متغیر $KERNEL_INSTALL_CONF_ROOT میتواند برای تغییر مکان فایلهای پیکربندی خواندهشده توسط kernel-install تنظیم شود. در صورت تنظیم، فایلهای install.conf، entry-token و سایر فایلها فقط از این دایرکتوری خوانده خواهند شد. توجه داشته باشید که این مسیر نسبت به سیستم میزبان است، و به ویژه پیوندهای نمادین در این دایرکتوری نسبت به میزبان تحلیل میشوند، حتی اگر از --root=root استفاده شده باشد. این بدان معناست که در صورت وجود پیوندهای نمادین، عموماً درست نیست که از این متغیر برای تعیین یک دایرکتوری در زیر مسیر root استفاده شود.
متغیر $KERNEL_INSTALL_PLUGINS میتواند برای لغو و بازنویسی فهرست پلاگینهای اجراشده توسط kernel-install تنظیم شود. آرگومان آن فهرستی از مسیرها است که با فاصله (whitespace) جدا شدهاند. میتوان از "KERNEL_INSTALL_PLUGINS=:" برای جلوگیری از اجرای تمامی پلاگینها استفاده کرد.
متغیر $MACHINE_ID میتواند برای kernel-install تنظیم شود تا شناسه ماشین $KERNEL_INSTALL_MACHINE_ID را بازنویسی کند.
متغیر $BOOT_ROOT میتواند برای kernel-install تنظیم شود تا مکان نصب ورودیهای بوت یعنی $KERNEL_INSTALL_BOOT_ROOT را بازنویسی کند.
دو متغیر آخر را میتوان در فایل install.conf نیز تنظیم کرد. متغیرهای تنظیمشده در محیط بر مقادیر مشخصشده در فایل پیکربندی اولویت دارند.
کدهای خروج (EXIT STATUS)
اگر تمامی فایلهای اجرایی مقدار 0 یا 77 را برگردانند، مقدار 0 برگردانده میشود؛ در غیر این صورت یک کد خطای غیر صفر برگردانده خواهد شد.
فایلها (FILES)
/etc/kernel/install.d/*.install, /usr/lib/kernel/install.d/*.install
افزودهشده در نسخه 198.
/etc/kernel/cmdline, /usr/lib/kernel/cmdline, /proc/cmdline
افزودهشده در نسخه 198.
/etc/kernel/devicetree, /usr/lib/kernel/devicetree
فایل devicetree شامل یک مسیر است و این مسیر مکانی را نسبت به درخت نصب هسته مشخص میکند. مجموعهای از مکانها بررسی میشوند، به ویژه از جمله /usr/lib/modules/KERNEL_VERSION/dtb/ که مکان پیشنهادی برای قرار دادن فایلهای dtb است. به عنوان مثال، با قرار دادن "broadcom/bcm2711-rpi-4-b.dtb" در فایل devicetree، بلاب درخت دستگاه برای Raspberry Pi 4 Model B نصب خواهد شد و فایل واقعی /usr/lib/modules/KERNEL_VERSION/dtb/broadcom/bcm2711-rpi-4-b.dtb خواهد بود.
افزودهشده در نسخه 255.
/etc/kernel/tries
افزودهشده در نسخه 240.
/etc/kernel/entry-token
افزودهشده در نسخه 251.
/etc/machine-id
افزودهشده در نسخه 198.
/etc/os-release, /usr/lib/os-release
افزودهشده در نسخه 198.
/etc/kernel/install.conf, /run/kernel/install.conf, /usr/local/lib/kernel/install.conf, /usr/lib/kernel/install.conf, /etc/kernel/install.conf.d/*.conf, /run/kernel/install.conf.d/*.conf, /usr/local/lib/kernel/install.conf.d/*.conf, /usr/lib/kernel/install.conf.d/*.conf
در حال حاضر کلیدهای زیر پشتیبانی میشوند: MACHINE_ID=، BOOT_ROOT=، layout=، initrd_generator=، uki_generator=. برای جزئیات بیشتر بخش متغیرهای محیطی در بالا را ببینید.
افزودهشده در نسخه 250.
/etc/kernel/uki.conf
افزودهشده در نسخه 255.
/usr/lib/modules/KERNEL-VERSION/
افزودهشده در نسخه 255.
/usr/lib/modules/KERNEL-VERSION/vmlinuz
افزودهشده در نسخه 255.
در موارد مختلف فهرستشده در بالا، اگر متغیر محیطی $KERNEL_INSTALL_CONF_ROOT تنظیم شده باشد، مسیر جستجو را بازنویسی میکند. فایلها تنها از دایرکتوری مشخصشده توسط این متغیر محیطی بارگذاری خواهند شد. هنگامی که این متغیر تنظیم نشده باشد، مسیرهای فهرستشده به نوبت بررسی میشوند و اولین فایلی که وجود داشته باشد استفاده میشود.
همچنین ببینید (SEE ALSO)
machine-id(5), os-release(5), depmod(8), systemd-boot(7), ukify(1), UAPI.1 Boot Loader Specification[2]
نکات (NOTES)
- 1.
- امروزه در واقع به جای "initrd" از آرشیوهای CPIO با عنوان "initramfs" استفاده میشود. برای توضیحات بیشتر، bootup(7) را ببینید.
- 2.
- مشخصات بارگذار بوت UAPI.1 (UAPI.1 Boot Loader Specification)
- 3.
- مشخصات پارتیشنهای قابل کشف UAPI.2 (UAPI.2 Discoverable Partitions Specification)
| systemd 261.2 |