Instalando e usando multiplas distros ao mesmo tempo

O problema :

Antigamente ter um hardware apple rodando linux era trivial, tirando o modem todo o resto subia sem qualquer dificuldade. Com a troca de arquitetura de PPC para i386 é provavel que os developers tenham abandonado o linux pois apesar do hardware do mac ser muito parecido com o dos PCs, quase nada vem funcionando “de graça” …

O Fedora que tinha um suporte fantástico aos macs PPC não presta para macs-intel e fiquei na mão … Depois de perder um tempão com o Archlinux , não quis arriscar com o gentoo, apelei e coloquei opensuse … wow, funcionou quase tudo de primeira, e decidi manter a distro pelo seu ótimo suporte ao meu hardware.

Mas como o mundo é injusto , tive que instalar programas e bibliotecas exotéricas , que exigem versões velhas de outras bibliotecas mais extravagantes ainda, e como essas coisas são desenvolvidas em debian e para debian, naturalmente sequer compilavam no opensuse. Quando quase estava instalando debian na máquina meu debianita favorito @kov reforçou uma idéia que eu já tinha descartado, a do chroot.

Chroot significa change root , ou seja ele altera o diretório “/” de uma instância do shell, isso permite que eu mude meu shell de distribuição sem ter que rebootar a máquina. Melhor que isso, em paralelo, e quantas forem necessárias… O comando é simples :


chroot /dir /bin/bash

Onde “/dir” é o diretório onde eu tenho minha distro alternativa …

Para resolver meu problema, precisava de um debian no meu opensuse, fiz o seguinte …

A solução :

Primeiro precisei instalar uma distro, como não uso debian (ou demais variantes) não tenho acesso ao debootstrap, ferramenta usada para criar subdistros debian … Pra não ter que instalar a distro em uma partição física da máquina, peguei um template de distro desses usados em máquinas virtuais , no caso os do openvz, clicando aqui . Baixei um tar do debian lenny i386 com uns 200 mb mais ou menos.

Feito isso, criei um diretório chamado /opt/debian, e descompactei a mini distro debian lá dentro usando tar -xzvpf , note que o “p” nesse comando é importante para criar os links, sockets,  e manter as permissões.

Assim basta usar o comando chroot /opt/debian /bin/bash para entrar em sua sub-distro, pronto né ? Não ! Tem uns pequenos detalhes pra resolver.

Internet e rede

Para que seu sistema alternativo tenha acesso à rede e internet você deve criar/editar o arquivo (dentro do ambiente chrooted) /etc/resolv.conf , por exemplo :


nameserver 4.2.2.1
nameserver 4.2.2.2

Com isso você já pode fazer um apt-get update/upgrade 🙂

Suporte ao hardware

Até aqui, a distro alternativa não tem acesso aos devices do sistema principal, como partições , cameras , pendrives etc… Para habilitar esses recursos saia do ambiente chrooted (Control + d) e use esses dois comandos simples :


mount -o bind /proc /opt/debian/proc
mount -o bind /dev /opt/debian/dev

Com isso o debian alternativo terá acesso ao hardware da mesma forma que a distro principal, inclusive com poder de formatar e destruir tudo 😛

Suporte ao X

Suporte ao X não se faz apenas com /dev e o /proc habilitados, tem que liberar o acesso ao Xserver à partir do cliente X (ou seja de um terminal qualquer do seu usuário normal) com o comando xhost + . Como root (da distro principal) você deve “montar” a partição /tmp dentro do ambiente chroot :

mount -o bind /tmp /opt/debian/tmp


Agora o debian alternativo tem acesso ao soquete do X . Falta só dentro do chroot executar export DISPLAY=:0.0 agora tudo que vc abrir à partir do chroot vai abrir no X normal da sua distro principal =)

Para facilitar minha vida , criei 2 scripts que automatizam esse processo para mim, com apenas dois comando entro no meu chroot e começo a usar como num terminal comum. Se alguém quiser eu disponibilizo.

9 thoughts on “Instalando e usando multiplas distros ao mesmo tempo

  1. Pingback: Quer um conselho ? Troque de distro ! » LINN – Liquuid Is Not a Nerd o/

  2. Freeman

    Aqui no Fedora fiz o seguinte:
    # mkdir /opt/debian
    # DEBIAN=/opt/debian
    # export fuckthe=”mount -o bind”
    # fuckthe /sys $DEBIAN/sys
    # fuckthe /proc $DEBIAN/proc
    # fuckthe /dev $DEBIAN/dev
    # fuckthe /tmp $DEBIAN/tmp
    # yum -y install debootstrap
    # debootstrap –arch i386 lenny /opt/debian ftp://debian.das.ufsc.br/pub/debian/
    # chroot $DEBIAN /bin/bash
    # export DISPLAY=:0.0
    # dhclient eth0

    Só.
    Pode trocar o arch por outro como ppc se quiser.
    Me baseei no seu post pra procurar na internet uma forma mais fácil de fazer isso. Foi útil para rodar o ambiente de desenvolvimento do mamona direito no fedora…
    Do jeito que você fez eu tive que fazer um monte de confs pra funcionar os locales e a utilidade de criar usuários normais afim de deixar o sistema longe do /dev/ :O
    Rodando o debootstrap configura o sistema direitinho.

  3. liquuid Post author

    No opensuse não achei o debbootstrap , e da forma como demonstrei é possivel fazer o mesmo com qualquer distribuição, por isso achei que valia o post.

    Não tive a preocupação de deixar o sistema embutido longe do /dev pq assumi que o leitor sabe o que esta fazendo, e sabe que não é virtualização 😛

    De qualquer forma da pra usar como usuário non-root bastando exportar o /home com o bind e criar a entrada correta no /etc/passwd da distro secundária.

    Lembrando que se substituir o i386 por PPC em uma máquina intel vai dar tela azul 😛

    Seria lindo se existisse DISTRObootstrap para todas as distros ,mas infelizmente só tem pra debian, ubuntu e fedora…. Tem fedorabootstrap , mas quero distância do fedora até o suporte de 2 anos chegar.

  4. Freeman

    Você pode fazer o que eu fiz aqui da primeira vez, descobri só depois que tinha no repositório do fedora.
    Mas tipo, baixei o debootstrap.deb mesmo e descompactei. Depois movi o script pra /usr/sbin e executei de boa. Só na minha segunda máquina que fui rodar o yum -y install debootstrap ;P
    (Mal de slackuser)

    Estou usando o Fedora aqui desde dezembro.
    Fiz a seguinte gambiarra quando lançou versão nova:
    # yum clean all ; rpm -Uvh http://download.fedora.redhat.com/pub/fedora/linux/releases/11/Fedora/i386/os/Packages/fedora-release-11-1.noarch.rpm ; yum -y upgrade ; reboot

    Na teoria não deveria funcionar, a equipe de desenvolvimento condena e diz que pode quebrar fudido o sistema, mas não deu nada que eu não pudesse resolver com um reinstall dos pacotes que estavam dando problema. O sistema está solid aqui e inclusive ficou até mais rápido quando atualizou. Tentarei o mesmo com o Fedora 12.

  5. liquuid Post author

    Então, boto fé que da pra instalar o debootstrap em qualquer distro, mas rodar o debian é o menor dos meus problemas, eu quero slack, gentoo, gobo linux, mandriva sacou ? E não tem slackbootstrap, gentoobootstrap etc… pra cada distro deve existir um estratégia diferente, este post botou todo mundo no mesmo saco. Eu postei do jeito mais dificil pq resolve o problema em qualquer distro para qualquer distro.

    Já o fedora , não da pra confiar nele pra servidor, não posso me dar ao luxo de fazer um upgrade com yum e correr o risco de passar 3 dias resolvendo pacotes quebrados pra ter o sistem de emails do cliente funcionando. Sei que existe um system-upgrade mas ele é (ou era) gráfico ! Como vou rodar isso num VPS ? E o fedora não foca muito no desktop, fico totalmente na mão do rpmfusion e sou obrigado a criar repositórios gigantes pra me antender, coisa que ainda não tive que fazer no opensuse.
    Fedora pra mim só pra workstation, e server quando ele amadurecer mais 😛

  6. rogerio machado

    muito legal esse teu post estou usando sua dicas aqui…
    tem como fazer com que esses ambientes “chroot” tenham seu proprios endereços de rede?

  7. liquuid Post author

    Pesquisei e não encontrei forma fácil, talvez só seja possível com virtualização ou regras insanas de iptables …

  8. rogerio machado

    pois é to me virando com as tais regras insanas mesmo, que na verdade de insanas não tem nada, só tive de resolver conflitos de serviços usando as mesmas portas, não consegui de forma alguma instalar o tal módulo blah do virtualbox, e pelo yast/virtualização o driver na nvidia não é compatível com o kernel xen, deixei pra lá e estou usando só o chroot mesmo

Comments are closed.