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

موارد زیادی ممکنه پیش بیاد که لازم داشته باشیم بفهمیم یک فایل مربوط به چه بسته ای است. مثلا در باز کردن یک برنامه خطایی دریافت میکنیم مبنی بر اینکه مثلا 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

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

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

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

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

مخزن کامپایل شده AUR

در ویکی آرچ مخازن غیر رسمی متعددی نام برده شده اند که کاربران میتونن اونها رو به لیست مخازن pacman اضافه کنند. البته کاملا با مسئولیت خودشون. چون این مخازن توسط تیم توسعه دهنده آرچ و یا توزیع های وابسته به آرچ کنترل و تست نمیشن.

هر مخزنی با توجه به هدف سازنده، حاوی یک سری پکیج ها است. مثلا اینجا نسخه های بتای گنوم رو میتونید به لیست مخازن اضافه کنید. یکی از مخازن، مخزن پکیج های کامپایل شده ی AUR به نام Chaotic-AUR هست. یعنی یک گروهی نشستن پکیج های به درد بخور AUR رو کامپایل میکنن و در این مخزن قرار میدن. البته این کار به صورت خودکار انجام میشه. خیلی هم به روز هست!

خوبی های این کار:

  • لازم نیست دردسر کامپایل از سورس رو بکشید
  • لازم نیست ده ها بسته اضافی برای کامپایل کردن نصب کنید
  • بسته ها به راحتی آپدیت میشن.
  • برخی بسته ها فقط در AUR هستن و در مخازن رسمی نیستن

بدی های این کار:

  • اولا که AUR خودش مخالفانی داره (از نظر امنیت بسته ها)
  • دوما که بسته ها توسط تیم غیر رسمی کامپایل شدند و میتونن اشکالاتی داشته باشند. چه فنی چه امنیتی

با این حال این موضوع خیلی به درد من خورد و مشکلی باهاش ندارم. برای اینکه بتونید مخزن کامپایل شده بسته های AUR رو به لیست مخازن pacman اضافه کنید، به این سایت مراجعه کنید و طبق راهنما اقدامات لازم رو انجام بدید.

جلوگیری از نصب زبان های غیر انگلیسی در pacman

اگر نمیخواید سیستمتون پر از فایلهای locale زبان های مختلف بشه، کافیه خطوط زیر رو به فایل /etc/pacman.conf اضافه کنید. با این کار فایلهای زبان های غیر انگلیسی از درون بسته extract نخواهند شد

NoExtract = usr/share/help/* !usr/share/help/en*
NoExtract = usr/share/locale/* !usr/share/locale/en* !usr/share/locale/locale.alias
NoExtract = usr/share/man/* !usr/share/man/man*
NoExtract = usr/lib/chromium/locales/*.pak !usr/lib/chromium/locales/en.pak

حتما متوجه قضیه شدید. این کار فقط برای زبان ها نیست. شما میتونید هر چیزی که نمیخواد از درون یک بسته ای موقع آپدیت یا نصب اکسترکت بشه بدین ترتیب به pacman بفهمونید.

مدیریت بسته های نصب شده در Arch

همه میدونیم که pacman مدیر بسته های توزیع های مبتنی بر Arch مثل Manjaro و Parchlinux هست. محیط های گرافیکی مختلفی برای اون ساخته شده، ولی اگه یه موقعی توی ترمینال بودید و میخواستید سریع بسته های نصب شده‌تون رو ببینید، دستور زیر محیط جالبی رو فراهم میکنه که در اون لیستی از بسته های نصب شده با قابلیت جست و جوی سریع وجود داره.

$ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'

خالی کردن هدفمند کش پکیج ها در pacman

در سیستم های مبتنی بر آرچ، مثل مانجارو، pacman مدیر بسته ها است. همون طور که میدونید در هر توزیع لینوکسی وقتی که آپدیت میکنیم بسته ها از اینترنت دانلود میشن و در یک فولدری که معمولا در دایرکتوری var/cache/ قرار داره نگهداری میشن. این کش خیلی خوبه، چون وقتی شما نیاز داشته باشید بسته ای رو که در ورژن جدید دچار اختلال شده downgrade کنید به ورژن قبلی راحت میتونید این کار رو بکنید.

اما به مرور زمان این بسته ها تعدادشون زیاد و زیادتر میشه و چندین گیگابایت فضای شما رو اشغال میکنن. من پیشنهاد میکنم دو نسخه از بسته هایی که الان نصب هستند در کش نگهداری بشن و قدیم تری ها از روی دیسک حذف بشن. یعنی مثلا اگر بسته های مربوط به ورژنهای ۵۵، ۵۴، ۵۳، ۵۲، ۵۱ فایرفاکس در کش وجود داشته باشن ورژن های ۵۵ و ۵۴ بمونن و بقیه پاک بشن.

ادامه مطلب




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