Chroot — ورود به محیط نصب Gentoo
دنباله کامل chroot در Gentoo: سوار کردن proc، sys، dev، کپی resolv.conf و ورود به محیط نصب.
Chroot چیست؟
دستور chroot (Change Root) ریشهٔ دایرکتوری فرایند را به یک مسیر دیگر تغییر میدهد. در نصب Gentoo، پس از استخراج Stage3، باید وارد محیط نصب شویم تا دستورات emerge و پیکربندی در ریشهٔ سیستم جدید اجرا شوند.
برای این کار، علاوه بر خود chroot، باید چند فایل سیستم مجازی کرنل (proc, sys, dev) را نیز سوار کنیم تا محیط chroot کاملاً کاربردی باشد.
چرا chroot؟
Chroot به ما اجازه میدهد از یک محیط لینوکس کامل (Minimal CD) وارد محیط لینوکس در حال نصب شویم، بدون اینکه سیستم را ریبوت کنیم. به این ترتیب دستوراتی مانند emerge در ریشهٔ سیستم جدید اجرا میشوند.
مراحل کامل chroot
مرحله ۱: سوار کردن proc, sys و dev
این فایل سیستمهای مجازی ارتباط با کرنل را فراهم میکنند:
# سوار کردن /proc
mount --types proc /proc /mnt/gentoo/proc
# سوار کردن /sys بهصورت rbind
mount --rbind /sys /mnt/gentoo/sys
# سوار کردن /dev بهصورت rbind
mount --rbind /dev /mnt/gentoo/dev
# جلوگیری از تداخل هنگام chroot (مهم برای systemd و mount propagation)
mount --make-rslave /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/devتوضیح هر mount:
| فایل سیستم | کاربرد |
|---|---|
/proc | اطلاعات فرایندها و کرنل |
/sys | دستگاهها و ماژولها |
/dev | فایلهای دستگاه (دیسک، ترمینال و...) |
--rbind | سوار کردن بازگشتی شامل زیرمجموعهها |
--make-rslave | جدا کردن propagation برای جلوگیری از تداخل |
مرحله ۲: کپی resolv.conf
برای دسترسی به اینترنت در محیط chroot، فایل /etc/resolv.conf را کپی کنید:
# کپی فایل تنظیمات DNS
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/resolv.confفراموشکردن resolv.conf
اگر این مرحله را فراموش کنید، در chroot نمیتوانید به اینترنت دسترسی داشته باشید و emerge --sync با خطای DNS مواجه میشود. این یکی از رایجترین خطاهای نصب Gentoo است.
مرحله ۳: ورود به chroot
# ورود به محیط chroot
chroot /mnt/gentoo /bin/bash
# بارگذاری پروفایل
source /etc/profile
# تغییر اعلان برای تمایز محیط chroot
export PS1="(chroot) ${PS1}"
# اعلان به این شکل درمیآید:
# (chroot) root@gentoo:/#یک خط برای همه
میتوانید همهٔ مراحل را در یک دستور ترکیب کنید:
chroot /mnt/gentoo /bin/bash -c "source /etc/profile && export PS1='(chroot) \${PS1}' && exec bash"سوار کردن /boot و ESP در chroot
پس از ورود به chroot، باید /boot (و در صورت UEFI، /boot/efi) را داخل chroot سوار کنید:
# (داخل chroot)
mount /dev/sda1 /boot
# اگر UEFI هستید
mount /dev/sda1 /boot/efiتست عملکرد chroot
پس از ورود به chroot، مطمئن شوید همهچیز کار میکند:
# بررسی دسترسی به اینترنت
ping -c 3 gentoo.org
# خروجی مطلوب:
# PING gentoo.org (140.211.166.184) 56(84) bytes of data.
# 64 bytes from gentoo.org: icmp_seq=1 ttl=44 time=152 ms
# ...
# همگامسازی Portage
emaint sync -a
# یا
emerge --sync
# خروجی:
# * Syncing into /var/db/repos/gentoo ...
# * Sync successfulخروج از chroot
وقتی کارتان تمام شد، بهترتیب معکوس خارج شوید:
# خروج از chroot
exit
# (اکنون در Minimal CD هستید)
# اگر /boot را سوار کرده بودید، اول آن را سوار-نکردنی کنید
umount -l /mnt/gentoo/boot/efi 2>/dev/null
umount -l /mnt/gentoo/boot 2>/dev/null
# سوار-نکردنی فایل سیستمهای مجازی
umount -l /mnt/gentoo/proc
umount -R /mnt/gentoo/sys
umount -R /mnt/gentoo/dev
# سوار-نکردنی ریشه
umount -l /mnt/gentooقبل از ریبوت
همیشه پیش از ریبوت، همهٔ پارتیشنهای سوارشده روی /mnt/gentoo را unmount کنید. در غیر این صورت ممکن است دادهها نوشته نشوند و فایل سیستم آسیب ببیند.
چرا هر کدام از این mountها؟
/proc
بدون /proc، بسیاری از دستورات کار نمیکنند: ps, top, free و حتی خود emerge. کرنل از /proc برای گزارش وضعیت فرایندها استفاده میکند.
/sys
برای دسترسی به اطلاعات سختافزاری، ماژولها و تنظیمات کرنل. در نصب هسته و مدیریت دستگاهها ضروری است.
/dev
بدون /dev، در chroot نمیتوانید به دیسکها، ترمینال و دستگاههای USB دسترسی داشته باشید. دستوراتی مانند fdisk یا mount کار نخواهند کرد.
resolv.conf
این فایل شامل آدرس سرورهای DNS است. بدون آن، نام دامنهها (مثل gentoo.org) به IP تبدیل نمیشوند و اینترنت کار نمیکند.
خطاهای رایج
۱. خطای DNS در chroot
emerge --sync
# ping: gentoo.org: Temporary failure in name resolutionدلیل: فراموشکردن کپی resolv.conf. راهحل:
# (از chroot خارج شوید)
exit
cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"۲. خطای cannot mount /proc
mount: /mnt/gentoo/proc: /proc already mounted on /procدلیل: /proc قبلاً سوار شده. راهحل: نیازی به دوباره سوارکردن نیست؛ ادامه دهید.
۳. خطای failed to run command /bin/bash
chroot: failed to run command '/bin/bash': No such file or directoryدلیل: Stage3 بهدرستی استخراج نشده یا معماری ISO با Stage3 متفاوت است (مثلاً ISO amd64 با Stage3 x86). راهحل:
# بررسی اینکه /bin/bash در chroot وجود دارد
ls /mnt/gentoo/bin/bash
# خروجی:
# /mnt/gentoo/bin/bash
# اگر وجود نداشت، Stage3 را دوباره استخراج کنید
cd /mnt/gentoo
tar xpf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner۴. خطای mount propagation با systemd
اگر از systemd استفاده میکنید و خطاهای عجیب در systemctl میبینید، احتمالاً --make-rslave را فراموش کردهاید:
# (از chroot خارج شوید)
exit
mount --make-rslave /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/dev
chroot /mnt/gentoo /bin/bashخلاصه و مرحله بعد
دنبالهٔ chroot در Gentoo شامل سوار کردن proc, sys, dev، کپی resolv.conf و ورود به محیط نصب است. این مراحل بهخوبی شناخته شدهاند و در هر بار نصب Gentoo تکرار میشوند. درک هر مرحله به شما کمک میکند خطاهای رایج را خودتان رفع کنید.
پس از ورود به chroot، باید Stage3 را نصب و پیکربندی کنید و سپس هسته را نصب نمایید. برای آشنایی با معماری کلی Gentoo، آموزش معماری را ببینید.
این صفحه در تاریخ ۱ تیر ۱۴۰۵ بهروزرسانی شده است.