Skip to content


Debootstrap

Muitas pessoas não conhecem o grau de abstração existente em sistemas GNU/Linux. É algo realmente surpreendente conseguir executar sistemas, ou partes de sistemas, independentes daquele que está em execução à partir de simples comandos do terminal.

O Debootstrap é uma ferramenta que lhe permite fazer tal abstração. Mas antes de entendermos como ele trabalha e funciona, devemos entender um pouco do processo de instalação de um sistema:

Ao instalar um sistema Linux, encontramos a primeira mensagem: “Instalando o sistema básico”. Já lhe passou na cabeça sobre o que é isso, ou como isso é feito?

  • Primeiramente, o sistema de instalação encontra seu HD;
  • Logo após o particiona em pedaços menores, que são suas partições;
  • Depois monta, em uma pasta na memória, sua partição; e
  • Nesse novo ponto de montagem, faz um debootstrap do sistema, ou seja,
    instala o sistema básico na partição. Instala os pacotes GNU e os pacotes
    específicos de sua distribuição, como o dpkg (Debian), o Yast2 (SuSe), etc.

Após esses passos, basta instalar o Linux (kernel), o gestor de inicialização (GRUB) e pronto! Seu sistema está instalado e pronto para uso.

O que me admira é a facilidade* encontrada nesse processo, que muitos pensam ser uma caixa preta.
*dependente do hardware ter sido encontrado

Agora voltamos ao início que estava explicando e eu lhe faço uma pergunta: “Sabia que é possível fazer isso em uma pasta qualquer de seu sistema?”

Bom, sempre trabalhei com sistemas Debian e por isso, vou tratar esse sistema aqui.

No Debian, o pacote responsável pelo processo de debootstrap também chama-se debootstrap. Instale-o através do comando:

apt-get install debootstrap

Agora, com poderes de super usuário, utilize o debootstrap, seguindo a sintaxe:

debootstrap  suíte pasta_local URL_DO_REPOSITORIO

Um exemplo seria:

debootstrap lenny pasta_local http://ftp.br.debian.org/debian

Ao dar o comando, serão obtidos  e instalados na pasta local os pacotes necessários para a versão Debian escolhida.

Ao terminar o processo, você poderá utilizar sua nova pasta, melhor dizendo, seu novo sistema. Porém, algumas modificações devem ser feitas para que ela funcione corretamente. Siga as descrições abaixo para que tudo funcione corretamente.

Para utilizar a pasta, você deve utilizar o aplicativo chroot, pois ele é capaz de alterar a barra do sistema para o shell aberto.

Mas antes de utilizar a pasta, faça a montagem do /dev dentro do /dev de sua nova pasta. Desde o Linux 2.4.0 é possível fazer tal operação como um espelhamento, através da opção bind do mount. Então faça o comando:

mount  -o bind /dev pasta_local/dev

Com isso, você conseguirá acessar seus dispositivos através de seu novo sistema.

Mais uma opção interessante é copiar o arquivo /etc/resolv.conf para dentro de sua pasta local: pasta_local/etc/resolv.conf.
Assim, as configurações do servidor de DNS também estarão presentes no seu novo sistema.

Agora sim, podemos entrar no sistema e prepará-lo para uso. Dê o comando chroot:

chroot pasta_local

Devemos então, preparar o sistema para uso,  montando mais alguns lugares. Toda a vez que der o comando chroot e estas pastas não estiverem montadas, será necessário montá-las novamente. Faça:

mount -t proc none /proc

mount -t sysfs none /sys

Essas duas pastas que fornecerão as informações de tempo real para seu sistema, temos as informações do Linux, como os processos que estão executando com suas dependências e memória, como os dispositivos e partições detectados, e várias outras informações necessárias para o funcionamento correto do sistema. Para mais informações, dê o comando: man proc.

Agora precisamos definir quem é localhost, pois até o momento seu novo sistema não sabe. Para isso, execute:

echo -e “127.0.0.1\tlocalhost” > /etc/hosts

Para testar, basta dar um ping:

ping -c 1 localhost

Agora vem um ponto sério do sistema, sobre sua possibilidade de executar novos daemons. O aplicativo que faz isso é o /sbin/start-stop-daemon.
Se algum daemon executar, ele utilizará os recursos de seu computador e isso pode dar problemas. Imagine, por exemplo, o ssh: ao iniciá-lo, ele tentará utilizar a porta 22, se esta porta já estiver em uso, o daemon do ssh não será iniciado, dando conflito de recursos.
Bom, se você deseja utilizar daemons, tome cuidado com esses detalhes, caso contrário, faça os comandos:

mv /sbin/start-stop-daemon{,.REAL}

ln -s /bin/true /sbin/start-stop-daemon

Seu sistema agora está limpo e pronto para uso.
Bom aproveito!
😀

Postado em 🐧 GNU/Linux 🐧.


7 Respostas

Fique por dentro da conversa, assine o Feed deste post   em RSS.

  1. Berg Ginu says

    De fato, esse é um ótimo post.
    Desenvolvimento de forks, atravez do debootstrap é uma coisa muito legal, no entanto eu não tenho encontrado muito material sobre isso.
    Se puder falar algo mais ou citar, seria esplêndido!
    Parabéns pelo ótimo post e grato pela ajuda!

    • Jeiks says

      Olá, obrigado pelo comentário! 😀
      Bom, eu aprendi por já ter trabalhado muito com customizações de distribuições. Então, eu não possuo nenhum material específico a respeito… mas você pode encontrar algo em http://www.debian-administration.org ou mesmo no site da debian, na seção de documentação.
      Uma ideia para aprender melhor seria utilizar a manpage do debootstrap e ler os scripts que ele possui. Para entender melhor seu funcionamento, estude também sobre a estrutura de repositórios Debian, principalmente sobre os overrides (contidos na pasta índice), e sobre pacotes e as tags que eles podem conter.
      abraços

  2. Carlos Henrique says

    Parabéns pela qualidade do post…. Muito bom mesmo.

  3. ricardo says

    Ola muito bom o arquivo parabens, você sabe me dizer se existe debootstrap para distros CentOS, fedora?

    Att.

    • Jeiks says

      Olá Ricardo,
      eu conheço o debootstrap para Debian e trabalhei com algo parecido no projeto Anaconda dentro do Projeny (projeto do Ian Murdock na época, se não me engano).
      Bom, esse processo é chamado de bootstrap, que é simplesmente o ato de instalar o sistema em uma pasta do sistema, basicamente é como o initrd faz na inicialização de um GNU/Linux, pois ele monta a partição raiz e passa o controle para esta. Devido a isso, creio que tenha como fazer isso para qualquer distribuição, pois a única diferença é basicamente o organizador de pacotes que cada uma utiliza. Porém, nunca trabalhei com demais distros.
      Em uma pesquisa rápida no google (bootstrap CentOS), achei o seguinte link: http://judepereira.com/blog/bootstrap-centos-from-gentoo-or-any-linux-distribution/
      Se tiver experiências a respeito aí, posta aqui depois pra gente. 😀
      abraços

  4. Philippe says

    Cara, muito obrigado pela contribuição com seus conhecimentos.Muito dificil encontrar posts em português sobre esse tiop de tópico tão bem explicado.



Some HTML is OK

ou, responda este post através de um trackback.