| SYSTEMD-SYSEXT(8) | systemd-sysext | SYSTEMD-SYSEXT(8) |
نام (NAME)
systemd-sysext, systemd-sysext.service, systemd-sysext-initrd.service, systemd-sysext-sysroot.service, systemd-confext, systemd-confext.service, systemd-confext-initrd.service, systemd-confext-sysroot.service - فعالسازی ایمیجهای افزونه سیستم
خلاصه دستور (SYNOPSIS)
systemd-sysext [OPTIONS...] COMMAND
systemd-sysext.service
systemd-confext [OPTIONS...] COMMAND
systemd-confext.service
توضیحات (DESCRIPTION)
systemd-sysext ایمیجهای افزونه سیستم را فعال/غیرفعال میکند. ایمیجهای افزونه سیستم ممکن است – بهطور پویا در زمان اجرا — سلسلهمراتب پوشههای /usr/ و /opt/ را با فایلهای اضافی گسترش دهند. این امر بهویژه در ایمیجهای سیستم تغییرناپذیر که در آنها سلسلهمراتب /usr/ و/یا /opt/ مستقر روی یک فایلسیستم فقطخواندنی باید بهطور موقت در زمان اجرا بدون ایجاد هرگونه تغییرات دائمی گسترش یابد، مفید است.
ایمیجهای افزونه سیستم باید حاوی فایلها و پوشههایی مشابه با ساختار درخت سیستمعامل معمولی باشند. هنگامی که یک یا چند ایمیج افزونه سیستم فعال میشوند، سلسلهمراتب /usr/ و /opt/ آنها از طریق "overlayfs" با همان سلسلهمراتب سیستمعامل میزبان ترکیب شده و سلسلهمراتب /usr/ و /opt/ میزبان با آن رونویسی و سوار میشوند ("ادغام"). هنگامی که غیرفعال میشوند، نقطه اتصال پیاده میشود — و مجدداً نسخه اصلی و دستنخورده سلسلهمراتب میزبان نمایان میگردد ("لغو ادغام"). بنابراین، ادغام باعث میشود منابع افزونه ناگهان زیر سلسلهمراتبهای /usr/ و /opt/ ظاهر شوند، گویی که در خود ایمیج پایه سیستمعامل گنجانده شده بودند. لغو ادغام باعث میشود آنها دوباره ناپدید شوند و تنها فایلهایی که به همراه خود ایمیج پایه سیستمعامل ارائه شده بودند بر جای بمانند.
فایلها و پوشههای موجود در ایمیجهای افزونه خارج از سلسلهمراتبهای /usr/ و /opt/ ادغام نمیشوند، و در نتیجه گنجاندن آنها در یک ایمیج افزونه سیستم هیچ اثری ندارد. بهویژه، فایلهای موجود در /etc/ و /var/ که در یک ایمیج افزونه سیستم گنجانده شدهاند، پس از فعالسازی در سلسلهمراتبهای مربوطه ظاهر نخواهند شد.
ایمیجهای افزونه سیستم بهطور پیشفرض کاملاً فقطخواندنی هستند. در فایلسیستمهای میزبان تغییرپذیر، سلسلهمراتبهای /usr/ و /opt/ هنگام ادغام افزونهها فقطخواندنی میشوند، مگر اینکه قابلیت تغییرپذیری فعال شده باشد. تغییرپذیری ممکن است از طریق گزینه --mutable= و گزینه Mutable= در فایل پیکربندی فعال شود؛ برای اطلاعات بیشتر بخش "تغییرپذیری" در ادامه را ببینید.
گزینههای مختلف دستور را میتوان بهصورت سراسری از طریق فایلهای پیکربندی تنظیم کرد. برای جزئیات بیشتر sysext.conf(5) را ببینید.
افزونههای سیستم قرار است صرفاً افزایشی باشند، یعنی فرض بر این است که فقط فایلهایی را شامل شوند که در ایمیج پایه زیرین سیستمعامل وجود ندارند. با این حال، سازوکار زیرین (overlayfs) امکان همپوشانی یا حذف فایلها را نیز فراهم میکند، اما توصیه میشود از این قابلیت استفاده نشود.
ایمیجهای افزونه سیستم را میتوان در قالبهای زیر ارائه کرد:
این قالبهای ایمیج همان مواردی هستند که systemd-nspawn(1) از طریق سوئیچهای --directory=/--image= خود پشتیبانی میکند و همچنین همانهایی هستند که مدیر سرویس از طریق RootDirectory=/RootImage= پشتیبانی مینماید. مشابه آنها، این ایمیجها میتوانند بهصورت اختیاری حاوی اطلاعات اعتبارسنجی Verity باشند.
افزونههای سیستم در پوشههای /etc/extensions/، /run/extensions/ و /var/lib/extensions/ جستجو میشوند. دو پوشه اول فهرستشده برای نگهداری ایمیجهای باینری حجیم مناسب نیستند، اما همچنان برای نگهداری پیوندهای نمادین به آنها مفید هستند. مکان اصلی برای نصب افزونههای سیستم /var/lib/extensions/ است. هر پوشه یافتشده در این پوشههای جستجو به عنوان ایمیجهای افزونه مبتنی بر پوشه در نظر گرفته میشود؛ هر فایلی با پسوند .raw به عنوان ایمیجهای افزونه مبتنی بر ایمیج دیسک در نظر گرفته میشود. هنگام فراخوانی در initrd، پوشه اضافی /.extra/sysext/ نیز در میان پوشههایی که برای یافتن ایمیجهای افزونه جستجو میشوند گنجانده میشود. با این حال توجه داشته باشید که بهطور پیشفرض یک سیاست ایمیج سختگیرانهتر بر ایمیجهای یافتشده در آنجا اعمال میشود، به توضیحات زیر مراجعه کنید. این پوشه توسط systemd-stub(7) با ایمیجهای افزونه یافتشده در پارتیشن سیستم EFI سیستم پر میشود.
در زمان بوت، ایمیجهای افزونه سیستم و پیکربندی در صورتی که سرویسهای systemd-sysext.service و systemd-confext.service فعال باشند، بهطور خودکار فعال میشوند. توجه داشته باشید که این سرویسها تنها پس از سوار شدن فایلسیستمهای زیرین که ممکن است افزونههای سیستم و پیکربندی در آنها قرار داشته باشند اجرا میشوند. برای امکانپذیر ساختن ارائه منابعی که توسط زیرسیستمهای در حال اجرا در نخستین مراحل بوت پردازش میشوند (برای نمونه، سرویسهای سیستم یا تعاریف systemd-sysusers(8))، سرویسهای initrd به نامهای systemd-sysext-sysroot.service و systemd-confext-sysroot.service ارائه شدهاند. در حال حاضر، هنگامی که پارتیشن /var/ مجزا باشد، نمیتوان از این سرویسها برای ادغام افزونههای سیستم از /sysroot/var/lib/extensions/ و افزونههای پیکربندی از /sysroot/var/lib/confexts/ استفاده کرد. این افزونهها بعداً توسط سرویسهای systemd-sysext.service و systemd-confext.service در طول فرآیند بوت اصلی سیستمعامل ادغام میشوند.
همچنین، صفحه سرویسهای قابلحمل[2] را برای یک سازوکار ساده جهت ارائه سرویسهای سیستم در ایمیجهای دیسک، به شیوهای مشابه با افزونههای سیستمعامل ببینید. به تفاوتهای ایزولهسازی میان این دو سازوکار توجه کنید: در حالی که افزونههای سیستم مستقیماً ایمیج سیستمعامل زیرین را با فایلهای اضافی گسترش میدهند که گویی در خود ایمیج سیستمعامل ارائه شدهاند و بنابراین هیچگونه ایزولهسازی امنیتی را در بر ندارند، سرویسهای قابلحمل به یک شیوه یا شیوه دیگر ایزولهسازی در سطح سرویس را اعمال میکنند.
تضمین میشود که سرویسهای systemd-sysext.service و systemd-confext.service پیش از رسیدن به basic.target راهاندازی خود را به پایان برسانند؛ یعنی زمانی که سرویسهای معمولی مقداردهی اولیه میشوند (آنهایی که از DefaultDependencies=no استفاده نمیکنند)، فایلها و پوشههای ارائهشده توسط افزونههای سیستم و پیکربندی در /usr/، /opt/، و /etc/ در دسترس بوده و قابل دسترسی هستند.
افزونههای سیستم و پیکربندی را میتوان برای گسترش initrd نیز به کار برد، و سرویسهای initrd شامل systemd-sysext-initrd.service و systemd-confext-initrd.service بدین منظور ارائه شدهاند. توجه داشته باشید که برخی محدودیتها اعمال میشوند: منابعی که در نخستین مراحل بوت initrd استفاده میشوند (مانند سرویسهای سیستم) قابل بهروزرسانی نیستند.
توجه داشته باشید که مفهومی به عنوان فعال/غیرفعالسازی ایمیجهای افزونه سیستم نصبشده وجود ندارد: تمام ایمیجهای افزونه نصبشده بهطور خودکار در زمان بوت فعال میشوند. با این حال، میتوانید یک پوشه خالی با نامی مشابه افزونه (بدون .raw) در /etc/extensions/ قرار دهید تا افزونهای با همان نام را در یک پوشه سیستمی با اولویت پایینتر "ماسک" (پنهان/غیرفعال) کنید. همچنین میتوان با استفاده از گزینههای خط فرمان کرنل شامل rd.systemd.sysext=، rd.systemd.confext=، systemd.sysext= و systemd.confext= ادغام خودکار را بهطور کلی غیرفعال کرد. توجه داشته باشید که systemd-sysext-sysroot.service و systemd-confext-sysroot.service توسط گزینههای systemd.sysext= و systemd.confext= کنترل میشوند، زیرا این سرویسها افزونههای سیستم و پیکربندی را برای سیستم اصلی ادغام میکنند، نه برای initrd.
یک سازوکار ساده برای سازگاری نسخه اعمال میشود: یک ایمیج افزونه سیستم باید حاوی یک فایل /usr/lib/extension-release.d/extension-release.NAME باشد که باید با نام ایمیج آن مطابقت داشته باشد و با فایل os-release میزبان مقایسه میشود: فیلدهای ID= موجود در آنها باید مطابقت داشته باشند مگر اینکه برای افزونه مقدار "_any" تنظیم شده باشد. اگر ID= افزونه برابر با "_any" نباشد، فیلد SYSEXT_LEVEL= (در صورت تعریف) باید مطابقت داشته باشد. اگر مورد اخیر تعریف نشده باشد، در عوض فیلد VERSION_ID= باید مطابقت داشته باشد. اگر افزونه فیلد ARCHITECTURE= را تعریف کند و مقدار آن "_any" نباشد، باید با معماری کرنل که توسط uname(2) گزارش میشود مطابقت داشته باشد، اما شناسههای معماری استفادهشده همان مواردی هستند که برای ConditionArchitecture= در systemd.unit(5) شرح داده شدهاند. اگر افزونه پس از اعمال نیازمند بازخوانی مدیر سرویس باشد، EXTENSION_RELOAD_MANAGER= میتواند روی 1 تنظیم شود. توجه داشته باشید که به دلایلی که پیشتر ذکر شد، سرویسهای قابلحمل[2] همچنان روش پیشنهادی برای ارائه سرویسهای سیستم باقی میمانند. افزونههای سیستم نباید فایل /usr/lib/os-release را همراه داشته باشند (زیرا با درخت /usr/ میزبان ادغام خواهد شد و دادههای نسخه سیستمعامل میزبان را رونویسی میکند که مطلوب نیست). فایل extension-release از همان قالب و معناشناسی پیروی میکند و حاوی همان محتوایی است که فایل os-release سیستمعامل دارد، اما منابع موجود در ایمیج افزونه را توصیف میکند.
مفهوم systemd-confext از همان اصول عملکرد systemd-sysext(8) پیروی میکند اما به جای کار روی /usr و /opt، ابزار confext فقط /etc را گسترش میدهد. فایلها و پوشههای موجود در ایمیجهای confext خارج از سلسلهمراتب /etc/ ادغام نمیشوند، و بنابراین هنگام گنجانده شدن در ایمیج هیچ تاثیری ندارند. قالبهای این ایمیجها مشابه ایمیجهای sysext است. سلسلهمراتب ادغامشده با پرچم "nosuid" و (در صورتی که از طریق --noexec=false غیرفعال نشده باشد) با پرچم "noexec" سوار خواهد شد.
دقیقاً مانند sysextها، confextها نیز بهطور پیشفرض کاملاً فقطخواندنی هستند. ادغام confextها روی فایلسیستمهای میزبان تغییرپذیر باعث میشود /etc/ به حالت فقطخواندنی درآید. همانند sysextها، تغییرپذیری را میتوان از طریق گزینه --mutable= فعال کرد. برای اطلاعات بیشتر به بخش "تغییرپذیری" در زیر مراجعه کنید.
افزونههای پیکربندی در پوشههای /run/confexts/، /var/lib/confexts/، /usr/lib/confexts/ و /usr/local/lib/confexts/ جستجو میشوند. پوشه نخست فهرستشده برای نگهداری ایمیجهای باینری حجیم مناسب نیست، اما همچنان برای نگهداری پیوندهای نمادین به آنها مفید است. مکان اصلی برای نصب افزونههای پیکربندی /var/lib/confexts/ است. هر پوشه یافتشده در این پوشههای جستجو به عنوان ایمیجهای confext مبتنی بر پوشه در نظر گرفته میشود؛ هر فایلی با پسوند .raw به عنوان ایمیجهای confext مبتنی بر ایمیج دیسک در نظر گرفته میشود.
مجدداً، دقیقاً مانند ایمیجهای sysext، ایمیجهای confext نیز حاوی یک فایل /etc/extension-release.d/extension-release.NAME خواهند بود که باید با نام ایمیج مطابقت داشته باشد (با راه فرار معمول ویژگی تعمیمیافته user.extension-release.strict در xattr(7))، و باز هم محتوای آن یک یا چند مورد از ID=، VERSION_ID= و CONFEXT_LEVEL است. سپس ایمیجهای confext در برابر لایه پایه سیستمعامل بررسی و تطبیق داده میشوند.
کاربردها (USES)
مهمترین مورد کاربرد برای ایمیجهای سیستم، محیطهای تغییرناپذیر هستند که در آنها ابزارهای اشکالزدایی و توسعه باید بهصورت اختیاری در دسترس قرار گیرند، اما در خود ایمیج پایه تغییرناپذیر سیستمعامل گنجانده نشوند (برای نمونه strace(1) و gdb(1) باید یک افزونه با قابلیت نصب اختیاری باشند تا اشکالزدایی/توسعه آسانتر شود). ایمیجهای افزونه سیستم نباید به عنوان یک چارچوب عمومی بستهبندی نرمافزار اشتباه گرفته شوند، زیرا هیچ ساختار وابستگی در دسترس نیست: افزونههای سیستم باید تمام فایلهای مورد نیاز خود را به همراه داشته باشند، به جز مواردی که قبلاً در ایمیج سیستم میزبان زیرین ارائه شدهاند. معمولاً ایمیجهای افزونه سیستم همزمان با ایمیج پایه سیستمعامل — در همان سیستم ساخت — ایجاد میشوند.
یکی دیگر از موارد کاربرد برای مفهوم افزونه سیستم، جایگزینی موقت منابع ارائهشده توسط سیستمعامل با منابع جدیدتر است، برای نمونه نصب نسخه توسعه کامپایلشده محلی از یک مؤلفه سطح پایین روی ایمیج سیستمعامل تغییرناپذیر بدون نیاز به ساخت مجدد کامل سیستمعامل یا تغییر ایمیج اسماً تغییرناپذیر. (برای مثال "نصب" یک بسته ساختهشده محلی با DESTDIR=/var/lib/extensions/mytest make install && systemd-sysext refresh، که آن را در /usr/ در دسترس قرار میدهد گویی در خود ایمیج سیستمعامل نصب شده است.) این حالت فارغ از اینکه /usr/ میزبان زیرین به عنوان یک ایمیج دیسک تغییرناپذیر مدیریت میشود یا یک درخت سنتی تحت کنترل مدیر بسته (یعنی قابل نوشتن) است، کار میکند.
با systemd-confext میتوان پیکربندی مجدد سرویسهای سیستمعامل را در زمان اجرا انجام داد. گاهی اوقات نیاز است که مقادیر برخی پارامترهای پیکربندی تعویض شوند یا فقط یک سرویس خاص بدون استقرار کد جدید یا استقرار کامل سیستمعامل مجدداً راهاندازی شود. به عبارت دیگر، ما میخواهیم بتوانیم گزینههای با بیشترین بسامد پیکربندی را به پرچمهای قابلبهروزرسانی در زمان اجرا که میتوانند بدون راهاندازی مجدد سیستم تغییر یابند، متصل کنیم. این کار به کاهش زمانهای سرویسدهی هنگام نیاز به تغییر پیکربندی سیستمعامل کمک خواهد کرد. همچنین این ابزار یک ابزار قابلاعتماد برای مدیریت پیکربندی فراهم میکند زیرا هنگام حذف ایمیج systemd-confext تمام فایلهای پیکربندی قدیمی ناپدید میشوند.
تغییرپذیری (MUTABILITY)
بهطور پیشفرض، ادغام افزونههای سیستم روی فایلسیستمهای میزبان تغییرپذیر باعث میشود سلسلهمراتبهای /usr/ و /opt/ فقطخواندنی شوند. ادغام افزونههای پیکربندی نیز همین اثر را بر /etc/ خواهد داشت. حالت تغییرپذیر امکان نوشتن در این مکانها را هنگام ادغام افزونهها فراهم میکند.
حالتهای زیر پشتیبانی میشوند:
برای تعیین حالتها با استفاده از گزینه خط فرمان --mutable= به بخش "گزینهها" در ادامه مراجعه کنید.
به استثنای حالت ephemeral، حالت تغییرپذیر عملیات نوشتن را به زیرپوشههای موجود در /var/lib/extensions.mutable/ هدایت میکند.
اگر usr/، opt/ یا etc/ در /var/lib/extensions.mutable/ پیوندهای نمادین باشند، در این صورت عملیات نوشتن به مقصدهای این پیوندها هدایت میشود. در نتیجه، برای حفظ تغییرپذیری یک فایلسیستم میزبان، پیوندهای نمادین زیر را ایجاد کنید:
همچنین، یک فایلسیستم موقت را میتوان در /var/lib/extensions.mutable/ سوار کرد، یا پیوندهای نمادین در /var/lib/extensions.mutable/ میتوانند به زیرپوشههایی در یک فایلسیستم موقت (برای نمونه زیر /tmp/) اشاره کنند تا فقط تغییرات موقت مجاز باشد. توجه داشته باشید که این با حالت ephemeral یکسان نیست، زیرا فایلسیستم موقت پس از لغو ادغام همچنان وجود خواهد داشت.
افزودهشده در نسخه 256.
فرمانها (COMMANDS)
فرمانهای زیر توسط هر دو مفهوم sysext و confext درک میشوند:
status
افزودهشده در نسخه 248.
merge
افزودهشده در نسخه 248.
unmerge
افزودهشده در نسخه 248.
refresh
افزودهشده در نسخه 248.
list
افزودهشده در نسخه 248.
-h, --help
--version
گزینهها (OPTIONS)
--root=
افزودهشده در نسخه 248.
--force
افزودهشده در نسخه 248.
--always-refresh=yes|no
افزودهشده در نسخه 260.
--image-policy=policy
افزودهشده در نسخه 254.
--mutable=BOOL|auto|import|ephemeral|ephemeral-import|help
no
افزودهشده در نسخه 256.
auto
افزودهشده در نسخه 256.
yes
افزودهشده در نسخه 256.
import
افزودهشده در نسخه 256.
ephemeral
افزودهشده در نسخه 256.
ephemeral-import
افزودهشده در نسخه 256.
help
افزودهشده در نسخه 259.
افزودهشده در نسخه 256.
--noexec=BOOL
افزودهشده در نسخه 254.
--no-reload
افزودهشده در نسخه 255.
--no-pager
--no-legend
--json=MODE
وضعیت خروج (EXIT STATUS)
در صورت موفقیت، 0 برگردانده میشود.
همچنین ببینید (SEE ALSO)
systemd(1), sysext.conf(5), systemd-nspawn(1), systemd-stub(7), importctl(1)
یادداشتها (NOTES)
- 1.
- مشخصات پارتیشنهای قابلشناسایی UAPI.2
- 2.
- سرویسهای قابلحمل
| systemd 261.2 |