با اجازه من جواب میدم.
نه! یکی از راحتترین پروژههاییه که آدم خودش میتونه کامپایل و نصب کنه.
با ۲۰ملیون خط کد، بزگترین پروژهایه که میشناسم ولی درعینحال تمیزترین پروژه هم هست!
کامپایل کردنش هم کاری نداره. دوسهتا کامند ساده که هر دوسهروز یکبار دارم میزنم:
make clean # age ghablan compile karde bashim va bekhaym directory ro tamiz konim
make defconfig # age avvalin bar bashe ke config misazam
make menuconfig # age bekham config ro edit konam
make # in kolle kare compile ro anjam mide. az ruye configi ke sakhte shode, entekhab mikone ke kodum module haa compile beshan.
sudo make modules_install install # in nasbesh mikone
همهی اینا توضیح دارن و اگه بخوایم بهتر کار کنیم، نیاز هست بدونیمش ولی اصل کار همینه.
توضیح بیشتر:
برای درست کردن نیست. برای فهمیدن مشکله. وقتی بفهمیم مشکل از کجاست، راههای راحتتری وجود داره.
مثلا وقتی بفهمیم فلان ماژول کرنل، مشکل دما رو برطرف میکنه، از این به بعد هروقت لینوکسی نصب میکنیم، میریم اون یه دونه ماژول رو از ریپازیتوری گیتهاب سازندش میگیریم و کامپایل میکنیم و اضافه میکنیم به هر کرنلی که داریم.
مساله اینه که کرنلهایی که دیگران کامپایل کردن، برای رنج وسیعی از دیوایسهاست، وقتی ما یه سختافزار خاص داریم، ممکنه چیزی که نیاز داریم توی کرنل نباشه (یا کرنل قدیمی باشه و هنوز ماژولهای اون سختافزار توش نباشه) و البته چیزهای خیلی زیادی هم توی کرنل هست که ما نیاز نداریم!
مثلا درایور سنسور اثر انگشت لپتاپ من توی کرنل دیفالت دبیان نبود. یا باید کرنل جدیدتر کامپایل میکردم، یا اون یهدونه ماژول رو گیر میاوردم و نصبش میکردم روی کرنل قدیمیم.
یه بار هم خیلیوقت پیش یه دانگل وایفای گرفتم ماژولش توی ubuntu (سیستمهای شرکت) نبود، Arch نصب کردم درست شد.
وقتی خودمون کامپایل میکنیم، بازده بهتری داره.
حتی میتونیم با flagهایی مثل -march=native
چیزی کامپایل کنیم که دقیقا مخصوص این CPU هست و از cpu instructionهایی استفاده کرده که مخصوص این cpu هست و توی نسلهای قدیمیتر X86_64 وجود نداره.
پردازندهی @Obka خیلی جدیده، اگه کرنلی که کامپایل میکنه با اون فلگ باشه، مخصوص cpuی خودش کامپایل میشه و از فیچرهایی استفاده میشه که توی cpuی من نیست (با اینکه هردو x86_64 هستن، ممکنه cpuی من نتونه اون کرنل رو راه کنه) و این باعث میشه سرعت بالاتری روی اون CPU داشته باشه.
فکر میکنم اینا ارزششو داشته باشن که آدم ۳۰دقیقه سرچ کنه و مطلب بخونه تا بتونه کرنل خودشو کامپایل کنه.
اگه میخواید خودتون کامپایل کنید، اون لینکی که دادم رو مطالعه کنید.
زیاد هم نگران مشکلات احتمالی نباشید، اگه چیزی بشه، از توی grub میتونید کرنل قدیمی رو انتخاب کنید تا از روی اون بوت بشه.
اگه یه کرنلی نصب کردید (خودتون نصب کردید! نه با استفاده از پکیجمنیجرها) و خواستید پاکش کنید، اول بوت کنید به یه کرنل دیگه، بعد این فایلها رو پاک کنید:
/boot/vmlinuz*KERNEL-VERSION*
/boot/initrd*KERNEL-VERSION*
/boot/System-map*KERNEL-VERSION*
/boot/config-*KERNEL-VERSION*
/lib/modules/*KERNEL-VERSION*/
/var/lib/initramfs/*KERNEL-VERSION*/
بعدش اینو بزنید که grub آپدیت بشه و دیگه کرنلی که پاک شده رو توی منو نشون نده و نخواد بوتش کنه:
sudo update_grub2