FreeBSD 13 no Raspberry Pi 4

Boot pelo Cartão Micro SD

Esta página mostra como instalar o sistema operacional FreeBSD 13 em um Cartão Micro SD, para ser carregado no Raspberry Pi 4

FreeBSD 13 no Raspberry Pi 4 - Acesso Remoto - SSH
FreeBSD 13 no Raspberry Pi 4 - Acesso Remoto - SSH

Baixar FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz

A página https://download.freebsd.org/ftp/releases/ISO-IMAGES/13.0/ contém links para as imagens do FreeBSD 13 disponíveis para serem baixadas e arquivos que permitem verificar a integridade da imagem baixada através do comando shasum. Vamos usar o utilitário wget para baixar a imagem adequada para o nosso propósito:

$ wget https://download.freebsd.org/ftp/releases/ISO-IMAGES/13.0/FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz
--2021-05-25 05:52:32--  https://download.freebsd.org/ftp/releases/ISO-IMAGES/13.0/FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz
Resolving download.freebsd.org (download.freebsd.org)... 200.160.6.227, 2001:12ff:0:6224::15:0
Connecting to download.freebsd.org (download.freebsd.org)|200.160.6.227|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 464605028 (443M) [application/octet-stream]
Saving to: ‘FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz’

FreeBSD-13.0-RELEAS 100%[===================>] 443.08M  2.82MB/s    in 3m 53s

2021-05-25 05:56:26 (1.90 MB/s) - ‘FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz’ saved [464605028/464605028]

Verificar a integridade do arquivo baixado

Para verificar a integridade do arquivo baixado, vamos utilizar o comando shasum com a opção -c, que lê as somas SHA dos arquivos e as verifica:

$ shasum -c CHECKSUM.SHA256-FreeBSD-13.0-RELEASE-arm64-aarch64-RPI
FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz: OK

Descompactar o arquivo baixado

Vamos utilizar o utilitário 7z para descompactar o arquivo baixado:

$ 7z x FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs x64)

Scanning the drive for archives:
1 file, 464605028 bytes (444 MiB)

Extracting archive: FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz
--
Path = FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img.xz
Type = xz
Physical Size = 464605028
Method = LZMA2:23 CRC64
Streams = 1
Blocks = 128

Everything is Ok

Size:       3221225472
Compressed: 464605028

Listar os discos

Com o cartão micro SD instalado num leitor de cartão USB, colocado numa porta USB, deve ser usado o comando camcontrol devlist para listar os dispositivos físicos (unidades lógicas). No FreeBSD as unidades USB recebem os nomes da0, da1, etc.

$ sudo camcontrol devlist
...
< SD Card Reader 1.00>             at scbus6 target 0 lun 0 (da0,pass4)

Limpar a tabela de partição do disco

O disco não pode estar montado, se estiver montado deverá ser desmontado antes de realizar esta operação.

$ sudo dd if=/dev/zero of=/dev/da0 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.052649 secs (19916269 bytes/sec)

Transferir o arquivo para o cartão micro SD

Vamos utilizar o comando dd para copiar a imagem do sistema de arquivos para o Cartão Micro SD:

$ sudo dd if=FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img of=/dev/da0 bs=1M conv=sync status=progress
  3197108224 bytes (3197 MB, 3049 MiB) transferred 149.022s, 21 MB/s
3072+0 records in
3072+0 records out
3221225472 bytes transferred in 149.860241 secs (21494864 bytes/sec)

Mostrar as partições

Como visto abaixo, o Cartão Micro SD ficou com duas partições, a da0 MBR (Master Boot Record), com 29G, e a da0s2 BSD, com 3G.

$ gpart show
...
=>      63  61157313  da0  MBR  (29G)
        63      2016       - free -  (1.0M)
      2079    102312    1  fat32lba  [active]  (50M)
    104391   6187041    2  freebsd  (3.0G)
   6291432  54865944       - free -  (26G)

=>      0  6187041  da0s2  BSD  (3.0G)
        0       57         - free -  (29K)
       57  6186880      1  freebsd-ufs  (2.9G)
  6186937      104         - free -  (52K)

Carregar o FreeBSD 13 no Raspberry Pi 4

Para efetuar o boot do FreeBSD 13 no Raspberry Pi, deve-se:

  • desligar o Raspberry Pi;
  • remover o Cartão micro SD atual;
  • colocar o Cartão Micro SD contendo o FreeBSD 13;
  • ligar novamente o Raspberry Pi.

Demora algum tempo até que o hardware do Raspberry Pi seja reconhecido pelo FreeBSD e solicitado o nome do usuário. Os dois usuários pré-existentes na primeira carga do sistema operacional são o superusuário root, com a senha root, e o usuário normal freebsd, com a senha freebsd.

Configuração do sistema

O FreeBSD instalado permite o acesso remoto via SSH, sem que seja necessário qualquer configuração adicional, no entanto não é permitido o acesso pelo usuário root, somente pelo usuário freebsd. Assim, para se tornar um superusuário é necessário executar o comando su, que pede uma senha. A senha a ser fornecida é a do usuário root, e não a do usuário freebsd.

Através do acesso remoto deve ser editado o arquivo /etc/rc.conf para

  • mudar o nome do hospedeiro para pi;
  • definir o mapa do teclado como br.kbd;
  • permitir o escalonamento dinâmico da CPU do Raspberry Pi 4 para o seu padrão (não overclock) de @1500MHZ.

Conforme mostrado abaixo:

halley@bsd:~ $ ssh freebsd@192.168.100.101
The authenticity of host '192.168.100.101 (192.168.100.101)' can't be established.
ECDSA key fingerprint is SHA256:x+CV9md1X5fIx2XdVoXQQ8Ws/ExKFzBVaJOBuWzAKH4.
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.101' (ECDSA) to the list of known hosts.
Password for freebsd@generic:
FreeBSD 13.0-RELEASE (GENERIC) #0 releng/13.0-n244733-ea31abc261f: Fri Apr  9 06:06:55 UTC 2021

Welcome to FreeBSD!

freebsd@generic:~ % : Se tornar um superusuário
freebsd@generic:~ % su
Password:

root@generic:/home/freebsd # : Acertar a data e hora do sistema
root@generic:/home/freebsd # date -u 202106072055
Mon Jun  7 20:55:00 UTC 2021

root@generic:/home/freebsd # : Editar o arquivo de configuração
root@generic:/home/freebsd # ee /etc/rc.conf
root@generic:/home/freebsd # cat /etc/rc.conf
hostname="pi"
ifconfig_DEFAULT="DHCP"
sshd_enable="YES"
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
growfs_enable="YES"
keymap="br.kbd"
powerd_enable="YES"

root@generic:/home/freebsd # : Reiniciar o Raspberry Pi
root@generic:/home/freebsd # reboot
Connection to 192.168.100.101 closed by remote host.
Connection to 192.168.100.101 closed.

Após o Raspberry Pi ser reiniciado, pode-se consultar as frequências e outras informações sobre a CPU através do comando:

root@pi:/home/freebsd # sysctl -a dev.cpu.0
dev.cpu.0.temperature: 49.1C
dev.cpu.0.freq_levels: 1500/-1 600/-1
dev.cpu.0.freq: 600
dev.cpu.0.%parent: cpulist0
dev.cpu.0.%pnpinfo: name=cpu@0 compat=arm,cortex-a72
dev.cpu.0.%location:
dev.cpu.0.%driver: cpu
dev.cpu.0.%desc: Open Firmware CPU

Coleção de Ports

A Coleção de Ports é um conjunto de arquivos usados para compilar e instalar aplicativos no FreeBSD, e é chamado de port. Abaixo está mostrada a instalação dos ports:

root@pi:/home/freebsd # : Obter a Coleção de Ports
root@pi:/home/freebsd # portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 4 mirrors found.
Fetching public key from ipv4.aws.portsnap.freebsd.org... done.
Fetching snapshot tag from ipv4.aws.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Tue Jun  8 00:07:10 UTC 2021:
7c47d633ad05d8ef36c6a2b694f1cecc74fe1169571688          91 MB 1511 kBps 01m01s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ipv4.aws.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Tue Jun  8 00:07:10 UTC 2021 to Tue Jun  8 06:05:32 UTC 2021.
Fetching 5 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 15 patches.
(15/15) 100.00%  done.
done.
Applying patches...
done.
Fetching 0 new ports or files... done.

root@pi:/home/freebsd # : Extrair os ports baixados
root@pi:/home/freebsd # portsnap extract

Gerenciamento de pacotes

Como a instalação e utilização do ports no Raspberry Pi é demorada, é mais prático utilizar o pkg, a ferramenta de gerenciamento de pacotes do FreeBSD, usada para gerenciar os pacotes locais instalados pelo ports, e para instalar e atualizar pacotes de repositórios remotos, o que é mais rápido. Ao ser utilizado, se o pkg ainda não tiver sido instalado, será trazido, terá sua assinatura verificada e será instalado.

root@pi:/home/freebsd # : Atualizar os repósitórios remotos disponíveis
root@pi:/home/freebsd # pkg update
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:13:aarch64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.16.3...
Extracting pkg-1.16.3: 100%
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100%    163 B   0.2kB/s    00:01
Fetching packagesite.txz: 100%    6 MiB   3.1MB/s    00:02
Processing entries: 100%
FreeBSD repository update completed. 28986 packages processed.
All repositories are up to date.

root@pi:/home/freebsd # : Atualizar os pacotes para a nova versão
root@pi:/home/freebsd # pkg upgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
Checking for upgrades (1 candidates): 100%
Processing candidates (1 candidates): 100%
Checking integrity... done (0 conflicting)
Your packages are up to date.

root@pi:/home/freebsd # : Instalar o editor nano
root@pi:/home/freebsd # pkg install nano
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 3 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	gettext-runtime: 0.21
	indexinfo: 0.3.1
	nano: 5.5

Number of packages to be installed: 3

The process will require 3 MiB more space.
677 KiB to be downloaded.

Proceed with this action? [y/N]: y
[1/3] Fetching nano-5.5.txz: 100%  514 KiB 526.7kB/s    00:01
[2/3] Fetching indexinfo-0.3.1.txz: 100%    5 KiB   5.4kB/s    00:01
[3/3] Fetching gettext-runtime-0.21.txz: 100%  158 KiB 161.5kB/s    00:01
Checking integrity... done (0 conflicting)
[1/3] Installing indexinfo-0.3.1...
[1/3] Extracting indexinfo-0.3.1: 100%
[2/3] Installing gettext-runtime-0.21...
[2/3] Extracting gettext-runtime-0.21: 100%
[3/3] Installing nano-5.5...
[3/3] Extracting nano-5.5: 100%

Referências

* * *