سلام. dinit ۰.۱۶.۰ منتشر شد! این نسخه شامل ویژگی های جدید و رفع اشکال های فراوان می‌شود.
dinit یک init (اطلاعات بیشتر: https://fa.wikipedia.org/wiki/Init و https://wiki.ubuntu.ir/wiki/Init) و یک مدیر خدمات برای سامانه یونیکس مانند است. dinit بر این اصل طراحی شده تا به جای ساخت یک قطعه (بلاک) اولیه سامانه، با برنامه های موجود تعامل کند و با آنها کار کند. سکوی هدف dinit تمام سامانه های مبتنی بر POSIX است که شامل سامانه های مبتنی بر لینوکس و بسیاری از BSD ها می‌شود.
همچنین خوش حالم که اعلام کنم این آخرین نسخه آزمایشی زودرس dinit است و نسخه های بعدی آزمایشی هستند. این یعنی dinit به پایداری نسبی رسیده و تاحدی برای استفاده در زندگی روزمره مناسب است. بسیاری از ویژگی ها پیاده سازی شدند و بسیاری از ایرادت نیز کشف و حل شده اند اما هم چنان ممکن است ایرادات یا کمبود هایی داشته باشد.

چه چیز هایی تغییر کرده؟
در این نسخه:

– روابط after و before اضافه شده است. حالا سرویس ها می‌توانند از این روابط استفاده کنند. خاصیت after و before این است که وابستگی صریحی ایجاد نمی‌کنند یعنی اگر سرویس a، after = b است، a برای راه اندازی خودش نیازی به b ندارد اما اگر b همزمان با a در حال فعال شدن بود، init باید ابتدا b را راه اندازی کرده و سپس a را راه اندازی کند. before دقیقا برعکس این مسئله است.

– دستور restart در dinitctl با پرچم –force حالا تمام وابستگی های سخت را restart می‌کند. در گذشته اگر نیازمندی سختی وجود داشت، restart شکست می‌خورد.

– dinit پرچم جدیدی به نام -t یا –service دارد. این پرچم به dinit می‌گویید آرگومان بعدی حتما نام یک سرویس است که باید به عنوان سرویس اول فعال شود. در گذشته dinit این عملکرد را بدون پرچم خاصی، زمانی که به عنوان PID1 نبود یا در سامانه ای بدون کرنل لینوکس اجرا می‌شد پشتیبانی می‌کرد (و می‌کند) اما به سبب یکسری باگ های کرنل لینوکس در گذشته[1]، این عملکرد غیرفعال شده بود. حالا این پرچم این مسئله را حل می‌کند.
برای استفاده از آن فقط کافی است که در Bootloader commandline تان انتهای خط linux بنویسید:

-t tty1 -t tty2 -t tty3

این دستور حالا سرویس های tty ۱ تا ۳ را به عنوان سرویس اول فعال می‌کند. راستی همان طور که دیدید می‌توان از چند -t یا –service استفاده کرد.

– پرچم -r اضافه شده است. در گذشته dinit از مکانیسم اعلانات s6 (https://skarnet.org/software/s6/notifywhenup.html) پشتیانی می‌کرد. حالا dinit با این پرچم جدید می‌تواند این اعلانات را به جای نوشتن در pipefd در یک پرونده‌ی توصیف کننده فایل بنویسد.

– dinitctl اطلاعات بیشتری درباره اینکه چرا یک سرویس شکست خورده ارائه می‌دهد.

– در گذشته زمانی که مسیر ریشه cgroups بیشتر از ۶۴ کاراکتر می‌شد، dinit نمی‌توانست آن را پیدا کند (خطای غیرکشنده). در این نسخه این مشکل حل شده است.

– در گذشته زمانی که سرویس، دستور (command) کوتاهی داشت، dinit نشانگر (pointer) متغییر command را جای اشتباهی از حافظه علامت می‌زد. در این نسخه این مشکل حل شده است.

– dinit در هنگام reload یک سرویس، بررسی می‌کند که آیا چرخه نیازمندی[2] اتفاق افتاده یا خیر، اگر پاسخ صحیح بود از reload کردن آن اجتناب می‌کند. در گذشته این مسئله باعث یک خرابی در آن سرویس می‌شد.

– چندین رفع ایراد کوچک برروی سرویس های نمونه اعمال شده است.

– چندین رفع اشکال مربوط به پروسه ساخت و نصب کردن dinit اعمال شده است.

– CI دینیت راه اندازی شده است.

علاقه مندان می‌توانند از صفحه پروژه در github دیدن کنند: https://github.com/davmac314/dinit
همچنین اعلامیه انتشار این نسخه در اینجا قرار دارد: https://github.com/davmac314/dinit/releases/tag/v0.16.0
درضمن wiki پروژه نیز در دسترس علاقه مندان است: https://github.com/davmac314/dinit/wiki

پ.ن:
[1]: کرنل لینوکس به طور پیش فرض هر آرگومانی که از bootloader دریافت می‌کند را پردازش می‌کند، اگر کرنل متوجه آن نشود، آن را به عنوان آرگومان init تنظیم می‌کند. این یک رفتار عادی است اما مشکل زمانی به وجود می‌آید که گزارشاتی وجود داشته که کرنل لینوکس در گذشته چندین آرگومان را با وجود متوجه شدن آنها، به عنوان آرگومان init تنظیم کرده است (در واقع آرگومان به محیط سامانه نشت کرده است). برای جلوگیری از هرگونه مشکل از این جهت، dinit تمام آرگومان هایی که نام سرویس هستند را نادیده می‌گیرد مگر اینکه از پرچم -t یا –service استفاده کنید.

[2]: چرخه نیازمندی به زمانی گفته می‌شود که ساختار نیازمندی ها گره بخورد. به طور مثال دو سرویس a و b داریم، اگر a به b نیاز داشته باشد و همزمان b به a نیاز داشته باشد، دچار یک چرخه نیازمندی شدیم که ساختار نیازمندی را قفل می‌کند (گره می‌زند).

با احترام