استفاده از systemd برای mount درایوها

برای دسترسی به درایوها در لینوکس باید اونها رو اصطلاحا mount کنیم. یعنی یک فولدر بسازیم و به سیستم عامل بگیم که درایو مورد نظر ما رو داخلش نشون بده. برای اینکه این کار حین بوت انجام بشه، به طور سنتی از فایل /etc/fstab استفاده میکردیم.

اما با ظهور systemd و رفتن توزیع ها به سمت اون، تغییرات جدیدی در نحوه مدیریت خیلی چیزها از جمله ماونت کردن درایو ها ایجاد شد. systemd فایل fstab رو موقع بوت بررسی میکنه و به ازای هر ردیفی که داخلش وجود داره یک یونیت mount درست میکنه و سپس درایو مورد نظر ماونت میشه. 

چرا ما از اول خودمون این یونیت ها رو آماده نکنیم؟ که دیگه systemd مجبور نباشه در هر بوت اونها رو تولید کنه و بعد ماونت کنه؟ در این نوشته میخوام بگم من چطوری پارتیشن مورد نظرم رو با استفاده از systemd موقع بوت ماونت میکنم و دیگه توی fstab ردیفی برای اون قرار ندادم.

استفاده از systemd برای ماونت این فواید رو داره:

  • میتونید مشخص کنید درایو شما در چه زمانی ماونت بشه
  • میتونید مشخص کنید درایو شما فقط وقتی ماونت بشه که بهش نیاز دارید (Automount)
  • اگر مشکلی در فایل fstab وجود داشت، کل سیستم تحت تاثیر قرار نمیگیره، و فقط یک یونیت هست که دچار مشکل میشه.
  • به راحتی میتونیم با بررسی status یونیت مورد نظر، مشکل احتمالی رو پیدا کنیم.

ادامه مطلب

غیر فعال کردن ساخت ایمیج Fallback

در لینوکس های مبتنی بر آرچ، که با mkinitcpio ایمیج های کرنل ساخته میشن، همیشه یک ایمیج fallback هم ساخته میشه. این ایمیج یک سری hookهای پیش فرضی داره که اگر ایمیج اصلی دچار مشکل شد، بشه با این ایمیج سیستم رو بوت کرد.

من که توی این چند سال هیچ وقت نشد ازش استفاده کنم. اگر پارتیشن بوت شما حجمش کمه، و یا به هر دلیلی نمیخواید این ایمیج ساخته بشه، کافیه در فایل زیر، قسمت های مربوط به ایمیج fallback رو غیر فعال کنید و عبارت 'fallback' رو از کنار 'default' بر دارید. نهایتا یه چیزی شبیه این:

/usr/share/mkinitcpio/hook.preset
# mkinitcpio preset file for the '%KERNELBASE%' package #ALL_config="/etc/mkinitcpio.conf" ALL_kver="/boot/vmlinuz-%KERNELBASE%" ALL_microcode=(/boot/*-ucode.img) PRESETS=('default') #default_config="/etc/mkinitcpio.conf" default_image="/boot/initramfs-%KERNELBASE%.img" #default_uki="/efi/EFI/Linux/manjaro-%KERNELBASE%.efi" #default_options="--splash /usr/share/systemd/bootctl/splash-manjaro.bmp" #fallback_config="/etc/mkinitcpio.conf" #fallback_image="/boot/initramfs-%KERNELBASE%-fallback.img" #fallback_uki="/efi/EFI/Linux/manjaro-%KERNELBASE%-fallback.efi" #fallback_options="-S autodetect"

و اگر بخواید در کرنل فعلی که نصب هست هم این کار رو بکنید، کافیه همین تغییر رو در فایل preset مربوط به کرنل که در مسیر /etc/mkinitcpio.d قرار داره اعمال کنید. و در انتها ایمیج مربوط به fallback رو در مسیر پارتیشن بوت خودتون هم حذف کنید.

در واقع ما با ویرایش فایل hook.preset این تغییرات رو برای آپدیت های آینده کرنل یا کرنل های جدیدی که نصب خواهیم کرد دائمی میکنیم.

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

در مطلب قبلی گفتم که چطوری میتونیم بدون 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 انجام دادم و ممکنه در سایر توزیع ها متفاوت باشه. 

ادامه مطلب

قدرت صدای سیستمتون رو به رخ بکشید!

Easyeffects رو نصب کنید، پیکربندی کنید، و از گوش دادن به موسیقی و دیدن فیلم در لپتاپتون لذت ببرید!

داستان اینه که اپلیکیشن easyeffects توانایی های  واقعی سیستم صوتی لپتاپتون (و یا دسکتاپ) رو نمایان می‌کنه. با easyeffects میتونید:

  • افکت‌های مختلفی رو برای اپلیکیشن های مختلفی که در حال پخش صدا هستند اجرا کنید
  • میزان صدای هر اپلیکیشن رو به طور پیشفرص تعیین کنید
  • برای ورودی صدا (میکروفون) هم افکتهای خاصی داشته باشید. مثلا کاهش نویز میکروفون!
  • و ده ها تغییراتی که اونهایی که کار حرفه ای با موسیقی میکنن...

نصب

برای نصب، باید خود برنامه رو همراه با پلاگینهاش نصب کنید:

$ sudo pacman -S  easyeffects calf zam-plugins-lv2 lsp-plugins-lv2 mda.lv2

ادامه مطلب

Pipewire نسل آینده مدیریت صدا در لینوکس

مدیریت پخش صدا و تصویر در لینوکس مثل سایر چیزها دستخوش تغییرات و پیشرفت هایی شده. یکی از این پیشرفت ها پیدایش چیزی است به نام Pipewire. وارد بحث های تکنیکی اش نمیتونم بشم چون نمیدونم! ولی تا اونجایی که مطالعه کردم، چیزی است شبیه به Pulseaudio، منتها منطبق با پیشرفت های اخیر. بنابراین کم کم داره جایگزین Pulseaudio میشه. بد نیست ما هم مطابق با این تغییرات پیش بریم!

مثلا یکی از ویژگیهای Pipewire اینه که میتونید در دسکتاپ هایی که با wayland کار میکنن، صوت رو هم share کنید. چیزی که با pulseaudio نمیشد. (حالا اینکه اصلا به این نیاز داشته باشیم یا نه خدا داند 😄)

توجه: برای ایجاد چنین تغییراتی در سیستم ابتدا کاملا سرچ کنید و با مسئولیت خودتون انجام بدید.

برای نصب Pipewire و جایگزین کردن pulseaudio کارهای زیر رو انجام میدیم. البته قبلش ویکی آرچ رو به دقت بخونید. اگر در Manjaro هستید، کافیه متاپکیج manjaro-pipewire رو نصب کنید تا همراه با اون هر چیزی هم که لازمه نصب بشه. یا اینکه میتونید بسته های زیر رو نصب کنید:

$ sudo pacman -S pipewire pipewire-alsa pipewire-audio pipewire-pulse gst-plugin-pipewire wireplumber 

از شما یک سری سوالات در مورد جایگزین کردن pulseaudio میپرسه که بهش اوکی میدید. ضمنا بهتره wireplumber رو بعنوان session manager برای نصب انتخاب کنید. بعد از این کار و یک reboot تست کنید ببینید صدا دارید یا نه! اگر مشکلی وجود داشت، قسمت Troubleshooting ویکی آرچ رو بخونید.

ادامه مطلب




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