Criando um LiveCD a partir de uma instalação do Debian Lenny

Atenção: o blog do AvmLinux foi movido para http://www.avmlinux.org/!
Experimente ler esse mesmo post no novo endereço!
Nesse passo-a-passo você vai aprender a criar um LiveCD a partir do sistema instalado no seu disco rígido. Essa é uma das formas mais eficientes e flexíveis de se criar um LiveCD, pois permite que você personalize o sistema por completo. A distribuição utilizada é o Debian Lenny, mas o passo-a-passo pode ser executado em outras distribuições baseadas em Debian.

Entendendo o que é e como funciona um LiveCD


Um LiveCD nada mais é que uma instalação Linux que é executada a partir de um CD, assim como temos a instalação Linux que é feita em um disco rígido e executada a partir dele, mais usual. No entanto, devido às diferenças que existem entre esses dois tipos de instalação, apenas copiar os arquivos de sistema Linux instalado no disco rígido para um CD não é suficiente para produzir um LiveCD.

Primeiramente, devemos observar que o CD é uma mídia apenas para leitura. Uma vez gravado, o CD não permite que sejam efetuadas alterações nele. Existem atualmente vários artifícios para resolver esse problema e um dos mais comuns é utilizar um sistema de arquivos como o UnionFS, que reserva um espaço da memória RAM para armazenar as alterações que são feitas pelo usuário enquanto utiliza o LiveCD. Como o sistema não faz uma distinção explícita entre os arquivos armazenados na memória RAM e os arquivos armazenados no CD, esse mecanismo é transparente ao usuário, permitindo que ele faça em um LiveCD quase tudo que ele faria em uma instalação Linux feita no disco rígido, sem sequer notar diferença. Nesse passo-a-passo será utilizado não o UnionFS, mas um sistema de arquivos bastante parecido e inclusive mais robusto, que é o AuFS.

Outra diferença notória entre um LiveCD e uma instalação Linux feita em um disco rígido é o espaço em disco disponível. Uma instalação básica do Debian Lenny com o KDE 3.5 como ambiente gráfico ocupa algo em torno de 1,5 GB. No entanto, um CD não dispõe de todo esse espaço. Para contornar esse problema, o sistema de arquivos é gravado no CD na forma de uma imagem compactada chamada SquashFS. Ela permite que um sistema de até aproximadamente 2 GB caiba em um CD comum de 700 MB. Como se vê, esse espaço é mais que suficiente para fazer uma instalação Linux básica.

Por fim, como o sistema será armazenado no CD na forma de uma imagem compactada, é necessário que durante o boot (inicialização) o kernel (núcleo do sistema) carregue os módulos responsáveis por acessar o dispositivo leitor de CD e montar a imagem compactada. E ele deve fazer isso antes mesmo de ter acesso ao diretório raiz do sistema ("/"), uma vez que ele está armazenado dentro da imagem compactada, que por sua vez está armazenada dentro do CD. Essa é uma preocupação que não existe em instalações Linux feitas no disco rígido.

Além disso, como as alterações feitas no sistema serão armazenadas na memória RAM, é necessário reservar um pedaço dela para essa finalidade, e esse processo também deve ser feito durante a inicialização do sistema. Como se vê, a inicialização de um LiveCD é mais complexa que a inicialização de uma instalação Linux feita em um disco rígido.

Para solucionar esse problema, foi criado um mecanismo através do qual durante a inicialização do sistema é carregado um sistema de arquivos mínimo antes do sistema de arquivos em si, contendo os módulos e scripts necessários para que o kernel acesse os dispositivos leitores de CD, descubra onde está a imagem compactada que contém o sistema e finalmente monte essa imagem e faça o restante do processo de inicialização através dela, como faria em uma instalação comum no disco rígido. Esse sistema de arquivos mínimo é chamado initramfs.

O initramfs é utilizado não só em LiveCDs, como também em discos de instalação e até mesmo em instalações feitas no disco rígido, uma vez que torna mais flexível e rápido o processo de inicialização do sistema. Ele é utilizado principalmente em casos onde é necessário executar algum procedimento especial para acessar o diretório raiz do sistema, como em um LiveCD ou em um computador onde o sistema operacional está armazenado em outro computador da rede, exigindo que a conexão com esse computador seja feita antes mesmo de carregar o sistema operacional, por exemplo.

Nesse passo-a-passo, nós criaremos um initramfs próprio para inicializar o sistema a partir de um LiveCD. No entanto, não o faremos manualmente, apesar de ser possível. Vamos instalar no nosso sistema o pacote live-initramfs, que contém os scripts que farão toda a preparação especial descrita anteriormente durante a inicialização do LiveCD, e em seguida utilizar o comando update-initramfs, que incluirá esses scripts dentro do initramfs que colocaremos dentro do nosso LiveCD.

Ao final do passo-a-passo, nosso LiveCD terá uma estrutura de arquivos e pastas igual a essa:

(Raiz do CD)    
|-------+boot    
|       |-------+grub    
|       |       |-------menu.lst    
|       |       |-------stage2_eltorito    
|       |    
|       |-------vmlinuz    
|       |-------initrd.gz    
|       |-------memtest86+.bin    
|    
|-------+live    
|       |-------filesystem.squashfs    
|    
|--------md5sum.txt

Vejamos resumidamente o que é cada um desses arquivos (a maior parte das explicações sobre eles já foi dada acima):

  • "/boot/grub/menu.lst": arquivo que contém as opções que são mostradas no menu que aparece durante o boot do LiveCD.
  • "/boot/grub/stage2_eltorito": arquivo que contém o gerenciador de boot do LiveCD. Durante a inicialização do LiveCD, o gerenciador de boot é o primeiro componente a ser carregado para a memória. Ele mostra um menu que permite ao usuário inicializar o sistema de maneiras diferentes. Nesse passo-a-passo, utilizaremos o GRUB como gerenciador de boot.
  • "/boot/vmlinuz": esse arquivo é o kernel, que será copiado do sistema para o CD. Durante a inicialização do LiveCD, ele é carregado assim que escolhermos uma as opções mostradas no menu de boot. Logo, é o segundo componente a ser carregado para a memória.
  • "/boot/initrd.gz": esse arquivo é o initramfs, que contém os módulos e scripts necessários para inicializar o LiveCD, como já foi explicado anteriormente. Ele é carregado durante a inicialização do LiveCD logo após o kernel.
  • "/boot/memtest86+.bin": esse arquivo é opcional. Trata-se de um programa usado para testar a memória RAM do computador. Ele está presente na maioria dos LiveCDs, por isso o incluiremos também no nosso.
  • "/live/filesystem.squashfs": esta é a imagem compactada SquashFS que contém o sistema operacional em si. Ela já foi explicada anteriormente.
  • "/md5sum.txt": esse arquivo também é opcional. Contém o MD5 de cada arquivo do CD e pode ser usado posteriormente para verificar sua a integridade.

Os mesmos passos descritos aqui podem ser usados caso você queira desenvolver um sistema maior, destinado a ser gravado em um DVD (nesse caso, ele se chamaria LiveDVD, mas continuarei usando o termo LiveCD para designar os dois tipos de mídias, indistintamente), ou uma distribuição compacta, destinada a ser gravada em um mini-CD.

Requisitos e divisão do passo-a-passo


Para executar esse passo-a-passo, você vai precisar de:

  • Um computador com Debian (ou distribuição equivalente) instalado no disco rígido
  • Muito espaço livre em disco: pelo menos o dobro do tamanho do sistema que está instalado (recomendo o triplo, para que você não tenha que apagar nenhuma pasta antes de completar esse o passo-a-passo)
  • Acesso à Internet ou um repositório local de onde possam ser obtidos os pacotes que serão necessários
  • Um gravador de CD, caso você queira gravar o LiveCD quando terminar

Para melhor explicar o passo-a-passo, eu o dividi em etapas. Vejamos um resumo dessas etapas:

A. Preparar o ambiente de trabalho: nessa etapa vamos instalar os programas e criar as pastas que utilizaremos durante a execução do nosso trabalho.

B. Copiar o sistema para a pasta de trabalho: vamos copiar o sistema que possuímos em nosso disco rígido para uma pasta temporária (daqui pra frente, vou me referir a essa pasta como "pasta de trabalho" e ao sistema dentro dessa pasta como "sistema de trabalho").

C. Fazer as modificações desejadas no sistema de trabalho: nessa etapa vamos entrar no sistema que está na pasta de trabalho e fazer as nossas personalizações (adicionar e remover programas, alterar configurações, instalar temas, papéis de parede, etc.).

D. Fazer as modificações necessárias no sistema de trabalho: ainda dentro do sistema de trabalho, vamos fazer as modificações necessárias para que ele possa ser executado como um LiveCD.

E. Preparar a estrutura de diretórios do LiveCD: nessa etapa prepararemos o LiveCD, reunindo os arquivos necessários dentro de uma pasta temporária.

F. Criar o LiveCD: nessa etapa criaremos a imagem ISO do LiveCD. Essa imagem pode ser gravada em um CD ou testada em uma máquina virtual.

Etapa A - Preparar o ambiente de trabalho


Nessa etapa vamos instalar os programas e criar as pastas que utilizaremos durante a execução do nosso trabalho.

Quanto aos programas, todos podem ser facilmente instalados a partir de pacotes e estão disponíveis nos repositórios oficiais do Debian Lenny. Você pode utilizar o repositório brasileiro, para que os pacotes sejam baixados mais rapidamente. Adicione a seguinte linha ao arquivo "/etc/apt/sources.list":

deb http://ftp.br.debian.org/debian lenny main contrib non-free

Se você possuir um CD ou DVD de instalação do Debian, você também pode utilizá-lo para diminuir o volume de pacotes baixados e com isso economizar tempo na obtenção dos pacotes. Insira-o na unidade de CD/DVD e execute o comando:

# apt-cdrom add

Uma vez que você configurou os repositórios de onde serão obtidos os pacotes, atualize a lista de pacotes dos repositórios e instale os pacotes necessários:

# apt-get update    
    
# apt-get install rsync squashfs-tools squashfs-modules-$(uname -r) grub mkisofs

Se você pretende utilizar um ambiente gráfico para fazer as alterações no sistema de trabalho, você pode instalar também o xnest (a execução desse passo é opcional, para mais detalhes veja a etapa C):

# apt-get install x11-xserver-utils xnest

Opcionalmente, você também pode instalar o qemu para testar o LiveCD depois que ele estiver pronto:

# apt-get install qemu

Você também pode testar o LiveCD utilizando uma máquina virtual como o Sun VirtualBox ou o VMware Player, mas não entrarei em detalhes quanto isso por não se tratar do foco desse tutorial.

Se quiser gravar o LiveCD depois de testá-lo, você pode utilizar o cdrecord:

# apt-get install cdrecord

Se você originou um LiveDVD, no entanto, você vai precisar de um programa diferente, o growisofs, que faz parte do pacote dvd+rw-tools:

# apt-get install dvd+rw-tools

Também não entrarei em muitos detalhes quanto à gravação do CD. Esses são apenas alguns dos programas que você pode utilizar para gravação de CDs e DVDs e eles são executados a partir do terminal. Você também pode utilizar um programa gráfico, se preferir, como o X-CD-Roast, o K3B ou o Brasero. Todos esses realizam gravação tanto de CDs quanto de DVDs de dados.

Quanto às pastas, criaremos basicamente duas: uma para armazenar o sistema de trabalho e outra para armazenar os arquivos do LiveCD. Dentro dessa, criaremos mais algumas pastas, para que o LiveCD apresenta a estrutura que vimos anteriormente.

Para criar as pastas, execute esses três comandos no terminal (lembre-se de alterar os comandos para adaptá-los ao seu computador):

$ mkdir -p /home/vinicius/debian-live/cd/live    
    
$ mkdir -p /home/vinicius/debian-live/cd/boot/grub    
    
$ mkdir -p /home/vinicius/debian-live/work/rootfs

Feito isso, temos as seguintes pastas dentro da pasta "/home/vinicius":

/home/vinicius/debian-live    
/home/vinicius/debian-live/cd    
/home/vinicius/debian-live/cd/boot    
/home/vinicius/debian-live/cd/boot/grub    
/home/vinicius/debian-live/cd/live    
/home/vinicius/debian-live/work    
/home/vinicius/debian-live/work/rootfs

Observe que com três comandos criamos sete pastas. Isso graças ao parâmetro -p que acrescido ao comando mkdir faz com que sejam criados os diretórios-pai da pasta que desejamos criar, caso ainda não existam.

Agora que dispomos dos programas que precisamos e criamos as pastas que utilizaremos, podemos iniciar o trabalho.

Etapa B - Copiar o sistema para a pasta de trabalho


Essa etapa é bastante simples, pois consiste em copiar o sistema que está instalado no seu computador (e que você está utilizando agora) para a pasta de trabalho, o que pode ser feito com apenas um comando. No entanto, também é bastante demorada, uma vez que estamos copiando um sistema inteiro.

O comando que deve ser executado é:

# rsync -av --one-file-system --exclude=/proc/* --exclude=/dev/* --exclude=/sys/* --exclude=/tmp/* --exclude=/media/* --exclude=/mnt/* --exclude=/lost+found --exclude=/home/vinicius/debian-live / /home/vinicius/debian-live/work/rootfs

Observe que para copiar os arquivos utilizamos o comando rsync no lugar do comando cp, que é mais comumente usado. Fizemos isso porque necessitávamos excluir da cópia algumas pastas que não serão incluídas no LiveCD (uma dessas pastas, inclusive, é a própria pasta de trabalho).

Etapa C - Fazer as modificações desejadas no sistema de trabalho


Nessa etapa vamos entrar no sistema de trabalho e fazer as nossas personalizações (adicionar e remover programas, alterar configurações, instalar temas, papéis de parede, etc.). Essa é a etapa mais longa e dinâmica, mas também a mais interessante.

Antes de entrar no sistema de trabalho, vamos fazer alguns preparativos para que ele possa acessar os recursos do sistema que está atualmente em execução (vamos "emprestar" alguns recursos do nosso sistema para o sistema de trabalho):

# mount --bind /dev /home/vinicius/debian-live/work/rootfs/dev    
    
# mount -t devpts none /home/vinicius/debian-live/work/rootfs/dev/pts    
    
# mount --bind /proc /home/vinicius/debian-live/work/rootfs/proc    
    
# mount --bind /sys /home/vinicius/debian-live/work/rootfs/sys    
    
# mount --bind /media /home/vinicius/debian-live/work/rootfs/media    
    
# mount --bind /tmp /home/vinicius/debian-live/work/rootfs/tmp

Agora sim podemos de fato entrar no sistema. Para isso, execute o seguinte comando no terminal:

# chroot /home/vinicius/debian-live/work/rootfs /bin/bash

A partir de agora, todos os comandos que você executar nessa seção do terminal serão aplicados ao sistema que está na pasta de trabalho e não ao sistema que está instalado no seu computador.

Quando desejar sair do sistema de trabalho e voltar para o seu sistema (não faça isso ainda, estou falando apenas para você tomar conhecimento), você pode executar o comando:

# exit

Você pode entrar e sair do sistema de trabalho quantas vezes quiser, executando esses mesmos comandos.

Antes de prosseguir à instalação de pacotes, se você desejar que o sistema de trabalho utilize repositórios diferentes dos que você utiliza no seu sistema, você pode apagar o arquivo "/etc/apt/sources.list" e criar um novo, contendo os novos repositórios (até indicação contrária, todos os comandos a seguir devem ser executados dentro do sistema de trabalho):

# rm -f /etc/apt/sources.list    
    
# echo "deb http://ftp.br.debian.org/debian lenny main contrib non-free" >> /etc/apt/sources.list

Repita o segundo comando para cada um dos repositórios que você deseja adicionar à lista de repositórios do sistema de trabalho. Lembre-se de depois atualizar a lista de pacotes desses repositórios executando o comando:

# apt-get update

Observe que esses comandos são opcionais. Sua execução, como disse acima, só é necessária se você deseja que o sistema de trabalho utilize repositórios diferentes dos que você utiliza no seu sistema. Tenha em mente que esses serão os repositórios que serão utilizados para instalar programas não só agora, como também quando estiver utilizando seu LiveCD.

Pronto, agora você pode efetuar quaisquer mudanças que desejar, inclusive instalar e remover pacotes e alterar arquivos de configuração, da mesma forma como faria no seu sistema normal. Você pode utilizar o terminal no qual você já está ou iniciar um ambiente gráfico, se achar mais cômodo.

Antes de iniciar o ambiente gráfico pelo sistema de trabalho, você deve sair do sistema de trabalho e iniciar uma nova instância do X no seu sistema.

Primeiramente, execute o seguinte comando, que permitirá ao ambiente gráfico do sistema de trabalho se conectar ao X do sistema em execução:

$ xhost +

Agora podemos iniciar uma nova instância do X de fato. Isso pode ser feito de duas formas: uma delas é a convencional, na qual a tela toda será utilizada para mostrar o ambiente gráfico. Para iniciar uma nova instância do X dessa forma execute o comando:

# X -dpi 75 :1

Ele abrirá uma nova seção do X contendo apenas a tela cinza e o cursor do mouse. Volte para a seção principal do X (a que contém o ambiente gráfico do sistema instalado) pressionando Ctrl + Alt + F7.

A outra forma é usar o xnest. O ambiente gráfico será então iniciado dentro de uma janela, como se o sistema de trabalho estivesse sendo executado em uma máquina virtual. Para isso, execute o seguinte comando como um usuário comum:

$ Xnest -ac :1

Em ambas as alternativas, você terá uma seção do X iniciada esperando pelo ambiente gráfico do sistema de trabalho. A segunda opção é a mais cômoda, visto que você não tem que utilizar combinações de teclas para alternar entre as seções do X que estão em execução, no entanto é a mais precária, e pode ocasionar alguns problemas que geralmente não ocorrem quando a seção é iniciada da forma convencional.

Independente de qual forma você tenha iniciado uma nova seção do X, inicie agora uma nova seção do terminal, entre novamente no sistema de trabalho e execute os seguintes comandos, que iniciarão o ambiente gráfico do sistema de trabalho na seção do X que você acabou de iniciar:

# su vinicius    
    
$ export DISPLAY=localhost:1    
    
$ startkde

Se você optou por iniciar o X da forma convencional, você verá agora o ambiente gráfico do sistema de trabalho. Você pode retornar a qualquer momento para o ambiente gráfico do sistema instalado pressionando Ctrl + Alt + F7. Depois, se quiser, você pode voltar para o ambiente gráfico do sistema de trabalho pressionando Ctrl + Alt + F8. Você pode alternar entre os ambientes gráficos dos dois sistemas quantas vezes quiser até concluir o seu trabalho.

Uma observação que deve ser feita é com relação à capacidade de armazenamento da mídia que será utilizada: se você pretende criar um LiveCD, o sistema de trabalho não deve ocupar um espaço superior a 2 GB.

Se ele ultrapassar esse tamanho, você tem duas opções: remover programas e arquivos até que atinja um tamanho o mais próximo possível de 2 GB, para que após a compactação (que faremos na etapa E) ele caiba em um CD, ou utilizar um DVD ao invés de um CD para armazenar o sistema (nesse caso, você não estaria criando um LiveCD, mas sim um LiveDVD), o que não afetará em nada a execução desse tutorial.

Depois de fazer todas as alterações desejadas, feche o KDE pelo Menu K > Fechar Sessão > Finalizar sessão atual.

Etapa D - Fazer as modificações necessárias no sistema de trabalho


Nessa etapa faremos mais modificações dentro do sistema de trabalho. A diferença dessa etapa para a anterior é que as alterações que faremos agora são necessárias para que o sistema possa ser executado a partir de um CD.

Para começar, de volta ao terminal do sistema de trabalho, vamos instalar alguns pacotes:

# apt-get install live-initramfs aufs-modules-$(uname -r) discover1 xresprobe memtest86+

Só para não passar em branco, uma breve explicação sobre os pacotes: o pacote live-initramfs contém os scripts que serão executados durante a inicialização do LiveCD. O pacote aufs-modules é responsável por instalar no sistema o AuFS, já explicado anteriormente, que permite que façamos alterações no sistema durante a execução do LiveCD, gravando essas alterações na memória RAM. Os pacotes discover1 e xresprobe são responsáveis por detectar e configurar o hardware na inicialização do sistema. Por fim, o pacote memtest86+ contém um programa que testa a memória do computador, também já citado anteriormente. Ele pode ser acessado pelo menu que aparece na inicialização do LiveCD. Sua instalação na verdade é opcional, mas como ele é incluído em quase todos os LiveCDs, vamos incluí-lo também no nosso.

Feito isso, vamos atualizar o initramfs, incluindo nele os scripts que serão executados durante a inicialização do LiveCD. Para isso, execute os dois comandos a seguir no terminal:

# depmod -a $(uname -r)    
    
# update-initramfs -u -k $(uname -r)

Agora copie os arquivos da pasta pessoal do seu usuário (que no meu caso é "/home/vinicius") para a pasta "/etc/skel", sem se esquecer de restabelecer as permissões originais:

# cp -Rf /home/vinicius/* /etc/skel/  
    
# chown -R root.root /etc/skel

A pasta "/etc/skel" contém os arquivos e pastas que serão copiados para a pasta pessoal dos usuários quando forem criadas novas contas no sistema. Por isso a importância de copiar a nossa pasta pessoal para essa pasta: as configurações que fizemos na etapa passada não terão de ser refeitas no futuro, elas serão aplicadas automaticamente para cada nova conta de usuário que for criada no sistema.

Remova os usuários que vieram do seu sistema durante a cópia na etapa B, de modo que o LiveCD não apresente nenhum usuário (é importante observar que esse comando não remove os usuários de sistema, apenas os usuários comuns, aqueles que podem fazer login):

# for i in `cat /etc/passwd | awk -F":" '{print $1}'`    
do    
uid=`cat /etc/passwd | grep "^${i}:" | awk -F":" '{print $3}'`    
[ "$uid" -gt "999" -a  "$uid" -ne "65534"  ] && userdel --force ${i} 2>/dev/null    
done

Esse comando realmente é formado por várias linhas. Se você não souber como digitá-las no terminal, você pode apelar para o famoso "copia e cola" que funciona (foi o que eu fiz).

Não se preocupe com o fato de excluirmos todos os usuários comuns do sistema. Quando o sistema é iniciado do LiveCD, um usuário é criado automaticamente durante a inicialização. Sua pasta pessoal é criada e os arquivos e pastas que estão na pasta "/etc/skel" são copiados para ela.

Apague os arquivos que não são necessários no LiveCD e que podem atrapalhar o processo de inicialização:

# for i in "/etc/hosts /etc/hostname /etc/resolv.conf /etc/timezone /etc/fstab /etc/mtab /etc/shadow /etc/shadow- /etc/gshadow  /etc/gshadow- /etc/gdm/gdm-cdd.conf /etc/gdm/gdm.conf-custom /etc/X11/xorg.conf /boot/grub/menu.lst /boot/grub/device.map"    
do    
rm $i    
done 2>/dev/null

Apague os pacotes que foram baixados na etapa anterior:

# apt-get clean

Remova os pacotes que não são necessários ao sistema:

# apt-get autoremove

Você também pode apagar as listas de pacotes disponíveis, já que elas são atualizadas com frequência. Isso reduz o tamanho do sistema em alguns megabytes (não devemos apagar a pasta "/var/lib/apt/lists/partial", apenas os arquivos que estão dentro dela):

# rm -f /var/lib/apt/lists/*    
    
# rm -f /var/lib/apt/lists/partial/*

Continuando a série de exclusões, vamos excluir mais alguns arquivos desnecessários:

# find /var/run /var/log /var/mail /var/spool /var/lock /var/backups /var/tmp -type f -exec rm {} \;    
    
# rm -r /tmp/* /root/* /home/* 2>/dev/null

Agora vamos criar arquivos em branco no lugar de alguns dos arquivos que foram apagados no passo anterior, apenas para que o sistema não acuse sua falta e sua inicialização possa ocorrer normalmente:

# for i in dpkg.log lastlog mail.log syslog auth.log daemon.log faillog lpr.log mail.warn user.log boot debug mail.err messages wtmp bootstrap.log dmesg kern.log mail.info    
do    
touch /var/log/${i}    
done

Resta fazer só mais uma alteração. Para fazê-la, no entanto, precisamos sair do sistema de trabalho:

# exit

A última alteração consiste em apagar o arquivo que contém o histórico dos comandos que você executou nos passos anteriores:

# rm -f /home/vinicius/debian-live/work/rootfs/root/.bash_history

Não só não há necessidade de quem for usar o LiveCD saber desses comandos como também o histórico de comandos estar limpo causa a impressão de que o sistema nunca foi usado.

Finalmente, podemos desmontar as pastas que montamos na etapa anterior para prosseguir à próxima etapa:

# umount /home/vinicius/debian-live/work/rootfs/dev/pts    
    
# umount /home/vinicius/debian-live/work/rootfs/dev    
    
# umount /home/vinicius/debian-live/work/rootfs/proc    
    
# umount /home/vinicius/debian-live/work/rootfs/sys    
    
# umount /home/vinicius/debian-live/work/rootfs/media    
    
# umount /home/vinicius/debian-live/work/rootfs/tmp

A execução desses comandos é de extrema importância. Como desmontam pastas do seu sistema que foram "emprestadas" ao sistema de trabalho, se você não executá-los, muito provavelmente alguns arquivos do seu próprio sistema acabarão sendo excluídos quando você for apagar a pasta de trabalho.

Etapa E - Preparar a estrutura de diretórios do LiveCD


Nessa etapa prepararemos o LiveCD, reunindo os arquivos necessários dentro de uma pasta temporária. Todos esses arquivos foram descritos na introdução do tutorial.

Comece copiando o kernel, o initrd (o arquivo é chamado assim apenas por razões históricas, na verdade esse é o initramfs, que vimos anteriormente) e o memtest que criamos na etapa anterior para a pasta temporária que contém os arquivos do LiveCD:

# cp -vp /home/vinicius/debian-live/work/rootfs/boot/vmlinuz-$(uname -r) /home/vinicius/debian-live/cd/boot/vmlinuz    
    
# cp -vp /home/vinicius/debian-live/work/rootfs/boot/initrd.img-$(uname -r) /home/vinicius/debian-live/cd/boot/initrd.gz    
    
# cp -vp /home/vinicius/debian-live/work/rootfs/boot/memtest86+.bin /home/vinicius/debian-live/cd/boot/memtest86+.bin

Copie também o gerenciador de boot GRUB, que está no seu sistema, para a pasta temporária:

# find /boot /usr/lib/grub/ -iname 'stage2_eltorito' -exec cp -v {} /home/vinicius/debian-live/cd/boot/grub \;

Agora vamos criar o arquivo "menu.lst". Para isso, abra-o com o seu editor de texto favorito (no meu caso, escolhi abri-lo com o kedit):

$ kedit /home/vinicius/debian-live/cd/boot/grub/menu.lst

Copie e cole o que vier a seguir no editor de texto, salve o arquivo e saia do editor de texto:

# By default, boot the first entry.    
default 0    
    
# Boot automatically after 30 secs.    
timeout 30    
    
color cyan/blue white/blue    
    
title Start Linux in Graphical Mode    
kernel /boot/vmlinuz BOOT=live boot=live nopersistent rw quiet splash    
initrd /boot/initrd.gz    
    
title Start Linux in Safe Graphical Mode    
kernel /boot/vmlinuz BOOT=live boot=live xforcevesa rw quiet splash    
initrd /boot/initrd.gz    
    
title Start Linux in Text Mode    
kernel /boot/vmlinuz BOOT=live boot=live nopersistent textonly rw quiet    
initrd /boot/initrd.gz    
    
title Start Persistent Live CD    
kernel /boot/vmlinuz BOOT=live boot=live persistent rw quiet splash    
initrd /boot/initrd.gz    
    
title Start Linux Graphical Mode from RAM    
kernel /boot/vmlinuz BOOT=live boot=live toram nopersistent rw quiet splash    
initrd /boot/initrd.gz    
    
title Memory Test    
kernel /boot/memtest86+.bin    
    
title Boot the First Hard Disk    
root (hd0)    
chainloader +1

Para finalizar, converta a pasta de trabalho em uma imagem comprimida do tipo SquashFS:

# mksquashfs /home/vinicius/debian-live/work/rootfs /home/vinicius/debian-live/cd/live/filesystem.squashfs

Verifique se os arquivos da pasta "/home/vinicius/debian-live/cd" cabem no disco (CD ou DVD) no qual você pretende armazenar o sistema. Tenha em mente que você precisará de um espaço livre em disco ligeiramente superior ao tamanho dessa pasta para gerar a imagem ISO do LiveCD (ou LiveDVD). Se você não dispõe desse espaço, você pode apagar a pasta de trabalho, que não será mais utilizada nesse tutorial:

# rm -rf /home/vinicius/debian-live/work

O comando a seguir não é necessário para a criação do LiveCD, mas usualmente é executado. Ele calcula o MD5, que permite verificar posteriormente a integridade dos arquivos contidos no LiveCD.

# cd /home/vinicius/debian-live/cd && find . -type f -print0 | xargs -0 md5sum | tee /home/vinicius/debian-live/cd/md5sum.txt

Etapa F - Criar o LiveCD


Essa é a última etapa do nosso passo-a-passo e nela criaremos a imagem ISO do LiveCD, que pode em seguida ser gravada em um CD ou testada em uma máquina virtual.

Execute o comando a seguir para criar o arquivo ISO (você pode alterar os valores passados juntamente com os parâmetros -V e -o, que indicam o nome do CD e o caminho do arquivo que será gerado, respectivamente):

# mkisofs -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -V "DEBIAN" -cache-inodes -r -J -l -o /home/vinicius/live-cd.iso /home/vinicius/debian-live/cd

Opcionalmente, você pode excluir as pastas temporárias agora:

# rm -rf /home/vinicius/debian-live

Se quiser, você pode manter apenas o sistema de trabalho e apagar os arquivos do LiveCD. Caso deseje no futuro refazer ou criar uma nova versão do LiveCD, você já não precisa executar a etapa B. Para fazer isso, você pode executar os comandos a seguir no lugar dos anteriores:

# rm -f /home/vinicius/debian-live/cd/*    
    
# rm -f /home/vinicius/debian-live/cd/boot/*    
    
# rm -f /home/vinicius/debian-live/cd/boot/grub/*    
    
# rm -f /home/vinicius/debian-live/cd/live/*

Agora, se você instalou o qemu, você pode testar o LiveCD usando ele. Observe que para fazer esse teste não é necessário gravar o LiveCD. Você pode usar a imagem ISO que você acabou de criar. Para isso, execute o comando:

$ qemu -cdrom /home/vinicius/live-cd.iso -boot d

Como havia mencionado anteriormente, você pode utilizar outros programas como o Sun VirtualBox ou o VMware Player para testar o LiveCD. Isso fica a seu critério, mas não entrarei em detalhes quanto isso por não se tratar do foco desse tutorial.

Também não entrarei em muitos detalhes quanto à gravação do CD (ou do DVD, se você criou na verdade um LiveDVD) pelo mesmo motivo, mas apresentarei dois programas de linha de comando que podem realizar essa tarefa, que são o cdrecord (utilizado para gravação de CDs) e o growisofs (gravação de DVDs).

Para gravar seu LiveCD usando o cdrecord, insira o CD virgem dentro do gravador e execute o seguinte comando no terminal (você pode alterar os valores passados juntamente com os parâmetros speed e dev, que indicam a velocidade de gravação e o dispositivo que representa o gravador, respectivamente):

# cdrecord -v speed=8 dev=cdrom -data /home/vinicius/live-cd.iso

Se você originou um LiveDVD, no entanto, você vai precisar de um programa diferente, o growisofs. Insira o DVD virgem dentro do gravador e execute o seguinte comando no terminal (aqui você também pode alterar o comando conforme a sua vontade):

# growisofs -dvd-compat -speed=2 -Z /dev/cdrom=/home/vinicius/live-cd.iso

Além do cdrecord e do growisofs, que são programas de linha de comando, você pode utilizar um programa gráfico, como o X-CD-Roast, o K3B ou o Brasero. Todos esses realizam gravação tanto de CDs quanto de DVDs de dados.

Bem, pessoal, acho que é isso. Espero que vocês tenham gostado do passo-a-passo e que seja proveitoso. Procurei ser o mais objetivo possível para não sair do assunto principal que era a criação do LiveCD. Dicas sobre personalizações vocês podem encontrar nas fontes citadas a seguir e mais informações sobre utilização de máquinas virtuais e gravação de CDs e DVDs vocês podem encontrar facilmente procurando na Internet.

A criação de LiveCDs (que, de certa forma, pode originar distribuições novas) é um assunto muito vasto e não foi meu objetivo esgotá-lo nesse artigo. Fica então o tema em aberto para a elaboração de novos artigos, que podem inclusive aproveitar o que já foi tratado nesse.

Um abraço a todos e até a próxima.

Fontes


2 comentários:

Antonio disse...

Tutorial publicado no Viva o Linux:

http://www.vivaolinux.com.br/artigo/Criando-um-LiveCD-a-partir-de-uma-instalacao-do-Debian-Lenny/

Antonio disse...

A primeira das fontes:

http://www.geekconnection.org/remastersys/capink.html

Não se encontra mais disponível. Seu conteúdo, no entanto, ainda pode ser encontrado aqui (por sinal, até mais atualizado):

http://ubuntuforums.org/showthread.php?t=688872

Postar um comentário