BOOSTER(1) General Commands Manual BOOSTER(1)

booster - سازنده سریع و امن initramfs

Booster ابزاری برای ساخت ایمیج‌های initramfs مورد نیاز در مرحله آغازین فرایند راه‌اندازی لینوکس است. Booster با در نظر گرفتن سرعت بالا و سناریوی رمزنگاری کامل دیسک ساخته شده است.

مزایای Booster:

  • زمان ساخت سریع ایمیج و سرعت بالای راه‌اندازی (بوت).
  • پشتیبانی پیش‌فرض و بی‌دردسر از پیکربندی رمزنگاری کامل دیسک مبتنی بر LUKS.
  • پیوند داده‌ها به روش Clevis. سیستم فایل رمزگذاری‌شده می‌تواند به تراشه TPM2 یا یک سرویس تحت شبکه پیوند یابد. این ویژگی به بازگشایی خودکار درایو کمک می‌کند، اما تنها در صورتی که TPM2 یا سرویس شبکه در دسترس باشد.
  • تشخیص و بازگشایی خودکار انواع رمزنگاری پارتیشن با systemd-cryptenroll (شامل fido2 و tpm2).
  • پیکربندی آسان.
  • شناسایی خودکار پیکربندی میزبان. این قابلیت به ساخت ایمیج‌های کمینه‌گرا و ویژه میزبان فعلی کمک می‌کند.

فایل پیکربندی سازنده booster در مسیر /etc/booster.yaml قرار دارد. نمونه‌ای از فایل پیکربندی:

network:
  interfaces: enp0s31f2,2e:1d:61:30:a3:63
  dhcp: on
  # either dhcp above or static configuration below can be used
  ip: 10.0.2.15/24
  gateway: 10.0.2.255
  dns_servers: 192.168.1.1,8.8.8.8
  ssh_host_key: /etc/booster/ssh_host_ed25519_key
  ssh_authorized_keys: /etc/booster/authorized_keys
  ssh_listen: :22
universal: false
modules: -*,hid_apple,kernel/sound/usb/,kernel/fs/btrfs/btrfs.ko,kernel/lib/crc4.ko.xz
compression: zstd
mount_timeout: 5m6s
strip: true
extra_files: vim,/usr/share/vim/vim82/,fsck,fsck.ext4
vconsole: true
enable_lvm: true
enable_mdraid: true
token_timeout: 30s
pin_delay: 5s
serialize_tokens:
  enabled: true
  clevis_timeout: 45s
  • گره network در صورت وجود، شبکه را در زمان راه‌اندازی فعال می‌کند. این گره زمانی مورد نیاز است که سوار کردن (mount) سیستم فایل ریشه نیازمند دسترسی به شبکه باشد (به عنوان مثال در مورد پیوند Tang). شبکه می‌تواند به طور پویا با DHCPv4 یا به طور ایستا در همین پیکربندی تنظیم شود. در حالت اول dhcp روی on تنظیم می‌شود. در حالت دوم، پیکربندی امکان تعیین موارد زیر را فراهم می‌کند: ip - آدرس IP دستگاه و ماسک شبکه آن، gateway - دروازه پیش‌فرض، dns_servers - فهرست جداشده با کاما از سرورهای DNS. گره network همچنین ویژگی interfaces را می‌پذیرد - فهرستی جداشده با کاما از رابط‌های شبکه (تعیین‌شده با نام یا آدرس MAC) جهت فعال‌سازی در زمان راه‌اندازی. نام‌های شبکه مانند enp0s31f6 در زمان تولید به آدرس‌های MAC تفکیک شده و سپس به init ارسال می‌شوند. اگر گره interfaces مشخص نشود، همه رابط‌ها در زمان راه‌اندازی فعال می‌شوند. گره network همچنین ssh_host_key، ssh_authorized_keys و ssh_listen را جهت فعال‌سازی بازگشایی از راه دور قفل LUKS از طریق SSH می‌پذیرد. مقدار ssh_host_key مسیر کلید خصوصی میزبان SSH با قالب کدگذاری‌شده OpenSSH یا PEM است، ssh_authorized_keys مسیر فایل authorized_keys است، و ssh_listen آدرس گوش دادن است (پیش‌فرض :22). هر دو پارامتر ssh_host_key و ssh_authorized_keys باید همراه یکدیگر تنظیم شوند، و SSH به dhcp: true یا یک ip ایستا نیاز دارد. بخش بازگشایی از راه دور (REMOTE UNLOCK) در ادامه را ببینید.
  • universal پرچمی بولی است که به booster دستور می‌دهد یک ایمیج فراگیر (یونیورسال) تولید کند. به طور پیش‌فرض booster ایمیجی ویژه میزبان تولید می‌کند که ماژول‌های کرنل مورد استفاده در سیستم فعلی را شامل می‌شود. برای نمونه اگر میزبان فاقد تراشه TPM2 باشد ماژول‌های tpm نادیده گرفته می‌شوند. ایمیج فراگیر شامل ماژول‌های کرنل و ابزارهای متعددی است که ممکن است در طیف گسترده‌ای از پیکربندی‌های سخت‌افزاری لازم باشند.
  • modules فهرستی جداشده با کاما از ماژول‌های اضافی برای افزودن به ایمیج یا حذف از ایمیج تولیدی است. می‌توان از نام ماژول یا مسیری نسبی نسبت به پوشه ماژول‌ها (/usr/lib/modules/$KERNEL_VERSION) استفاده کرد. پسوند الگوریتم فشرده‌سازی (مانند ".xz"، ".gz") می‌تواند از نام فایل ماژول حذف شود. اگر موردی با علامت منها (-) شروع شود به معنای "این ماژول به ایمیج اضافه نشود" است، در غیر این صورت ماژول‌ها اضافه خواهند شد. اگر مسیر با علامت اسلش (/) خاتمه یابد، به عنوان یک دایرکتوری در نظر گرفته شده و تمام ماژول‌های موجود در آن به صورت بازگشتی اضافه می‌شوند. نماد ویژه * (ستاره) به معنی همه ماژول‌هاست. از این نماد می‌توان برای افزودن همه ماژول‌ها یا حذف تمام ماژول‌های از پیش تعریف‌شده از ایمیج استفاده کرد. همچنین Booster وابستگی‌های ماژول را در نظر می‌گیرد، بنابراین تمام وابستگی‌های ماژول‌های مشخص‌شده نیز به ایمیج اضافه خواهند شد.
  • modules_force_load فهرستی از نام‌های ماژول‌ها است که در طول فرایند راه‌اندازی و پیش از انتقال به فضای کاربری به اجبار بارگذاری می‌شوند. هر ماژول در این فهرست به طور خودکار به ایمیج افزوده می‌شود، بنابراین نیازی به تکرار آن در ویژگی modules نیست.
  • append_all_modaliases پرچمی بولی است که به booster دستور می‌دهد تمام نام‌های مستعار ماژول‌های میزبان را به ایمیج booster بیفزاید. این پرچم هنگام عیب‌یابی مشکلات اتمام مهلت زمانی (timeout) در راه‌اندازی که ناشی از نبود برخی ماژول‌های مهم در ایمیج است، کاربرد دارد. تنظیم این پرچم روی true به چاپ نام ماژول‌هایی کمک می‌کند که توسط کرنل درخواست شده اما در ایمیج موجود نبوده‌اند.
  • compression پرچمی است که شیوه فشرده‌سازی فایل initramfs خروجی را تعیین می‌کند. الگوریتم‌هایی که اکنون پشتیبانی می‌شوند عبارتند از "zstd"، "gzip"، "xz"، "lz4" و "none". اگر هیچ گزینه‌ای مشخص نشود، "zstd" به عنوان فشرده‌سازی پیش‌فرض اعمال می‌شود.
  • mount_timeout مهلت زمانی برای انتظار جهت پدیدار شدن سیستم فایل ریشه است. قالب این فیلد شامل یک عدد اعشاری و سپس واحد زمانی است. واحدهای معتبر عبارتند از "s" (ثانیه)، "m" (دقیقه)، "h" (ساعت). چنانچه مقداری تعیین نشود، مهلت پیش‌فرض (۳ دقیقه) منظور خواهد شد. برای غیرفعال‌سازی کامل مهلت، مقدار "0s" را مشخص کنید.
  • strip پرچمی بولی است که پیراستن (حذف نمادهای اشکال‌زدایی یا strip کردن) فایل‌های ELF را پیش از افزودن آن‌ها به ایمیج فعال می‌کند. باینری‌ها، کتابخانه‌های اشتراکی و ماژول‌های کرنل نمونه‌هایی از فایل‌های ELF هستند که توسط ابزار یونیکسی strip پردازش می‌شوند.
این گزینه با ماژول‌های امضاشده سازگار نیست. چنانچه با خطای بوت booster: finit(crc32,generic): key was rejected by service مواجه شدید، لطفاً گزینه strip در پیکربندی را برابر با false قرار دهید.
  • extra_files فهرستی جداشده با کاما از فایل‌های جانبی برای افزودن به ایمیج است. اگر موردی با اسلش ("/") شروع شود، مسیری مطلق در نظر گرفته می‌شود؛ در غیر این صورت مسیری نسبی نسبت به /usr/bin خواهد بود. اگر مورد مزبور یک دایرکتوری باشد، محتوای آن به صورت بازگشتی افزوده می‌شود. چند حالت ویژه وجود دارد:
  • افزودن busybox به ایمیج، پوسته اضطراری را در صورت بروز وحشت کرنل (panic) در طول فرایند راه‌اندازی فعال می‌کند.
  • افزودن fsck بررسی سیستم فایل در زمان راه‌اندازی را فعال می‌کند. این امر همچنین نیازمند افزودن باینری اختصاصی سیستم فایل با نام fsck.$rootfstype به ایمیج است. سیستم‌های فایل به طور خودکار اصلاح می‌شوند و چنانچه با شکست مواجه شود، راه‌اندازی متوقف شده و اصلاح سیستم فایل ریشه بر عهده کاربر خواهد بود.
  • vconsole پرچمی است که پیکربندی کنسول در مراحل اولیه راه‌اندازی را فعال می‌سازد. چنانچه روی true تنظیم شود، booster پیکربندی را از /etc/vconsole.conf و /etc/locale.conf خوانده و نگاشت کلید (keymap) و فونت‌های مورد نیاز را به ایمیج تولیدی می‌افزاید. ویژگی‌های پیکربندی زیر مد نظر قرار می‌گیرند: KEYMAP، KEYMAP_TOGGLE، FONT، FONT_MAP و FONT_UNIMAP. همچنین به راهنمای vconsole.conf در https://man.archlinux.org/man/vconsole.conf.5.en مراجعه نمایید.
  • enable_lvm پرچمی است که سرهم‌بندی و فعال‌سازی حجم‌های LVM را در زمان راه‌اندازی فعال می‌کند. این پرچم همچنین اطمینان حاصل می‌کند که تمام ماژول‌ها و باینری‌های مورد نیاز به ایمیج افزوده شده‌اند.
  • enable_mdraid پرچمی است که سرهم‌بندی MdRaid را در زمان راه‌اندازی فعال می‌کند. این پرچم همچنین افزوده شدن تمام ماژول‌ها و باینری‌های لازم به ایمیج را تضمین می‌نماید.
  • enable_zfs پرچمی است که سیستم فایل ZFS را به عنوان سیستم فایل ریشه فعال می‌کند. این پرچم نیز از اضافه شدن تمامی ماژول‌ها و باینری‌های لازم به ایمیج مطمئن می‌شود. توجه داشته باشید که در صورت فعال بودن ZFS، باید به جای گزینه بوت root= از گزینه بوت zfs= استفاده شود.
  • crypttab_path مسیر فایل crypttab برای خواندن در زمان ساخت ایمیج است. در صورت عدم تنظیم، به طور پیش‌فرض /etc/crypttab است. می‌تواند با پرچم --crypttab بازنویسی شود. در صورت تنظیم، هرگونه خطای خواندن به عنوان شکست گزارش می‌شود.
  • enable_plymouth پرچمی است که پشتیبانی از صفحه بارگذاری گرافیکی (boot splash) پلای‌موث (Plymouth) را فعال می‌کند. در صورت فعال‌سازی، booster دیمن Plymouth، افزونه‌ها، پوسته و فونت‌ها را درون initramfs بسته‌بندی می‌کند. درایور کارت گرافیک (GPU) باید در modules_force_load گنجانده شود. همچنین پارامترهای کرنل quiet splash مورد نیاز هستند. دقت فرمایید که booster.log=console با نمایش گرافیکی Plymouth ناسازگار است؛ هرگاه گزارش‌گیری در کنسول فعال باشد، Plymouth به افزونه جزئیات (details - جایگزین متنی) بازمی‌گردد.
  • enable_fido2 پرچمی بولی است که پشتیبانی از توکن سخت‌افزاری FIDO2 را فعال می‌سازد.
  • serialize_tokens باعث می‌شود booster توکن‌های LUKS یک دستگاه را به ترتیب شناسه توکن صعودی و تک‌به‌تک بیازماید، نه این‌که آن‌ها را به طور هم‌زمان و رقابتی اجرا کند (پیش‌فرض غیرفعال است). در نتیجه یک توکن غیرتعاملی (مانند TPM2 صرفاً مبتنی بر PCR، یا FIDO2 بدون لمس، یا clevis) که پیش از توکن مبتنی بر PIN ثبت شده است، دستگاه را پیش از رسیدن به اعلان دریافت PIN بازگشایی می‌کند. هر توکن غیرتعاملی با یک مهلت زمانی بر پایه نوع خود محدود می‌شود تا توکن معلق‌مانده موجب توقف کل فرایند بوت نشود؛ با پایان مهلت، booster به سراغ توکن بعدی می‌رود. توکن‌های PIN مشمول مهلت زمانی نیستند (زدن Enter خالی مستقیماً از آن‌ها رد می‌شود). کلیدها:
  • serialize_tokens.enabled — بولی، پیش‌فرض false.
  • serialize_tokens.clevis_timeout / serialize_tokens.tpm2_timeout / serialize_tokens.fido2_timeout — محدودیت‌های زمانی برای هر توکن نظیر clevis، ماژول systemd-tpm2 بدون PIN، و systemd-fido2 بدون PIN. با قالب مدت زمان زبان Go. مقادیر پیش‌فرض عبارتند از 45s / 15s / 30s. تا زمانی که serialize_tokens.enabled تنظیم نشده باشد بی‌اثر است.
•
token_timeout (در سطح بالایی، در هر دو حالت اعمال می‌شود) مدت زمانی را محدود می‌کند که booster در انتظار توکن‌ها می‌ماند پیش از آن‌که اعلان دریافت گذرواژه صفحه‌کلید را نیز آغاز نماید. توکن‌ها پس از ظاهر شدن اعلان همچنان به رقابت ادامه می‌دهند؛ هر مسیری که زودتر به نتیجه برسد مسیر دیگر را کنار می‌زند (به هم‌زمانی بازگشایی LUKS و ترتیب اعلان‌ها (LUKS unlock concurrency and prompt order) در بخش یادداشت‌ها مراجعه کنید). این گزینه معادل token-timeout= در crypttab/rd.luks.options درون پیکربندی booster است (به rd.luks.options ذیل پارامترهای کرنل در زمان راه‌اندازی (BOOT TIME KERNEL PARAMETERS) رجوع نمایید). با قالب مدت زمان Go. اولویت‌ها از بالاترین به پایین‌ترین عبارتند از:
1.
گزینه صریح token-timeout= به ازای هر دستگاه — در خط فرمان کرنل (rd.luks.options) یا در crypttab؛ چنانچه هر دو برای یک دستگاه مشخص شده باشند، مقدار خط فرمان اولویت دارد.
2.
همین گزینه token_timeout.
3.
در حالت ترتیبی (serialize)، مجموع مهلت‌های زمانی اختصاصی توکن‌های دستگاه (به طوری که اعلان صفحه‌کلید هیچ‌گاه پیش از رسیدن نوبت به یک توکن، جای آن را نگیرد).
4.
مقدار پیش‌فرض 30s.
در حالت ترتیبی توصیه می‌شود token_timeout را بدون مقدار رها کنید تا اولویت سطح ۳ اعمال شود: تعیین یک مقدار ثابت کوتاه‌تر از زنجیره توکن‌ها می‌تواند موجب شود پیش از رسیدن نوبت یک توکن، اعلان صفحه‌کلید نمایش داده شود.
•
pin_delay همتای حالت هم‌زمان برای serialize_tokens است: نخستین اعلان تعاملی دریافت PIN (نظیر TPM2-PIN و FIDO2-PIN) را به این مدت متوقف نگه می‌دارد تا یک توکن غیرتعاملی موازی بتواند زودتر قفل را باز کند و در نتیجه اعلان هرگز بر صفحه نقش نبندد — چنانچه توکنی برنده شود پیش از رسم اعلان لغو می‌گردد، و اگر مهلت سپری شود طبق روال معمول نشان داده خواهد شد (هیچ مسیر بازگشایی از دست نمی‌رود؛ این تاخیر صرفاً نمایش اعلان را به تعویق می‌اندازد). با مدت زمان Go؛ در صورت عدم تعیین (پیش‌فرض) به معنی عدم تاخیر است. در حالت ترتیبی یا هنگامی که هیچ توکن موازی بدون PIN ثبت نشده باشد (دستگاهی که فقط دارای PIN است فوراً اعلان را نشان می‌دهد) بی‌اثر خواهد بود. مقدار آن را بیشتر از زمان واقعی بازگشایی توکنِ در حال رقابت تنظیم کنید — راه‌اندازی سخت‌افزاری TPM2/FIDO2، یا در مورد clevis تبادل شبکه/DHCP — اما بسیار کمتر از token_timeout؛ در غیر این صورت اعلان همچنان نمایش خواهد یافت. چند ثانیه برای آزادسازی سریع TPM2 بر پایه PCR مناسب است؛ برای clevis روی شبکه یا ایمیج فراگیر با بارگذاری کند ماژول‌ها، زمان بیشتری لازم است.

هنگامی که اصلاح فایل پیکربندی خود را به پایان بردید و مایل به تولید مجدد ایمیج‌های booster در مسیر /boot بودید، لطفاً از /usr/lib/booster/regenerate_images استفاده نمایید. این یک اسکریپت کاربردی است که همان نوع تولید مجدد ایمیج را اجرا می‌کند که گویی booster را با مدیر بسته خود نصب کرده‌اید.

•
-v, --verbose فعال‌سازی خروجی با جزئیات کامل

ساخت ایمیج initrd. نحوه استفاده: booster [OPTIONS] build [build-OPTIONS] output

  • -f, --force بازنویسی فایل initrd موجود.
  • --init-binary <پیش‌فرض: /usr/lib/booster/init> مسیر قرارگیری فایل باینری 'init' در Booster.
  • --compression <پیش‌فرض: zstd> شیوه فشرده‌سازی فایل خروجی. مقادیر ممکن: zstd، gzip، xz، lz4، none.
  • --kernel-version نسخه کرنل لینوکس برای تولید initramfs.
  • --config <پیش‌فرض: /etc/booster.yaml> مسیر فایل پیکربندی.
  • --universal افزودن طیف گسترده‌ای از ماژول‌ها/ابزارها جهت امکان راه‌اندازی این ایمیج بر روی دستگاه‌های گوناگون.
  • --strip پیراستن و حذف نمادهای فایل‌های ELF (باینری‌ها، کتابخانه‌های اشتراکی و ماژول‌های کرنل) پیش از افزودن آن‌ها به ایمیج.
  • --crypttab <پیش‌فرض: /etc/crypttab> مسیر فایل crypttab جهت خواندن در زمان ساخت ایمیج. بر crypttab_path تعیین‌شده در فایل پیکربندی اولویت دارد. اگر هیچ‌کدام تنظیم نشده باشند، booster مسیر /etc/crypttab را خوانده و در صورت عدم وجود یا غیرقابل خواندن بودن فایل، بی سر و صدا از آن می‌گذرد. در صورت تعیین صریح، هرگونه خطای خواندن به منزله شکست گزارش می‌شود.

نمایش محتوای فایل درون ایمیج. نحوه استفاده: booster [OPTIONS] cat image file-in-image

فهرست کردن محتویات ایمیج. نحوه استفاده: booster [OPTIONS] ls image

استخراج ایمیج. نحوه استفاده: booster [OPTIONS] unpack image output-dir

بخشی از عملکردهای راه‌اندازی booster را می‌توان با پارامترهای راه‌اندازی هسته تغییر داد. این پارامترها معمولاً از طریق پیکربندی بارگذار بوت (bootloader) تنظیم می‌شوند. راه‌اندازی Booster از این پارامترهای هسته استفاده می‌کند:

  • root=$deviceref ارجاع دستگاه به دستگاه ریشه (root). برای چگونگی تعیین آن بخش "ارجاع دستگاه (Device Reference)" در یادداشت‌ها (NOTES) را ببینید، و بخش "کشف پارتیشن ریشه (ROOT PARTITION DISCOVERY)" را برای نحوه مدیریت ریشه‌های بدون رمزگذاری، LUKS و خودکار کشف‌شده توسط booster مشاهده کنید.
  • rootfstype=$TYPE (مانند rootfstype=ext4). به طور پیش‌فرض booster تلاش می‌کند نوع سیستم فایل ریشه را شناسایی کند. اما اگر شناسایی خودکار عمل نکند، این پارامتر هسته سودمند خواهد بود. همچنین لطفاً یک تیکت گزارش ارسال کنید تا بتوانیم کُد تشخیص نوع فایل را بهبود بخشیم.
  • rootflags=$OPTIONS گزینه‌های سوار کردن (mount) برای سیستم فایل ریشه، به عنوان نمونه rootflags=user_xattr,nobarrier. در حالت کشف خودکار پارتیشن، ویژگی ۶۰ در GPT (یعنی "فقط‌خواندنی") در نظر گرفته می‌شود.
  • rd.luks.uuid=$UUID شناسه یکتای (UUID) پارتیشن LUKS که پارتیشن ریشه درون آن قرار دارد. booster تلاش خواهد کرد قفل این دستگاه LUKS را باز کند.
  • rd.luks.name=$UUID=$NAME مشابه پارامتر rd.luks.uuid است اما نام مورد استفاده برای باز کردن دستگاه LUKS را نیز مشخص می‌کند.
  • rd.luks.key=$UUID=$PATH مسیر مطلق فایل کلید (keyfile) در initrd/initramfs که می‌تواند برای بازگشایی قفل دستگاه با UUID مشخص استفاده شود؛ اگر این فایل وجود نداشته باشد یا در بازگشایی قفل ناموفق باشد، به درخواست گذرواژه از کاربر بازمی‌گردد.
  • rd.luks.header=$UUID=$PATH سرایند (header) مجزای LUKS برای دستگاهی که با $UUID مشخص شده است. $PATH می‌تواند سه شکل داشته باشد:
  • فایل در Initramfs — یک مسیر مطلق (مانند /etc/luks/root.hdr) به یک فایل سرایند که در زمان ساخت ایمیج از طریق extra_files درون initramfs قرار گرفته است.
  • دستگاه بلوکی خام (Raw block device) — مسیر دستگاه (مانند /dev/sdb) که در آن سرایند LUKS از افست بایت صفر آغاز می‌شود. Booster منتظر ظاهر شدن دستگاه می‌ماند و آن را مستقیماً و بدون سوار کردن به cryptsetup ارسال می‌کند.
  • فایل روی دستگاهی جداگانه — به شکل $path:$deviceref که در آن $deviceref یکی از موارد UUID=...، LABEL=...، PARTUUID=...، یا PARTLABEL=... است. Booster دستگاه را به صورت فقط‌خواندنی سوار می‌کند، فایل سرایند را می‌خواند، و سپس پیش از بازگشایی قفل آن را پیاده‌سازی (unmount) می‌کند.
  • rd.luks.options=opt1,opt2 فهرستی جداشده با کاما از پرچم‌های LUKS. گزینه‌های پشتیبانی‌شده عبارتند از discard، same-cpu-crypt، submit-from-crypt-cpus، no-read-workqueue، no-write-workqueue. گزینه token-timeout=<duration> مدت زمان انتظار برای توکن‌های سخت‌افزاری (FIDO2، TPM2) پیش از درخواست گذرواژه از صفحه‌کلید را تعیین می‌کند. این گزینه یک عدد اعشاری همراه با یک واحد زمانی (s، m، h)، یا یک عدد صحیح به عنوان ثانیه را می‌پذیرد. مقدار پیش‌فرض ۳۰ ثانیه (30 s) است. توجه داشته باشید که booster از پرچم‌های ماندگار LUKS v2 که با فراداده‌های پارتیشن ذخیره شده‌اند نیز پشتیبانی می‌کند. هر گزینه خط فرمان علاوه بر پرچم‌های ماندگار اعمال می‌شود.
  • rd.modules_force_load فهرستی جداشده با کاما از ماژول‌های اضافی هسته که باید به اجبار بارگذاری شوند.
  • resume=$deviceref ارجاع دستگاه به دستگاه ذخیره وضعیت روی دیسک (suspend-to-disk / هایبرنیت).
  • zfs=$pool/$dataset مشخص می‌کند که کدام دیتاست ZFS باید برای پارتیشن ریشه استفاده شود. این گزینه تنها در صورتی استفاده می‌شود که گزینه پیکربندی ZFS فعال باشد. اگر سیستم فایل ZFS فعال باشد، پارامتر راه‌اندازی root= نادیده گرفته می‌شود.
  • booster.log پیکربندی ثبت رویدادهای init در booster. فهرستی جداشده با کاما از مقادیر زیر را می‌پذیرد:
یکی از مقادیر سطوح گزارش (از جزئیات بیشتر به کمتر) - debug، info، warning، error یا null. سطح پایانی null تمام ثبت رویدادها را غیرفعال می‌کند، بنابراین ⚠️تنها زمانی از آن استفاده کنید که کاملاً به کار خود آگاهید⚠️. اگر سطح مشخص نشود، مقدار پیش‌فرض info به کار می‌رود.
console - چاپ رویدادهای init بوستر در کنسول.
گزارش اشکال‌زدایی (debug) همچنین در بافر kmsg هسته چاپ می‌شود و برای خواندن با دستور dmesg یا journalctl -b در دسترس است. در صورت فعال بودن سطح debug، محدودسازی نرخ kmsg به طور خودکار غیرفعال می‌شود.
  • booster.debug گزینه‌ای منسوخ‌شده که معادل booster.log=debug,console است.
  • quiet تنظیم سطح گزارش‌دهی init بوستر به کمترین مقدار. اگر booster.debug یا booster.log تنظیم شده باشند، این گزینه نادیده گرفته می‌شود.
  • init=$PATH مسیر باینری init فضای کاربری. اگر مشخص نشود، مقدار پیش‌فرض /sbin/init استفاده می‌شود.

ابزار Booster سیستم فایل ریشه را از خط فرمان هسته (kernel cmdline) شناسایی کرده و چنانچه رمزگذاری شده باشد، ظرف LUKS را پیش از سوار کردن بازگشایی می‌کند. بیشتر پیکربندی‌ها با یکی از ساختارهای زیر هماهنگ هستند.

root=UUID=<filesystem-uuid>

مسیرهای PARTUUID=، LABEL=، یا مسیری به شکل /dev/... نیز قابل استفاده هستند.

چهار شیوه برای راه‌اندازی آن وجود دارد. هر روشی که با بارگذار بوت و ابزارهای کنونی شما سازگارتر است را برگزینید.

نام‌گذاری از طریق cmdline.

rd.luks.name=<luks-partition-uuid>=<name> root=/dev/mapper/<name>

برای مجموعه کامل گزینه‌ها، پارامترهای rd.luks.name، rd.luks.uuid و موارد وابسته را در بخش "پارامترهای هسته در زمان راه‌اندازی (BOOT TIME KERNEL PARAMETERS)" ببینید.

نام‌گذاری از طریق /etc/crypttab. افزودن مدخلی نشانه‌گذاری‌شده با x-initrd.attach؛ ستون نخست به عنوان نام نگاشت‌کننده (mapper name) تعیین می‌شود. آن را همراه با root=/dev/mapper/<name> در cmdline به کار برید. برای ساختار دستور و قواعد بسته‌بندی، بخش جدول رمزگذاری (CRYPTTAB) در ادامه را ببینید.

نام‌گذاری خودکار (Auto-named). در نبود rd.luks.* در خط فرمان هسته و نبود مدخل crypttab برای این حجم ذخیره‌سازی، مقدار root= را مستقیماً به ظرف LUKS ارجاع دهید:

root=UUID=<luks-partition-uuid>

ابزار Booster آن را به عنوان /dev/mapper/root بازگشایی کرده و سوار می‌کند. مقادیر PARTUUID=، LABEL=، یا مسیر /dev/... که به ظرف دیسک ارجاع دهد نیز کارآمد خواهند بود.

بدون نیاز به پارامترهای هسته (Zero kernel parameters). پارتیشن را با GUID ریشه مربوط به معماری پردازنده خود نشانه‌گذاری کنید تا booster بدون نیاز به هیچ آرگومان root= آن را کشف کند. بخش "کشف خودکار GPT" در ادامه را ببینید.

با استفاده از هر ویرایشگر GPT (نظیر gdisk، sgdisk، fdisk، cfdisk، parted، ...) نوع پارتیشن ریشه را روی "Linux root" برای معماری پردازنده خود قرار دهید. برای مثال در معماری x86-64 با ابزار gdisk، کد نوع پارتیشن 8304 است. سایر ابزارها و معماری‌ها میانبرهای متفاوتی به کار می‌برند؛ فهرست نوع‌ها در ویرایشگر خود را بررسی کنید. فهرست کامل GUIDهای متناسب با معماری در مشخصات پارتیشن‌های کشف‌پذیر (Discoverable Partitions Specification) در نشانی https://uapi-group.org/specifications/specs/discoverable_partitions_specification/ آمده است.

همان شناسه GUID برای هر دو نوع سیستم فایل ساده و ریشه‌های رمزگذاری‌شده با LUKS کاربرد دارد — booster هر دو حالت را مدیریت می‌کند. Booster تنها دیسکی را پویش می‌کند که شامل پارتیشن فعال سیستم EFI (ESP) باشد؛ پارتیشن‌های نشانه‌گذاری‌شده به عنوان ریشه روی سایر دیسک‌ها نادیده گرفته می‌شوند. دقیقاً یک پارتیشن را روی آن دیسک نشانه‌گذاری کنید.

اگر root=/dev/mapper/<name> تنظیم شده باشد اما هیچ منبعی از موارد بالا آن نگاشت را ایجاد نکند، booster عبارت زیر را چاپ می‌کند:

root=/dev/mapper/<name> but no LUKS unlock spec was found for "<name>"

و سپس در مهلت زمانی سوار کردن متوقف می‌شود. یکی از دستورالعمل‌های بازگشایی بالا را اضافه کرده و مجدداً ایمیج را بسازید.

ابزار Booster از بازگشایی حجم‌های ذخیره‌سازی LUKS تعریف‌شده در /etc/crypttab پشتیبانی می‌کند (به crypttab(5) در https://man7.org/linux/man-pages/man5/crypttab.5.html مراجعه کنید). تنها مدخل‌هایی که با گزینه x-initrd.attach نشانه‌گذاری شده‌اند، در زمان ساخت ایمیج درون initramfs قرار می‌گیرند. تولیدکننده باید بتواند فایل را بخواند — برنامه را به عنوان کاربر ریشه (root) اجرا کنید، یا با پارامتر --crypttab <path> مسیری به یک نسخه قابل خواندن توسط کاربر به آن بدهید.

هنگامی که هر دو پارامتر خط فرمان rd.luks.* و مدخل crypttab به یک دستگاه اشاره دارند، پارامترهای خط فرمان برای ارجاع به دستگاه، نام نگاشت و هر گزینه امنیتی (مانند keyfile، header، tries، token-timeout و غیره) که صراحتاً تعیین شده است اولویت دارند؛ مدخل crypttab تنها گزینه‌هایی را فراهم می‌کند که خط فرمان بدون مقدار گذاشته است. مدخل‌های crypttab برای دستگاه‌هایی که با rd.luks.* پوشش داده نشده‌اند، به عنوان نگاشت‌های تازه اضافه می‌شوند.

رفتارهای ویژه Booster برای برخی گزینه‌های برگزیده:

  • keyfile /path:UUID=xxx (یا LABEL=، PARTUUID=، PARTLABEL=) — فایل کلید روی دستگاهی جداگانه. Booster دستگاه را هنگام راه‌اندازی به صورت فقط‌خواندنی سوار می‌کند، کلید را می‌خواند، و سپس آن را پیاده‌سازی می‌کند. این فایل درون initramfs گنجانده نمی‌شود.
  • header= — چنانچه مسیر یک مسیر مطلق ساده باشد، تولیدکننده فایل را به طور خودکار درون initramfs بسته‌بندی می‌کند. قالب /path:deviceref دستگاه را هنگام راه‌اندازی سوار می‌کند؛ قالب /dev/... از دستگاه بلوکی خام مستقیماً استفاده می‌کند.
  • fido2-device= — هنگامی که این گزینه در یک مدخل crypttab ظاهر شود، تولیدکننده به طور خودکار ماژول fido2plugin.so را درون ایمیج قرار می‌دهد؛ نیازی به تعیین enable_fido2: true در فایل پیکربندی نیست. هر دو گزینه fido2-device= و tpm2-device= در غیر این صورت صرفاً برای سازگاری پذیرفته می‌شوند؛ booster توکن‌های ثبت‌شده را از سرایند LUKS2 شناسایی می‌کند، نه از مقدار گزینه crypttab.
  • keyfile-timeout= / token-timeout= — یک عدد صحیح ساده (به ثانیه) یا هر رشته بازه زمانی پذیرفته‌شده توسط تابع time.ParseDuration در زبان Go (مانند 30s، 2m) را می‌پذیرند.

ابزار Booster می‌تواند قفل حجم‌های LUKS را در مراحل نخست راه‌اندازی از طریق یک کلاینت SSH راه دور بازگشایی کند. کارگزار SSH به محض برقراری شبکه (دریافت اجاره DHCP یا پیکربندی ip ایستا) آغاز به کار کرده و از کلاینت متصل‌شده درخواست گذرواژه LUKS می‌کند. گذرواژه ارسالی برای تمام دستگاه‌های LUKS که در انتظار دریافت ورودی صفحه‌کلید هستند هم‌رسانی می‌شود؛ یک بازگشایی موفق حافظه پنهان گذرواژه درون راه‌اندازی را مقداردهی اولیه می‌کند تا حجم‌های همتا با کلید یکسان بدون نیاز به درخواست مجدد باز شوند. این قابلیت معادل ساختار dropbear-initramfs در دبیان است ولی به صورت محلی در booster وجود دارد — به جای بسته‌بندی dropbear از کتابخانه golang.org/x/crypto/ssh زبان Go بهره می‌گیرد.

تولید یک کلید میزبان برای یک‌بار (روی میزبان نگهداری شده و در زمان ساخت درون ایمیج تعبیه می‌شود):

$ ssh-keygen -t ed25519 -f /etc/booster/ssh_host_ed25519_key -N ''

ساخت فایل authorized_keys شامل یک یا چند کلید عمومی، در هر سطر یک کلید:

ssh-ed25519 AAAAC3Nz...user1@laptop
ssh-ed25519 AAAAC3Nz...user2@phone

پیوند هر دو فایل در /etc/booster.yaml:

network:
  dhcp: on
  ssh_host_key: /etc/booster/ssh_host_ed25519_key
  ssh_authorized_keys: /etc/booster/authorized_keys
  ssh_listen: :22

هر دو پارامتر ssh_host_key و ssh_authorized_keys در زمان ساخت ایمیج خوانده شده و درون initramfs جاسازی می‌شوند؛ تعیین یکی بدون دیگری خطای پیکربندی است. استفاده از SSH همچنین نیازمند network.dhcp: true یا تعیین network.ip ایستا است.

اتصال به عنوان کاربر root از سمت کلاینت و وارد کردن گذرواژه در خط فرمان:

$ ssh -p 22 root@<host>

نکات امنیتی:

  • احراز هویت تنها با کلید عمومی (Pubkey)؛ احراز هویت با گذرواژه پشتیبانی نمی‌شود. تلاش‌های هر نشست به ۱۰ بار ارسال نادرست محدود شده و پس از آن اتصال قطع می‌شود؛ خود دست‌تکانی SSH باید ظرف ۱۵ ثانیه پایان یابد (محافظت در برابر حمله slow-loris).
  • کلید خصوصی میزبان و کلیدهای ثبت‌شده در authorized_keys در زمان ساخت ایمیج خوانده شده و درون initramfs تعبیه می‌شوند. هر فردی که دسترسی خواندن به /boot (یا فایل ایمیج) را داشته باشد می‌تواند هر دو را استخراج کند. هرگاه دسترسی نامطمئن به /boot رخ داد، آن‌ها را افشا‌شده فرض کنید؛ برای بازتولید و تعویض کلید میزبان ایمیج را مجدداً بسازید.
  • اثر انگشت (fingerprint) کلید میزبان در راه‌اندازی‌های مجدد پایدار می‌ماند (تولید مجدد خودکار ندارد)، بنابراین فایل known_hosts دگرگون نمی‌شود.
  • دسترسی به پورت SSH به همراه نسخه‌ای سرقت‌شده از هر کلید خصوصی موجود در authorized_keys، برای مهاجم جهت آزمودن مکرر گذرواژه‌های LUKS روی سرور زنده کافی است. اگرچه پس از ۱۰ بار ارسال نادرست نشست قطع می‌شود، اما هیچ مانعی برای اتصال دوباره و آزمودن ۱۰ بار دیگر توسط مهاجم وجود ندارد. این سقف تنها سرعت حمله جستجوی فراگیر (brute force) را کاهش می‌دهد و مانع آن نمی‌شود — هر کسی که بتواند به پورت SSH دسترسی پیدا کند در موقعیتی تقریباً مشابه دسترسی مستقیم به اسلات کلید LUKS قرار دارد.
  • تنظیم ssh_listen: :22 روی تمام رابط‌های شبکه‌ای که هنگام راه‌اندازی بالا می‌آیند، هم روی IPv4 و هم روی IPv6 گوش فرا می‌دهد — از جمله آدرس‌های پیوند-محلی IPv6 (fe80::...) که بدون نیاز به DHCP پیکربندی خودکار می‌شوند. برای اینکه تنها رابطی که واقعاً مد نظر دارید در دسترس باشد، مقدار ssh_listen را روی یک آدرس مشخص (مانند 10.0.0.5:22) قفل کنید و پورت را در مرز شبکه با دیوار آتش محافظت نمایید.
  • نشست تنها به اعلان ورود گذرواژه محدود است — بدون شل، بدون اجرای دستور، بدون فوروارد پورت، بدون PAM و بدون تخصیص PTY.

ارجاع به دستگاه روشی برای مشخص کردن یک دستگاه یا افراز در پارامترهای هسته است. در بالا با برچسب $deviceref مشخص شده است. ارجاع به دستگاه یکی از مقادیر زیر را می‌پذیرد:

  • /dev/XXX مسیر به پرونده دستگاه مشخص؛ می‌تواند مسیری به یک دستگاه/افراز واقعی مانند /dev/sda1، /dev/nvme0n1 یا مسیری به دستگاه مجازی dm-mapper مانند /dev/mapper/root یا /dev/vg_mesos/lv_mesos_containers باشد.
  • UUID=$UUID یا /dev/disk/by-uuid/$UUID به دستگاه از طریق UUID سیستم‌فایل/LUKS آن ارجاع می‌دهد. نکات مربوط به قواعد قالب‌بندی UUID را در زیر ببینید.
  • LABEL=$LABEL یا /dev/disk/by-label/$LABEL به دستگاه از طریق برچسب سیستم‌فایل/LUKS آن ارجاع می‌دهد.
  • PARTUUID=$UUID یا /dev/disk/by-partuuid/$UUID به دستگاه از طریق UUID افراز GPT ارجاع می‌دهد.
  • PARTUUID=$UUID/PARTNROFF=$OFFSET به دستگاه با انحراف $OFFSET از یک افراز GPT مشخص‌شده توسط $UUID ارجاع می‌دهد؛ مانند PARTUUID=fd59d06d-ffa8-473b-94f0-6584cb2b6665/PARTNROFF=2.
  • PARTLABEL=$LABEL یا /dev/disk/by-partlabel/$LABEL به دستگاه از طریق برچسب افراز GPT ارجاع می‌دهد.
  • HWPATH=$PATH یا /dev/disk/by-path/$PATH به دستگاه از طریق مسیر سخت‌افزاری قطعی ارجاع می‌دهد؛ مانند pci-0000:02:00.0-nvme-1-part2.
  • WWID=$ID یا /dev/disk/by-id/$ID به دستگاه از طریق wwid آن ارجاع می‌دهد؛ مانند nvme-KXG6AZNV256G_TOSHIBA_40SA13GZF6B1-part3

پارامترهای راه‌اندازی مانند root=UUID=$UUID و rd.luks.uuid=$UUID به شما امکان می‌دهند دستگاه بلوکی را با UUID آن مشخص کنید. قالب UUID به‌صورت xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx است که در آن x نمادی در مبنای شانزده به‌شکل حروف کوچک یا بزرگ است. پارامتر UUID را می‌توان به‌صورت اختیاری در نشان نقل‌قول " قرار داد، هرچند پیشنهاد نمی‌شود. نمونه‌های زیر قالب درست پارامترها را نشان می‌دهند: root=UUID=ac8299a8-91ce-4bf6-a524-55a62844b787، root=UUID="ac8299a8-91ce-4bf6-a524-55a62844b787" (پیشنهاد نمی‌شود)، rd.luks.uuid=ac8299a8-91ce-4bf6-a524-55a62844b787، rd.luks.uuid="ac8299a8-91ce-4bf6-a524-55a62844b787" (پیشنهاد نمی‌شود).

کلیدهای ویرایشی فراتر از استاندارد:

  • Ctrl+W — پاک کردن واژه پیشین.
  • Ctrl+U — پاک کردن تمام ورودی.
  • Tab — تغییر وضعیت نمایانی نویسه‌های تایپ‌شده (ستاره‌ها ↔ نویسه‌های واقعی).

Booster مسیرهای قفل‌گشایی LUKS را برای هر حجم به‌صورت همگام اجرا می‌کند — توکن‌های ثبت‌شدهٔ چندگانه در صورت امکان به‌طور موازی فراخوانده می‌شوند، و اعلان دریافت عبارت‌عبور از صفحه‌کلید در کنار آن‌ها به‌عنوان راهکار پشتیبان اجرا می‌شود. این زیربخش، ترتیب قطعی و رفتار لغو-پس-از-موفقیت (cancel-on-win) را که این موارد را به هم پیوند می‌دهد، خلاصه می‌کند.

PIN-token serialization. توکن‌هایی که به پین نیاز دارند (TPM2-PIN، FIDO2-PIN) به‌صورت ترتیبی و به ترتیب صعودی شناسه توکن LUKS2 اعلان می‌شوند — بوستر هرگز دو اعلان پین را برای یک صفحه‌کلید هم‌زمان به رقابت نمی‌اندازد. توکن‌هایی که نیازی به پین ندارند (تنها TPM2 PCR، و FIDO2 بدون لمس) به‌طور موازی فرستاده می‌شوند و می‌توانند بدون نیاز به تعامل کاربر در این رقابت پیروز شوند. برای پیش‌نمایش ترتیب اعلان پین در یک حجم، دستور cryptsetup luksDump <device> را اجرا کرده و شناسه‌های توکن را بررسی کنید.

FIDO2 credential pre-flight. هنگامی که چندین توکن FIDO2 برای یک حجم LUKS ثبت شده باشد (برای نمونه یک کلید اصلی و یک پشتیبان)، بوستر پیش از درخواست پین، دستگاه منطبق را شناسایی می‌کند. بوستر یک ادعای CTAP2 با up=false در برابر هر hidraw با قابلیت FIDO2 اجرا می‌کند و از اصالت‌سنج می‌پرسد آیا اعتبارنامه این حجم را در خود دارد یا خیر — دستگاه‌هایی که آن را ندارند بی‌صدا نادیده گرفته می‌شوند و توزیع‌کننده بدون درخواست پین برای کلید نادرست، به توکن بعدی FIDO2 (یا روش قفل‌گشایی بعدی) می‌رود. توکن‌هایی که با fido2-uv-required=true ثبت شده‌اند از مرحله پیش‌بررسی عبور می‌کنند (مطابق CTAP 2.1 §7.4) و مستقیماً به سراغ ادعای کامل می‌روند.

Cancel-on-win. هر اعلانی — عبارت‌عبور صفحه‌کلید، FIDO2-PIN، یا TPM2-PIN — هنگامی که یکی از مسیرهای قفل‌گشایی موازی پیروز شود (یک توکن بدون لمس کار را به پایان برساند، پرونده‌کلید حجم همتا با موفقیت خوانده شود، و غیره) به‌طور خودکار بسته می‌شود. این موضوع هم بر کنسول هسته و هم بر صفحه بارگذاری Plymouth اعمال می‌گردد. در Plymouth به‌محض دریافت Plymouth MR !393 اعلان روی صفحه بلافاصله در سمت سرور پاک می‌شود؛ ساخت‌های قدیمی‌تر Plymouth اعلان را در سمت سرور آزاد می‌کنند اما رابط کاربری آن را تا زمانی که صفحه بارگذاری به‌طریق دیگری پاک شود بر روی صفحه نگه می‌دارند.

PIN attempt caps. هر توکن دارای پین تا ۳ بار تلاش را می‌پذیرد؛ ارسال یک پین خالی (تنها فشردن کلید Enter) باعث رد شدن از توکن و فراخوانی توکن بعدی می‌شود.

این یادداشتی برای خلاصه‌سازی الگوریتمی است که مشخص می‌کند چه پودمان‌هایی در تصویر نهایی booster قرار می‌گیرند. فهرست اولیه پودمان‌ها برای booster عبارت است از defaultModulesList - مجموعه‌ای از پودمان‌های از پیش تعریف‌شده و سخت‌کدشده در generator.go. این‌ها پودمان‌های برگزیده‌ای هستند که به احتمال زیاد بیشتر نیازهای راه‌اندازی سیستم را پوشش می‌دهند - راه‌اندازهای دیسک، سیستم‌فایل، صفحه‌کلید، tpm، اترنت و usb.

اگر گزینه پیکربندی universal روی false تنظیم شده باشد (مقدار پیش‌فرض)، اصطلاحاً از حالت میزبان (host mode) استفاده می‌شود؛ یعنی تصویر تنها با راه‌اندازهای موردنیاز سخت‌افزار میزبان کنونی تولید می‌شود. برای دستیابی به این هدف، booster تمام پودمان‌های بارگذاری‌شده کنونی را از /sys/module/ دریافت کرده و اشتراک آن‌ها را با defaultModulesList محاسبه می‌کند.

سپس booster به گزینه پیکربندی modules نگاه می‌کند که فهرستی از عناصر جداشده با کاما است. این ابزار تمام عناصر را از چپ به راست پیمایش می‌کند. قاعده پالایش حالت میزبان بر این فهرست پودمان‌های دستی اعمال نمی‌شود.

اگر عنصر با علامت منفی - آغاز شود، پودمان‌های داده‌شده را از تصویر حذف می‌کند، در غیر این صورت پودمان‌ها به تصویر افزوده می‌شوند.

اگر عنصر نام یک پودمان باشد، آن پودمان افزوده/حذف می‌شود. توجه داشته باشید که طبق قرارداد، نام یک پودمان هسته را می‌توان از روی نام پرونده آن با جایگزین کردن خط فاصله‌ها با زیرخط به دست آورد؛ برای نمونه، برای پودمان hid-apple.ko.gz نام به‌صورت hid_apple خواهد بود.

اگر عنصر مسیری به پرونده پودمان نسبت به /usr/lib/modules/$KERNEL_VERSION باشد، پودمان افزوده/حذف می‌شود. توجه داشته باشید که پسوند الگوریتم فشرده‌سازی را می‌توان از نام پرونده پودمان حذف کرد.

اگر عنصر با نماد اسلش / پایان یابد، پوشه‌ای نسبت به /usr/lib/modules/$KERNEL_VERSION در نظر گرفته می‌شود. Booster این پوشه را به‌صورت بازگشتی پیمایش کرده و پودمان‌ها را به تصویر می‌افزاید/حذف می‌کند. از علامت منفی نیز می‌توان برای پوشه‌ها استفاده کرد.

نماد ستاره * میان‌بری برای «همه پودمان‌ها» است و می‌توان از آن برای افزودن یا حذف همه پودمان‌ها از تصویر استفاده کرد.

سپس booster به سراغ گزینه modules_force_load می‌رود که شامل نام پودمان‌هایی برای بارگذاری هنگام راه‌اندازی سیستم است. همه این پودمان‌ها نیز به تصویر اضافه می‌شوند.

در گام پایانی، booster گراف‌های وابستگی میان پودمان‌ها و همه وابستگی‌های موردنیاز را محاسبه می‌کند. برای نمونه اگر کاربر ext4 را به‌طور دستی افزوده باشد و سامانه ساخت هسته اعلام کند که پودمان ext به mbcache و jbd2 نیاز دارد، هر دوی mbcache و jbd2 به‌طور خودکار به تصویر افزوده می‌شوند.

تصویر یکپارچه هسته https://uapi-group.org/specifications/specs/unified_kernel_image/ (موسوم به UKI) یک باینری در قالب PE است که اجزای گوناگون راه‌اندازی (مانند هسته، initrd و یک استاب بوت UEFI) را در قالب یک فایل اجرایی واحد بسته‌بندی می‌کند. این امر امکان بوت مستقیم از طریق سفت‌افزار (UEFI) و همچنین اعتبارسنجی هم‌زمان تمام اجزای بوت را برای بوت امن (Secure Boot) فراهم می‌سازد.

برای ساخت UKI در Booster، لطفاً سازنده UKI مربوط به systemd به نام systemd-ukify را از مدیر بسته توزیع خود نصب کرده و از /usr/lib/booster/regenerate_uki استفاده کنید. این یک اسکریپت کمکی است که همانند زمانی که booster را از طریق مدیر بسته نصب می‌کنید بازتولید تصویر را انجام داده و سپس نتیجه را به‌عنوان ورودی به تولیدکننده UKI در systemd (یعنی ukify) ارسال می‌کند. این اسکریپت تنها زیرمجموعه‌ای از اجزای بوت را ارسال می‌کند، به‌ویژه ریزکدهای سیستم، پرونده initrd، پرونده os-release، تصویر صفحه بارگذاری بوت و هسته. مدخل‌های خط فرمان هسته برای UKI از /etc/booster.yaml به ارث برده می‌شوند.

لطفاً توجه داشته باشید که برای بوت پیش‌فرض UKI، ممکن است لازم باشد پرونده(های) پیکربندی بوت‌لودر سیستم خود را مطابق با آن تنظیم کنید.

اگر با ابزار راه‌اندازی booster مشکلی دارید، می‌توانید حالت اشکال‌زدایی را فعال کنید تا از رخدادها اطلاعات بیشتری به دست آورید. کافی است پارامتر هسته booster.log=debug,console را بیفزایید تا booster گزارش‌های بیشتری ارائه دهد.

در صورت شکست در راه‌اندازی، هنگامی که دستگاه‌ها در دسترس نیستند، گزارش‌ها همچنان می‌توانند با استفاده از شبکه از طریق busybox دریافت شوند. نخست، یک سرور tftp (درگاه ۶۹) روی ماشین/ماشین‌مجازی دیگری برپا کنید؛ برای نمونه در آرچ‌لینوکس، pacman -S atftp; systemctl start atftpd. سپس، /etc/booster.yaml را ویرایش کرده و network support و busybox (extra_files: busybox) را اضافه کنید. initramfs را دوباره تولید کرده و سیستم را بازراه‌اندازی کنید. پس از ورود به busybox، گزارش‌ها را دریافت کرده و به سرور tftp بفرستید:

$ dmesg >boot.log
$ lsmod >mods.log
$ tftp -pl boot.log <server ip>
$ tftp -pl mods.log <server ip>

گزارش‌ها در سرور درون /srv/atftp خواهند بود.

اگر خطای booster: Timeout waiting for root filesystem را دریافت کردید، لطفاً پرچم پیکربندی append_all_modaliases را اضافه کرده و تصویر را بازسازی کنید. با این پرچم، فهرستی از پودمان‌هایی دریافت خواهید کرد که توسط هسته درخواست شده‌اند اما در تصویر booster وجود ندارند. ممکن است برخی از این پودمان‌ها برای راه‌اندازی سیستم شما ضروری باشند.

ساخت یک پرونده initramfs ویژه برای هسته/میزبان کنونی. پرونده خروجی booster.img است:

$ booster build booster.img

ساخت یک تصویر همگانی با پودمان‌های متعدد (شامل راه‌اندازهای SATA/TPM/NVME/...):

$ booster build --universal booster.img

ساخت یک initramfs برای نگارش هسته 5.4.91-1-lts و رونوشت آن در /boot/booster-lts.img:

$ booster build --kernel-version 5.4.91-1-lts /boot/booster-lts.img

این نمونه‌ای از پیکربندی systemd-boot است که در /boot/loader/entries/booster.conf نگهداری می‌شود. در این نمونه e122d09e-87a9-4b35-83f7-2592ef40cefa یک UUID برای افراز LUKS و 08684949-bcbb-47bb-1c17-089aaa59e17e یک UUID برای سیستم‌فایل رمزنگاری‌شده (مانند ext4) است. برای اطلاعات بیشتر درباره پیکربندی بوت‌لودر خود به مستندات آن مراجعه کنید.

title Linux with Booster
linux /vmlinuz-linux
initrd /booster-linux.img
options rd.luks.uuid=e122d09e-87a9-4b35-83f7-2592ef40cefa root=UUID=08684949-bcbb-47bb-1c17-089aaa59e17e rw

برای باز کردن قفل با توکن سخت‌افزاری توسط یک دستگاه FIDO2، شیار LUKS را یک‌بار با systemd-cryptenroll ثبت کنید:

$ systemd-cryptenroll --fido2-device=auto /dev/sda2

سپس یک مدخل در /etc/crypttab بیفزایید. Booster نام نگاشت‌کننده (mapper) را از ستون نخست برمی‌دارد؛ تولیدکننده هر جا fido2-device= را ببیند، fido2plugin.so را به‌طور خودکار ضمیمه می‌کند. گزینه token-timeout= مدت‌زمانی را که booster برای لمس FIDO2 پیش از باز کردن اعلان عبارت‌عبور صفحه‌کلید منتظر می‌ماند تعیین می‌کند (پیش‌فرض ۳۰ ثانیه؛ 0 برای همیشه منتظر می‌ماند):

cryptroot  UUID=e122d09e-87a9-4b35-83f7-2592ef40cefa  none  fido2-device=auto,token-timeout=60s,x-initrd.attach

مدخل بوت‌لودر، مقدار root= را به گره نگاشت‌کننده آینده اشاره می‌دهد:

title Linux with Booster
linux /vmlinuz-linux
initrd /booster-linux.img
options root=/dev/mapper/cryptroot rw

راه‌اندازی بدون هیچ پارامتر root= در خط فرمان هسته، با بهره‌گیری از شناسایی خودکار GPT. افراز ریشه را با GUID ویژه معماری نشانه‌گذاری کنید — در x86-64 این شناسه 4f68bce3-e8cd-4db1-96e7-fbcaf984b709 است:

$ sgdisk --typecode=2:4f68bce3-e8cd-4db1-96e7-fbcaf984b709 /dev/sda

برای یک ریشه رمزنگاری‌شده با LUKS، یک مدخل در /etc/crypttab اضافه کنید که نام نگاشت‌کننده را مشخص کند (در غیر این صورت booster نگاشت /dev/mapper/root را ایجاد می‌کند):

cryptroot  UUID=e122d09e-87a9-4b35-83f7-2592ef40cefa  none  x-initrd.attach

در این حالت، مدخل بوت‌لودر تنها حامل پرچم‌های مربوط به شیوه‌سوارکردن خواهد بود:

title Linux with Booster
linux /vmlinuz-linux
initrd /booster-linux.img
options rw

کاربرانی که از سیستم‌فایل Btrfs با سیستم نصب‌شده روی یک زیرحجم استفاده می‌کنند، باید rootflags متناظر با مدخل خود در /etc/fstab را اضافه کنند. در این نمونه، 69bc4dd2-7f6c-4821-aa6b-d80d9c97d470 شناسه UUID افراز Btrfs است که سیستم روی زیرحجمی با نام root نصب شده و /etc/fstab بدین شکل است:

UUID=69bc4dd2-7f6c-4821-aa6b-d80d9c97d470	/         	btrfs     	rw,relatime,autodefrag,compress=zstd:2,space_cache,subvol=root	0 0

بنابراین /boot/loader/entries/booster.conf باید به این صورت باشد:

title Linux with Booster
linux /vmlinuz-linux
initrd /booster-linux.img
options root=UUID=69bc4dd2-7f6c-4821-aa6b-d80d9c97d470 rw rootflags=relatime,autodefrag,compress=zstd:2,space_cache,subvol=root

ابزار Booster مقدار پیش‌فرضی درون‌ساخته برای زیرحجم Btrfs ندارد. اگر subvol= (یا subvolid=) درج نشود، هسته زیرحجم پیش‌فرض پیکربندی‌شده سیستم‌فایل را سوار می‌کند — که با btrfs subvolume set-default <id> <path> تعیین می‌شود — و اگر پیش‌فرضی تنظیم نشده باشد، به زیرحجم سطح‌بالا (شناسه ۵) بازمی‌گردد. قراردادهای توزیع‌ها مانند @ (در آرچ)، root (در برخی نصاب‌های برگرفته از دبیان)، یا @/.snapshots/N/snapshot (در openSUSE) باید به‌طور صریح در مدخل بوت‌لودر تنظیم شوند؛ هر دو قالب subvol=NAME و subvolid=ID پذیرفته می‌شوند.

ساخت یک تصویر یکپارچه هسته و نوشتن خروجی در /boot/EFI/Linux:

$ /usr/lib/booster/regenerate_uki build /boot/EFI/Linux

حق نشر Booster متعلق است به Anatol Pomazau (C) 2020 http://github.com/anatol

صفحه اصلی پروژه https://github.com/anatol/booster

June 2026