Chroot
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 #
links http://distfiles.gentoo.org/snapshots/
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:
/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.