O que exatamente é um chroot? É semelhante a uma inicialização dupla simultânea?

2

Foi sugerido para mim que o uso de um chroot poderia resolver meu problema de criar um aplicativo que deve ser executado em um dispositivo incorporado. Eu deduzi a partir desta descrição que é de alguma forma semelhante a criar o ambiente incorporado localmente na minha máquina, que eu posso usar para desenvolver a partir da minha máquina de desenvolvimento de desktop. Este é o caminho certo para olhar para a funcionalidade ou eu realmente não entendi?

Para ter uma idéia de como funciona, eu leio esse link que tentarei fazer um chroot para um antigo Versão do Ubuntu na minha máquina. No entanto, como eu sou um iniciante linux total, estou um pouco preocupado que, como eu não sei inteiramente o que estou fazendo é lá de qualquer maneira que eu poderia acabar com um sistema inutilizável ?? Isso é algo que um novato deve tentar mesmo ???

    
por mathematician1975 12.07.2012 / 15:37

6 respostas

2

chroot não tem nada a ver com inicialização dupla. A idéia por trás de chroot é a capacidade de mudar um programa, ou um shell, etc., para um novo diretório raiz, permitindo que você tenha vários "sistemas" ao mesmo tempo. "systems" está entre aspas porque ainda existe apenas um kernel Linux em execução. Este outro "sistema" é um conjunto adicional de ferramentas de código, diretórios home, etc. Então, se você está em uma máquina x86 e está tentando construir algum software para ARM em sua máquina, você pode criar um chroot ed ambiente cujo /proc informa ao software que está no ARM, uma toolchain do ARM GCC, etc. (Existem muitos programas que fazem isso). A outra coisa que o chroot pode fazer é um sandboxing muito limitado, que combinado com algo como o SELinux e permissões básicas do Linux, poderia criar uma sandbox relativamente segura, na qual este aplicativo acha que está em um sistema diferente. Outro uso de chroot estaria testando. Se você tem um aplicativo que faz coisas diferentes com base em algum diretório do sistema, você pode criar um chroot para testá-lo.

    
por Linuxios 12.07.2012 / 16:58
5

Eu sinto que ninguém deu uma explicação técnica completa, então aqui vai.

Para entender um chroot você primeiro tem que entender a divisão entre o kernel (o Linux no GNU / Linux) e o userspace (o GNU no GNU / Linux, ou possivelmente outra coisa, como o busybox.)

O kernel controla todo o hardware do seu computador. Ele também fornece as APIs para acesso a arquivos, rede e assim por diante, e controla quais programas de software estão sendo executados. Isso tudo forma uma abstração do computador, que é apresentado por meio de uma interface de programação de aplicativo (API). Ele não faz nada por si mesmo, exceto talvez inicializar em uma tela preta. Nem mesmo um prompt de shell.

O espaço do usuário é tudo o mais . Todo o software que você executa no seu computador. Na verdade, o kernel só executa um programa de espaço de usuário diretamente, o init, que é então responsável por iniciar todo o resto, como shells e ambientes de desktop. O espaço do usuário também inclui bibliotecas, que geralmente começam com a libc, sobre as quais todas as outras bibliotecas são construídas.

Então, com isso em mente, o conceito de um chroot é simples. Apenas altera o diretório raiz do sistema de arquivos unix para outro diferente, apenas para o comando que você escolher para executar neste contexto. Este é geralmente um shell que você pode lançar outro software, tanto quanto o kernel só lança um único comando diretamente. Esse novo contexto pode ter um conjunto diferente de programas e bibliotecas do espaço do usuário. O mesmo kernel está rodando ambos os conjuntos de software, então ambos os sistemas podem usar todos os recursos de hardware, mas (exceto os bugs de segurança) o chroot aninhado não pode acessar nada do sistema de arquivos primário. Ele tem sua própria versão de / etc para configuração, é próprio / lib para bibliotecas e é próprio / bin, / usr / bin para programas.

Você deve estar ciente de que os dispositivos de hardware são compartilhados . Então, ao contrário de uma máquina virtual, se você formatar / dev / sda de dentro do chroot, você irá formatar seu disco rígido real . Isso ocorre porque os nós do dispositivo em / dev são uma interface direta do kernel, portanto eles significam a mesma coisa dentro e fora do chroot.

Uma outra coisa: é possível dar acesso ao chroot ao sistema de arquivos externo com montagens de ligação. Se você usar uma ferramenta de criação de chroot, é possível que ela "seja útil" sistema principal dentro do chroot. Esta não é uma cópia, é o mesmo sistema de arquivos, e neste caso, quaisquer alterações feitas dentro do chroot serão realizadas no original. Então, eu recomendo que você crie chroots manualmente até que você esteja confortável com o modo como eles funcionam.

Além desses dois problemas em potencial, não há muito que possa dar errado com um chroot, já que é principalmente um sistema autônomo que só será iniciado quando você pedir por ele.

    
por Alistair Buxton 21.10.2012 / 03:07
2

Deixe-me tentar explicar o chroot em termos do Windows. No Windows, a "raiz" da partição de inicialização é chamada "C: \". No Linux, ela é chamada "/". Choort (temporariamente) permite que você faça alguma outra pasta / partição / dispositivo na partição raiz. Se o Windows tivesse um comando de seleção, ele poderia ter funcionado da seguinte maneira.

Imagine que você tenha um computador com duas partições ou unidades com duas versões (ou cópias) do Windows instaladas. Vamos chamá-los de WinA e WinB. Quando você inicializa o WinA, sua raiz torna-se C: \ e WinB pode parecer estar em D :. Quando você inicializa o WinB, C: \ refere-se à partição onde o WinB está instalado e D: \ é o local onde o WinA está. Agora, digamos que você queira fazer algumas alterações no WinA e no WinB executando um programa z. Quando você executa z, ele faz todas as mudanças que você quer no sistema que tem a raiz C :. No mundo do Windows, você tem que inicializar o WinA run z, depois inicializar o WinB e rodar o z. O chroot permite que você faça o D: \ em C: \ sem reinicializar. Então você pode inicializar o WinA executar o chroot para fazer o D: o novo C: e executar o programa z para que as mudanças sejam feitas no WinB que reside em D: \ ao invés do WinA, que está no C:.

original

Agora, deixe-me dar um exemplo de como eu usei o chroot. Uma vez meu Ubuntu tornou-se não inicializável. Acontece que o grub precisava ser reinstalado. Isso é fácil se eu puder inicializar o Ubuntu e executar o comando que instala o grub. Mas eu precisava fazer isso de um USB. Então eu inicializei o Ubuntu de um drive USB. Se eu emitisse o comando para instalar o grub, eu instalaria o grub no USB. Então eu precisei montar a partion no disco rígido onde o Ubuntu com o grub quebrado está instalado e usar o chroot para apontar para aquela partição montada. Então eu reinstalei o grub e o grub foi instalado no disco rígido onde deveria estar.

    
por user68186 12.07.2012 / 17:52
1

O Chroot permite que você execute um comando ou shell a partir de outro diretório raiz. Se foi sugerido a você por causa de um dispositivo embutido, isso significa que você estará executando um shell a partir do diretório-raiz desse dispositivo.

    
por Nathaniel Pisarski 12.07.2012 / 15:42
1

Não é verdade, não.

A inicialização de um SO envolve o carregamento de um kernel que controla o hardware e, em seguida, executa vários outros programas. chroot roda um programa (normalmente um shell, de onde você pode rodar outros programas) sob o seu kernel atual, apenas o kernel está no programa e finge que o diretório raiz é algum outro diretório que aquele que está realmente usando como o raiz. Daí, o nome do comando, porque ele muda o diretório raiz.

No seu caso, debootstrap configura uma árvore de diretórios que é adequada para usar como diretório raiz. Você poderia inicializar um kernel e dizer para ele usar esse diretório como root ao invés de seu root fs normal, e você estaria inicializando o sistema. Usando chroot você pode rodar programas como se eles estivessem rodando sob um kernel que inicializou usando o diretório como sua raiz, sem precisar fazer isso.

    
por psusi 12.07.2012 / 16:50
0

Quando você está inicializando de outro sistema, por exemplo, um Live CD, você pode entrar em um sistema de arquivos (linux) usando o chroot.

Com isso, você pode, por exemplo, reparar o GRUB (em caso de erros). Isso também é muito útil se você não puder inicializar e quiser baixar arquivos importantes de uma partição específica.

    
por slashcrack 12.07.2012 / 15:47