ساختنِ یک توزیعِ دلخواهِ دبیانی در محیطِ chroot!

مقدمهدر این نوشتار، قصد دارم گزارش ساخت یک توزیع دبیانی را برای شما شرح دهم. این توزیع را به منظور انجام یکی از تمرینات درس سیستم‌عامل ساختم و گزارشی که مشاهده می‌کنید، به منظور ارائه به دستیاران این درس تهیه شده است.در جریان ساخت یک توزیع جدید، مثل هر کار دیگری، اولین ایده‌ی منطقی، جست‌و‌جو کردن در اینترنت بود. مثلا جست‌و‌جوی عباراتی مثل create a customized Linux distribution و نظایر آن. پیشِ‌پا افتاده‌ترین نتایجی که با اینگونه جست‌و‌جو‌ها می‌گیرید، یک سری وب‌سایت هستند که عمدتاً از شما می‌خواهند یک مخزن گیت را clone کنید و بعد آنچه آن‌ها در آن مخزن فراهم کرده‌اند، کارِ ساختنِ توزیع دلخواه شما را انجام می‌دهد. مثلا اولین ابزاری که چند روز گروهِ ما را اسیرِ (!) خودش کرد و آخر سر هم، دست ما را در پوست گردو گذاشت، ابزار Linux Live Kit بود. https://www.linux-live.org/ بین این ابزارها، آنچه مهم است، این است که چقدر برای شما آزادی انتخاب فراهم می‌کنند. مثلا این Linux Live Kit، یک فایل config به شما می‌داد که می‌توانستید custommization مدنظرتان اعمال کنید که در آن فایل هم آزادی چندان زیادی برای انتخاب نداشتید. مثلا می‌توانستید انتخاب کنید که آیا توزیع‌تان، ‌‌network manager داشته باشد یا نه. و تعداد این اختیاراتی که می‌داد هم به 10تا نمی‌رسید. بماند که فایل isoای که به عنوان خروجی به ما داد، هیچ‌وقت boot نشد. این شد که ما هم مجبور شدیم روش معمول و سنتی این کار، یعنی استفاده از ‌‌debootstrap و ساخت توزیع در محیط ‌‌chroot را امتحان کنیم.‌ابزار debootstrapتا آنجا که من فهمیدم، ابزار debootstrap در حقیقت سیستم پایه‌ی دبیانی را برای شما، در یک بخش خالی از ‌پارتیشن دیسک‌تان نصب می‌کند و شما می‌توانید همزمان با اینکه یک سیستم‌عامل خودتان را روی کامپیوترتان دارید، یک نسخه‌ی حداقلی از ‌دبیان را هم جداگانه روی سیستم‌تان داشته باشید. برای نصب این سیستم حداقلی، نیازی به نصب از طریق CD یا فلش نیست. بلکه کافی است تنها یک repo را clone کنید.من مطابق آنچه در https://gitlab.flossir.org/sanaos/live_image آمده بود، پیش رفتم. ابتدا در سیستم‌عامل Debian 10 ابزارهای زیر را نصب کردم:mtoolsdebootstrapxorrisogrub-pcsquashfs-toolsبعد از نصب این ابزارها، دستور زیر را اجرا کردم:sudo debootstrap --arch=amd64 testing chroot/ http://repo.flossir.org/debianبه نظر می‌آید این دستور، سیستم پایه‌ی دبیانی را از آدرس داده شده، واکاوی می‌کند و در دایرکتوری‌ای که به نام chroot می‌سازد قرار می‌دهد.محیط chrootبعد آنکه debootstarp کار خوش را انجام داد، نوبت به ‌chroot می‌رسد. ‌chroot، آن طور که از اسمش برمی‌آید (change root)، کاری که می‌کند، احتمالا این است که دایرکتوری ‌root سیستم‌عامل شما را به گونه‌ای تغییر می‌دهد که سیستم شما فکر کند دایرکتوری که شما به ‌chroot داده‌اید، همان دایرکتوری root شماست و اتفاقی که می‌افتد این این است که برای شما، محیطی ایجاد می‌کند تا بتوانید درون سیستم‌عامل پایه‌ای که debootstarp در اختیارتان گذاشت، تنظیمات دلخواهتان را انجام دهید. خب این خیلی جالب است! شما می‌توانید هر ابزاری که می‌خواهید را، به همان راحتی‌ای که روی سیستم‌عامل خودتان نصب می‌کردید، روی این سیستم‌عامل ‌customized شده هم نصب کنید. نه تنها ابزار، بلکه هر تغییری در فایل‌های config و به طور کلی، هر کاری که روی یک سیستم‌عامل نصب شده ممکن باشد. این یعنی با این ابزاری که داریم، نهایت آزادی انتخابی که می‌خواستیم را در اختیار داریم. هر کجا که مخزن گیت بالا را کپی کرده بودیم، به chroot هم آدرس همان‌جا را می‌دهیم. مثلا در شکل زیر، من در ماشین مجازی خودم که Debian Buster را روی آن نصب کردم،‌ مخزن را در آدرسی که در زیر می‌بینید قرار دادم. و در همین آدرس، دستور chroot را اجرا می‌کنم:دایرکتوری chroot در داخل دایرکتوری live_imageپس از اجرای دستور chroot، وارد محیط chroot می‌شویم. همان‌طور که لیست دایرکتوری‌های موجود در دایرکتوری chroot نشان می‌دهد، انگار که یک توزیع standalone داریم که حالا هر نرم‌افزاری که بخواهیم می‌توانیم روی آن نصب کنیم و تغییرات ما، بعد از ساختن iso برای این توزیع، درون آن ماندگار خواهند شد.محیط chrootایجاد تغییرات دلخواهقرار است تغییراتی که برای ساختن توزیع مدنظرمان می‌دهیم، را اولا بیان کنیم. دوما دلیل ایجاد این تغییرات را بگوییم و آخر هم اینکه چگونگی اعمال این تغییرات را بیان کنیم.توزیعی که ما درصدد ساخت آن بودیم، یک توزیع مناسب پایه، برای دانشجویان مهندسی کامپیوتر بود، به نحوی که ابزارهایی که مورد استفاده‌ی اغلب دانشجویان کامپیوتر است، روی آن به طور پیش فرض نصب باشد.اولین چیزی که حتی از نان شب هم واجب‌تر است، یک دسکتاپ خوب است. دسکتاپ گنوم، هم ظاهر خوبی دارد، هم تیم خوب و معروفی پشت توسعه‌ی آن هستند و هم ویژگی‌های قابل قبولی دارد. دستوری که برای نصب دسکتاپ گنوم لازم است، به شکل زیر است :sudo taskel install desktop gnome-desktopبعد از اجرای این دستور، فرایند خوردن حجم اینترنت شما آغاز می‌شود :(شروع فرایند نصب gnome-desktopزبان دسکتاپ را انگلیسی گذاشتم.انتخاب زبان دسکتاپزبان کیبورد را هم انگلیسی گذاشتم.انتخاب زبان کیبورد سپس باید با دستور زیر، به سیستم بگوییم که بعد از boot، رابط گرافیکی را بالا بیاورد:sudo systemctl set-default graphical.targetحالا بعد نصب یک دسکتاپ خوب، می‌رویم سراغ ابزار مناسب.اولین ابزار که نصب می‌کنیم، Firefox ESR است. یقینا هر دانشجویی نیاز به مرور وب خواهد داشت و این نرم‌افزار هم به سبب جامعه‌ی توسعه‌دهندگان خوبی که دارد، گزینه‌ی مناسبی است. یک نکته‌ای خوب است اینجا به آن اشاره کنیم، این است که در ریپوزیتوری پروژه‌ی SanaOS که ما کارمان را با آن شروع کردیم، لیست مخازنی که apt از آن استفاده می‌کند، با لیست پیش‌فرض دبیان فرق دارد. در واقع از یک مخزن مربوط به همان پروژه استفاده می‌کند. در فایل etc/apt/sources.list، آدرس این ریپوزیتوری آمده است. ما هم تا جایی که به مشکل نخوردیم از همین مخزن استفاده کردیم.مراحل نصب Firefox ESRبعد از نصب مرورگر، داشتن یک IDE برای یک دانشجوی کامپیوتر عام، منطقی است. VS Code به جهت اینکه در جامعه‌ی برنامه‌نویسان جاافتاده و قابلیت‌های خوبی برای کدونویسی به انواع و اقسام زبان‌ها ایجاد می‌کند، گزینه‌ی مناسبی است. دستور زیر، این برنامه را نصب می‌کند:sudo apt install codeدر شکل زیر، نسخه‌ی VS Codeای که روی سیستم مورد نظر نصب شده را می‌بینید.نسخه‌ی VS Code نصب شدهبعد از نصب IDE، خوب است یک VCS هم داشته باشیم. باز هم به دلیل شیوع بیشتر، Git گزینه‌ی خوبی است. برای نصب git، دستور زیر را اجرا می‌کنیم:sudo apt-get install gitو Git نصب می‌شود.نسخه‌ی Git نصب شده قبلا، در تمرین اول، قول داده بودیم یک به یک بخش‌های اصلی سیستم‌عامل را انتخاب کنیم. حالا که خیالمان از ابزارهای لازم برای برنامه‌نویسی راحت شده، می‌توانیم سر قولمان برویم.از File Manager شروع می‌کنیم. یادم می‌آید یک بحث جامعی در تمرین اول کرده بودم که چرا Dolphin، مدیر فایل خوبی است. البته بحثم بیشتر پیرامون قابلیت‌های دلفین نسبت به سایر رقبایش بود که در یک صفحه‌ی ویکی‌پدیا مقایسه شده بود؛ لینکش این است: https://en.wikipedia.org/wiki/Comparison_of_file_managers برای نصب دلفین کافیست دستور زیر را وارد کنید:sudo apt-get install dolphinو 50 مگابایت دیگر هم دانلود می‌شود:نصب Dolphinدر جریان نصب دلفین و قبل‌تر از آن، موقع نصب دسکتاپ گنوم، یک هشداری داده می‌شد مبنی بر این که Locale سیستم شما تنظیم نشده است.از قضا اصلا فایلی در /etc/default به نام locale نیست. این فایل را در این آدرس ایجاد کردیم و محتوای ان را هم با nano در آن ذخیره کردیم./etc/default/localeبه نظر نصب نرم‌افزارها تا همین‌جا کافی است.برندینگ!حالا فرصت آن رسیده که توزیع‌مان را با برندمان سازگار کنیم! از اول ماجرا شروع می‎‌کنیم. اول از همه، تصویر پس زمینه‌ی grub را تغییر می‌دهیم.اولین مشکلی که با آن مواجه شدم، این بود که سیستم grub نداشت! یعنی در دایرکتوری boot، اصلا grub نبود. با دستور زیر، grub را نصب کردم:sudo apt-get install grub2حالا می‌خواهم تغییرات دلخواه را در پیکربندی grub اعمال کنم.خب اولین مساله‌ی جالبی که با آن مواجه شدم، این بود که شما از طریق سیستم‌عامل میزبان نمی‌توانید چیزی به دایرکتوری chroot اضافه کنید. قصد من این بود که عکس سردر دانشگاه را دانلود کنم و برای تصویر پس‌زمینه‌ی grub از آن استفاده کنم. راه حلی که برای این مساله پیدا کردم اینبودکه از طریق wget، عکس را در همان محیط chroot در ترمینال دانلود کنم:دانلود کردن عکس پس‌زمینه‌ی GRUBحالا برای تغییر پیکربندی grub، دستور زیر را وارد می‌کنیم تا بتوانیم تنظیمات دلخواه خود را ویرایش کنیم:nano etc/default/grubفایل متن بالا را به صورت زیر درمی‌آوریم:etc/default/grubدر آخر هم با دستور زیر grub را آپدیت می‌کنیم:grub-mkconfig -o /boot/grub/grub.cfgدر آخر به این ترتیب انتظار عکس سردر دانشگاه در منوی bootloader دیده شود.در قدم بعدی می‌خواهم انیمیشن بوت، یا همان plymouth را تغییر دهم. از آنجا که انیمیشن اختصاصی ندارم، مجبورم از یکی از همین انیمیشن‌های آماده‌ی خود لینوکس استفاده کنم. همه‌ی مراحلی که رفتم، مطابق آن چیزی است که در لینک زیر آمده است و قدم به قدم انجام شده است. https://wiki.debian.org/plymouth بعد از تغییر plymouth، نام توزیع را هم با استفاده از تغییر فایل etc/hostname انجام دادم. حالا تنها چیزی که می‌ماند، ساختن توزیع است.برای ساخت توزیع، دستوراتی که در صفحه‌ی گیت‌هاب پروژه‌ی SanaOS آمده را عینا اجرا کردیم و همان‌طور که مشاهده می‌کند، بعد از مدتی، فایل ISO باموفقیت تولید شد.تولید فایل ISOتولید فایل ISOاتمام موفقیت آمیز تولید ISOحالا نوبت به نصب این توزیع می‌رسد. مشابه همان سیستم دبیانی که داشتیم، توزیع خودمان را هم روی VMWare نصب می‌کنیم.متاسفانه، همان‌طور که در شکل زیر می‌بینید، گویا در پروژه‌ی SanaOS، یا حداقل در این شاخه از مخزن گیت پروژه، مشکلی هست که سیستم‌عامل درست بوت نمی‌شود. (یک گروه دیگر از دانشجویان کلاس هم به این مشکل خورده بودند).صفحه‌ای که تکرار می‌شودالان که مشغول نوشتن این سطر از گزارش هستم، 19 بهمن است. بخش‌های قبلی گزارش، (درست قبل از این بخش) را پیش از این نوشته بودم و تحویل جناب آقای باجلان داده بودم. در حال حاضر، سرم کمی خلوت شده و می‌خواهم یک بار، همه‌ی آنچه در بالا انجام داده بودم را بدون استفاده از مخزن SanaOS امتحان کنم.آن طور که در https://wiki.debian.org/Debootstrap آمده :debootstrap is a tool which will install a Debian base system into a subdirectory of another, already installed system. It doesn't require an installation CD, just access to a Debian repository. It can also be installed and run from another operating system, so, for instance, you can use debootstrap to install Debian onto an unused partition from a running Gentoo system. It can also be used to create a rootfs for a machine of a different architecture, which is known as "cross-debootstrapping". There is also a largely equivalent version written in C: cdebootstrap, which is smaller.با debootstarp و از طریق مخزن خود debian هم باید بتوان یک سیستم حداقلی دبیان نصب کرد.گویا شکل کلی دستوری که این کار را انجام می‌دهد به شکل زیر است:debootstrap --include <additional_packages,comma-separated> --arch <architecture> <release> <target> <mirror>بعد از نصب یک سیستم پایه، باید همان کارهایی که در بالا کردیم را تکرار کنیم. فرایند انجام این کارها، دقیقا مشابه قبل است.