mount dev, proc, sys in un ambiente chroot?


87

Sto cercando di creare un'immagine Linux con pacchetti scelti personalizzati.
Quello che sto cercando di fare è creare a mano i pacchetti che userò su un laptop XO, perché la compilazione dei pacchetti richiede molto tempo sul vero hardware XO, se riesco a compilare tutti i pacchetti di cui ho bisogno e basta eseguire il flashing del immagine alla XO, posso risparmiare tempo e spazio.

Quando ho provato ad installare alcuni pacchetti, la configurazione non è riuscita a causa della mancanza delle directory proc, sys, dev. Quindi, ho imparato da altri posti che ho bisogno di "montare" il proc host, ... 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

Quale dovrei usare e quali sono le differenze?


Attenzione: concedere l'accesso ai dispositivi a disco significa perdere alcuni dei vantaggi di " chroot()". In particolare, il determinato può leggere i file al di fuori della loro sezione del file system se non stai attento.
Jonathan Leffler,

2
@Jonathan Leffler: non sembra un problema per quello che sta facendo.
Zifre,

@JonathanLeffler un utente root in un chroot può sempre sfuggire comunque al chroot.
Ten .orf

Risposte:


43

Per /proce /sys, suppongo che potresti usare entrambi i metodi. Sono entrambi file system speciali, quindi possono essere ricreati un numero qualsiasi di volte (il metodo mount bind utilizza lo stesso mount esatto del sistema host, mentre l'altro metodo utilizza un nuovo mount). Ho sempre visto il bind mount raccomandato nelle guide, quindi lo userei. Per quanto ne so, non c'è alcuna differenza davvero importante.

Tuttavia, di /devsolito è un mount tmpfs gestito da udev, quindi deve essere lo stesso file system effettivo sul computer host. Ciò significa che è necessario utilizzare il metodo mount bind.

Se questo chroot sarà disponibile per un po ', puoi inserire queste voci nel /etc/fstabsistema host per semplificare le cose.


Vorrei chiedere se ha senso copiare (vincolare) il proc / sys dall'host su un'altra macchina? Perché dovrebbero abbinare quella macchina?
riscatto

@ransh ha senso se associ / proc a $ chrootdir / proc, avrai la possibilità di gestire il processo e cosa succede all'interno / proc di entrambi i sistemi da entrambi i sistemi; es: da chroot puoi verificare se un programma è in esecuzione sull'host ... ecc.
Giona

Forse il sys typefile system sembra ( oggi ) non esistere più?
174140

111

L' 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/

2
Sembravano funzionare anche per me in Ubuntu.
isaaclw,

4
Nel mio caso (anche Ubuntu) avevo bisogno anche di un "mount -o bind / dev / pts dev / pts".
Thomas,

Si prega di includere il collegamento alla fonte.
polistirolo vola il

@styrofoamfly Aggiunto.
Gacrux,

1
A partire dal 2019, il wiki di ArchLinux ora funziona --rbindper syse dev.
Saad Malik,

12

Il Manuale Gentoo chiama specificamente questi due comandi per il re-montaggio / proc e / dev. Li ho usati più volte.

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

Sospetto / sys è solo una cartella normale, quindi dovresti essere in grado di creare un collegamento reale.

ln /sys /mnt/chroot/sys

17
Non puoi hardlinkare una directory (di solito) come suggerisci per / sys, e se usi un link simbolico si interromperà non appena chroot.

Ne hanno aggiunti alcuni nuovi, basati su systemd. Forse è una buona idea aggiungerli.
AzP

1

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

Ciò che si occupa di vari problemi correlati sia in Arch-Linux che in Manjaro , dove l'ho usato anche con successo. Forse anche più derivati dell'Arco come Parabola sono compatibili.

Mentre un semplice standard chrootin un'installazione Manjaro secondaria non ti consentirà di eseguirlo

pacman --sync linux

(il proiettile d'argento dopo un crash del sistema), sostituendo la linea con

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

ti consentirà di correggere l'installazione secondaria di Arch-derivate tramite

pacman --sync linux

a meraviglia. Lo script bash arch-chrootsi occupa di /dev /sys /proce molto altro, che sono lasciati soli dallo standard chroot.

vedi anche: Uso di arch-chroot


-1

Esistono 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

Dovrebbe essere corretto montare il usbfs, rpc_pipefse devptspseudo-filesystem dall'interno del chroot. Consiglio di non impegnarsi /proccon i chroot /proc, poiché il kernel ha il concetto di spazi dei nomi e può effettivamente mettere cose diverse nel proc di chroot.

Aggiornamento: secondo questo thread della mailing list , / sys non dovrebbe essere montato, specialmente se i processi chrooted stanno usando il proprio spazio dei nomi di rete.

È una cattiva idea montare il sistema /varo /runsul chroot, se il chroot ha il suo spazio dei nomi pid.


Speculazione? Su superutente (e altri forum di stack) di solito è meglio tenere a bada, o cercare e rispondere con fonti collegate, se non si è sicuri. Questo per evitare il rischio di diffondere suggerimenti sbagliati. Scusate se deludete e buona fortuna!
Simon B.

@SimonB. Ho aggiunto un link a una mailing list a supporto dell'idea che / sys non debba essere montato.
Brian Minton,

Con lo spazio dei nomi pid, stai parlando di funzionalità dello spazio dei nomi utente più avanzate che possiamo trovare sui moderni kernel Linux (ovvero le caratteristiche su cui si basano i "contenitori"), mentre quando usiamo il termine chroot, ci riferiamo alla tradizionale modifica dello spazio dei nomi dei file ( e nient'altro).
Johan Boulé,

-1

Il modo più semplice è usare un ciclo for:

cd /

for i in proc sys dev; do mount -o bind $i /folder/$i; done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.