Instalar ubuntu 20.04 Server no Raspberry

Os termos rpi, pi e raspberry são sinónimos.
Vai ser usado por defeito o ip 192.168.1.88 e o gateway 192.168.1.254.

Fazer o download da imagem com o rpi-imager para o microSD card que vai funcionar na placa raspberry

https://www.raspberrypi.org/software/

Atenção à formatação da microSD, se o processo parar e não concluir, uma das causas é a deficiente formatação. Pode formatar usando um utilitário para windows (SD CARD FORMATTER).

O processo pode demorar muito tempo (em alguns casos mais de uma hora), por isso, tenha paciência até estar concluído.

Primeira instalação

Após a conclusão do NOOBS, inserir o SD Card na placa rpi.
Se usarmos a saída HDMI, na primeira vez que iniciar, o login é ubuntu, a password ubuntu é solicitado de imediato que crie uma nova pass.

Podemos sem a saída hdmi ligada aceder diretamente através de ssh. Primeiro vamos verificar nossa rede qual o ip e dispositivo.

Linux ou OSX

arp -na | grep -i b8:27:eb

Windows

arp -a | findstr b8-27-eb
O resultado linux
(192.168.1.88) at b8:27:eb:4b:75:e6 [ether] on enp3s0
windows
C:\Users>arp -a | findstr b8-27-eb
  192.168.1.88 b8-27-eb-4b-75-e6 dynamic

nota: no windows se o computador já funcionou com outras placas sem terminar a sessão os IPs anteriores vão aparecer se forem diferentes do atual.

ligação por ssh

Para ligar através de terminal pode-se usar o putty ou usar o terminal diretamente no caso do linux ou OSX

ssh This email address is being protected from spambots. You need JavaScript enabled to view it.	
Irá aparecer uma indicação de uma chave a primeira ver que ligarmos, digitamos "yes". Já estamos no nosso rpi a primeira coisa que vamos fazer é atualizar o sistema.
sudo apt update
sudo apt upgrade

Vai demorar algum tempo até terminar (em alguns casos mais de 10 minutos)

Alterar a porta de acesso pelo ssh

Um dos hobbies preferidos de alguns aprendizes de "Ácaro" é tentar aceder aos sistemas através de ssh, fazem a ligação e experimentam milhões de password até entrarem. Este tipo de ataque pode ser feito facilmente ao rpi se não tivermos medidas de proteção. Assim, a primeira medida para evitar estes ataques é mudar a porta do ssh, normalmente uso uma porta acima de 49000, neste caso vamos mudar para 49814 como exemplo. Existem outras medidas de proteção (firewall etc etc)

sudo nano /etc/ssh/sshd_config
Vamos alterar este ficheiro em duas linhas
Port 49814
MaxSessions 5
O maxsessions permite que existam mais de uma ligação, isso será útil no funcionamento de dispositivos externos por ssh, por defeito, apenas uma ligação é permitida com este protocolo de comunicação. Agora podemos ligar ao nosso raspberry com outros acessos.
ssh This email address is being protected from spambots. You need JavaScript enabled to view it. -p 49814	
Welcome to Ubuntu 20.10 (GNU/Linux 5.8.0-1013-raspi aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sun Jan 31 19:01:42 UTC 2021

  System load:           2.05
  Usage of /:            4.5% of 57.37GB
  Memory usage:          27%
  Swap usage:            0%
  Temperature:           44.0 C
  Processes:             143
  Users logged in:       0
  IPv4 address for eth0: 192.168.1.88
  IPv6 address for eth0: 2001:8a0:569c:e01:ba27:ebff:fe4b:75e6


0 updates can be installed immediately.
0 of these updates are security updates.

Nota: No caso de ligação com o putty, deve ser alterada a porta de 22 para 49814.

Acesso root

Para executar um comando com acesso administrativo, podemos usar o comando "sudo" antes do que pretendemos executar, por exemplo,

cp xpto.txt /pastx/xpto.txt
este comando pode ser executado sem permissões especiais se o ficheiro não tiver proteção de escrita e a pasta de destino permitir, mas, se existir alguma proteção preciamos de acesso administrativo (acesso root) usamos então
sudo cp xpto.txt /pastx/xpto.txt
Mas, no caso da instalação, se estamos sistematicamente a usar comandos que necessitam de permissão administrativa, podemos digitar sudo -i e deixamos de precisar de colocar sudo.

IP fixo na rede, por cabo e por wi-fi

Este procedimento aplica-se apenas às versões 20.04 e 20.10 a versão 22.04 tem algumas alterações. Não pode se executado em versões anteriores à 20.04.

Precisamos de aceder facilmente ao rpi, se o ip mudar sempre que exista uma nova ligação, não conseguimos automatizar o sistema para aceder facilmente, é por isso fundamental fixar tanto o ip por cabo "eth0" como da rede wifi "wlan0".

Como ip dinâmico podemos usar o ARP para saber qual o ip, mas, se usarmos um webserver torna-se incomodo e inútil o ip estar sempre a mudar.

Desde o ubuntu 18.04, o ip pode ser gerido dentro da pasta /etc/netplan, com o netplan. ATENÇÃO: Os ficheiros de configuração do NETPLAN tem estrutura organizacional, usem "espaços" e não "tabs".

Na pasta /etc/netplan digitamos ll ou ls -l e encontramos um ficheiro de configuração de rede yaml.

	root@ubuntu:/etc/netplan# ll
-rw-r--r--  1 root root  512 Sep 24 19:27 50-cloud-init.yaml

Editamos o ficheiro

A edição de ficheiros no linux pode ser feita com um dos dois editores que vêm por defeito "NANO" e "VI" mas, quem não está muito familiarizado pode usar uma ligação com o WINSCP(https://winscp.net) e editar com um programa com interface gráfico. Nos próximos passos, onde está "nano" pode ser usado "vi" ou, no caso da gestão com o winscp, deve ser feito um acesso com permissão root.

sudo nano 50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eth0:
            dhcp4: true
            match:
                driver: bcmgenet smsc95xx lan78xx
            optional: true
            set-name: eth0
    version: 2
Verificamos que primeiro passo é desligar a configuração automática criando o ficheiro com
sudo nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
e inserindo
network: {config: disabled}
Agora vamos fixar o nosso ip em 192.168.1.88 alterando o ficheiro 50-cloud-init.yaml
Como este ficheiros yaml definem o nosso acesso à internet e facilmente ficam sem funcionar porque usamos a tab em vez do espaço ou qualquer um das mil e uma possibilidade de estragar a configuração, vamos fazer uma cópia de segurança.
sudo cp 50-cloud-init.yaml 50-cloud-init.yaml.bak
editamos a configuração
sudo nano 50-cloud-init.yaml 
Uma das config que estou a usar
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      match:
         driver: bcmgenet smsc95xx lan78xx
      set-name: eth0   
      addresses: [192.168.1.88/24]
      gateway4: 192.168.1.254
      nameservers:
          addresses: [8.8.8.8, 8.8.4.4,192.168.1.254]
Verificamos se a configuração está correta com
sudo netplan try

(atenção este ficheiro é muito sensivel e, em caso de erro, fica-se de imediato sem rede)
No caso de não existir erro podemos aplicar de imediato a configuração

sudo netplan apply
Atenção, o device eth0 pode mudar, assim, antes de editar o ficheiro deve-se verificar que devices podemos verificar que devices temos.
ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether b8:27:eb:4b:75:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.88/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2001:8a0:568c:e01:ba27:ebff:fe4b:75e6/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 48659sec preferred_lft 48659sec
    inet6 fe80::ba27:ebff:fe4b:75e6/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether b8:27:eb:1e:20:b3 brd ff:ff:ff:ff:ff:ff

Podemos ver que temos mais um interface, o wlan0 que é o Wi-Fi

podemos assim criar um novo ficheiro de configuração

sudo nano 99-cloud-init.yaml 
# configuração manual do IP FIXO no wi-fi

network:
  version: 2
  renderer: networkd
  wifis:
    wlan0:
      dhcp4: no
      addresses: [192.168.2.40/24]
      gateway4: 192.168.2.254
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
      access-points:
        "SSID_REDE":
          password: "..."	

Neste caso usamos o ip 192.168.2.40 para o wi-fi no grupo 192.168.2.x

Verificar no router qual o ip disponível para a rede wi-fi. Podemos agora verificar se estão ambas as placas a funcionar usando o comando o device wlan0 já terá um ip atribuido
ip addr

Já temos a nossa placa rpi instalada e configurada em termos de hardware e network, agora vamos instalar o software básico de funcionamento.

Instalar software no Raspberry

O computador já se encontra funcional mas, que programas vamos precisar para os nossos projetos. Necessitamos como base de um servidor de web, uma base de dados, linguagens de programação para interagir com o rpi. Começamos por instalar o LAMP (Linux, Apache, MySQL, PHP).

  • APACHE: Servidor de Web;
  • PHP: Linguagem de script open source de uso geral, para o desenvolvimento web que pode ser embutida dentro do HTML;
  • MYSQL: Base de dados relacional;
  • PHPMYADMIN: Gestor de base de dados mysql;
  • PYTHON: Linguagem de programação;
  • PIP: Package Installer for Python.
APACHE:
sudo apt install apache2 -y
PHP:
sudo apt install php -y
MYSQL
sudo apt install mariadb-server php-mysql -y
PHPMYADMIN
sudo apt install phpmyadmin
PYTHON
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
PIP
sudo apt update
sudo apt upgrade
sudo apt install python3-pip

Como instalar modules python

Por exemplo o module tinha a designação de gpiozero

sudo pip install gpiozero

para desinstalar

sudo pip uninstall gpiozero

Permissões dos ficheiros

Por defeito os ficheiros(FILES) de trabalho têm permissões 0644 e as directorias(DIR) 0755

Também cada ficheiro tem permissões de escrita ou leitura (atributos), que nos é dado pelo chmod

Para alterar as permissões

sudo chmod /dir/dir/* -R

Cada ficheiro tem um user e grupo atribuido

Se o ficheiro for criado pelo user rpi, o owner será rpi.

Criar file test

sudo touch test

Atribuir user/grupo

sudo chown rpi:rpi test