بوت لینوکس بدون بوت لودر

در مطلب قبلی گفتم که چطوری میتونیم بدون GRUB و با استفاده از systemd-boot لینوکسمون رو بوت کنیم. در این مطلب میخوام بگم چطوری و بدون هیچ بوت لودری، فقط با اضافه کردن یک آیتم به آیتم های EFI مادربرد، لینوکسمون رو بیاریم بالا!

در لپتاپ من، موقعی که سیستم روشن میشه، با زدن کلید esc یک منویی ظاهر میشه تا بوت‌لودر EFI مورد نظرم رو انتخاب کنم. میتونم انتخاب کنم بوت لودر ویندوز لود بشه یا بوت‌لودر لینوکس. که این بوت لودر لینوکس میتونه GRUB باشه یا systemd-boot که در مطلب قبلی گفتم یا هر دوتاش.

ولی حالا میخوایم فرض کنیم نه GRUB داشته باشیم و نه systemd-boot. صرفا یک آیتم که ایمیج های کرنل لینوکس رو میخونه و سیستم رو بوت میکنه. کافیه از efibootmgr استفاده کنیم. اگر نصب ندارید، نصبش کنید!

در یک مثال، من با efibootmgr یک آیتم اضافه میکنم:

sudo efibootmgr --create --disk /dev/sda --part 1 --label "Manjaro-Linux" --loader /vmlinuz-5.10-x86_64 --unicode 'root=UUID=81fb7cc5-77a1-4971-a686-a69757c47e11 rw splash initrd=\intel-ucode.img initrd=\initramfs-5.10-x86_64.img'

/dev/sda هارد درایوی است که پارتیشن EFI من توش قرار داره و در مسیر /boot ماونت شده.  و با --part که متغیر 1 رو بهش دادم، بهش میگم پارتیشن شماره 1. یعنی در نهایت میشه sda1

--label که مشخصه. اسم آیتم رو به دلخواه خودمون تعیین میکنیم.

با متغیر --loader تعیین میکنیم که اسم vmlinuz ما چی هست.

و در متغیر --unicode هم مشخص میکنیم پارتیشن root ما کجاست و متغیرهای خط کرنل و محل ایمیج های کرنل کجا هستند.

مقدار UUID پارتیشن مورد نظر رو میتونید با دستور lsblk -f پیدا کنید.

متغیرهای خط کرنل بستگی به نیاز خودتون میتونه متفاوت باشه. من اینجا فقط splash رو نوشتم که کوتاه تر بشه توی وبلاگ.

با تایپ دستور efibootmgr بدون هیچ متغیری، آیتم های بوت EFI مادربرد رو نشون میده. برای حذف هر کدوم از آیتم ها میتونید از مثال زیر استفاده کنید:

sudo efibootmgr  --delete-bootnum --bootnum #

بجای # از شماره آیتمی استفاده کنید که میخواید حذفش کنید. مثلا اگر 0005 هست باید بنویسید 5 ولی مراقب باشید، چون راه بازگشتی وجود نداره. پس بدونید دارید چکار میکنید.

در مورد EFI هم میتونید این ویکی طولانی رو نگاه کنید.

خداحافظ GRUB

GRUB (مخفف GNU GRand Unified Bootloader) یکی از بوت لودر هایی است که از زمان های بسیار دور در سیستم عامل‌های لینوکس نصب میشد و به ما امکان این رو میداد که موقع روشن شدن سیستم بتونیم آیتم های مختلفی رو برای بوت شدن انتخاب کنیم. از جمله کرنل های مختلف، سیستم عامل های دیگه مثل ویندوز و ...

امروزه با پدیدار شدن systemd ما به خیلی از ابزارهای اضافی برای انجام دادن کارها نیازی نداریم. یکی از این موارد GRUB هست. در واقع systemd-boot میتونه کار یک بوت لودر رو در سیستم هایی که از EFI پشتیبانی میکنند به خوبی انجام بده، بدون نیاز به نصب گراب یا هر بوت لودر دیگه ای.

توی این مطلب میخوام در مورد اینکه بوت لودر رو چگونه از GRUB به systemd-boot تغییر دادم بنویسم. تا هم برای خودم آرشیو داشته باشم و هم اگر شما هم دوست داشتید انجام بدید.

توجه: من هیچ مسئولیتی در خراب شدن احتمالی بوت لودر شما ندارم. بنابراین منابع رو به دقت بخونید و سپس اقدام کنید. ضمنا وقتی کار رو شروع کردید نصفه و نیمه رها نکنید و سیستم رو restart نکنید تا زمانی که تمام مراحل رو تکمیل کرده باشید.

قبل از هر چیز، اینها منابعی هستند که من ازشون استفاده کردم: ویکی Arch، ویکی Gentoo، ویکی Manjaro، ویکی آرچ در مورد UEFI. من این کار رو در Manjaro انجام دادم و ممکنه در سایر توزیع ها متفاوت باشه. 

ادامه مطلب

Cover Image

تغییر آیکن فایلها و پوشه ها در Nautilus

اگر از icon theme های استاندارد استفاده میکنید و قصد دارید آیکن یک فایل یا فولدری رو توی فایل منیجر گنوم یعنی Nautilus تغییر بدید دو راه وجود داره. یک راه اینکه در Properties اون فایل روی آیکنش کلیک کنید و مسیر آیکنی رو که مد نظرتون هست انتخاب کنید.

اما این کار باعث میشه وقتی میزان زوم رو تغییر میدید، آیکن شما بزرگ و کوچک نشه. حتی اگه از فرمت svg هم انتخاب کردید ممکنه به اندازه سایر آیکن ها کوچک نشه موقع zoom out.

یک راه ساده و سریعتری هم از ترمینال هست. به این صورت که شما باید نام آیکن مورد نظرتون رو از فولدر icon theme (مثلا در مسیر /usr/share/icons/Papirus/apps) که الان تم آیکنِ انتخاب شده ی شما است، پیدا کنید و مشابه الگوی زیر، آیکن فایل یا پوشه خودتون رو تغییر بدید. با این کار مشکل زوم رو هم نخواهیم داشت. مثلا:

$ gio set -t string ~/.bashrc metadata::custom-icon-name org.xfce.terminal-settings

در این مثال ما آیکنی به نام org.xfce.terminal-settings رو برای فایل ~/.bashrc انتخاب کردیم. توجه کنید که این نام آیکن باید در تم آیکنی که در حال حاضر فعال هست وجود داشته باشه.

چطور بفهمیم یک فایل متعلق به چه بسته ای است؟!

موارد زیادی ممکنه پیش بیاد که لازم داشته باشیم بفهمیم یک فایل مربوط به چه بسته ای است. مثلا در باز کردن یک برنامه خطایی دریافت میکنیم مبنی بر اینکه مثلا cannot load shared object file libvoikko.so.1. یعنی این فایل رو پیدا نکرده...

برای اینکه بفهمیم فایل مورد نظر متعلق به چه بسته ای است که ما نداریمش، در توزیع های مبتنی بر Arch دو راه داریم. یکی استفاده از pacman و یکی استفاده از pkgfile. البته قبلش باید یک بار دیتابیس فایلها رو داشته باشیم. برای بروز رسانی دیتابیس:

$ sudo pacman -Fy

استفاده از pkgfile

$ pkgfile libvoikko.so.1

استفاده از pacman

$ pacman -F libvoikko.so.1

اما اگر بخوایم بفهمیم یک فایل مشخصی در یک مسیر، مربوط به کدوم یک از بسته های نصب شده است، از سوییچ -Qo استفاده میکنیم. مثلا:

$ pacman -Qo /usr/share/dbus-1/services/org.gnome.Nautilus.service

حذف خطوط حاوی یک عبارت در یک فایل

اگر لازم داشتیم در یک فایل متنی خطوطی رو که یک عبارت مشخصی در اونها وجود داره حذف بشن، میتونیم از sed استفاده کنیم. به طور مثال من میخوام mpv رو از لیست پیشنهادی open with حذف کنم. چون رابط گرافیکی اون یعنی Celluloid برای پخش فایلهای مدیا کافیه. برای این کار:

$ sed -i.bak '/mpv/d' ~/.local/share/applications/defaults.list
$ sed -i.bak '/mpv/d' ./.local/share/applications/mimeapps.list

آرشیو پکیج‌های قدیمی Arch

اگر در Arch لازم داشتید یک نسخه قدیمی‌تر از پکیج مورد نظرتون رو نصب کنید، و فایلش رو در اختیار نداشتید، میتونید توی این آدرس دنبالش بگردید. سپس میتونید با pacman اون رو نصب کنید. به طور مثال:

$ pacman -U https://archive.archlinux.org/packages/path/packagename.pkg.tar.zst

اطلاعات بیشتر رو میتونید در این لینک از ویکی آرچ ببینید. مثلا میتونید پکیج های سیستم رو به یک تاریخ خاصی downgrade کنید و...




حاصل سر و کله زدن های من با لینوکس