Labrador 32 bits - Criando uma imagem: mudanças entre as edições

De Caninos Loucos
Ir para navegação Ir para pesquisar
Linha 32: Linha 32:
* <code>lib/modules/6.1.76</code> (pode ser diferente caso esteja usando outra versão do kernel)
* <code>lib/modules/6.1.76</code> (pode ser diferente caso esteja usando outra versão do kernel)


== Sistema de Arquivos ==
== Distro ==


Você pode usar qualquer rootfs compatível com a arquitetura arm. Nesse procedimento descreveremos o processo para criação de um rootfs usando o [https://wiki.debian.org/pt_BR/Debootstrap debootstrap].
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 [https://wiki.debian.org/pt_BR/Debootstrap 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


'''i) debootstrap primeiro estágio'''
<pre># apt install qemu-user-static</pre>


Para gerar um sistema base Debian Buster:
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.
<pre># debootstrap --arch=armhf --foreign buster rootfs</pre>
 
Neste exemplo usaremos uma pasta <code>rootfs</code> 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.
 
<pre># debootstrap --arch=armhf --foreign --components=main,contrib,non-free-firmware bookworm /home/[usuário]/rootfs</pre>
 
Assim que o sistema tiver concluído o primeiro estágio de instalação, entraremos no sistema e realizaremos o segundo estágio.


'''ii) debootstrap segundo estágio'''
<pre>
<pre>
# cp /usr/bin/qemu-arm-static rootfs/usr/bin
# cp /usr/bin/qemu-arm-static rootfs/usr/bin
Linha 51: Linha 56:
</pre>
</pre>


'''iii) configurando o repositório de pacotes'''
Com o segundo estágio completo, alteraremos a lista de pacotes para ficarem o mais completa possível.
 
<pre>
<pre>
# cat << EOT > /etc/apt/sources.list
# cat << EOT > /etc/apt/sources.list
deb http://ftp.br.debian.org/debian/ buster main contrib non-free
deb https://ftp.debian.org/debian/ bookworm contrib main non-free non-free-firmware
deb-src http://ftp.br.debian.org/debian/ buster main contrib non-free
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 http://security.debian.org/debian-security buster/updates main contrib non-free
deb https://ftp.debian.org/debian/ bookworm-backports contrib main non-free non-free-firmware
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src https://ftp.debian.org/debian/ bookworm-backports contrib main non-free non-free-firmware


# buster-updates, previously known as 'volatile'
deb https://security.debian.org/debian-security/ bookworm-security contrib main non-free non-free-firmware
deb http://ftp.br.debian.org/debian/ buster-updates main contrib non-free
deb-src https://security.debian.org/debian-security/ bookworm-security contrib main non-free non-free-firmware
deb-src http://ftp.br.debian.org/debian/ buster-updates main contrib non-free
EOT
EOT
</pre>
</pre>


'''iv) instalando pacotes adicionais'''
Com isso feito, atualize o apt e instale outras dependências.
<pre>
<pre>
# apt-get update
# apt update
# apt-get upgrade
# apt upgrade
# apt-get install sudo
# apt install sudo firmware-realtek systemd-timesyncd locales
</pre>
</pre>


'''v) definindo o hostname'''
Para o sudo funcionar corretamente, devemos alterar o hostname da máquina
 
<pre># echo labrador > /etc/hostname</pre>
<pre># echo labrador > /etc/hostname</pre>


'''vi) adiocionar o hostname ao hosts'''
Você deve adicionar o nome definido no passo anterior à primeir a linha do arquivo <code>/etc/hosts</code>, da seguinte forma:


Você deve adicionar o nome definido no passo anterior (''hostname'') ao arquivo /etc/hosts, da seguinte forma:
127.0.1.1 labrador
Ao final seu arquivo /etc/hosts deve se parecer com esse:
<pre>
<pre>
# cat /etc/hosts
# nano /etc/hosts
127.0.0.1      localhost
127.0.0.1      localhost labrador
127.0.1.1      labrador
::1            localhost ip6-localhost ip6-loopback
::1            localhost ip6-localhost ip6-loopback
ff02::1        ip6-allnodes
ff02::1        ip6-allnodes
Linha 93: Linha 96:
</pre>
</pre>


'''vii) criar um usuário e adicioná-lo ao grupo sudo'''
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.


Criaremos um usuário chamado caninos:
<pre>
<pre>
# useradd -m caninos
# useradd -m -G sudo -s /bin/bash caninos
# usermod -aG sudo caninos
# passwd caninos
# passwd
</pre>
</pre>


Definiremos uma senha para esse usuário:
Assim, podemos limpar o cache do apt.
<pre># passwd caninos</pre>


'''viii) demais ajustes'''
Você pode fazer outros ajustes aqui que julgar necessário. Os passos descritos até aqui são os mais essenciais para se ter uma versão mínima em modo texto.
'''ix) finalizando'''
<pre>
<pre>
# apt-get autoclean
# apt-get autoclean
Linha 115: Linha 111:
</pre>
</pre>


Para sair do chroot:
Para sair do chroot, apenas escrever ou teclar Ctrl + D.
<pre># exit</pre>
<pre># exit</pre>


Limpando:
Limpando a máquina:
<pre>
<pre>
# rm -f rootfs/root/.bash_history rootfs/usr/bin/qemu-arm-static
# rm -f rootfs/root/.bash_history rootfs/usr/bin/qemu-arm-static
# cat /dev/null > rootfs/etc/resolv.conf
# cat /dev/null > rootfs/etc/resolv.conf
</pre>
</pre>
=== Passos Opcionais ===
1. Ethernet
Para configurar o Ethernet é necessário alterar o arquivo <code>/etc/network/interfaces</code> para
<pre>
auto end0
iface end0 inet dhcp
</pre>
e usar o comando <code>ifup end0</code> para ligá-la da primeira vez.


= Gravando o sistema num cartão SD =
= Gravando o sistema num cartão SD =

Edição das 20h00min de 7 de março de 2025

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é-requesitos

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.dtb
  • uImage
  • lib/modules/6.1.76 (pode ser diferente caso esteja usando outra versão do kernel)

Distro

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

i) Criar a tabela de partições

Obs.: Você deve substituir mmcblkX pelo descritor correto para o seu caso.

# parted /dev/mmcblkX
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) unit s
(parted) mkpart primary 16384 114687                                      
(parted) mkpart primary 114688 -1                                         
Warning: You requested a partition from 114688s to AAAs (sectors 114688..AAA).
The closest location we can manage is 114688s to BBBs (sectors 114688..BBB).
Is this still acceptable to you?
Yes/No? yes                                                               
(parted) print                                                            
Model:  (file)
Disk /dev/mmcblkX: DDDs
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start    End      Size     File system  Name     Flags
 1      16384s   114687s  98304s                primary
 2      114688s  BBBs     CCCs                  primary

(parted) q

ii) Gravar o bootloader

# dd if=/path/to/u-boot-dtb.img of=/dev/mmcblkX bs=512 seek=66 status=progress

iii) Formatar as partições

# mkfs.vfat /dev/mmcblkXp1
# mkfs.ext4 /dev/mmcblkXp2

iv) Gravar o kernel na partição 1

# mount /dev/mmcblkXp1 /mnt
# cp /path/to/kernel.dtb /mnt
# cp /path/to/uImage /mnt
# cat << EOT > /mnt/uEnv.txt
uenvcmd=setenv ramdisk_addr_r -; setenv os_type linux;
bootargs=clk_ignore_unused selinux=0 scandelay root=/dev/mmcblk0p2 rw console=ttyS3 rootfstype=ext4 console=tty0 loglevel=6 rootwait
EOT
# sync
# umount /mnt

v) Gravar o rootfs na partição 2

# mount /dev/mmcblk0p2 /mnt
# cp -rp /path/to/rootfs/* /mnt
# cp -r /path/to/lib/modules /mnt/lib
# sync
# umount /mnt