Labrador 32 bits - Criando uma imagem
Nesta página você encontrará instruções de como criar uma imagem mínima para Labrador 32 bits. Se você deseja usar uma imagem mínima pronta, clique aqui.
O processo para criar uma imagem compreende compilar o bootloader, o Kernel Linux e gerar um sistema de arquivos de uma distribuição GNU/Linux Debian-like. Compreende também os passos para escrever essa imagem em um cartão SD.
Para encontrar a versão mais atualizada dos softwares aqui citados, acesse nosso Github.
Para a versão 64 bits acesse a seguinte página: Labrador 64 bits - Criando uma imagem
Pré-requisitos
Bootloader
O primeiro passo é obter o bootloader. É possível usar um binário pré-compilado ou compilá-lo a partir do código-fonte, seguindo as instruções da página do github/labrador-uboot-32.
Ao final desse processo você terá um arquivo u-boot-dtb.img ou u-boot-dtb-no-UART3-console.img.
Obs.: Se você quer ter a UART3 (/dev/ttyS3) ativada para console de debug, que é o recomendado para a maior parte dos casos, use o u-boot-dtb.img. Caso você tenha intenção de usar o UART3 para alguma outra finalidade, use o u-boot-dtb-no-UART3-console.img.
Kernel Linux
Para obter o kernel com a versão 6, acesse github/labrador-linux-6. Há outras versões do kernel no git da caninos-loucos, mas a mais moderna é recomendada. Novamente aqui você tem a opção de usar binários pré-compilados ou compilá-los a partir do código-fonte, conforme as instruções do arquivo README.md.
Obs.: Se você está fazendo compilação cruzada do kernel, é possível usar o arm-linux-gnueabihf-gcc disponível no repositório do bootloader. Nesse caso adicione o caminho para o compilador ao PATH. Por exemplo, se você fez o clone do u-boot em $HOME:
$ export PATH=$PATH:$HOME/labrador-uboot-32/toolchain/arm-linux-gnueabihf/bin
Ao final desse processo você terá um arquivo labrador-kernel6-armhf-v*.tar.gz com os arquivos:
kernel.dtbuImagelib/modules/6.1.76(pode ser diferente caso esteja usando outra versão do kernel)
Criando um sistema Bootável
Você pode usar qualquer sistema compatível com a arquitetura ARM. Nesse procedimento descreveremos o processo para criação de um sistema Debian usando o debootstrap.
É necessário instalar também o emulador QEMU caso a imagem esteja sendo criada em uma máquina de arquitetura não ARM, como x86. Este pacote pode ser instalado no Debian pelo comando
# apt install qemu-user-static
Escolha um diretório para criação do sistema. É recomendável que seja feito diretamente em um cartão SD, mas é possível também criar em uma pasta local e apenas copiar o sistema para o cartão.
Neste exemplo usaremos uma pasta rootfs no diretório /home do seu usuário para criar um sistema Debian 12 (bookworm), mas a versão pode ser alterada se necessário.
# debootstrap --arch=armhf --foreign --components=main,contrib,non-free-firmware bookworm /home/[usuário]/rootfs
Assim que o sistema tiver concluído o primeiro estágio de instalação, entraremos no sistema e realizaremos o segundo estágio.
# cp /usr/bin/qemu-arm-static rootfs/usr/bin # cp /etc/resolv.conf rootfs/etc # chroot rootfs # export LANG=C # /debootstrap/debootstrap --second-stage
Com o segundo estágio completo, alteraremos a lista de pacotes para ficarem o mais completa possível.
# cat << EOT > /etc/apt/sources.list deb https://ftp.debian.org/debian/ bookworm contrib main non-free non-free-firmware deb-src https://ftp.debian.org/debian/ bookworm contrib main non-free non-free-firmware deb https://ftp.debian.org/debian/ bookworm-updates contrib main non-free non-free-firmware deb-src https://ftp.debian.org/debian/ bookworm-updates contrib main non-free non-free-firmware deb https://ftp.debian.org/debian/ bookworm-backports contrib main non-free non-free-firmware deb-src https://ftp.debian.org/debian/ bookworm-backports contrib main non-free non-free-firmware deb https://security.debian.org/debian-security/ bookworm-security contrib main non-free non-free-firmware deb-src https://security.debian.org/debian-security/ bookworm-security contrib main non-free non-free-firmware EOT
Com isso feito, atualize o apt e instale outras dependências.
# apt update # apt upgrade # apt install sudo firmware-realtek systemd-timesyncd locales
Para o sudo funcionar corretamente, devemos alterar o hostname da máquina
# echo labrador > /etc/hostname
Você deve adicionar o nome definido no passo anterior à primeir a linha do arquivo /etc/hosts, da seguinte forma:
# nano /etc/hosts 127.0.0.1 localhost labrador ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Com isso já feito, pode-se criar um usuário comum e adicioná-lo a todos os grupos necessários. Neste exemplo, criamos um usuário 'caninos' pertencente ao grupo sudo e criamos uma senha. É *altamente recomendado* criar uma senha para o root também.
# useradd -m -G sudo -s /bin/bash caninos # passwd caninos # passwd
Assim, podemos limpar o cache do apt.
# apt-get autoclean # apt-get clean
Para sair do chroot, apenas escrever ou teclar Ctrl + D.
# exit
Limpando a máquina:
# rm -f rootfs/root/.bash_history rootfs/usr/bin/qemu-arm-static # cat /dev/null > rootfs/etc/resolv.conf
Passos Opcionais
1. Ethernet
Para configurar o Ethernet é necessário alterar o arquivo /etc/network/interfaces para
auto end0 iface end0 inet dhcp
e usar o comando ifup end0 para ligá-la da primeira vez.
Gravando o sistema num cartão SD
Isso pode ser feito com o seguinte script, assumindo que neste caso o cartão SD é representado no sistema como /dev/mmcblk0. Atenção! Para evitar perda de dados, é necessário confirmar onde está seu cartão SD com o comando lsblk. Geralmente estará em mmcblk0, mas pode ser sda, sdb ou outros dependendo do uso de adaptadores.
# parted -s /dev/mmcblk0 mklabel msdos # parted -s /dev/mmcblk0 mkpart primary fat32 1MB 32MB # parted -s /dev/mmcblk0 mkpart primary ext4 33MB 100% # parted -s /dev/mmcblk0 set 1 boot on # mkfs.ext4 -F -D SYSTEM /dev/mmcblk0p2 # mkfs.vfat -F -L BOOT /dev/mmcblk0p1
O próximo passo é gravar o bootloader, que está contido no repositório do kernel.
# dd if=labrador-linux-6/boot32/u-boot-dtb.img of=/dev/mmcblk0 bs=512 seek=66 # dd if=labrador-linux-6/boot32/bootloader.bin of=/dev/mmcblk0 bs=512 seek=1 # sync
Retire o cartão SD e insira novamente para montar as partições automaticamente. Com o comando lsblk é possível ver o diretório em que as partições do cartão SD estão montadas.
Com isso, podemos instalar o sistema com o script de make do repositório do kernel
$ git clone https://github.com/caninos-loucos/labrador-linux-6 $ cd labrador-linux-6 $ make install32 $ cp boot32/uEnv.txt [ponto de montagem da partição BOOT, ex. /run/media/usuario/BOOT]
E assim, finalmente, podemos gravar o rootfs na partição SYSTEM
$ cp -rp rootfs/* [Ponto de montagem SYSTEM] $ sync
E assim, o sistema estará pronto.
Atualizando uma imagem existente
É possível tamém atualizar imagens existentes para uma nova versão do debian a fim de não perder configurações. São necessários os seguintes passos:
1. Atualizar o kernel, sendo recomendável ser a versão mais recente oferecida no Github, e executar os seguintes comandos:
$ git clone https://github.com/caninos-loucos/labrador-linux-6 $ cd labrador-linux-6 $ make install32
Caso haja algum erro, certifique-se que o cartão SD contendo a imagem a ser atualizada está montado, usando o comando lsblk.
2. Atualizar a instalação existente com:
# apt update # apt upgrade
3. Modificar o arquivo /etc/apt/sources.list para se referir à próxima versão do Debian: no caso do Debian 10 (buster), mudar para bullseye (Debian 11) e assim por diante. Não é recomendado pular versões, como ir diretamente do buster para o bookworm (Debian 12).
4. Atualizar todos os pacotes para a próxima versão, com os seguintes comandos:
# apt update # apt full-upgrade
4. Caso esteja avançando duas versões ou mais (do Debian 10 para o 12, por exemplo), repita o processo para a próxima versão.