بهروزرسانی سیستم در Gentoo — جریان کاری canonical
آموزش کامل و گامبهگام بهروزرسانی Gentoo: emerge --sync، eselect news، بهروزرسانی @world، etc-update، @preserved-rebuild، depclean و module-rebuild با توضیح هر پرچم.
بهروزرسانی Gentoo با توزیعهای باینری متفاوت است؛ اینجا بهجای دانلود بستهٔ آماده، کد منبع را کامپایل میکنید و کنترل کاملی روی نسخهها و USE flagها دارید. این مستند، جریان canonical بهروزرسانی Gentoo را در هشت گام توضیح میدهد. این مراحل را ماهی یکبار اجرا کنید تا سیستم همیشه پایدار و امن بماند.
گام ۱: همگامسازی مخزن
نخستین گام، همگامسازی درخت Portage با سرورهای Gentoo است:
# همگامسازی مخزن اصلی
emerge --sync
# یا شکل کوتاه
emaint sync -a
# خروجی نمونه:
# Syncing repository 'gentoo' into '/var/db/repos/gentoo'...
# === Sync completed for gentoo
# Action: sync for repo: gentoo, returned code = 0اگر از eix استفاده میکنید (پیشنهادی):
emerge --ask app-portage/eix
eix-sync
# سریعتر و خروجی خلاصهتر میدهداستفاده از git
برای سرعت بیشتر، میتوانید مخزن را بهجای rsync از git همگام کنید. در /etc/portage/repos.conf/gentoo.conf مقدار sync-type را به git تغییر دهید و sync-uri را به یک mirror git تنظیم کنید. این روش برای کاربرانی که هر روز sync میکنند، پهنای باند کمتری مصرف میکند.
گام ۲: خواندن اخبار
پس از همگامسازی، اخبار مهم منتشرشده توسط تیم Gentoo را بخوانید. این اخبار معمولاً شامل تغییرات بنیادی هستند که پیش از بهروزرسانی باید بدانید:
# لیست اخبار خواندهنشده
eselect news list
# خروجی:
# [1] 2026-06-17 Upcoming Python 3.12 cleanup
# [2] 2026-06-10 GCC 14 default upgrade notes
# [3] 2026-05-25 New profile default/linux/amd64/23.0
# خواندن همه اخبار
eselect news read
# خواندن یک خبر خاص
eselect news read 1
# پاک کردن اخبار خواندهشده
eselect news purgeاخبار را نادیده نگیرید
اخبار Gentoo برای اعلام تغییرات بنیادی منتشر میشوند؛ مثلاً migration از پروفایل ۱۷.۰ به ۲۳.۰، تغییرات پیشفرض Python، یا آپگرید GCC. نادیدهگرفتن آنها میتواند باعث شکست بهروزرسانی شود. همیشه پیش از -uDN @world اخبار را بخوانید.
گام ۳: بهروزرسانی @world
این فرمان اصلی بهروزرسانی است:
emerge --ask --update --deep --newuse @world
# یا بهصورت کوتاه:
emerge -avuDN @world| پرچم | معنی |
|---|---|
--ask (-a) | قبل از شروع، تأیید میخواهد |
--update (-u) | بهروزرسانی بستههای نصبشده |
--deep (-D) | بررسی وابستگیهای عمیق (نه فقط مستقیم) |
--newuse (-N) | بازسازی بستههایی که USE flags تغییر کرده |
--verbose (-v) | نمایش USE flags و جزئیات |
خروجی نمونه:
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild U ] sys-libs/glibc-2.40-r1 [2.39-r6] USE="-debug ..."
[ebuild R ] sys-devel/gcc-14.2.1_p20241214 USE="... -lto*"
[ebuild N ] dev-libs/libfoo-1.2.3 USE="bar baz"
[ebuild U ] x11-base/xorg-server-21.1.13 [21.1.10]
Would you like to merge these packages? [Yes/No]: yدامنه @world
@world شامل هر بستهای است که صریحاً نصب کردهاید (نه وابستگیها). این مجموعه میتواند بزرگ باشد و بهروزرسانی آن ساعتها طول بکشد. اگر فقط یک بسته را میخواهید بهروز کنید، آن را بهصورت جداگانه نصب کنید (مثلاً emerge -av firefox)، اما برای امنیت سیستم، حداقل ماهی یکبار @world را بهروز کنید.
گام ۴: بهروزرسانی فایلهای پیکربندی
پس از نصب، فایلهای پیکربندی در /etc ممکن است نسخههای جدیدی داشته باشند. Portage آنها را بهصورت ._cfg0000_ نگه میدارد تا پیکربندی فعلی شما را بازنویسی نکند:
# روش سنتی (تعاملی)
etc-update
# لیست فایلهای با تضاد را نشان میدهد و از شما میپرسد چه کنید
# روش پیشنهادی (ذخیره و انتخاب هوشمند)
dispatch-conf
# تفاوتها را نمایش میدهد و تغییرات قبلی را در /etc/config-archive نگه میداردdispatch-conf بهتر است
dispatch-conf مزیتهای زیادی نسبت به etc-update دارد: فایلهای قدیمی را آرشیو میکند، با diff رنگی تفاوتها را نشان میدهد و میتواند فایلهایی که فقط کامنت تغییر کرده را بهصورت خودکار ادغام کند. در /etc/dispatch-conf.conf آن را پیکربندی کنید.
گام ۵: بازسازی بستههای وابسته به کتابخانه حذفشده
وقتی یک کتابخانه نسخهبندیشده (مثلاً libfoo.so.4) حذف میشود اما بستهای به آن وابسته است، Portage آن را بهصورت موقت نگه میدارد تا بستههای وابسته بازسازی شوند:
# بازسازی بستههای وابسته
emerge @preserved-rebuild
# خروجی:
# Calculating dependencies... done!
# [ebuild R ] media-video/ffmpeg-6.1.1
# [ebuild R ] media-libs/libsndfile-1.2.2گام ۶: پاکسازی بستههای اضافی
بستههایی که دیگر به چیزی وابسته نیستند (یعنی فقط بهعنوان وابستگی نصب شده بودند و حالا بسته اصلی حذف شده) باید پاک شوند:
# پیشنمایش
emerge --ask --depclean
# خروجی:
# Calculating dependencies... done!
# dev-libs/libfoo-1.2.3 pulled by:
# (none)
# Packages removed: 12
# اجرای پاکسازی
emerge --depcleandepclean را با احتیاط اجرا کنید
--depclean میتواند بستههای ضروری را حذف کند اگر چیزی به آنها وابسته بهنظر نمیرسد (مثلاً اگر از world حذف کردهاید). همیشه پیش از تأیید، لیست را با دقت بخوانید. اگر بستهای را شخصاً نصب کردهاید اما در @world نیست، با emerge --noreplace PACKAGE آن را به world اضافه کنید تا از حذف محافظت شود.
گام ۷: بازسازی ماژولهای کرنل
پس از بهروزرسانی یا نصب کرنل جدید، ماژولهای خارجی (مانند NVIDIA، VirtualBox، ZFS) باید برای کرنل جدید بازسازی شوند:
# بازسازی ماژولهای خارجی
emerge @module-rebuild
# خروجی:
# Calculating dependencies... done!
# [ebuild R ] x11-drivers/nvidia-drivers-565.77 LINUX_MODULES_EXTRA="..."
# [ebuild R ] app-emulation/virtualbox-modules-7.1.4این مجموعه بستههایی است که در /var/lib/module-rebuild/ ثبت شدهاند.
گام ۸: بازسازی لینکهای شکسته (اختیاری)
اگر بستهای بهاشتباه حذف یا خراب شده، میتوانید با revdep-rebuild (از app-portage/gentoolkit) بستههای وابسته به لینکهای شکسته را بازسازی کنید:
# نصب gentoolkit (اگر ندارید)
emerge --ask app-portage/gentoolkit
# بررسی و بازسازی
revdep-rebuild -i
# خروجی:
# Checking reverse dependencies...
# Packages to rebuild: 3revdep-rebuild امروز کمتر لازم است
در Portage مدرن، @preserved-rebuild بیشتر کارها انجام میدهد و revdep-rebuild کمتر ضروری است. اما اگر بعد از بهروزرسانی برنامهای خطای cannot open shared object file داد، این فرمان میتواند نجاتبخش باشد.
جدول مرور کلی
| گام | فرمان | هدف |
|---|---|---|
| ۱ | emerge --sync | همگامسازی درخت Portage |
| ۲ | eselect news read | خواندن اخبار مهم |
| ۳ | emerge -avuDN @world | بهروزرسانی بستهها |
| ۴ | dispatch-conf | ادغام فایلهای پیکربندی |
| ۵ | emerge @preserved-rebuild | بازسازی بستههای وابسته |
| ۶ | emerge --ask --depclean | پاکسازی بستههای اضافی |
| ۷ | emerge @module-rebuild | بازسازی ماژولهای کرنل |
| ۸ | revdep-rebuild -i | رفع لینکهای شکسته (اختیاری) |
خطاهای رایج
۱. بستههای مسدودشده (blocked packages)
[ebuild N ] app-foo/bar-2.0
[blocks B ] app-foo/baz ("app-foo/baz" is blocking app-foo/bar-2.0)دلیل: دو بسته با هم ناسازگارند. راهحل: معمولاً باید بسته مسدودکننده را حذف کنید:
# حذف بسته مسدودکننده
emerge --ask --depclean app-foo/baz
# سپس تلاش مجدد
emerge -avuDN @world۲. تعارض فایل پیکربندی هنگام نصب
* Detected file collision(s):
* /etc/foo.conf
* Searching all installed packages for file collisions...دلیل: دو بسته میخواهند فایل یکسانی را نصب کنند. راهحل:
# بررسی مالک فایل
equery belongs /etc/foo.conf
# معمولاً با پاکسازی بسته قبلی حل میشود
emerge --ask --depclean
emerge -avuDN @world۳. خطای Circular dependency
Calculating dependencies... done!
* Error: circular dependencies:
* dev-libs/libfoo depends on dev-libs/libbar
* dev-libs/libbar depends on dev-libs/libfooراهحل: معمولاً با بهروزرسانی Portage یا تغییر USE flagها حل میشود:
# بهروزرسانی Portage
emerge --ask sys-apps/portage
# تلاش مجدد
emerge -avuDN @world
# اگر حل نشد، USE flagهای مرتبط را موقتاً تغییر دهید
USE="-foo" emerge -avuDN @worldسهولت با --quiet-build
اگر خروجی کامپایل پر سر و صداست، از --quiet-build=y استفاده کنید تا فقط خطاها نمایش داده شوند. این گزینه را در /etc/portage/make.conf به EMERGE_DEFAULT_OPTS اضافه کنید:
EMERGE_DEFAULT_OPTS="--ask --quiet-build=y --keep-going"خلاصه و مرحله بعد
جریان canonical بهروزرسانی Gentoo شامل هشت گام است: --sync، خواندن اخبار، -uDN @world، dispatch-conf، @preserved-rebuild، --depclean، @module-rebuild و در نهایت revdep-rebuild. اجرای ماهانهٔ این چرخه، سیستم را پایدار و امن نگه میدارد.
برای درک عمیقتر Portage به آموزش Portage و برای مدیریت USE flagها به آموزش USE Flags مراجعه کنید. اگر از Distribution Kernel استفاده میکنید، آموزش Distribution Kernel نکات هماهنگی کرنل با بهروزرسانی را پوشش میدهد. برای رفع خطاهای پیچیده، آموزش عیبیابی را ببینید.
این صفحه در تاریخ ۱ تیر ۱۴۰۵ بهروزرسانی شده است.