題 在chroot環境中mount dev,proc,sys?


我正在嘗試使用自定義選擇的包創建Linux映像。
我正在嘗試做的是手工製作我將在XO筆記本電腦上使用的軟件包,因為編譯軟件包在真正的XO硬件上需要很長時間,如果我可以構建我需要的所有軟件包並且只是閃存圖像到XO,我可以節省時間和空間。

當我嘗試安裝某些軟件包時,由於缺少proc,sys,dev目錄,它無法配置。所以,我從其他地方學到了我需要將主機proc,...目錄“掛載”到我的chroot環境中。

我看到兩種語法,我不確定使用哪種語法。

在主機:

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

和另一種語法(在chroot環境中):

  mount -t proc none /proc

我應該使用哪一個,有什麼區別?


74
2017-07-18 19:06


起源


注意:授予對磁盤設備的訪問權限意味著您將失去一些好處chroot()“。特別是,如果您不小心,確定的可以讀取文件系統部分之外的文件。 - Jonathan Leffler
@Jonathan Leffler:這聽起來不像他正在做的事情。 - Zifre
@JonathanLeffler chroot中的root用戶總是可以逃避chroot。 - LtWorf


答案:


對於 /proc 和 /sys,我想你可以使用任何一種方法。它們都是特殊的文件系統,因此可以重新創建任意次數(bind mount方法使用與主機系統完全相同的mount,而另一種方法使用新的mount)。我總是看到指南中推薦的綁定裝載,所以我會使用它。據我所知,沒有真正重要的區別。

然而, /dev 通常是由udev管理的tmpfs掛載,因此它必須是與主機上實際相同的文件系統。這意味著您需要使用bind mount方法。

如果這個chroot將會存在一段時間,你可以將這些條目放入 /etc/fstab 在主機系統上簡化事情。


42
2017-07-19 01:02



我想問一下將proc / sys從主機複製(綁定)到其他機器是否有意義?他們為什麼要匹配那台機器? - ransh
如果你將/ proc綁定到$ chrootdir / proc,那麼@ transh就會有意義,你將有可能處理兩個系統中兩個系統內部/ proc的進程和進程;例如:從chroot你可以檢查程序是否在主機上運行......等等 - Jonas
也許吧 sys  type 出現文件系統(今天)不再存在? - uprego


Arch Linux Wiki建議使用以下命令:

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

我可以確認它們對我有效。


93
2018-04-26 06:10



他們似乎也在ubuntu為我工作。 - isaaclw
在我的情況下(也是Ubuntu)我也需要一個“mount -o bind / dev / pts dev / pts”。 - Thomas


Gentoo手冊 特別調出這兩個命令來重新安裝/ proc和/ dev。我已經好幾次使用它們了。

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

我懷疑/ sys只是一個普通的文件夾,所以你應該能夠建立一個硬鏈接。

ln /sys /mnt/chroot/sys

9
2017-07-19 00:05



你不能像你建議的/ sys那樣硬連接目錄(通常),如果你使用符號鏈接,它會在你chroot時立即中斷。
他們添加了一些新的,基於systemd。添加它們也許是一個好主意。 - AzP


在這個流行的問題中可能值得注意的是,Arch Linux已經製作了一個腳本 拱形的chroot;下載 arch-install-scripts-15-1-any.pkg.tar.xz

這樣可以解決各種相關問題 拱的Linux 和 Manjaro ,我也成功地使用了它。可能更多Arch-衍生物 喜歡 拋物線 同樣兼容。

雖然簡單的標準 chroot 進入輔助Manjaro安裝將不允許您運行

pacman --sync linux

(系統崩潰後的銀彈),替換線

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

將使您能夠通過修復輔助Arch-derivate安裝

pacman --sync linux

喜歡魅力。 bash腳本 arch-chroot 照顧 /dev /sys /proc 還有更多,標准單獨留下的 chroot

也可以看看: 使用arch-chroot


0
2018-04-17 15:36





還有其他偽文件系統和tmpfs位置。這是關於debian:

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

安裝它應該沒問題 usbfsrpc_pipefs 和 devpts 來自chroot內的偽文件系統。我推薦  捆綁 /proc 到chroot的 /proc因為內核具有命名空間的概念,並且實際上可以在chroot的proc中添加不同的東西。

更新:根據 這個郵件列表線程,/ sys不應該綁定掛載,特別是如果chrooted進程使用自己的網絡命名空間。

安裝系統是個壞主意 /var 要么 /run 在chroot上,如果chroot有自己的pid命名空間。


-1
2017-10-15 21:06



炒作?在超級用戶(以及其他堆棧論壇)上,如果您不確定,通常最好是推遲,或使用鏈接源進行研究和回答。這是為了避免傳播被誤導的提示的風險。對不起,如果失望,祝你好運! - Simon B.
@SimonB。我添加了一個鏈接到郵件列表,支持/ sys不應該綁定掛載的想法。 - Brian Minton
使用pid命名空間,您談論的是我們可以在現代Linux內核上找到的更高級的用戶命名空間功能(即“容器”所基於的功能),而當我們使用術語chroot時,我們指的是傳統的文件命名空間更改(沒有別的)。 - Johan Boulé