Rui Martins, [email protected] [Setembro de 2018]
- Introdução
- Descarregar a imagem do sistema operativo
- Copiar a imagem para o cartão
- Preparar raspberry para ser acedido e configurado por outro computador
Voltar ao Índice | Passo seguinte - Introdução
https://www.waveshare.com/img/devkit/RPi3-B-Plus/RPi3-B-Plus-intro.jpg
Um raspberry pi é um computador, na sua board tem um processor, RAM, interfaces USB, interface HDMI, (...) mas que usa um cartão de memória (ou PEN USB) como memória secundária, em vez dos discos rigidos que normalmente são usados nos computadores tradicionais.
Tal como os computadores tradicionais tem que ser configurados com sistema operativo para funcionar, o mesmo se passa com os raspberry pi.
A diferença é que nos computadores tradicionais, usas um DVD ou uma PEN para instalar o sistema operativo no disco rigido do computador (sem remover o disco do computador), mas no raspberry, o sistema operativo é gravado num computador directamente no cartão de memória, e quando se coloca o cartão no raspberry, este está pronto a arrancar o sistema operativo.
O sistema operativo que vamos usar no raspberry pi é o Raspbian.
No entanto, por questões de segurança, por omissão, quando um raspberry arranca o Raspbian, este não permite ligações SSH nem VNC externas, ou seja, não consegues usar ou configurar o raspberry sem lhe ligar um monitor e um teclado.
A solução para este problema está descrita nos proximos passos.
Voltar ao Índice | Passo anterior - Introdução | Passo seguinte - Descarregar imagem
Existem vários sistemas operativos já pré configurados para serem executados no raspberry, na página oficial podemos encontrar várias alternativas:
No entanto o Raspbian é dos mais utilizados e documentados, com suporte oficial. É um sistema operativo baseado em Debian (Muito semelhante a Ubuntu, Kali linux, MX Linux, AV Linux, KNOPPIX, Pure OS, ...)
Para descarregar a imagem do Raspbian vai à seguinte ligação: https://www.raspberrypi.org/downloads/raspbian/, e descarrega a versão com linha de comandos e ambiente gráfico, ou a versão minimalista só com linha de comandos e sem ambiente gráfico.
No nosso caso, vamos optar pela versão com ambiente gráfico, pois iremos utilizar mais à frente uma ligação VNC.
Após se ter feito download da imagem do sistema operativo, este tem que ser escrito num cartão de memóra.
Vou aqui apresentar várias alternativas para resolver este passo, algumas delas obrigam a primeiro descomprimir o ficheiro com a imagem (ex: 2018-06-27-raspbian-stretch.zip
), outras obrigam a que o cartão de memória seja desmontado do sistema operativo, antes de ser escrito.
A forma mais facil de se clonar a imagem para um cartão de memória é atravez do Etcher.
Após a imagem ter sido copiada para o cartão, o cartão é desmontado automáticamente, deverás remover o cartão
e voltar a colocar no computador, para que seja montada a partição de /boot
e poderes assim continuar as
configurações de SSH, wifi, etc...
Voltar ao Índice | Passo anterior - Descarregar imagem | Preparar SSH, wifi, ...
Recomendo a utilização do Etcher, no entanto, também é muito utilizado o Win32DiskImager, que é semelhante ao Etcher
Voltar ao Índice | Passo anterior - Descarregar imagem | Preparar SSH, wifi, ...
- Descomprime o ficheiro
2018-06-27-raspbian-stretch.img
dentro do2018-06-27-raspbian-stretch.zip
. - Abre a linha de comandos, executa
lsblk
[linux] oudiskutil list
[mac], verifica que discos/dev/sdX
[linux]/dev/diskX
[mac] existem, insere o cartão de memória e volta a executarlsblk
/diskutil list
, agora vê qual é o novo disco que aparece na lista dos/dev/sdX
//dev/diskX
, será onde pretender gravar a imagem.
- Desmonta todas as partições desse disco, exemplo:
sudo umount /dev/disk2s1
,sudo umount /dev/disk2s2
sudo dd bs=4M if=~/Downloads/2018-06-27-raspbian-stretch.img of=/dev/sdX conv=fsync
~/Downloads/2018-06-27-raspbian-stretch.img
é o caminho completo da imagem que descomprimiste, oif
significainput file
;/dev/sdX
é o caminho para o cartão de memória, deves substituir oX
pelo numero correspondente.of
significaoutput file
;- NOTA: Certifica-te que não estás a escrever para uma unidade USB errada! Se não tens muita prática, remove do PC todos os discos externos, e PENs que não estejas a usar :)
- Se o
Block Size
estiver a dar erro, tenta1M
em vez de4M
. No caso do MacOS X, oM
pode ter que ser em MAIUSCULA ou minuscula, em função de softwares que eventualmente tenhas instalado no PC - Se quiseres ser mais nerd, e ver o progresso, podes executar o seguinte comando:
sudo sh -c '(pv -n ~/Downloads/RaspberryPI-Images/2018-06-27-raspbian-stretch.img | dd of=/dev/disk2 bs=1m) 2>&1 | dialog --gauge "A clonar imagem para o cartão, Aguarde pf..." 10 70 0'
Voltar ao Índice | Passo anterior - Descarregar imagem | Preparar SSH, wifi, ...
Neste momento o cartão de memória estaria pronto para ir para o raspberry, caso tivesses monitor e teclado. Como não é o caso, vamos agora preparar o sistema operativo para que permita ligações externas e para que se ligue ao WiFi automáticamente.
Para acederes por SSH ao raspberry, basta que no cartão, dentro da partição chamada boot
, cries um ficheiro chamado ssh
, este ficheiro pode estar vazio. O Raspbian ao arrancar, irá detectar a presença desse ficheiro como sendo um pedido para ligar o protocolo de SSH.
Caso prefiras criar o ficheiro pela linha de comandos em linux ou mac, podes usar o comando touch ssh
.
A partir deste momento, já podes aceder ao teu raspberry a partir de outro computador na mesma rede, mas ainda estás limitado, só funcionará se tiveres o raspberry ligado por cabo de rede.
Caso pretendas aceder ao raspberry a partir da rede wifi, tens que configurar o passo Ligar WiFi
Nota: Se pretenderes executar aplicações com ambiente gráfico por SSH, deves executar o comando ssh
com o parametro -X
. Iremos demonstrar mais à frente.
Para que o teu raspberry se ligue automáticamente à rede wifi, é preciso também configurar na partição /boot
do cartão um ficheiro com o nome wpa_supplicant.conf
(Se preferires criar o ficheiro pela linha de comandos do linux ou mac, podes usar o seguinte comando: nano wpa_supplicant.conf
)
Dentro do ficheiro, deves colocar o seguinte conteúdo:
(Testado no raspberry pi 1, 2, 3 e 4)
country=PT
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
network={
ssid="nome_da_rede"
psk="password_do_wifi"
key_mgmt=WPA-PSK
}
Agora sim, se ejectares o cartão e o colocares no raspberry, este irá ligar-se automáticamente à rede WiFi.
Se o raspberry não estiver configurado com IP estático, mas sim com DHCP, e não soubermos qual é o IP que lhe vai ser atribuído quando se ligar à rede, podemos usar ferramentas de pesquisa de IPs, como o AngryIP Scanner, LanScan, etc...
Nota: Por omissão o nome de utilizador e password do raspbian são pi
e raspberry
.
No windows podes usar o Putty, faz download aqui: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
Nota: Podemos redireccionar as janelas do ambiente gráfico para o nosso computador, no entanto precisamos de instalar um XServer (como o xming), e activar a opção de X11 forewarding
no putty:
xming: https://sourceforge.net/projects/xming/
!(X11 forewarding)[https://i.stack.imgur.com/B7r4t.png]
Exemplo de uma aplicação que está instalada no raspberry, mas a janela está a ser mostrada no windows:
Por linha de comandos executa o seguinte comando:
ssh <nome de utilizador>@<ip dp raspberry>
Ex: ssh [email protected]
Nota 1: Para evitar que em cada ligação nos seja pedida a password, podemos fazer
autenticação com chaves publicas/privadas. Para tal basta executarmos o seguinte comando:
ssh-copy-id <nome de utilizador>@<ip dp raspberry>
.
Nota 2: Podemos redireccionar as janelas do ambiente gráfico para o nosso computador, adicionar -X
ao comando ssh. Ex: ssh -X [email protected]
(experimenta depois executa por exemplo chromium-browser
no terminal para abrires o google chrome no raspberry, mas com interface gráfica no teu computador). No caso dos Mac OS, também precisam de um Xserver, como o XQuartz
É possivel copiar ficheiros entre o nosso computador e o raspberry por SSH
scp <user>@<ip>:<path> <path>
- Copiar do raspberry para o computador
scp <path> <user>@<ip>:<path>
- Copiar do computador para o raspberry
scp <user>@<ip>:<path> <user>@<ip>:<path>
- Copiar de um raspberry para outro raspberry
Nota: Podemos copiar pastas adicionando o comando -r
ao scp
Instalar o Filezilla, e criar uma nova ligação SFTP.
Se te for mais conveniente, podes utilizar o protocolo VNC para interagir com o raspberry, para isso, tens que primeiro activar o protocolo de VNC.
Para activar o protocolo de VNC, vais executar o comando sudo raspi-config
escolher a opção 5 Interfacing Options
e depois enable
em P3 VNC
.
No teu computador deves instalar o UltraVNC Client a partir deste link: https://www.realvnc.com/en/connect/download/viewer
No MacOS não precisas de instalar o UltraVNC, podes usar directamente a ferramenta de partilha de ecrã que acompanha
o sistema operativo, para tal basta abrires o "Finder" e premir as teclas ⌘+k
de seguida inserir o seguinte endereço:
vnc://
Se não ligares nenhum monitor ao raspberry, e no Ultra VNC vires a mensagem "Cannot currently show the dekstop", deverás definir manualmente uma resolução diferente de "default"
Para termos o raspberry preparado para o nosso workshop vamos fazer algumas configurações iniciais e instalar algum
software...
Aqui estão descritos os diferentes passos, mas os mesmos estão no ficheiro 00-prepare-raspberry-first-time.sh
sudo rpi-update
# Updating firmware [Opcional]
sudo reboot
# (Se tiver sido executado o rpi-update)
# Actualização do sistema
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo ldconfig
ldconfig is a program that is used to maintain the shared library cache. This cache is typically stored in the file /etc/ld.so.cache and is used by the system to map a shared library name to the location of the corresponding
sudo raspi-config
- Update
- Expand File Sistem
- Locale
- Boot Options -> DESKTOP
- Video Memory
- Output Audio
- ...
NOTA: Se preferires, o raspi-config pode ser configurado apenas por linha de comandos, sem precisar de interação humana. Seguem aqui alguns exemplos de como o fazer:
# sudo raspi-config nonint do_expand_rootfs
sudo raspi-config nonint do_wifi_country PT
sudo raspi-config nonint do_hostname rpi-demo
# sudo raspi-config nonint do_boot_behaviour B1 # SET BOOT CLI
# sudo raspi-config nonint do_boot_behaviour B3 # SET BOOT GUI
sudo raspi-config nonint get_vnc
sudo raspi-config nonint do_vnc 0
raspi-config nonint get_rgpio
sudo raspi-config nonint do_rgpio 0
raspi-config nonint get_camera
raspi-config nonint do_camera 0
Mais informações:
- https://github.com/RPi-Distro/raspi-config/blob/master/raspi-config
- https://github.com/raspberrypi-ui/rc_gui/blob/master/src/rc_gui.c#L23-L70
sudo apt-get install -y vim
# Editor
sudo apt-get install -y eog eog-plugins
# Visualizar imagens
sudo apt-get install -y screen
# Deixar aplicações em execução quando se fecha a ligação SSH
sudo apt-get install -y htop
# Ver processos em execução, memoria em uso, etc...
sudo apt-get install -y geany
# Editor de texto / código
sudo apt-get purge -y wolfram-engine
sudo apt-get purge -y libreoffice*
sudo apt-get clean -y
sudo apt-get autoremove -y
Para executares automáticamente scripts em função do tempo, podes utilizar cronjobs,
para tal basta executares crontab -l
para veres os teus trabalhos agendados, e crontab -e
para os editares.
Podes ver/editar os cronjobs de outros utilizadores no sistema, execurando crontab -u username -l
e crontab -u username -e
.
Os cronjobs que adicionares tem que estar neste formato:
* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
Exemplos:
0 2 * * * /bin/sh backup.sh
Executa todos os dias às 02h00.
0 5,17 * * * /scripts/script.sh
Executa todos os dias às 05h00 e às 17h00
* * * * * /scripts/script.sh
Executa todos os minutos
* * * jan,may,aug * /script/script.sh
Executa todos os minutos durante Janeiro, Maio e Agosto
Ver mais exemplos aqui: https://tecadmin.net/crontab-in-linux-with-20-examples-of-cron-schedule/
Quando tens uma sessão SSH, ao terminares a ligação, todos os processos que lá foram iniciados são terminados. Imagina que queres abrir uma sessão SSH, deixar a executar um script, fechar a sessão, e dali a umas horas voltares à sessão em que o script ainda está a correr. Tens que utilizar o screen.
Iniciar sessão screen (depois de abrires a ligação SSH)
screen
Depois de iniciares a sessão, podes ver todos os parametros do screen carregando em CTL+A
e depois em ?
Podes fazer detach da sessão, carregando em CTL+A
e depois em d
, a sessão ficará na mesma activa.
Para voltares à ultima sessão, podes executar screen -r
Caso tenhas várias sessões activas, para as veres podes executar screen -ls
$ screen -ls
There is a screen on:
25144.pts-1.rpi-demo (09/05/19 00:46:07) (Detached)
1 Socket in /run/screen/S-pi.
Poderás voltar a uma sessão especifica, executando: screen -r 25144
NOTA: Além do screen, o tmux também é muito utilizado.
Para visualizares uma imagem a partir de uma sessão SSH, podes por exemplo utilizar o eog, executando eog imagem.jog