Manual

do

Maker

.

com

Como gerar uma imagem para Raspberry, fácil!

Como gerar uma imagem para Raspberry, fácil!

Há muitos anos, surgiu um sistema operacional que modificou a forma de usar Linux, e graças a ele o Linux se popularizou muito, porque a partir de então foi possível fazer boot sem instalar nada no HD. O Sistema se chamava Knoppix e utilizava os sistemas cloopsquashfs para alocar o sistema operacional na memória RAM e extender o acesso aos aplicativos que estavam no CD. O que aconteceu a partir daí foram variações desse sistema, nada mais foi novo por muito tempo, mas uma das remasterizações fez bastante sucesso, o saudoso Kurumin, que era uma remasterização do Knoppix com alguns scripts adicionados para cumprir tarefas que os usuários de Windows não teriam a habilidade necessária para fazê-las devido às diferenças dos sistemas operacionais. Bem, hoje temos outras arquiteturas que nos são acessíveis, além da iX86 e AMD64. Além dos MIPS (utilizados principalmente em roteadores WiFi), temos os ARM como o Raspberry, e a construção do sistema é bastante diferente. E mais uma vez, temos uma peça importante na remasterização do sistema, que é um script criado pelo Leonardo Lontra (o mesmo que escreve patches para a mainline do OpenCV), onde com 3 comandos você reconstrói sua própria imagem a partir de uma imagem do Raspbian.

Pré-requisitos

Primeiro de tudo, você tem que estar em um sistema Linux nativo (preferencialmente baseado em Debian ou ele próprio). Se for usuário de Windows, pode tentar fazê-lo em uma máquina virtual, mas não recomendo.

Além de um sistema Linux nativo, será necessário instalar alguns pacotes previamente:

sudo apt-get update
sudo apt-get install qemu qemu-user-static binfmt-support rsync kpartx git

Download do script

Clone o repositório do projeto com o git:

git clone https://github.com/lhelontra/embedtool.git

Após feito, você terá o diretório embedtool contendo (entre outros) o script embedtool.sh. De permissão de execução ao script antes de iniciar sua utilização:

cd embedtool && chmod 700 *.sh

Download do Raspbian

Vá até o site do Raspberry através desse link e baixe o Raspbian Stretch Lite (ou se tiver uma versão mais atual quando você estiver lendo isso, baixe a mais atual). Poderia ser a versão Desktop, mas todo o processo será mais rápido para uma prova de conceito.

Depois de feito o download, já descomprima a imagem de sistema.

unzip *.zip

No meu sistema as coisas já estão um pouco diferentes, mas eu vou passar o comando do modo que você deverá digitar.

Passo 1 - Montagem do sistema de origem

Você tem 2 opções; uma delas é extrair o sistema a partir da imagem que fez download e a outra é extrair o sistema a partir de um SD que você está utilizando para, por exemplo, distribuir a suas personalizações em outros Raspberry Pi. A partir de agora, assume-se que já estamos como root. Para tal, digite:

sudo su

E entre com a senha.

Montagem a partir da imagem

Começando pela imagem previamente obtida, o comando deve ser:

~/embedtool/embedtool.sh -v -t rpi -m 2017-09-07-raspbian-stretch-lite.img /mnt/rpi/

Esse comando dará acesso ao conteúdo das partições existentes na imagem.

Montagem a partir do SD card

Se você pretende remasterizar um sistema já em uso, sem problemas. Apenas atente-se em desligar corretamente o sistema antes de desligar o Raspberry, então coloque o cartão de memória em seu computador e proceda da seguinte maneira (presupondo um dispositivo /dev/sdb):

~/embedtool/embedtool.sh -v -t rpi -m /dev/sdb /mnt/rpi/

O resultado é semelhante à montagem anterior, exceto por não conter as informações de offset porque o SD não é montado como um dispositivo loop, mas como um dispositivo normal.

Passo 2 - extrair o sistema

Agora que os dados do sistema estão disponíveis, é hora de copiar esse sistema para manipulação. O comando para isso é tão simples quanto os demais:

~/embedtool/embedtool.sh -v -t rpi --copy /dev/sdb sdcard

Isso criará um diretório chamado sdcard contendo todo o sistema, que agora estará pronto para ser modificado.

Outra opção é copiá-lo diretamente do dispositivo, substituindo aqui_mesmo por /dev/sdb.

Passo 3 - Personalizando o sistema

Para personalizar o sistema, o script faz chroot na raiz criada pela extração. O chroot significa "change root", porque a sua raiz de sistema passará a ser o sistema alvo. Isto é, se resolver instalar algum pacote, poderá utilizar o apt-get tranquilamente, tudo será instalado em seu sistema que está sendo modificado, fora do sistema nativo. Mas certifique-se previamente de que executou o seguinte comando:

~/embedtool/embedtool.sh -v -t rpi -c sdcard

Como você pode notar na imagem acima, a primeira coisa que já dá pra ajustar é o locale. Se não sabe como ajustar o idioma do sistema, sugiro que leia esse outro artigo a respeito, deixe ele aberto em uma aba ao lado e continue a leitura aqui.

Estando com esse chroot, você pode fazer qualquer coisa que desejar e depois bastará gerar a imagem do sistema. Por exemplo, se você quiser trocar o logotipo do kernel, pode seguir esse outro tutorial que escrevi a respeito. Se desejar compilar seu próprio kernel, tem esse tutorial aqui, inclusive com outros métodos para essa compilação.

Passo 4 - Gerar uma nova imagem de sistema

Tendo concluído as modificações, devemos gerar uma nova imagem para gravar no SD card. Para isso, simplesmente saímos do chroot (usando Ctrl+D) e executamos o comando:

~/embedtool/embedtool.sh -v -t rpi -bimg rpi_img rpi_image.img

Passo 5 - Gravar o sistema no SD card

Acabou, agora basta fazer o que seria feito na imagem original, gravando-a para o dispositivo de destino:

dd if=rpi_image.img of=/dev/sdb
sync

A imagem original continua montada no sistema. Como ela não é mais necessária, basta desmontá-la:

~/embedtool/embedtool.sh -v -t rpi -u aqui_mesmo

Troubleshooting

Um problema que você pode se deparar é com o boot apenas do kernel. Ou um pouco pior, nenhum boot. Se for o caso (até recomendo que veja isso antes de gerar uma nova imagem), certifique-se de que o cmdline.txt está apontando diretamente para o dispositivo invés de um UUID. Ele deve ficar desse modo:

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

No meu caso, como utilizei o SD card diretamente em um slot do meu ultrabook, o dispositivo é diferente (mmcblk0), mas se o seu dispositivo for /dev/sdb, apenas substitua por /dev/sdb1/dev/sdb2, respectivamente.

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.