gắn kết dev, Proc, sys trong môi trường chroot?


87

Tôi đang cố gắng tạo một hình ảnh Linux với các gói được chọn tùy chỉnh.
Những gì tôi đang cố gắng làm là thủ công các gói tôi sẽ sử dụng trên máy tính xách tay XO, bởi vì việc biên dịch các gói mất rất nhiều thời gian trên phần cứng XO thực, nếu tôi có thể xây dựng tất cả các gói tôi cần và chỉ cần flash hình ảnh cho XO, tôi có thể tiết kiệm thời gian và không gian.

Khi tôi cố gắng cài đặt một số gói, nó không thể cấu hình do thiếu các thư mục Proc, sys, dev. Vì vậy, tôi đã học được từ những nơi khác rằng tôi cần phải "gắn kết" máy chủ lưu trữ, ... thư mục vào môi trường chroot của mình.

Tôi thấy hai cú pháp và tôi không chắc nên dùng cái nào.

Trong máy chủ:

  mount --bind /proc <chroot dir>/proc 

và một cú pháp khác (trong môi trường chroot):

  mount -t proc none /proc

Tôi nên sử dụng cái nào, và sự khác biệt là gì?


Coi chừng: cấp quyền truy cập cho các thiết bị đĩa có nghĩa là bạn mất một số lợi ích của ' chroot()'. Cụ thể, người được xác định có thể đọc các tệp bên ngoài phần của hệ thống tệp nếu bạn không cẩn thận.
Jonathan Leffler

2
@Jonathan Leffler: điều đó không có vẻ như là một vấn đề cho những gì anh ta đang làm.
Zifre

@JonathanLeffler một người dùng root trong chroot luôn có thể thoát khỏi chroot.
LtWorf

Câu trả lời:


43

Đối với /proc/sys, tôi cho rằng bạn có thể sử dụng một trong hai phương pháp. Cả hai đều là các hệ thống tệp đặc biệt để chúng có thể được tạo lại bất kỳ số lần nào (phương thức gắn kết liên kết sử dụng chính xác giống như hệ thống máy chủ, trong khi phương thức khác sử dụng giá trị gắn kết mới). Tôi đã luôn thấy gắn kết liên kết được đề xuất trong hướng dẫn, vì vậy tôi sử dụng nó. Theo tôi biết, không có sự khác biệt thực sự quan trọng.

Tuy nhiên, /devthường là một tmpfs mount được quản lý bởi udev, vì vậy nó phải là hệ thống tệp thực tế giống như trên máy chủ. Điều đó có nghĩa là bạn sẽ cần sử dụng phương thức gắn kết.

Nếu chroot này sẽ xuất hiện trong chốc lát, bạn có thể đặt các mục này /etc/fstabvào hệ thống máy chủ để đơn giản hóa mọi thứ.


Tôi muốn hỏi nếu nó có ý nghĩa để sao chép (liên kết) các Proc / sys từ máy chủ sang một số máy khác? Tại sao họ phải phù hợp với máy đó?
chuộc

@ransh thật hợp lý nếu bạn liên kết / Proc với $ chrootdir / Proc, bạn sẽ có khả năng xử lý công cụ xử lý và những gì đang diễn ra bên trong / Proc của cả hai hệ thống từ cả hai hệ thống; ví dụ: từ chroot, bạn có thể kiểm tra xem chương trình có đang chạy trên máy chủ không ... vv
Jonah

Có lẽ sys typehệ thống tập tin xuất hiện ( ngày nay ) để không tồn tại nữa?
174140

111

Các Arch Linux Wiki cho thấy các lệnh sau:

cd /mnt/arch # or where you are preparing the chroot dir
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/

2
Họ dường như cũng làm việc cho tôi trong Ubuntu.
isaaclw

4
Trong trường hợp của tôi (cũng là Ubuntu), tôi cũng cần một "mount -o bind / dev / pts dev / pts".
Thomas

Vui lòng bao gồm các liên kết đến nguồn.
xốp bay

@styrof foamfly Đã thêm.
gacrux

1
Tính đến năm 2019, wiki ArchLinux bây giờ không --rbindcho sysdev.
Saad Malik

12

Các Cẩm nang Gentoo kêu gọi cụ thể hai lệnh dưới đây để tái lắp / proc và / dev. Tôi đã sử dụng chúng nhiều lần.

mount -t proc none /mnt/chroot/proc
mount -o bind /dev /mnt/chroot/dev

Tôi nghi ngờ / sys chỉ là một thư mục thông thường, vì vậy bạn sẽ có thể tạo một liên kết cứng.

ln /sys /mnt/chroot/sys

17
Bạn không thể liên kết cứng một thư mục (thường) như bạn đề xuất cho / sys và nếu bạn sử dụng một liên kết tượng trưng, ​​nó sẽ bị hỏng ngay khi bạn chroot.

Họ đã thêm một số cái mới, dựa trên systemd. Có lẽ đó là một ý tưởng tốt để thêm chúng.
AzP

1

Có thể đáng chú ý trong câu hỏi phổ biến này, Arch Linux đã tạo ra một kịch bản arch-chroot ; Tải xuốngarch-install-scripts-15-1-any.pkg.tar.xz

Điều này xử lý các vấn đề liên quan khác nhau cả trong Arch-LinuxManjaro , nơi tôi cũng đã sử dụng nó thành công. Có thể Arch- hơn derivates như Parabol tương thích chỉ là tốt.

Mặc dù một tiêu chuẩn đơn giản chrootvào bản cài đặt Manjaro thứ cấp sẽ không cho phép bạn chạy

pacman --sync linux

(viên đạn bạc sau sự cố hệ thống), thay thế dòng bằng

arch-chroot /run/media/*YOURSELF*/manja-disk2

sẽ cho phép bạn sửa lỗi cài đặt Arch-derivate thứ cấp của bạn thông qua

pacman --sync linux

như một lá bùa. Kịch bản bash arch-chrootquan tâm /dev /sys /procvà nhiều hơn nữa, được để lại một mình theo tiêu chuẩn chroot.

xem thêm: Sử dụng vòm-chroot


-1

Có các hệ thống tập tin giả và các vị trí tmpfs khác. Đây là trên debian:

/dev/pts 
/run
/run/shm
/proc/sys/fs/binfmt_mist
/var/lib/nfs/rpc_pipefs
/proc/fs/nfsd
/proc/bus/usb

Nó sẽ không sao để gắn kết usbfs, rpc_pipefsdevptspseudo-hệ thống tập tin từ bên trong chroot. Tôi khuyên bạn không nên ràng buộc /procvới chroot /proc, vì kernel có khái niệm về không gian tên và thực sự có thể đặt những thứ khác nhau trong Proc của chroot.

Cập nhật: theo luồng danh sách gửi thư này , / sys không nên được gắn kết gắn kết, đặc biệt nếu các quy trình chroot đang sử dụng không gian tên mạng riêng của nó.

Đó là một ý tưởng tồi để gắn kết hệ thống /varhoặc /runlên chroot, nếu chroot có không gian tên riêng của nó.


Đầu cơ? Trên superuser (và các diễn đàn ngăn xếp khác) thường tốt hơn nên giữ lại, hoặc nghiên cứu và trả lời với các nguồn được liên kết, nếu bạn không chắc chắn. Điều này là để tránh nguy cơ lan truyền những gợi ý sai lầm. Xin lỗi nếu thất vọng và may mắn!
Simon B.

@SimonB. Tôi đã thêm một liên kết vào danh sách gửi thư hỗ trợ ý tưởng rằng / sys không nên được gắn kết.
Brian Minton

Với không gian tên pid, bạn đang nói về các tính năng không gian tên người dùng nâng cao hơn mà chúng ta có thể tìm thấy trên các nhân linux hiện đại (tức là các tính năng "container" dựa trên), trong khi chúng ta sử dụng thuật ngữ chroot, chúng ta đề cập đến thay đổi không gian tên tệp truyền thống ( và không có gì khác).
Johan Boulé

-1

Cách dễ nhất là sử dụng vòng lặp for:

cd /

for i in proc sys dev; do mount -o bind $i /folder/$i; done
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.