the_perl_foundation_icon

1) Introduction

Bonjour et bienvenue à tous.
L'objectif de cette page est de parler du Raspberry Pi, vous savez cet ordinateur miniature qui est un best seller.
S'il se vend très bien c'est parce qu'il a au moins 3 caractéristiques très importantes:

Lorsque vous achetez ce jouet, il est livré nu, c'est-à-dire que seule la carte vous est livrée. À vous de vous procurer une carte mémoire (micro sd), un boîtier, une souris, un clavier et d'installer le système d'exploitation de votre choix; mais il est aussi possible d'acheter des Starter Kits plus ou moins complets.

Pour ma part, voici mes 2 Raspberry Pi 2 Model B:

my Raspberry Pi photos my Raspberry Pi photos

Voyons maintenant comment installer ce nano-ordinateur.

2) Installation

Il existe de nombreux systèmes d'exploitation pour le Raspberry Pi:
Si vous êtes courageux, il est possible (merci Linux) de construire soi-même sa distribution Linux pour Raspberry Pi, par exemple en utilisant un outil de génération de distribution automatisée tel que Yocto. Si vous êtes interessé, ça arrivera ultérieurement dans un autre paragraphe beaucoup plus loin.
Pour le moment nous allons utiliser Raspbian, l'image fournie par la fondation Raspberry Pi.

2.1) Téléchargement

Raspberry Pi OS peut être téléchargé ici: https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit
Plusieurs images sont proposées:
Si on choisit la version complète, on téléchargera le fichier compressé 2019-06-20-raspbian-buster-full.zip. Il va donc falloir dézipper ce fichier.

2.2) Décompression

Décompresser l'archive graphiquement sous Kubuntu est très simple, il suffit de faire un clic-droit sur le fichier .zip téléchargé, puis "Extraire l'archive ici". On obtiendra le fichier 2019-06-20-raspbian-buster-full.img

Si on veut le faire en ligne de commande (CLI):
# On se place dans le répertoire contenant l'image
prabou@prabou-VPCZ23C5E:~$ cd Téléchargements/

# On vérifie que notre image est bien présente
prabou@prabou-VPCZ23C5E:~/Téléchargements$ ls -lh | grep -i 'buster'
-rw-rw-r-- 1 prabou prabou 1,9G juil.  2 22:29 2019-06-20-raspbian-buster-full.zip

# On décompresse l'archive
prabou@prabou-VPCZ23C5E:~/Téléchargements$ unzip 2019-06-20-raspbian-buster-full.zip
Archive:  2019-06-20-raspbian-buster-full.zip
  inflating: 2019-06-20-raspbian-buster-full.img
  
# On affiche le fichier image obtenu
prabou@prabou-VPCZ23C5E:~/Téléchargements$ ls -l | grep -i 'buster'
-rw-r--r-- 1 prabou prabou 5289017344 juin  20 19:20 2019-06-20-raspbian-buster-full.img
-rw-rw-r-- 1 prabou prabou 1945084391 juil.  2 22:29 2019-06-20-raspbian-buster-full.zip
On constate qu'après la décompression on a obtenu dans notre répertoire le fichier image 2019-06-20-raspbian-buster-full.img. Le format de fichier IMG est équivalent au format ISO.
On notera aussi que le fichier image est beaucoup plus lourd (5,2 Go) que le zip téléchargé.
La prochaine étape consiste à copier cette image sur la carte micro sd.

2.3) Copie

Il y a de nombreux outils grahiques permettant de copier cette image sur la carte micro SD. Parmi les plus connus il y a "Win32 Disk Imager", "UNetbootin" ou encore Etcher. Voici un aperçu de Etcher:

balena Etcher 1 balena Etcher 2

Si on veut le faire en ligne de commande:
prabou@prabou-VPCZ23C5E:~$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               3,9G       0  3,9G   0% /dev
tmpfs              789M    1,6M  788M   1% /run
/dev/sda1           59G     20G   36G  36% /
tmpfs              3,9G    114M  3,8G   3% /dev/shm
tmpfs              5,0M    4,0K  5,0M   1% /run/lock
tmpfs              3,9G       0  3,9G   0% /sys/fs/cgroup
/dev/sdb1           59G     24G   33G  42% /home
tmpfs              789M     28K  789M   1% /run/user/1000
/dev/loop9          55M     55M     0 100% /snap/core18/1049

# La même commande qu'avant mais après avoir inséré la carte micro sd
prabou@prabou-VPCZ23C5E:~$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               3,9G       0  3,9G   0% /dev
tmpfs              789M    1,6M  788M   1% /run
/dev/sda1           59G     20G   36G  36% /
tmpfs              3,9G    119M  3,8G   4% /dev/shm
tmpfs              5,0M    4,0K  5,0M   1% /run/lock
tmpfs              3,9G       0  3,9G   0% /sys/fs/cgroup
/dev/sdb1           59G     24G   33G  42% /home
tmpfs              789M     28K  789M   1% /run/user/1000
/dev/loop9          55M     55M     0 100% /snap/core18/1049
/dev/mmcblk0p2     4,6G    4,1G  278M  94% /media/prabou/rootfs
/dev/mmcblk0p1     253M     40M  213M  16% /media/prabou/boot

# On affiche les périphériques
prabou@prabou-VPCZ23C5E:~$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0  59,6G  0 disk 
└─sda1        8:1    0  59,6G  0 part /
sdb           8:16   0  59,6G  0 disk 
└─sdb1        8:17   0  59,6G  0 part /home
mmcblk0     179:0    0    29G  0 disk 
├─mmcblk0p1 179:1    0   256M  0 part /media/prabou/boot
└─mmcblk0p2 179:2    0   4,7G  0 part /media/prabou/rootfs

# On démonte les 2 partitions
prabou@prabou-VPCZ23C5E:~$ sudo umount /dev/mmcblk0p1
[sudo] Mot de passe de prabou : 
prabou@prabou-VPCZ23C5E:~$ sudo umount /dev/mmcblk0p2

# On vérifie que toutes les partitions ont bien été démontées
prabou@prabou-VPCZ23C5E:~$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               3,9G       0  3,9G   0% /dev
tmpfs              789M    1,6M  788M   1% /run
/dev/sda1           59G     20G   36G  36% /
tmpfs              3,9G    120M  3,8G   4% /dev/shm
tmpfs              5,0M    4,0K  5,0M   1% /run/lock
tmpfs              3,9G       0  3,9G   0% /sys/fs/cgroup
/dev/sdb1           59G     24G   33G  42% /home
tmpfs              789M     28K  789M   1% /run/user/1000
/dev/loop9          55M     55M     0 100% /snap/core18/1049

# Copie de l'image
prabou@prabou-VPCZ23C5E:~$ cd Téléchargements/
prabou@prabou-VPCZ23C5E:~/Téléchargements$ sudo dd bs=4M if=2019-06-20-raspbian-buster-full.img of=/dev/mmcblk0 status=progress
5289017344 octets (5,3 GB, 4,9 GiB) copiés, 286 s, 18,5 MB/s
1261+0 enregistrements lus
1261+0 enregistrements écrits
5289017344 octets (5,3 GB, 4,9 GiB) copiés, 344,957 s, 15,3 MB/s
prabou@prabou-VPCZ23C5E:~/Téléchargements$
L'écriture de l'image est maintenant terminée. Vous pouvez donc retirer votre carte mémoire et l'insérer dans votre Raspberry Pi.
Toujours en ligne de commande, une autre possibilité pour flasher la carte SD est d'utiliser le script proposé par hypriot ici.

3) Branchement et Démarrage

Pour le branchement, on aura besoin de:


Je vous conseille de brancher en dernier le câble d'alimentation (le câble micro usb), juste histoire de ne pas rater une partie du démarrage.
Au premier démarrage, vous allez directement arriver sur le bureau qui ressemble à ceci:

Raspbian jessie default desktop

En cliquant Next, vous allez avoir la possibilité de régler le Pays, la Langue, la Timezone, puis l'affichage et enfin de mettre à jour l'ensemble des logiciels.

4) Premiers pas

Quelques petites choses importantes à savoir:
-au premier démarrage le clavier est en QWERTY; pour changer, Menu > Preferences > Mouse and Keyboard Settings > Keyboard > Keyboard Layout
ou en mode CLI:

# Editer le fichier /etc/default/keyboard
sudo vi /etc/default/keyboard

# et remplacer la ligne suivante:
XKBLAYOUT="gb"
par:
XKBLAYOUT="fr"
-une grande partie des réglages en mode graphique est disponible dans Menu > Preferences > Configuration du Raspberry Pi

Raspberry Config Panel 1 Raspberry Config Panel 2

-l'utilisateur par défaut est "pi" et son mot de passe par défaut est "raspberry". L'utilisateur "pi" a par défaut les droits root

Pour changer le mot de passe d'un utilisateur, on peut le faire graphiquement (voir ci-dessus) ou en ligne de commande. Si on veut le faire en mode CLI, ouvrir une fenêtre LXTerminal et utiliser les commandes suivantes:
# changement du mot de passe de l'utilisateur pi
pi@raspberrypi:~ $ sudo passwd pi
Entrez le nouveau mot de passe UNIX : 
Retapez le nouveau mot de passe UNIX : 
passwd: password updated successfully
pi@raspberrypi:~ $

# changement du mot de passe de l'utilisateur root
pi@raspberrypi:~ $ sudo passwd root
Entrez le nouveau mot de passe UNIX : 
Retapez le nouveau mot de passe UNIX : 
passwd: password updated successfully
pi@raspberrypi:~ $

Si vous avez plusieurs raspberry, et que vous voulez leur attribuer à chacun un nom, on peut utilier la commande:
# renommage du raspberrypi
sudo hostnamectl set-hostname raspberrypi1

Pour mettre à jour le système:
sudo apt update
sudo apt full-upgrade


Après la mise à jour, je vous conseille de redémarrer.

5) Connexion à distance

Dans la pratique on se connectera très souvent au Raspberry pi à distance soit graphiquement (autrement dit on verra le bureau), soit en mode CLI.

5.1) En mode graphique par VNC

Si on a besoin de se connecter à distance au Raspberry pi avec une interface graphique, on va pouvoir utiliser le duo VNC Server/Client.
Depuis Raspbian de Septembre 2016, VNC Server et Client sont inclus dans la distribution, donc rien à télécharger et à installer mais juste le(s) service(s) à démarrer.
Remarque: Si VNC Server et Client n'étaient pas installés, on aurait pu utiliser la commande suivante:
sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer


Pour démarrer le service graphiquement: Menu > Preferences > Raspberry Pi Configuration > Interfaces. Et s'assurer que VNC est "Enabled". Après cette action, VNC Server démarrera automatiquement avec le Raspberry pi. Si on veut démarrer VNC Server sans pour autant rendre cela automatique, voici quelques commandes pratiques:

# démarre VNC Server
sudo systemctl start vncserver-x11-serviced.service

# arrête VNC Server
sudo systemctl stop vncserver-x11-serviced.service

# pour démarrer automatiquement VNC Server lorsque le Raspberry pi est mis sous tension
sudo systemctl enable vncserver-x11-serviced.service

# pour arrêter le démarrage automatique de VNC Server lorsque le Raspberry pi est mis sous tension
sudo systemctl disable vncserver-x11-serviced.service

# pour contrôler le statut
sudo systemctl status vncserver-x11-serviced.service

Pour VNC Client (ou VNC Viewer c'est comme vous voulez), si vous souhaitez faire une installation classique, vous pouvez télécharger le package VNC Connect ici.

VNC Viewer Config VNC Connection
On notera sur l'image la possibilité de transférer graphiquement des fichiers.

5.2) En mode CLI par SSH

SSH est un protocole de communication sécurisé. Il utilise le port 22, et permet de se connecter à distance à un ordinateur afin d'obtenir un shell ou ligne de commande.
On peut établir une connexion ssh (putty pour les utilisateurs Windows):
ssh pi@adresse_ip_de_votre_raspberry_pi

Par défaut, le mot de passe de l'utilisateur pi vous sera demandé; mais ce n'est pas très sécurisé.

Pourquoi est-il recommandé d'utiliser des clés ssh plutôt qu'un mot de passe ? Voici quelques raisons:

Pour sécuriser l'accès à notre Raspberry, on peut donc choisir de limiter les connexions à celles avec échange de clés. Pour mettre cela en place, 2 étapes:

# s’il n’existe pas, on crée le répertoire .ssh 
mkdir $HOME/.ssh
# on attribue les bons droits au répertoire
chmod 700 $HOME/.ssh
# on se place dans le répertoire
cd $HOME/.ssh

# on génère une paire de clés. L’option 4096 permet d’augmenter la sécurité de votre clé (au lieu des 2096 par défaut). Enfin lorsque le système va vous demander une « passphrase » (un mot de passe pour sécuriser votre clé privée), même si elle n’est pas obligatoire vous vous doutez qu’il est recommandé d’en utiliser une !
ssh-keygen

# on affiche nos 2 clés, et on notera que leurs droits sont différents
prabou@prabou-VPCZ23C5E:~/.ssh$ ls -ltr
total 12
-rw-r--r-- 1 prabou prabou  405 avril 21  2019 id_rsa.pub
-rw------- 1 prabou prabou 1831 avril 21  2019 id_rsa
-rw-rw-r-- 1 prabou prabou  666 sept. 14 10:50 known_hosts
prabou@prabou-VPCZ23C5E:~/.ssh$

Nous voilà maintenant avec une clé privée (id_rsa) et une clé publique (id_rsa.pub).
La clé privée doit rester dans le répertoire ~/.ssh, et surtout ne pas être partagée; tandis que la clé publique doit être copiée sur les serveurs sur lesquels on souhaite se connecter.
Remarque: si vous avez perdu votre clé publique, il est possible de la recalculer à partir de la clé privée avec la commande ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

Maintenant, il va falloir envoyer notre clé publique vers le serveur. Pour cela, on peut utiliser des commandes telles que scp, sftp ou utiliser un client sftp avec une interface graphique comme Filezilla:

# avec la commande scp
prabou@prabou-VPCZ23C5E:~$ scp -p /home/prabou/.ssh/id_rsa.pub  pi@192.168.0.11:/home/pi
id_rsa.pub                                                                                                                                                                100%  405   164.4KB/s   00:00    
prabou@prabou-VPCZ23C5E:~$

# avec la commande sftp
prabou@prabou-VPCZ23C5E:~$ sftp pi@192.168.0.11
Connected to pi@192.168.0.11.
sftp> pwd
Remote working directory: /home/pi
sftp> put /home/prabou/.ssh/id_rsa.pub
Uploading /home/prabou/.ssh/id_rsa.pub to /home/pi/id_rsa.pub
/home/prabou/.ssh/id_rsa.pub                                                                                                                                              100%  405   115.6KB/s   00:00    
sftp> quit
prabou@prabou-VPCZ23C5E:~$
filezilla screenshot
Ensuite, on se connecte au serveur (avec le mot de passe pour le moment), et on ajoute le contenu du fichier id_rsa.pub (qu'on vient de copier) dans le fichier .ssh/authorized_keys de l’utilisateur.
cat id_rsa.pub >> $HOME/.ssh/authorized_keys


Attention aux permissions : chown xx:xx /.....
/home/pi/.ssh/authorized_keys (le dossier .ssh et le fichier authorized_keys doivent appartenir à pi)
Si tu te connectes en root :
/root/.ssh/authorized_keys (le dossier .ssh et le fichier authorized_keys doivent appartenir à root)

Puis : chmod 700 .... et chmod 600 ....
le dossier .ssh en 700
le fichier authorized_keys en 600

Dans : /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile ~/.ssh/authorized_keys

Le plus simple et le plus pratique est certainement d'utiliser la commande:
ssh-copy-id -i ~/.ssh/id_rsa.pub pi@192.168.0.40

Cette commande va copier notre clé publique dans le répertoire /home/pi/.ssh/authorized_keys du raspberrypi avec les bons droits.
À partir de maintenant on peut se connecter à notre raspberrypi avec nos clés ssh comme ceci:
# on se connecte à notre raspberrypi avec clés ssh
prabou@prabou-VPCZ23C5E:~$ ssh pi@192.168.0.11
Linux raspberrypi1 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Nov 10 18:29:40 2019 from 192.168.0.24

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi1:~ $


5.2.1) Interdire l’authentification par mot de passe

Interdire l’authentification par mot de passe est optionnel.
Si on ne veut autoriser que les connexions par clés, il faut modifier la configuration du service SSH, en éditant le fichier /etc/ssh/sshd_config pour qu'il contienne la ligne suivante:
PasswordAuthentication no

Redémarrer ensuite le service ssh avec:
service ssh restart