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

mount dev, proc, sys num ambiente chroot?

Estou a tentar criar uma imagem Linux com pacotes escolhidos à medida.
O que estou a tentar fazer é criar manualmente os pacotes que vou usar num portátil XO, porque compilar pacotes demora muito tempo no hardware XO real, se eu conseguir compilar todos os pacotes que preciso e apenas flashar a imagem para o XO, posso poupar tempo e espaço.

Quando tentei instalar alguns pacotes, falhou a configuração devido à falta dos directórios proc, sys, dev. Assim, aprendi noutros locais que preciso de “montar” os directórios proc, … no meu ambiente chroot.

Vi duas sintaxes e não tenho a certeza qual usar.

Na máquina anfitriã:

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

e outra sintaxe (em ambiente chroot):

mount -t proc none /proc

Qual devo usar, e qual a diferença?

Respostas (6)

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

O Arch Linux Wiki sugere os seguintes comandos:

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

Para /proc e /sys, suponho que se poderia usar qualquer um dos métodos. Ambos são sistemas de arquivo especiais para que possam ser recriados a qualquer número de vezes (o método bind mount usa exatamente a mesma montagem que o sistema hospedeiro, enquanto o outro método usa uma nova montagem). Eu sempre vi a montagem bind recomendada nos guias, por isso eu usaria isso. Tanto quanto sei, não há uma diferença realmente importante.

No entanto, /dev é normalmente uma montagem tmpfs que é gerida pelo udev, por isso tem de ser o mesmo sistema de ficheiros da máquina anfitriã. Isso significa que terá de usar o método de montagem bind.

Se este chroot vai ficar por aqui durante algum tempo, pode colocar estas entradas no /etc/fstab no sistema anfitrião para simplificar as coisas.

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

O Gentoo Handbook chama especificamente estes dois comandos para remontagem /proc e /dev. Já os usei várias vezes.

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

Suspeito que /sys é apenas uma pasta normal, por isso deve ser capaz de fazer uma ligação difícil.

ln /sys /mnt/chroot/sys
1
1
1
2016-04-17 15:36:51 +0000

Vale a pena notar nesta pergunta popular, que o Arch Linux fez um script arch-chroot ; download arch-install-scripts-15-1-any.pkg.tar.xz

Isto que resolve vários problemas relacionados tanto em Arch-Linux como Manjaro , onde também o usei com sucesso. Possivelmente, mais arquivo- derivados como Parabola são compatíveis da mesma forma.

Enquanto um simples padrão chroot em uma instalação secundária do Manjaro não permitirá que você execute

pacman --sync linux

(a bala prateada após uma falha do sistema), substituindo a linha por

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

permitirá que você conserte a sua instalação secundária do Arch-derivado via

pacman --sync linux

como um encanto. O script bash arch-chroot trata de /dev /sys /proc e muito mais, que são deixados em paz pelo padrão chroot.

ver também: Usando arch-chroot

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

A maneira mais fácil é usar um para 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

Existem outros pseudo-sistemas de ficheiros e localizações tmpfs. Isso está no debian:

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

Deve estar tudo bem montar os pseudo-filesystems usbfs, rpc_pipefs e devpts a partir do chroot. Eu recomendo não* ligar o /proc ao /proc da chroot, já que o núcleo tem o conceito de namespaces, e pode realmente colocar coisas diferentes no proc. chroot.

Update: de acordo com este tópico da mailing list , /sys não deve ser montado bind, especialmente se os processos chroot estão a utilizar o seu próprio espaço de nomes de rede.

É uma má ideia montar o /var ou o /run do sistema no chroot, se o chroot tiver o seu próprio espaço de nomes pid.