ภูเขา dev, proc, sys ในสภาพแวดล้อม chroot?


87

ฉันกำลังพยายามสร้างอิมเมจ Linux พร้อมแพ็คเกจที่เลือกเอง
สิ่งที่ฉันกำลังพยายามทำคือส่งมอบแพ็คเกจที่ฉันจะใช้บนแล็ปท็อป XO เพราะการรวบรวมแพ็คเกจใช้เวลานานมากบนฮาร์ดแวร์ XO จริงถ้าฉันสามารถสร้างแพ็คเกจทั้งหมดที่ฉันต้องการและเพียงแค่แฟลช รูปไป XO ฉันสามารถประหยัดเวลาและพื้นที่

เมื่อฉันพยายามติดตั้งแพคเกจบางอย่างมันล้มเหลวในการกำหนดค่าเนื่องจากไม่มีไดเรกทอรี proc, sys, dev ดังนั้นฉันเรียนรู้จากที่อื่น ๆ ที่ฉันต้องการ "ติดตั้ง" โฮสต์ proc, ... ไดเรกทอรีไปยังสภาพแวดล้อม chroot ของฉัน

ฉันเห็นรูปแบบไวยากรณ์สองอันและไม่แน่ใจว่าจะใช้รูปแบบใด

ในเครื่องโฮสต์:

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

และไวยากรณ์อื่น (ในสภาพแวดล้อม chroot):

  mount -t proc none /proc

ฉันควรใช้อันไหนดีและอะไรคือความแตกต่าง?


ระวัง: การให้สิทธิ์การเข้าถึงอุปกรณ์ดิสก์หมายความว่าคุณสูญเสียผลประโยชน์บางส่วนของ ' chroot()' โดยเฉพาะอย่างยิ่งการกำหนดสามารถอ่านไฟล์นอกส่วนของระบบไฟล์หากคุณไม่ระวัง
Jonathan Leffler

2
@ Jonathan Leffler: นั่นดูเหมือนจะไม่เป็นปัญหาสำหรับสิ่งที่เขาทำ
Zifre

@JonathanLeffler ผู้ใช้รูทใน chroot สามารถหลีกเลี่ยง chroot ได้เสมอ
LtWorf

คำตอบ:


43

สำหรับ/procและ/sysฉันคิดว่าคุณสามารถใช้วิธีใดวิธีหนึ่ง ทั้งสองเป็นระบบไฟล์พิเศษเพื่อให้สามารถสร้างใหม่ได้หลายครั้ง (วิธีการเชื่อมโยงใช้เมานท์แบบเดียวกับระบบโฮสต์ในขณะที่วิธีอื่นใช้เมาท์แบบใหม่) ฉันเคยเห็นภูเขาผูกแนะนำในคู่มือดังนั้นฉันจะใช้มัน เท่าที่ฉันรู้ไม่มีความแตกต่างที่สำคัญจริง ๆ

อย่างไรก็ตาม/devโดยปกติแล้วการติดตั้ง tmpfs ที่จัดการโดย udev ดังนั้นจึงต้องเป็นระบบไฟล์เดียวกันกับเครื่องโฮสต์ นั่นหมายความว่าคุณจะต้องใช้เมธอด bind mount

หาก chroot นี้กำลังจะเกิดขึ้นชั่วขณะหนึ่งคุณสามารถใส่รายการเหล่านี้ใน/etc/fstabระบบโฮสต์เพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้น


ฉันต้องการถามว่าการคัดลอก (ผูก) proc / sys จากโฮสต์ไปยังเครื่องอื่นหรือไม่ ทำไมพวกเขาควรจับคู่เครื่องนั้น
ransh

@ransh มันสมเหตุสมผลถ้าคุณผูก / proc ถึง $ chrootdir / proc คุณจะมีความเป็นไปได้ที่จะจัดการ proccess และอะไรเกิดขึ้นภายใน / proc ของทั้งสองระบบจากทั้งสองระบบ เช่นจาก chroot คุณสามารถตรวจสอบว่าโปรแกรมกำลังทำงานอยู่บนโฮสต์ ... ฯลฯ หรือไม่
Jonah

บางทีsys typeระบบไฟล์ดูเหมือนว่า ( วันนี้ ) จะไม่มีอยู่อีกต่อไปหรือ
174140

111

Arch Linux วิกิพีเดียให้เห็นคำสั่งต่อไปนี้:

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
พวกเขาดูเหมือนจะทำงานให้ฉันใน Ubuntu
isaaclw

4
ในกรณีของฉัน (เช่น Ubuntu) ฉันต้องการ "mount -o bind / dev / pts dev / pts" ด้วย
โทมัส

กรุณารวมลิงค์ไปยังแหล่งที่มา
styrofoam fly

@styrofoamfly เพิ่ม
gacrux

1
ในฐานะของ 2019 วิกิพีเดีย ArchLinux ตอนนี้ไม่--rbindสำหรับและsys dev
Saad Malik

12

Gentoo คู่มือเฉพาะโทรออกทั้งสองคำสั่งอีกครั้งการติดตั้ง / proc และ / dev ฉันใช้มันหลายครั้ง

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

ฉันสงสัยว่า / sys เป็นเพียงโฟลเดอร์ปกติดังนั้นคุณควรสร้างลิงก์ได้ยาก

ln /sys /mnt/chroot/sys

17
คุณไม่สามารถเชื่อมโยงไดเรกทอรี (ปกติ) เช่นคุณแนะนำสำหรับ / sys และถ้าคุณใช้ symlink มันจะแตกทันทีที่คุณ chroot

พวกเขาได้เพิ่มใหม่ขึ้นอยู่กับ systemd อาจเป็นความคิดที่ดีที่จะเพิ่มเข้าไป
AzP

1

มันอาจจะเป็นที่น่าสังเกตในคำถามนี้เป็นที่นิยมที่ Arch Linux ได้ทำสคริปต์ซุ้มประตู chroot ; ดาวน์โหลดarch-install-scripts-15-1-any.pkg.tar.xz

ซึ่งดูแลปัญหาต่าง ๆ ที่เกี่ยวข้องทั้งในArch-LinuxและManjaroที่ฉันใช้มันประสบความสำเร็จเช่นกัน อาจเป็นไปได้มากขึ้น Arch- derivatesเช่นพาราโบลาเข้ากันได้ก็เช่นกัน

ในขณะที่มาตรฐานง่ายๆchrootในการติดตั้ง Manjaro รองจะไม่อนุญาตให้คุณเรียกใช้

pacman --sync linux

(สัญลักษณ์แสดงหัวข้อย่อยสีเงินหลังจากระบบขัดข้อง) แทนที่บรรทัดด้วย

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

จะช่วยให้คุณแก้ไขการติดตั้ง Arch-derivate ครั้งที่สองผ่าน

pacman --sync linux

ชอบเสน่ห์ สคริปต์ทุบตีarch-chrootดูแล/dev /sys /procและอื่น ๆ chrootอีกมากมายซึ่งจะเหลือเพียงอย่างเดียวโดยมาตรฐาน

ดูเพิ่มเติม: การใช้ arch-chroot


-1

มีระบบไฟล์หลอกอื่น ๆ และสถานที่ tmpfs นี่คือเดเบียน:

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

มันควรจะโอเคที่จะเมานusbfsต์rpc_pipefsและdevptsหลอกระบบไฟล์จากภายใน chroot ฉันแนะนำอีกครั้งว่าไม่ผูกพัน/procกับ chroot /procเนื่องจากเคอร์เนลมีแนวคิดของเนมสเปซและสามารถนำสิ่งต่าง ๆ เข้ามาใน proc ของ chroot ได้

อัพเดต: ตามเธรดรายการจดหมายนี้ / sys ไม่ควรถูกเชื่อมโยงโดยเฉพาะอย่างยิ่งหากกระบวนการ chrooted ใช้เนมสเปซเครือข่ายของตัวเอง

เป็นความคิดที่ดีที่จะเมานต์ระบบ/varหรือ/runบน chroot ถ้า chroot มีเนมสเปซของตัวเอง


เก็งกำไร? ใน superuser (และฟอรัมสแต็คอื่น ๆ ) โดยปกติแล้วมันจะดีกว่าที่จะชะลอหรือวิจัยและตอบกับแหล่งข้อมูลที่เชื่อมโยงหากคุณไม่แน่ใจ เพื่อหลีกเลี่ยงความเสี่ยงในการแพร่กระจายคำแนะนำที่เข้าใจผิด ขออภัยหากผิดหวังและโชคดี!
Simon B.

@SimonB ฉันได้เพิ่มลิงก์ไปยังรายชื่อผู้รับจดหมายที่สนับสนุนแนวคิดที่ว่า / sys ไม่ควรเชื่อมโยง
Brian Minton

ด้วย pid เนมสเปซคุณกำลังพูดถึงคุณสมบัติผู้ใช้เนมสเปซขั้นสูงที่เราสามารถหาได้จากเคอร์เนล linux ที่ทันสมัย ​​(เช่นฟีเจอร์ "คอนเทนเนอร์" ยึดตาม) ในขณะที่เมื่อเราใช้คำว่า chroot เราอ้างถึงการเปลี่ยนเนมสเปซไฟล์แบบดั้งเดิม และไม่มีอะไรอื่น)
Johan Boulé

-1

วิธีที่ง่ายที่สุดคือใช้สำหรับลูป:

cd /

for i in proc sys dev; do mount -o bind $i /folder/$i; done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.