dev, proc, chroot ortamında sys?


87

Özel paketler ile bir Linux imajı yaratmaya çalışıyorum.
Yapmaya çalıştığım şey, bir XO dizüstü bilgisayarda kullanacağım paketleri oluşturmak, çünkü paketleri derlemek gerçek XO donanımında çok uzun zaman alıyor, eğer ihtiyacım olan tüm paketleri oluşturabilir ve sadece XO görüntü, zaman ve yerden tasarruf edebilirsiniz.

Bazı paketleri kurmaya çalıştığımda proc, sys, dev dizinlerinin eksik olması nedeniyle yapılandıramadı. Bu yüzden, başka yerlerden ana bilgisayar proc'larını "monte etmem" gerektiğini, ... chroot ortamımdaki dizinleri öğrendim.

İki sözdizimi gördüm ve hangisinin kullanılacağından emin değilim.

Ana makinede:

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

ve başka bir sözdizimi (chroot ortamında):

  mount -t proc none /proc

Hangisini kullanmalıyım ve fark nedir?


Dikkat: disk cihazlarına erişim vermek, ' chroot()' avantajlarından bazılarını kaybettiğiniz anlamına gelir . Özellikle, eğer dikkatli değilseniz, dosya sisteminin kendi bölümünün dışındaki dosyaları okuyabilir.
Jonathan Leffler

2
@ Jonathan Leffler: Yaptığı şey için bir sorun gibi görünmüyor.
Zifre

@JonathanLeffler chroot'taki root kullanıcısı her zaman chroot'tan kaçabilir.
LtWorf

Yanıtlar:


43

İçin /procve /sys, senin de yöntemi kullanmak herhalde. Her ikisi de özel dosya sistemleridir, bu nedenle herhangi bir sayıda yeniden oluşturulabilirler (bağlama takma yöntemi, ana bilgisayar sistemi ile tam olarak aynı montajı kullanırken, diğer yöntem yeni bir montaj kullanır). Her zaman rehberlerde önerilen bağlama montajını gördüm, bu yüzden bunu kullanırdım. Bildiğim kadarıyla, önemli bir fark yok.

Ancak, /devgenellikle udev tarafından yönetilen bir tmpfs bağlayıcısıdır, bu nedenle ana makinedeki gerçek dosya sistemi olması gerekir. Bu, mount mount yöntemini kullanmanız gerektiği anlamına gelir.

Bu chroot bir süre civarında olacaksa, bu girişleri /etc/fstabişleri kolaylaştırmak için ana bilgisayar sistemine koyabilirsiniz .


Proc / sys'i hosttan başka bir makineye kopyalamanın (bağlamanın) mantıklı olup olmadığını sormak isterim? Neden bu makineyle eşleşmeliler?
fidye

@ $ chrootdir / proc'a bağlarsanız / proc ederseniz, her iki sistemden de işlem ve her iki sistemin içinde de neler olup bittiğini işlemeniz mümkün olacaktır; örneğin: chroot'tan bir programın sunucuda çalışıp çalışmadığını kontrol edebilirsiniz ... vb.
Jonah

Belki de sys typedosya sistemi ( bugün ) artık mevcut değil gibi görünüyor?
174140

111

Archlinux Wiki aşağıdaki komutları önerir:

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
Ayrıca Ubuntu'da benim için çalışıyor gibiydiler.
isaaclw

4
Benim durumumda (Ubuntu da) "mount -o bind / dev / pts dev / pts" 'a da ihtiyacım vardı.
Thomas

Lütfen kaynağın bağlantısını ekleyin.
strafor uçmak

@styrofoamfly Eklendi.
gacrux

1
2019 itibariyle, ArchLinux wiki artık ve --rbindiçin yapıyor . sysdev
Saad Malik,

12

Gentoo Elkitabı , özellikle yeniden montaj / proc ve / dev bu iki komut çağırır. Onları birkaç kez kullandım.

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

Sanırım / sys sadece normal bir klasör, bu yüzden sert bir bağlantı kurabilmelisiniz.

ln /sys /mnt/chroot/sys

17
/ Sys için önerdiğiniz gibi bir dizini (genellikle) sabitleyemezsiniz ve bir sembolik link kullanırsanız, chroot yapar almaz kırılır.

Systemd bazında bazı yenilerini eklediler. Belki de onları eklemek iyi bir fikirdir.
AzP

1

Bu popüler soruda, Arch Linux'un bir betiği arch-chroot yaptığını belirtmek faydalı olabilir ; indirarch-install-scripts-15-1-any.pkg.tar.xz

Bu , benim de başarılı bir şekilde kullandığım Arch-Linux ve Manjaro'daki çeşitli ilgili sorunların üstesinden geliyor . Muhtemelen Parabol gibi daha fazla türev de aynı şekilde uyumludur.

chrootİkincil bir Manjaro kurulumunda basit bir standart çalıştırmanıza izin vermez

pacman --sync linux

(bir sistem çökmesinden sonraki gümüş kurşun), çizgiyi değiştirir

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

ikincil Arch-türev kurulumunuzu düzeltmenizi sağlar

pacman --sync linux

çekicilik gibi. Bash komut arch-chrootilgilenir /dev /sys /procstandardına göre tek başına bırakılır ve çok daha fazlası, chroot.

ayrıca bakınız: arch-chroot kullanımı


-1

Başka sözde dosya sistemleri ve tmpfs konumları var. Bu debian'da:

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

Monte etmek tamam olmalıdır usbfs, rpc_pipefsve devptschroot içinden sözde dosya sistemleri. Ben öneriyoruz değil bağlayıcı /procchroot giden tarihiyle /procçekirdek ad kavramını sahip olduğundan, ve aslında chroot en proc farklı şeyler koyabilirsiniz.

Güncelleme: Bu posta listesi iş parçacığına göre , / chys, özellikle chrooted işlemleri kendi ağ ad alanını kullanıyorsa, bağlanmış olmamalıdır.

Eğer chroot'un kendi pid ad alanı varsa, sistemi /varveya /runchroot üzerine monte etmek kötü bir fikirdir .


Spekülasyon? Süper kullanıcı (ve diğer yığın forumlarda), eğer emin değilseniz, uzak durmanız veya bağlantılı kaynaklarla araştırma yapıp cevaplamanız daha iyi olur. Bu, yanlış yönlendirilmiş ipuçlarını yayma riskini önlemek içindir. Hayal kırıklığı ve iyi şanslar varsa üzgünüm!
Simon B.

@SimonB. / Sys'in bağlanması gerektiği fikrini destekleyen bir posta listesine bağlantı ekledim.
Brian Minton

Pid ad alanıyla, modern linux çekirdeğinde bulabileceğimiz daha gelişmiş kullanıcı ad alanı özelliklerinden bahsediyorsunuz (yani, "kapsayıcılar" özellikleri temel alınmıştır), chroot terimini kullandığımız zaman geleneksel dosya ad alanı değişikliğine atıfta bulunuruz ( ve başka hiçbir şey).
Johan Boulé

-1

En kolay yol bir for döngüsü kullanmaktır:

cd /

for i in proc sys dev; do mount -o bind $i /folder/$i; done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.