2010-07-18 19:06:10 +0000 2010-07-18 19:06:10 +0000
92
92

montare dev, proc, sys in un ambiente chroot?

Sto cercando di creare un'immagine Linux con pacchetti personalizzati.
Quello che sto cercando di fare è di creare a mano i pacchetti che userò su un portatile XO, perché compilare i pacchetti richiede molto tempo sul vero hardware XO, se riesco a costruire tutti i pacchetti di cui ho bisogno e solo flash l'immagine sull'XO, posso risparmiare tempo e spazio.

Quando ho provato ad installare alcuni pacchetti, non è riuscito a configurare a causa della mancanza delle directory proc, sys, dev. Così, ho imparato da altri posti che devo “montare” il proc host, … le directory nel mio ambiente chroot.

Ho visto due sintassi e non sono sicuro di quale usare.

Nella macchina host:

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

e un'altra sintassi (in ambiente chroot):

mount -t proc none /proc
``` &001 


Quale devo usare, e qual è la differenza?

Risposte (6)

118
118
118
2012-04-26 06:10:11 +0000

Il Arch Linux Wiki suggerisce i seguenti comandi:

cd /mnt/arch # or where you are preparing the chroot dir
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/
45
45
45
2010-07-19 01:02:06 +0000

Per /proc e /sys, suppongo che si possa utilizzare l'uno o l'altro metodo. Sono entrambi sistemi di file speciali, quindi possono essere ricreati un numero qualsiasi di volte (il metodo del bind mount usa lo stesso identico mount del sistema host, mentre l'altro metodo usa un nuovo mount). Ho sempre visto il bind mount raccomandato nelle guide, quindi lo userei. Per quanto ne so, non c'è una vera differenza importante.

Tuttavia, /dev è di solito un supporto tmpfs gestito da udev, quindi deve essere lo stesso file system della macchina host. Ciò significa che si dovrebbe usare il metodo del bind mount.

Se questo chroot rimarrà in giro per un po’ di tempo, si possono mettere queste voci in /etc/fstab sul sistema host per semplificare le cose.

13
13
13
2010-07-19 00:05:08 +0000

Il Gentoo Handbook richiama specificamente questi due comandi per il rimontaggio /proc e /dev. Li ho usati più volte.

mount -t proc none /mnt/chroot/proc
mount -o bind /dev /mnt/chroot/dev
``` ```
ln /sys /mnt/chroot/sys

Ho il sospetto che /sys sia solo una normale cartella, quindi dovreste essere in grado di fare un collegamento fisso.

&001

1
1
1
2016-04-17 15:36:51 +0000

Vale la pena di notare in questa popolare domanda, che Arch Linux ha realizzato uno script arch-chroot ; download arch-install-scripts-15-1-any.pkg.tar.xz

Questo che si occupa di vari problemi correlati sia in Arch-Linux che in Manjaro , dove l'ho usato con successo, anche. Forse più Arch- derivate come Parabola sono compatibili altrettanto bene.

Mentre un semplice chroot standard in una installazione secondaria Manjaro non vi permetterà di eseguire

pacman --sync linux

(il proiettile d'argento dopo un crash di sistema), la sostituzione della linea con

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

vi permetterà di risolvere la vostra installazione secondaria Arch-derivata tramite

pacman --sync linux

come un ciondolo. Lo script bash arch-chroot si occupa di /dev /sys /proc e molto altro ancora, che vengono lasciati soli dallo standard chroot.

vedi anche: Usando la radice ad arco

-1
-1
-1
2019-01-20 13:32:32 +0000

Il modo più semplice è quello di utilizzare un per loop:

cd /

for i in proc sys dev; do mount -o bind $i /folder/$i; done
-1
-1
-1
2012-10-15 21:06:00 +0000

Ci sono altri pseudo filesystem e posizioni tmpfs. Questo è su debian:

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


Dovrebbe essere possibile montare gli pseudo-file system `usbfs`, `rpc_pipefs` e `devpts` dall'interno del chroot. Raccomando **non** di legare `/proc` alla chroot `/proc`, dato che il kernel ha il concetto di namespace, e può effettivamente mettere cose diverse nel proc della chroot. 

Update: secondo [ questa mailing list thread ](https://www.redhat.com/archives/libvir-list/2015-March/msg00520.html), /sys non dovrebbe essere bind mounted, specialmente se i processi chrooted utilizzano un proprio namespace di rete. 

È una cattiva idea montare il sistema `/var` o `/run` nella chroot, se la chroot ha un proprio namespace pid.