Pendrive de boot com Debian Lenny customizado
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
É 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
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
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.
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
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.
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
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.
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
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
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:
- http://www.inside-security.de/applicationlist.html
- http://s-t-d.org/tools.html
- http://wiki.remote-exploit.org/index.php/Tools
- http://securitydistro.com/distroinfo/95/FCCU-GnuLinux-boot-CD-v100-Softwares.php
- http://securitydistro.com/security-distros
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.
<absHTML>
</absHTML>