گذری بر ساخت یک سیستم لینوکس از ابتدا

به در خواست بعضی از دوستانم مرور کلی در روش ساخت یک سیستم عامل گنو لینوکس از پایه به وسیله کامپایل برنامه ها و تنظیم کرنل خواهم داشت . در این نوشته قرار نیست وارد ریز جزئیات و مرور دستورات با تمام پسوندها و سوئیچ ها بشوم . تنها کلیتی از روند انجام کار و ساخت یک گنو/لینوکس از پایه شرح داده میشود . برای اطلاع دقیق از ریزه کاری ها و دستورات لطفا به کتاب LFS در انتهای این پست مراجعه کنید .
شاید وسوسه کامپایل بسته ها و کرنل و ساخت یک لینوکس از پایه همواره همراه یک کاربر لینوکس باشد و اگر کاربر کمی روحیات «گیک» ی هم داشته باشد وضع به مراتب بدتر خواهد بود .یکی از این گیک ها فردی به نام Gerard Beekmans بوده که در سال ۱۹۹۸ تصمیم به ساخت یک توزیع با جمع آوری بسته های اساسی برای ساخت سیستم عامل و کرنل لینوکس میکند . حاصل تجربیات کار «جرارد » در کتابی تحت عنوان Linux From Scratch جمع آوری شده و به LFS مشهور می‌شود .
من فرض میکنم که مایل به ساخت سیستم عامل با آخرین نسخه از برنامه‌ها و کرنل هستیم . و از نسخه جاری دستورالعمل ساخت به همراه آخرین نسخه ازبرنامه‌ها استفاده می‌کنم . درصورتیکه به داشتن یک نسخه پایدار علاقمندید میتوانید از نسخه پایدار هربرنامه به همراه کرنل پایدار استفاده کنید . در کلیت کار تفاوت عمده‌ای ایجاد نخواد شد .
ابتدا بسته‌های برنامه های مورد نیاز را از آدرس‌های آن‌ها دریافت می‌کنیم. در این آدرس اسم برنامه‌ها به همراه لینک دریافت آخرین نسخه قرار داده شده است .همچنین بعضی ازبرنامه‌ها دارای مشکلاتی هستند که باید فایل‌های Patch این برنامه‌ها را نیز از اینجا دریافت کنیم .
برای ساخت یک لینوکس جدید قائدتا احتیاج به یک فضای کافی بر روی دیسک سخت سیستم داریم ، در کتاب LFS حداقل فضایی به اندازه ۴ گیگابایت برای بسته‌های سورس و فایل‌های کامپایل شده درنظر گرفته شده است . اما فضای ۱۰ گیگابایتی در آینده منجر به کمبود فضا در پارتیشن tmp/ نخواهد شد . من برای این منظور از یک پارتیشن۲۰ گیگابایتی استفاده کردم .همچنین همانند باقی توزیع‌ها فضایی برای home/ و باقی پارتیشن ها مورد نیاز است ( من پارتیشن مجزایی در نظر نگرفتم . این یک مسئله سلیقه ای است و میتوان home/ را بدون درنظر گرفتن پارتیشن مجزا رها کرد تا در / فضایی به آن تعلق بگیرد .) اگر این توزیع در آینده به منظور سیستم عامل اصلی شما خواهد بود یک فضای ۳۰-۵۰ گیگابایتی نیز برای پارتیشن src/ در‌نظر بگیرید .در پارتیشن src/ برنامه‌های شما نصب خواهند شد .
بعد از در نظر گرفتن فضا با هر یک از فرمت‌های رایج ext2 ,ext3,ext4 میتوان این فضا را فرمت کرد ، و در انتها پارتیشن جدید را به mnt/ سوار -mount- کرد . در این مرحله پکیج‌هایی که گرفته ایم در پارتیشن جدید قرار داده و آماده کامپایل بسته‌ها می‌شویم . برای اینکه محل بسته‌ها و سیستم جدیدی که میسازیم از هم تشخیص داده شوند ، تمام بسته‌ها به همراه فایل ها پچ در پارتیشن مجزای source/ قرار گرفته و تمام برنامه‌های کامپایل شده در tools/ قرارمیگیرند .( توسط سوئیچ‌های gcc می‌توان محل نصب بسته‌ها را تعیین کرد که در مستندات کتاب به تفصیل توضیح داده شده است ) .
برای کامپایل بسته‌ها ، ابتدا اقدام به کامپایل برنامه‌های کامپایلر gcc و لینکر (Binutils) و همچنین Linux API Headers و کتابخانه‌های Glibc و ++Libstdc می‌نمائیم . بسته‌های فوق را ابتدا توسط کامپایلر سیستم میزبان کامپایل می‌کنیم .سپس با استفاده از این برنامه‌هادوباره همین بسته‌ها را برای بار دوم کامپایل کرده (با پارامترهای متفاوت در قسمت Config ) و در ادامه باقی بسته‌ها را کامپایل می‌نمائیم . برای کامپایل هر بسته ابتدا بسته را از حالت فشرده خارج می‌کنیم . سپس در آدرس فولدر ساخته شده دستورات را وارد کرده و بعد از نصب بسته‌ها فولدر ساخته شده را پاک حذف می‌کنیم . سورس پکیج‌ها در پوشه sources/ باقی می‌ماند .
بعد از کامپایل سورس‌ها و نصب تمام بسته‌های سیستم پایه ، شروع به ساخت سیستم عامل جدید می‌کنیم . ابتدا پارتیشن‌های ضروری سیستم‌عامل ( مثل dev,proc,sys,run ) را می‌سازیم سپس Node هایی برای اتصال Devise های مختلف سیستم ایجاد می‌کنیم .و پارتیشن‌های مرتبط با فایل سیستم لینوکس را Mount می‌کنیم . در نهایت با استفاده از دستور chroot وارد سیستم جدید که بنا کردیم می‌شویم و در لینوکس جدید کار را ادامه می‌دهیم .
در ابتدا دایرکتوری‌ها و زیر دایرکتوری‌ها و فولدرهای اساسی موردنیاز سیستم را می‌سازیم .فایل‌ها و لینک‌ها را می‌سازیم و همچنین گروه‌ها را تعریف می‌کنیم.سپس نصب برنامه‌ها و پکیج‌ها در لینوکس جدید را با نصب Linux API Headers شروع می‌کنیم . یک به یک پکیج‌ها را ابتدا از حالت فشرده خارج کرده و سپس وارد فولدر ایجاد شده می‌شویم و برنامه را کامپایل و نصب کرده و در انتها فولدر را پاک می‌کنیم .
پس از کامپایل آخرین بسته ( یعنی برنامه vim ) در صورتیکه به فایل‌های Symbol برنامه‌های نصب شده نیازی نداریم میتوانیم آنها را پاک کنیم . در این صورت حجم برنامه‌های نصب شده به ۹۰ مگابایت کاهش پیدا می‌کند . در صورتیکه علاقمند به دیباگ و توسعه سیستم هستید بهتر است این فایل‌ها را نگهداری کنید .
همچنین فایل‌های اضافه ای که حین کامپایل ساخته می‌شوند نیز میتوان حذف کرد (بخش ۶٫۷۲ کتاب LFS )

خب ! ساخت سیستم به اتمام رسید . حالا باید سیستم ساخته شده را تنظیم کنید . تنظیماتی مثل نحوه اتصال به شبکه ، زبان و کیبورد و تنظیم ساعت سیستم ، Shell پیش‌فرض سیستم و تنظیمات مربوط به systemd در این مرحله صورت می‌پذیرد . پس از تنظیم سیستم جدید ، ابتدا فایل fstab را ایجاد و تنظیم می‌کنیم ، سپس کرنل (لینوکس) را کامپایل می‌کنیم . برای کامپایل لینوکس میتوان از make oldconfig استفاده کرد و تنظیمات و ماژول‌های مورد نیاز سیستم خود را بصورت سوال و جواب در یک فایل تنظیم کرد . در انتها این فایل قابلیت ویرایش داشته و در صورتیکه در محلی اشتباهی رخ داده باشد می‌توان به راحتی آن را اصلاح کرد .
پس از نصب کرنل در صورت تمایل می‌توانید گراب را نصب کنید و در غیر این صورت گراب سیستم میزبان را آپدیت کرده تا سیستم LFS جدید را شناسایی کند . در انتها از سیستم جدید خارج شده و پارتیشن‌ها را یک به یک Unmount میکنیم و سیستم را ریبوت می‌کنیم . در صورتیکه کرنل بدرستی تنظیم شده باشد میتوانید به سیستم LFS خود وارد شوید .

برای خواندن جزئیات و نحوه کار به کتاب LFS که در سایت Linux from Scratch قرار دارد مراجعه کنید .

Leave a Comment

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *