Chroot

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Chroot and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎日本語 • ‎한국어 • ‎português do Brasil • ‎русский • ‎Türkçe • ‎中文(中国大陆)‎


Resources

Chroot (Change root) é um utilitário do sistema Unix usado para alterar o diretório aparente do root para criar um novo ambiente logicamente separado do diretório root do sistema principal. Este novo ambiente é conhecido como "jaula chroot". Um usuário operando de dentro da jaula não pode ver ou acessar arquivos fora do ambiente que tenha sido bloqueado.

Um dos principais usos para chrooting é criar um sistema Linux em cima de um atual para fins de teste ou compatibilidade de software. Chroot é frequentemente visto como uma alternativa leve para a virtualização, porque é capaz de funcionar sem a sobrecarga de um hypervisor.

Pré-requisitos

Configurando o ambiente

Ao criar uma nova configuração de chroot, a primeira coisa necessária é um diretório para o chroot residir. Por exemplo, um chroot pode ser criado em /mnt/mychroot:

user $mkdir /mnt/mychroot
user $cd /mnt/mychroot

Para montar uma instalação existente de uma partição o seguinte comando pode ser executado. Certifique-se de substituir <DEVICE> no exemplo abaixo com o drive e partição da instalação existente:

user $mkdir /mnt/mychroot
user $mount /dev/<DEVICE> /mnt/mychroot

Se uma instalação já tenha sido criada anteriormente em um sub-diretório do sistema de arquivo atual do root, os passos acima podem ser ignorados.

Desempacotando sistema de arquivos e a árvore do Portage (novas instalações)

Ao criar uma nova instalação, o próximo passo é baixar os tarballs do stage3 e do Portage e configurá-los no chroot. Para maiores informações nestes processos, por favor, veja Baixando o arquivo tar do stage e Desempacotando o arquivo tar de stage

root #tar xvjpf stage3-*.tar.bz2 -C /mnt/mychroot
root #tar xvjf portage-*.tar.bz2 -C /mnt/mychroot/usr

Configuração

Antes de entrar no chroot um número de diretórios precisam ser montados:

root #mount --rbind /dev /mnt/mychroot/dev
root #mount --make-rslave /mnt/mychroot/dev
root #mount -t proc /proc /mnt/mychroot/proc
root #mount --rbind /sys /mnt/mychroot/sys
root #mount --make-rslave /mnt/mychroot/sys
root #mount --rbind /tmp /mnt/mychroot/tmp

Alguns arquivos básicos de configuração terão ser copiados a partir do host, não copie mais do make.conf ao usar uma instalação existente:

user $cp /etc/portage/make.conf /mnt/mychroot/etc/portage # Quando usar uma instalação existente, ignore este comando.
user $cp /etc/resolv.conf /mnt/mychroot/etc

Uso

Uma vez feito, entre no ambiente de chroot executando os seguintes comandos:

root #chroot /mnt/mychroot /bin/bash
root #env-update
root #source /etc/profile
root #export PS1="(chroot) $PS1"

Ao criar uma nova instalação o Portage deve ser sincronizado para garantir que tudo está atualizado.

root #emerge --sync

O sistema agora está pronto; fique à vontade para instalar softwares, mexer com as configurações, pacotes experimentais de teste e configurações sem ter qualquer efeito sobre o sistema principal. Para sair do chroot simplesmente digite exit ou pressione Ctrl+d. Fazendo isto, irá retornar o console de volta ao ambiente normal. Não se esqueça de executar umount nos diretórios que foram montados.

Scripts de inicialização

Se a definição de chroots é uma tarefa que é necessária ser realizada frequentemente, é possível acelerar a montagem dos diretórios usando um script de inicialização. O script precisa ser adicionado ao runlevel default e portanto configurado automaticamente na inicialização do sistema:

FILE /etc/init.d/mychroot
#!/sbin/openrc-run
 
depend() {
   need localmount
   need bootmisc
}
 
start() {
     ebegin "Mounting chroot directories"
     mount -o rbind /dev /mnt/mychroot/dev > /dev/null &
     mount -t proc none /mnt/mychroot/proc > /dev/null &
     mount -o bind /sys /mnt/mychroot/sys > /dev/null &
     mount -o bind /tmp /mnt/mychroot/tmp > /dev/null &
     eend $? "An error occurred while mounting chroot directories"
}
 
stop() {
     ebegin "Unmounting chroot directories"
     umount -f /mnt/mychroot/dev > /dev/null &
     umount -f /mnt/mychroot/proc > /dev/null &
     umount -f /mnt/mychroot/sys > /dev/null &
     umount -f /mnt/mychroot/tmp > /dev/null &
     eend $? "An error occurred while unmounting chroot directories"
}

Ao usar um diretório ou partição diferente, adicione os comandos de montagem necessários na função start() e altere /mnt/chroot para o nome apropriado.

Veja também