Mà các Proc, sys, v.v. nên được gắn kết (hoặc không) khi chroot vào một bản phân phối thay thế trên đường sắt?


9

Câu trả lời này cho một câu hỏi khác về cơ bản tập trung chrootvào một bản phân phối Linux khác để chủ yếu sử dụng nó như là một thay thế cho cha mẹ quá hạn chế (nhưng không thể thay thế) của nó. Các hành động được đề xuất trước khi chạy chroot, mà tôi muốn hiểu rõ hơn là:

cp /etc/resolv.conf etc/resolv.conf
cp -a /lib/modules/$(uname -r) lib/modules
mount -t proc archproc proc
mount -t sysfs archsys sys
mount -o bind /dev dev
mount -t devpts archdevpts dev/pts
  • Việc sao chép resolv.confrất rõ ràng (truy cập mạng / internet), trong khi tôi không chắc chắn về modulesđiều này - điều này thực sự có vẻ không cần thiết khi chrootvào hệ thống Gentoo giai đoạn 3, phải không?
  • Nhưng tại sao proc, sysvà được kể dev/ptslại thay vì sử dụng gắn kết? Sự khác biệt thực tế trong tình huống này là gì, "chính xác hơn" là gì?
  • Điều này liên kết gắn kết procdev, nhưng không phải dev/ptscũng không sysđược gắn kết. Ngoài ra, nó sao chép /etc/{hosts,fstab}vào thư mục gốc mới. Điều đó có ý nghĩa? Tôi không nên bao gồm /etc/mdadm.confsau đó là tốt?

1
Nó nên giống hệt nhau; xem xét các hệ thống tập tin thông thường: chúng không được gắn kết hai lần (trừ khi chúng nhận biết cụm) nhưng hạt nhân thực hiện chính xác điều đó; Vì vậy, về cơ bản, nó được xử lý như một liên kết gắn kết trong nội bộ.
frostschutz

Câu trả lời:


9

/etc/resolv.conf được sao chép để không mất DNS.

/ lib / mô-đun được sao chép vì có thể cần phải sử dụng một số thành phần phần cứng không cần phải có mặt tại thời điểm thiết lập chroot. Bạn phải nhớ rằng câu hỏi ban đầu mà bạn đề cập trong OP liên quan đến việc thay thế HĐH NAS bằng Arch Linux. Do đó, bạn sẽ cần trình điều khiển cho ethernet, có thể là không dây, các thành phần USB khác nhau, v.v. Sao chép thư mục / lib / mô-đun đảm bảo rằng môi trường mới sẽ có thể đối phó với các tác vụ trong tương lai của nó.

Bạn thực sự đúng về việc gắn lại so với gắn kết. Trang Arch Linux Wiki trên chroot không sử dụng tính năng gắn lại và gắn kết như bạn chỉ định, theo câu trả lời cho bài đăng mà bạn đề cập đến:

cd /mnt/arch
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -t devpts pts dev/pts/

(Tôi nghĩ rằng điều này cho thấy cú pháp của các dòng của bạn, được sao chép từ bài đăng này , là sai: nhà phát triển được gắn trước điểm gắn kết).

Tuy nhiên, trang man Ubuntu trên chroot kể một câu chuyện khác:

sudo mount -o bind /proc /var/chroot/proc

Ở đây / Proc được gắn kết, không gắn kết lại.

Tôi đã thực sự thử cả hai thứ, và sau một lần chạy thử ngắn, tôi đã không thể nhận ra bất kỳ sự khác biệt nào. Không có nhiều thử nghiệm, thừa nhận, và do đó tôi sẽ đặt trường hợp của mình ở đây rằng nó sẽ không tạo ra nhiều sự khác biệt.


6
  • /etc/resolv.conf- bạn cần tệp này để giải quyết các yêu cầu DNS. Nó không cần thiết trong một số trường hợp:

    1. một máy khách DHCP có sẵn trong chroot, nó được thực thi và máy chủ DHCP trả về thông tin thích hợp (thường là trường hợp này).

    2. bạn không quan tâm đến việc kết nối mạng (hoặc chính xác hơn là thực hiện các truy vấn DNS từ các ứng dụng thông thường dựa vào /etc/resolv.conf) từ bên trong chroot.

  • /lib/modules/$(uname -r)- có ý nghĩa trong trường hợp bạn có thể cần tải bất kỳ mô-đun bổ sung nào cho kernel hoạt động. Không có cái này bạn sẽ bị mắc kẹt với bất cứ thứ gì bạn đang chạy. Do đó, nếu bạn có ý định chạy hệ thống chroot trong thời gian dài hơn, có lẽ bạn nên làm điều đó. Mặt khác, trong trường hợp như vậy, có lẽ bạn nên sử dụng pivot_rootthay thế (đó là những gì thường được initrd làm vào cuối cuộc đời của nó). Nếu bạn chỉ cần làm điều đó, ví dụ như để cài đặt bộ nạp khởi động từ chroot, thì không cần thiết (vì tất cả các trình điều khiển cần thiết phải được tải để bạn có thể tự thực hiện chroot).

  • /proc/devkhá rõ ràng - chúng chứa các giao diện hệ thống cơ bản.

  • /syslà IIRC không sử dụng rộng rãi trở lại trong năm 2007 đó là những gì các Slackware (mà bản thân nó là khá bảo thủ) Làm thế nào để là ngày. Ngày nay, hệ thống của bạn có khả năng bị lỗi bằng cách nào đó mà không có nó (ví dụ như một khi có thứ gì đó cố gắng liệt kê một số loại phần cứng).

  • /dev/pts- qua nhiều năm, có một số thay đổi về cách /devxử lý cây. Tại một số điểm, các thiết bị /dev/ptsđược xử lý bởi devfs- xem ví dụ , luồng LKML này để thảo luận về các vấn đề có thể xảy ra.

  • gắn kết liên kết - có một số khía cạnh thú vị của gắn kết liên kết (được giải thích khá độc đáo trong mount(8)trang con người). Ví dụ: nếu bạn có:

    /some/device on /x/a (rw)
    /x/a/A on /x/b (rw)
    

    và sau đó nhắc lại chỉ /x/ađọc, bạn sẽ không thể thay đổi bất cứ điều gì trong /x/B. Đó là điều dễ hiểu, nhưng có thể khiến bạn ngạc nhiên lần đầu tiên. Một câu hỏi hay khác là những gì sẽ xảy ra với /x/bví dụ trên khi bạn umount /x/a. Đối với tôi, điều này không rõ ràng lắm, rằng bạn vẫn có thể truy cập vào cái cây bên dưới nó. Do đó liên kết gắn kết có thể là khó khăn. Về mặt chức năng, khi được sử dụng trên toàn bộ hệ thống tập tin, nó là như nhau.

  • những thứ khác từ /etc/- chắc chắn có ý nghĩa để sao chép cấu hình có liên quan được sử dụng. Sao chép ví dụ /etc/passwd, /etc/shadow, /etc/groups có thể có ý nghĩa, cũng như phím máy chủ cho sshd.


Cả hai câu trả lời đều tốt như nhau - vì vậy tôi đã ném một đồng xu mà người ta chấp nhận ...
Tobias Kienzler

0

/procquản lý các quy trình và systhay đổi các tham số kernel hoặc thông tin truy cập của kernel hiện tại.

Bây giờ, xem xét rằng ràng buộc ngụ ý một tính chất hai chiều, prockhông được gắn bên ngoài chroot là giải pháp tốt nhất.

syscó thể, nhưng nó phụ thuộc vào máy chủ kernel đang chạy hiện tại và phải giống như dev, được gắn dưới dạng liên kết.

/dev/ptsđã có sẵn như /devlà được gắn kết, nhưng là một phần của chroot, vì vậy việc ptsgiới thiệu lại cái mới được khuyến nghị là mount -t devpts none /mnt/drive/dev/pts.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.