Pendrive de boot com Debian Lenny customizado

De Eriberto Wiki
Ir para: navegação, pesquisa
Twitter.png

by (C) João Eriberto Mota Filho <eriberto (a) eriberto pro br>

Artigo criado em: 11 de dezembro de 2008.

Última atualização: veja o rodapé desta página.

Tiny URL ou bit.ly: http://tiny.cc/pendrive_debian ou http://bit.ly/pendrive_lenny



O objetivo deste artigo é mostrar como criar um sistema de boot customizado em um pendrive (também serve para cartões SD ou outros modelos com adaptadores USB). O SO escolhido foi o Debian Lenny 5.0 (ainda na release testing nesta data).

Os espaços ocupados

Este artigo irá mostrar várias possibilidades de instalação do Debian em um pendrive. A instalação mínima requereu 482 MB de espaço (depois de um # apt-get clean). A maior instalação, que incluiu ambiente gráfico simples e navegador Firefox, requereu 685 MB de espaço.

Assim, podemos dizer que os procedimentos mostrados podem ser realizados em um pendrive com no mínimo 512 MB de tamanho, sendo o de 1 GB o ideal.

Ferramentas necessárias para criar o sistema no pendrive

Você necessitará do Debian, qualquer versão, com acesso à Internet, para instalar o Lenny no pendrive. Alternativamente, você poderá usar o live CD do Knoppix para isso. É bem possível que todos os procedimentos possam ser realizados no Ubuntu também.

Os procedimentos iniciais

Inicialmente, vamos nos certificar de que o pendrive esteja funcionando, limpo e sem defeitos. Para isto, vamos escrever zeros em toda a sua área de dados. A seguir, vamos particioná-lo. Depois disto, vamos formatá-lo e prepará-lo para a instalação.

A partir de agora, vou considerar que você esteja trabalhando com um Debian, instalado no seu HD, e com uma estrutura básica instalada. Assim, siga os passos que serão mostrados a partir de agora.

Identificando o pendrive

Espete o pendrive no computador. Caso ele monte automaticamente, desmonte-o. Depois, identifique o dispositivo (/dev/xyz) que representa o seu pendrive. Caso você não saiba qual é o dispositivo referente ao seu pendrive, utilize os seguintes comandos:

# apt-get install hwinfo
# hwinfo --short --disk

No meu caso, obtive a seguinte resposta:

# hwinfo --short --disk
disk:
  /dev/sdb             Kingston DataTraveler 2.0
  /dev/sda             SAMSUNG HD250HJ

Ou seja: o meu pendrive, na máquina atual, é o /dev/sdb. Isso se deveu ao fato de existir um HD SATA como /dev/sda.

Zerando o pendrive

Escreva zeros em todo o pendrive para garantir a sua integridade. Utilize o comando a seguir:

# dd if=/dev/zero of=/dev/xxx

Obs: substitua xxx pelo identificador do seu pendrive. No meu caso, foi sdb.

A operação ocorrerá sem informações adicionais no display e, no fim, aparecerá a seguinte mensagem: dd: escrevendo em `/dev/xxx': Não há espaço disponível no dispositivo.

Particionando o pendrive

O próximo passo será particionar o pendrive e tornar a partição criada bootável. Para isto, existem vários comandos possíveis. Se você quiser utilizar um particionar gráfico amigável, tente o gparted ou o qtparted (prefiro o primeiro). Se preferir particionar via shell, você poderá utilizar o comando fdisk. Para isto, siga os passos mostrados a seguir:

  • Ative o fdisk para o seu disco. Exemplo:
# fdisk /dev/xxx
  • Surgirão o dizeres a seguir:
# fdisk /dev/sdb
O dispositivo não contém nem uma tabela de partições DOS válida nem um rótulo de disco Sun, OSF ou SGI
Building a new DOS disklabel with disk identifier 0x8bf2dfe7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.  

Aviso: a opção inválida 0x0000 da tabela de partições 4 será corrigida por gravação (w)

Comando (m para ajuda):                                     
  • Já dentro do fdisk, no prompt que diz Comando (m para ajuda):, digite n. Em seguida digite p e ENTER. Em número da partição, digite 1 e ENTER. Em Primeiro cilindro (1-xxxx, default 1): digite ENTER. Quando for pedido número do último cilindro, digite ENTER novamente.
  • Ao voltar para o prompt Comando, digite p e ENTER para ver a partição criada. Será a partição /dev/xxx1. Falta ativá-la para boot.
  • Para tornar a partição bootável, no prompt Comando, digite a e ENTER, seguido de 1 e ENTER. Para ver o resultado, digite p e ENTER e verifique a existência de um asterisco na coluna boot.
  • Finalizando, salve e saia. Para isto, digite w e ENTER.
  • Para conferir o trabalho realizado, já no shell, utilize o comando # fdisk /dev/xxx -l, trocando o xxx. No meu caso, ficou assim:
# fdisk /dev/sdb -l

Disk /dev/sdb: 1999 MB, 1999634432 bytes
62 heads, 62 sectors/track, 1016 cylinders
Units = cilindros of 3844 * 512 = 1968128 bytes
Disk identifier: 0x8bf2dfe7 

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1        1016     1952721   83  Linux
Exclamacao36.png É possível criar mais de uma partição no pendrive. A que estiver marcada como bootável dará o boot e a outra poderá ser utilizada como uma área de dados, ou seja, um pendrive comum.


Criando um MBR no pendrive

Para ser reconhecida pela BIOS do computador como um HD, o pendrive deverá possuir um MBR (Master Boot Record). Para criar o referido MBR, utilize os comandos a seguir:

# apt-get install mbr
# install-mbr /dev/xxx

Lembre-se de substituir o xxx por sda, sdb ou coisa similar, dependendo do seu caso.

Formatando o partição com filesystem EXT2

O próximo passo será estabelecer um filesystem. No caso, usaremos o EXT2, por não ser jornalado e, em consequência, realizar menos operações de escrita no pendrive, preservando-o. Isso também aumentará a velocidade de operação. Utilize o comando a seguir:

# mkfs.ext2 /dev/xxx1


Criando um sistema de boot

Para criar um sistema de boot compatível com as BIOS dos PCs e com o filesystem EXT2, inicialmente, monte a partição /dev/xxx1 em /mnt ou outro ponto de montagem à sua escolha. Vou considerar /mnt. Isso poderá ser feito com o comando:

# mount /dev/xxx1 /mnt 

Em seguida, execute os comandos:

# apt-get install syslinux
# mkdir -p /mnt/boot/extlinux
# extlinux -i /mnt/boot/extlinux

O extlinux é um sistema de boot compatível com EXT2/EXT3/EXT4 e com as BIOS de PCs.

Instalação do Debian Lenny no pendrive

Para instalar um Debian Lenny no pendrive, considerando que o mesmo esteja montado em /mnt, siga os passos:

# apt-get install debootstrap
# debootstrap lenny /mnt http://ftp.us.debian.org/debian
Exclamacao36.png É possível utilizar o CD NetInst do Lenny (ou de outra vesão, caso você prefira) para instalar o Debian no pendrive. Para isso, monte o CD em outro diretório (/media/cdrom, por exemplo) e substitua o http://ftp.us.debian.org/debian por file:/media/cdrom. É lógico que a operação de instalação será muito mais rápida com o CD.


A configuração do Debian

Enjaulamento

Quando terminar a instalação do Debian, enjaule-se no diretório /mnt. Para isto, utilize o comando:

# chroot /mnt
Exclamacao36.png A partir deste momento, tudo que for feito ocorrerá somente dentro do pendrive.

Monte o diretório /proc dentro da jaula. Faça o seguinte:

# mount /proc


Ajuste da lista de repositórios

Agora, será necessário editar o arquivo /etc/apt/sources.list e deixar o seu conteúdo parecido com o seguinte:

deb http://ftp.us.debian.org/debian lenny main
deb http://security.debian.org/ lenny/updates main

Depois de alterar o arquivo, execute:

# apt-get update


Definição da linguagem local

A próxima ação será definir a linguagem local para evitar mensagens de erro na tela. Assim, emita os comandos:

# apt-get install locales
# dpkg-reconfigure locales

Ao configurar o locales, selecione as opções pt_BR ISO-8859-1 e pt_BR.UTF-8 UTF-8. Na tela seguinte, ao ser perguntado pelo default locale, selecione pt_BR.UTF-8.

Durante a instalação do pacote locales, você deve ter visto mensagens como estas na tela:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = "pt_BR:pt:en",
        LC_ALL = (unset),
        LANG = "pt_BR.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

A definição da linguagem local serve para acabar com esse tipo de mensagem.

Exclamacao36.png Ponto de controle: considerando que nada foi apagado, até o momento foram consumidos cerca de 260 MB no meu pendrive.


Instalação de um kernel

O debootstrap não instala kernel Linux e, assim sendo, será necessário instalar um. Para escolher um kernel, utilize o comando:

# apt-cache search ^linux-image

No meu caso, a resposta foi:

linux-image-2.6-486 - Linux 2.6 image on x86
linux-image-2.6-686 - Linux 2.6 image on PPro/Celeron/PII/PIII/P4
linux-image-2.6-686-bigmem - Linux 2.6 image on PPro/Celeron/PII/PIII/P4
linux-image-2.6-amd64 - Linux 2.6 image on AMD64
linux-image-2.6-k7 - Linux 2.6 image on AMD K7 - transition package
linux-image-2.6-openvz-686 - Linux 2.6 image on PPro/Celeron/PII/PIII/P4
linux-image-2.6-vserver-686 - Linux 2.6 image on PPro/Celeron/PII/PIII/P4
linux-image-2.6-vserver-686-bigmem - Linux 2.6 image on PPro/Celeron/PII/PIII/P4
linux-image-2.6-xen-686 - Linux 2.6 image on i686
linux-image-2.6.26-1-486 - Linux 2.6.26 image on x86
linux-image-2.6.26-1-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4
linux-image-2.6.26-1-686-bigmem - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4
linux-image-2.6.26-1-amd64 - Linux 2.6.26 image on AMD64
linux-image-2.6.26-1-openvz-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4
linux-image-2.6.26-1-vserver-686 - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4, Linux-VServer support
linux-image-2.6.26-1-vserver-686-bigmem - Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4
linux-image-2.6.26-1-xen-686 - Linux 2.6.26 image on i686, oldstyle Xen support
linux-image-486 - Linux image on x86
linux-image-686 - Linux image on PPro/Celeron/PII/PIII/P4
linux-image-686-bigmem - Linux image on PPro/Celeron/PII/PIII/P4
linux-image-amd64 - Linux image on AMD64
linux-image-k7 - Linux image on AMD K7 - transition package
linux-image-openvz-686 - Linux image on PPro/Celeron/PII/PIII/P4
linux-image-vserver-686 - Linux image on PPro/Celeron/PII/PIII/P4
linux-image-vserver-686-bigmem - Linux image on PPro/Celeron/PII/PIII/P4
linux-image-xen-686 - Linux image on i686

Vou optar pelo linux-image-2.6.26-1-686. Então, bastará emitir o comando:

# apt-get install linux-image-2.6.26-1-686
Exclamacao36.png Caso aparareça a pergunta Abort initrd kernel image installation?, responda Não. Se você, por engano, responder Sim, execute o comando # update-initramfs -c -k 2.6.26-1-686, onde 2.6.26-1-686 deve ser substituído pela versão do kernel instalado.
Exclamacao36.png Ponto de controle: considerando que nada foi apagado, até o momento foram consumidos cerca de 360 MB no meu pendrive. Algum espaço poderá ser obtido, a qualquer momento, com o comando # apt-get clean.


Criação de um arquivo de swap

A melhor opção para o nosso caso específico é fazer swap em arquivo. Um swap de 100 MB já deverá ser o suficiente para os dias atuais. Para criar o swap, siga os seguintes passos:

# dd if=/dev/zero of=/swapfile bs=10M count=10
# mkswap /swapfile

O swap será ativado pelo arquivo /etc/fstab, que será configurado mais adiante.

Exclamacao36.png Ponto de controle: considerando que nada foi apagado, até o momento foram consumidos cerca de 460 MB no meu pendrive.


Ajuste do sistema de boot

Agora é o momento conhecido como "pulo do gato". Faremos a integração do kernel com o extlinux e com a partição raiz (no meu caso, /dev/sdb1). Inicialmente, deveremos criar um arquivo de configuração para o extlinux. Assim, crie um arquivo /boot/extlinux/extlinux.conf e insira nele:

DEFAULT linux
LABEL linux
SAY Inicializando o Debian Lenny...
KERNEL /vmlinuz
APPEND ro root=LABEL=RAIZ initrd=/initrd.img
Exclamacao36.png A partir de agora, iremos falar de RAIZ e não mais de /dev/sdb1 ou coisa similar. Isso é conhecido como label. É simples de entender: se eu disser que o a raiz (root) do meu sistema está em /dev/sdb1, o meu pendrive não vai bootar em uma máquina que o reconheça como /dev/sdc, por exemplo.

A seguir, edite o arquivo /etc/fstab e deixe o seu conteúdo assim:

# <file system> <mount point>   <type>  <options>         <dump>  <pass>
proc            /proc           proc    defaults          0       0
LABEL=RAIZ      /               ext2    defaults,noatime  0       1
/swapfile       none            swap    sw                0       0


Estabelecimento do label

Chegou a hora de estabelecer o label da partição /dev/xxx1 (/dev/sdb1 no meu caso). Para isto, desmonte o /proc, saia da jaula e desmonte o pendrive:

# umount /proc
# exit
# umount /mnt

A seguir, estabeleça o label com o comando e2label:

# e2label /dev/xxx1 RAIZ


Teste de funcionamento

Remova o pendrive e dê boot em uma máquina que aceite boot por pendrive.

Ajustes básicos finais

Ajuste do nome da máquina

Para fazer com que o Linux no pendrive utilize um nome local ao seu gosto, faça o seguinte:

  • Realize o boot do pendrive em uma máquina real.
  • Edite o arquivo /etc/hostname e altere o nome da máquina.
  • Edite o arquivo /etc/hosts e utilize, nos locais adequados, o mesmo nome inserido em /etc/hostname.
Exclamacao36.png Caso o arquivo /etc/hosts esteja vazio, copie-o de outra máquina.


Pacotes mínimos recomendados

É recomendável instalar alguns pacotes básicos de controle e operação. Assim, sugere-se os seguintes procedimentos:

  • Instale o pacote de ajuste de data e hora via rede:
# apt-get install ntpdate
  • Instale o suporte a alguns filesystems importantes:
# apt-get install dosfstools ntfsprogs ntfs-3g jfsutils reiserfsprogs xfsprogs mbr testdisk
  • Instale os pacotes básicos de auditoria, teste e controle de rede:
# apt-get install bittwist dnsutils fping hping2 ipcalc netcat nmap tcpdump telnet traceroute wireless-tools
  • Instale os pacotes básicos de comunicação e transferência de arquivos via rede:
# apt-get install ftp rsync ssh udpcast
  • Instale os pacotes de uso geral:
# apt-get install cdrecord clamav console-tools ddrescue debootstrap durep fdupes grub hexedit \
  hwinfo less lshw mc mkisofs myrescue magicrescue parted rcconf strace unzip wipe zip


Configuração de rede

Caso seja útil, configure o arquivo /etc/network/interfaces para obter uma rede após o boot. Segue um exemplo para DHCP:

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet dhcp
 
auto eth2
iface eth2 inet dhcp
Exclamacao36.png O exemplo anterior considera que serão buscadas até 3 placas de rede na máquina. Outra possibilidade é, simplesmente, escrever dhclient dentro do arquivo /etc/rc.local.

Também pode ser que você necessite de um DNS próprio para resolver a Internet. Bastará fazer o seguinte:

# apt-get install bind9

Depois, será necessário editar o arquivo /etc/resolv.conf e inserir como primeira linha:

nameserver 127.0.0.1

No entanto, se você estiver usando DHCP, o arquivo /etc/resolv.conf será reescrito automaticamente em minutos. Para manter a linha nameserver 127.0.0.1, edite o arquivo /etc/dhcp3/dhclient.conf e descomente a linha a seguir:

prepend domain-name-servers 127.0.0.1;


Fim da configuração básica

O pendrive está funcionando. É interessante estabelecer uma senha de root como o comando # passwd root. Além de aumentar a segurança, esta ação permitirá o login remoto via SSH. Ainda, utilize o comando # rcconf para determinar quais serviços entrarão no ar quando o pendrive for inicializado. É interessante desmarcar serviços que sejam supérfluos para um pendrive que irá funcionar como "live CD". Um exemplo é o cron.

Neste ponto, para realizar toda a instalação do pendrive, foram usados 587 MB de disco. Após um # apt-get clean, esse número caiu para 482 MB. Então, com alguma habilidade, realizando-se # apt-get clean nos momentos certos, dará para criar um boot externo a partir de um pendrive de 512 MB. Há, ainda, a possibilidade de obter mais espaço apagando o conteúdo do diretório /usr/share/doc/ que, atualmente, no meu caso, ocupa 17 MB. No entanto, não recomendo este procedimento.

Instalação de pacotes alternativos

A partir de agora, vou sugerir duas implementações: a instalação de pacotes para termos um ambiente gráfico funcional e um ambiente mínimo para forense.

Criação de um ambiente gráfico pequeno e funcional

A sugestão é simples: X.Org + Openbox + Firefox (Iceweasel) + gparted + powershell + sux. Para isto:

# apt-get install x-window-system

Teste o funcionamento do ambiente gráfico. Ajuste o arquivo /etc/X11/xorg.conf se necesário (geralmente não é). Em seguida:

# apt-get install gparted iceweasel openbox sux
Exclamacao36.png Após a instalação sugerida, seguida de um # apt-get clean, tivemos uma ocupação de 685 MB.


Criação de um ambiente para forense

Uma ferramenta que não pode faltar em qualquer forense computacional: Sleuthkit. O comando strings, presente no pacote binutils, também é muito usado. Assim sendo:

# apt-get install binutils dcfldd foremost hexedit magicrescue sleuthkit unhide

Existem muitas outras ferramentas para forense. Assim, sugiro que você escolha as ferramentas que mais lhe agradem, consultando os seguintes sites:

Outra forma de levantar ferramentas é pelo comando:

# apt-cache search forensic



Boot pela USB em máquinas com BIOS antigas

Máquinas com BIOS antigas não dão boot pela USB. Mas há como contornar isto. Existe um sistema, que pode ser colocado em disquete, chamado Smart Boot Manager (SBM). Ele consegue executar o boot no lugar da BIOS e descobrir CD-ROMs, pendrives etc. Mais informações poderão ser obtidas no site: http://paulski.com/zpages.php?id=1612.

Comentários, sugestões e controle de acessos

Por favor, deixe os seus comentários e sugestões sobre este artigo no meu Blog Técnico. Para isto, clique aqui.



Locations of visitors to this page


Consulte também o contador abaixo, iniciado em 11 dez. 08, além do gráfico acima.