TP4¶
Durant cette séance vous allez travailler sur un système linux installé dans une machine virtuelle ainsi que sur une carte RPi3. Vous devez rédiger un compte-rendu à l’issue de cette séance, que vous devrez déposer sur Blackboard.
Préambule¶
Comme nous avons besoin pour ce TP d'avoir des privilèges administrateur sur la machine linux, nous allons utiliser une machine virtuelle pour faire tourner une version minimale de l'OS Debian 64bits.
Il existe plusieurs logiciels pour créer et lire des machines virtuelles :
- VirtualBox
- VMware
Les deux logiciels existent aussi bien sous linux et sous windows. Virtualbox a l'avantage d'être un logiciel libre. Toutefois si vous utilisez une machine de l'école sous windows, il vous faudra peut etre utiliser vmware (les installations de virtualbox ne sont pas à jour).
Nous vous recommandons donc, sauf problème particulier, d'utiliser les machines de l'école sous debian et le logiciel VirtualBox.
Vous pouvez également utiliser une machine personnelle, soit directement sous linux si vous êtes administrateur, soit en y installant VirtualBox (ou si vous préférez vmware).
Danger
Sur les machines de l'école, que ca soit sous windows ou linux, pour éviter les soucis de performance, il faudra installer vos VM sur le disque local :
- Sous linux : les fichiers de votre répertoire personnel (~/...) sont des fichiers distants, à l’exception du répertoire ~/local dir qui contient des fichiers locaux conservés pendant une période de quelques semaines,
- Sous windows : idem, à l'ouverture de votre session, un répertoire local temporaire est créé, c'est là qu'il faut mettre votre VM (config par défaut).
Pensez bien à sauvegarder sur clé USB ou dans votre compte esiee les screenshots et fichiers etc dont vous auriez besoin pour rédiger votre compte rendu et réviser l'examen.
1 - Creation du disque système (carte SD) de la raspberry pi¶
Dans la suite, nous supposons que vous êtes logé sous linux sur les machines de l'école. Dans un terminal vérifiez que vous appartenez au groupe "vboxusers" en tapant la commande
Si le groupe vboxusers n’apparaît pas, tapez la commande :puis revérifiez avec la comande groups. Vous devrez lancez virtualbox à partir de ce terminal.
1.1 Création de la VM¶
Récupérez le fichier image de la machine invitée sur google drive.
Lancez virtualbox. Choisissez dans le menu importer une machine et sélectionnez le fichier .ova
précédemment récupéré. Virtualbox vous demande où créer la machine virtuelle, choisissez un emplacement local (pour les performances).
À la fin de l'importation, vérifier et si besoin ajustez les paramètres de la VM (quantité de mémoire, nombre de processeurs). Positionnez bien la version de USB à usb 3.
Vous pouvez démarrer la VM.
À l'invite de connexion, connectez vous avec le login user
, mot de passe user
.
1.2 Préparation de la sdcard pour le système rasbian¶
Vous devriez trouver un répertoire tp4
contenant le fichier raspian-buster-lite.zip
.
En cas de soucis vous pouvez aussi le retélécharger avec la commande :
wget debian.rutgers.edu/raspbian_images/raspberrypi/images/raspbian/2019-09-26-raspbian-buster/2019-09-26-raspbian-buster-lite.zip
Pour vérifier que le réseau fonctionne, essayez la commande :
En cas de soucis essayez de reconfigurer l'interface réseau avec la commande :Nous allons maintenant préparer la sdcard :
- on commance par décompresser l'image disque (environ 1min):
-
si vous n'avez pas la commande unzip :
-
insérez la carte SD dans le lecteur natif de la machine si il y en a un, ou le lecteur de carte microSD USB présent dans les boittes.
-
pour qu'il soit géré par la VM et non par la machine hôte, commencez par démonter les partitions éventuellement montées automatiquement (via l'outils graphique "fichiers" pour gagner du temps) puis dans la fenêtre virtualbox allez dans le menu Périphériques>USB et cochez la case correspondante a l'adaptateur USB/MicroUSB
-
dans la VM la commande
permet de connaitre le nom de device correspondant à la carte SD (sdb ou sdc par exemple... dépend de pleins de paramètres). Vérifier qu'aucune partition présente sur la carte n'a été automatiquement montée en tapant la commande (ca ne devrait pas être le cas si vous utilisez l'image fournie) ou indiquez dans votre rapport ce que font ces commandes (et toutes les commandes que vous utilisez dans le TP) -
si des partitions ont été montées, démontez les avec la commande umount
- nous sommes prets pour "dumper" l'image téléchargée sur la carte SD : (remplacez /dev/sdb par le bon périphérique si besoin).
Tip
Sourcer le fichier /etc/bash_completion
rend plus intelligent le comportement de la touche tab. Cela devrait vous permettre de taper les commandes longues plus simplement.
-
lorsque c'est terminé, créez deux répertoires part1 et part2 (avec mkdir) et montez les deux partitions créées sur la carte dans ces deux répertoires (commande sudo mount)
-
l'un des répertoires doit contenir un système de fichier, c'est la partition rootfs vue en cours, l'autre des fichiers et des scripts de lancement, c'est la partition boot vue en cours.
-
avec la commande
touch
, ajoutez un fichier (vide) nomméssh
dans la partition boot (pas dans le répertoire/boot
de la partition rootfs !!), puis démontez les deux partitions avecumount
. Vous pouvez maintenant débrancher le lecteur de carte sd et insérer la carte dans la raspberry.
2 - Configuration des connexions réseau¶
L’objectif est de pouvoir installer des logiciels sur la RPi à l’aide d’outils tels que apt ou git. La Configuration réseau à réaliser
doit donc permettre d’établir le schéma de connexion ci-dessous :
Internet ↔ RPi ↔ [VM ↔ Host] ↔ Internet
La connexion ethernet entre la carte RPi et VM sera réalisée à l’aide d’un adaptateur USB-Ethernet. Branchez l’adaptateur USB-Ethernet sur la machine hôte. Pour que cette nouvelle connexion USB soit gérée par la VM, allez dans le menu Périphériques>USB et sélectionnez realtek ou Asix suivant le type de d’adaptateur. Branchez le câble ethernet entre la VM et la carte RPi.
Cette connexion devra correspondre au réseau 192.168.1.0 et les adresses IP de la VM et de la carte RPi seront, après configuration, respectivement :
- VM : 192.168.1.100
- RPi : 192.168.1.101 (par exemple)
2.1 - Identification de l’interface réseau¶
La commande ip addr
permet de lister les interfaces actives. Notez le nom de l’interface sur la VM correspondant à cette connexion.
Vous pouvez également obtenir cette information avec la commande
dmesg|tail
ou ifconfig
...
2.2 - Configuration interface VM¶
Commencez par vérifier que c'est bien le service networking qui gère la configuration des cartes réseaux : systemctl status networking Si ce n'est pas le cas, installez le paquet ifupdown
Configurez l’interface réseau de la VM en éditant le fichier /etc/network/interfaces et en rajoutant les lignes suivantes (si eth1 est le nom de l’interface) :
Vous devez ensuite forcer le rechargement de ce fichier et la réinitialisation du service réseau (par exemple) par les commandes :
ou ouLa commande ip addr doit maintenant faire apparaître l’interface associée avec l’adresse IPv4 : 192.168.1.100
2.3 - Configuration du serveur DHCP sur la VM¶
La configuration de la connexion réseau côté RPi se fait automatiquement via un service client DHCP (dhcpcd pour DHCP Client Daemon) lancé au démarrage. Ce service envoie une requête DHCP sur le réseau connecté à l'interface eth0. Il reste donc à installer et à configurer un serveur capable de répondre à cette requête dans la VM.
La première étape consiste à installer le paquet correspondant au serveur DHCP :
Il est possible que l'installation échoue car la connexion internet via l'interface réseau partagé par la vm n'est plus possible. Vérifiez avec ping sur google par exemple. Dans ce cas, il faut la reconfigurer grace à la commande :
Retestez alors un ping vers google, si c'est OK reessayez l'installation de isc-dhcp-server.
Vous devez ensuite vérifier dans le fichier de configuration /etc/dhcp/dhcpd.conf l’existence des lignes suivantes qui définissent la plage d’adresse qui pourra être allouée par le serveur DHCP, sinon ajoutez les :
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.101 192.168.1.254 ;
option subnet-mask 255.255.255.0 ;
}
Rajouter également la ligne INTERFACES="ethx" dans le fichier /etc/default/isc-dhcp-server où ethx correspond au nom de l’interface de la VM connecté à la RPi.
Le but est que le serveur DHCP n’écoute les requêtes que sur cette interface. Ensuite, redémarrez le serveur DHCP (remplacer ethx par le bon nom) :
Vérifier si une adresse a été délivrée par la commande :
Il est surement nécessaire de redémarrer la raspberry a ce stade.
La liste des baux se trouve également dans le fichier /var/lib/dhcp/dhcpd.leases. Vous pouvez maintenant tester la connectivité vers la RPi à l’aide de commandes ping à partir de la VM :
(remplacez xxx par la valeur attribuée à la rspi par le serveur dhcp).2.4 - Connection SSH¶
Maintenant qu’il existe une connexion réseau, vous pouvez ouvrir une fenêtre de commande vers la RPi dans votre VM en utilisant le protocole SSH (Secured SHell). Pour cela, exécuter la commande
Les identifiants de connexion sur la RPi sont pi / raspberry. Le compte root n’est pas validé. L’utilisateur pi peut utiliser les commandes réservées à l’administrateur grace à sudo.
2.5 - Configuration réseau de la RPi¶
2.5.1 - SCP¶
Dans cette partie vous aurez besoin de transférer des fichiers de la VM vers la RPi, pour cela vous utilisez la commande scp :
copie le fichier file dans le répertoire rep du compte utilisateur pi.2.5.2 - Configuration de la connexion ethernet¶
Vous devez modifier le fichier /etc/network/interfaces de la RPi et rajouter les lignes de configuration suivantes afin de rendre la configuration de eth0 permanente :
2.5.3 - Configuration WiFi¶
Méthode 1 : En partageant la connection data de votre smartphone
Vous pouvez utilisez votre portable pour créer un point d’accès WiFi utilisant le protocole WPA2-PSK pour finaliser la configuration réseau de votre environnement de développement en configurant une connexion WiFi entre la RPi et votre point
d’accès.
La connexion WiFi sera gérée sur la carte RPi par le service wpa_supplicant qui est configuré par le fichier /etc/wpa_supplicant/wpa_supplicant.conf
.
Un fichier déjà préparé est disponible dans l'archive fournie dans le répertoire tp4 du compte user sur le système invité.
Le fichier s'appelle wpa_supplicant.conf.wpapsk
Copiez le via scp sur la raspberry dans /etc/wpa_supplicant/
.
Vous devrez modifier les champs :
Vous devez également modifier le fichier /etc/network/interfaces
de la RPi et rajouter les lignes de configuration suivantes :
Une fois les fichiers de configuration mis à jour, Rafraichissez la connexion WiFi avec la commande sudo ifup wlan0
, éventuellement précédée d’un sudo ifdown wlan0
. wlan0 correspond au nom de l’interface WiFi de la RPi.
Si la connexion réussit, une adresse IP sera associée à l’interface wlan0, ce que vous pourrez vérifier avec la commande ip addr
.
Vous pouvez également vérifier les messages issus du processus de connexion avec la commande journalctl |grep wpa_supplicant
.
Pour tester la connexion à internet de votre RPi, lancer la commande
wget www.perdu.com
.
Méthode 2 : EDUROAM
Alternativement, vous pouvez essayer de configurer le réseau eduroam. Pour ce faire, télécharger le script python de configuration en ligne :
Créez un repertoire .config à la racine du compte pi :
Executez sur la raspi en tant que pi (pas root) le script avec python3 :
Le login a saisir est votre adresse mail esiee.
Si tout fonctionne, il devrait générer un répertoire /home/pi/.config/cat_installer contenant un fichier .conf
Suivre les consignes pour l'utilisation d'un partage de connexion via smartphone en remplaçant dans /etc/network/interfaces la référence au fichier wpa_supplicatn.conf/wpapsk par une référence à ce fichier .conf ainsi créé.
Croisez les doigts.
Danger
Vous avez enregistré en clair votre mot de passe ESIEE sur la carte sd. Pensez à effacer le repertoire /home/pi/.config à la fin du TP avant de rendre le matériel
3 - Développement d’une application¶
Vous allez maintenant réaliser une application (rudimentaire) de surveillance de mouvement en connectant un capteur de mouvement PIR à la RPi. Vous allez réaliser une application qui lira la sortie de ce capteur et qui l’affichera à l’écran.
Vous allez avoir besoin d’une librairie permettant d’accéder au connecteur GPIO (http://wiringpi.com).
3.1 - Installation de la librairie wiringPi¶
Commencez par intaller la librairie wiringPi
- Si la configuration Wifi s’est bien passée
apt-get install wiringpi
- Sinon, récupérer le fichier
wiringpi_2.50_armhf.deb
dans les fichiers de l'archive a votre disposition dans le repertoire tp4 et transférez le sur la raspberry (scp) puis installez le avec Vous pouvez tester l’installation en tapant la commandegpio -v
3.2 - Application¶
L’application est un petit programme en C, tp4.c (a récupérer dans l'archive du répertoire tp4). Créez l'éxécutable sur la raspberry avec les commandes :
Vous devriez obtenir l'exécutable tp4Test.- Décrivez les traitements réalisés par le code tp4.c
3.3 - Connexion du capteur PIR¶
Vous trouverez la documentation du capteur dans l'archive du répertoire tp4. Il doit être alimenté en 3.3v et a une sortie. Le programme tp4.c lit le signal provenant du capteur sur la patte GPIO27, patte 13 du connecteur, voir http://wiringpi.com/pins/.
Pour connecter le capteur PIRà la RPi :
- Connectez un fil entre la patte gnd du capteur et la patte 9 de la Rpi.
- Connectez un fil entre la patte vcc du capteur et la patte 1 de la Rpi.
- Connectez un fil entre la patte out du capteur et la patte 13 de la Rpi.
Une fois la connexion réalisée, lancez le programme. Il doit afficher 1 quand le capteur est allumé (détection de mouvement) et 0 sinon.
3.4 - Makefile¶
Récuprez maintenant le fichier Makefile de l'archive permettant de gérer la compilation de l’application tp4Test, son installation et le nettoyage du répertoire de travail.
Essayez de comprendre ce fichier.
- Exécutez la commande
make clean
Que fait elle ? - Lancer la commande
make
Quelles actions sont réalisées ? - Excutez la commande touch tp4.o, puis de nouveau la commande make. Quelle différence avec la première commande make ? pourquoi ?
4 - Attendus¶
Vous posterez sur blackboard un fichier (tgz) contenant votre rapport ainsi que les fichiers de configuration que vous aurez modifiés. Création du fichier tgz sur la RPi à la racine du compte /home/pi si vos fichiers se trouvent dans le répertoire /home/pi/TP4 :
Copie du fichier tgz sur la VM :
5 - Bonus¶
Un petit moment de détente...
Récupérez le fichier pacman-1.3.tar.gz et transférez le sur la RPi. Il contient le code source d’un jeu vidéo utilisant la librairie ncurses qui permet d’implémenter des interfaces graphiques minimales sur des terminaux non graphiques.
Pour décompresser le fichier, utiliser la commande
Le projet nécessite la librairie ncurses que vous devez installer :
Pour compiler le programme, commande make dans le répertoire pacman-1.3. Une fois le programme compilé make install
pour l’installer. Pour lancer le jeu (vous devez avoir la console en plein écran) : ./pacman
Dans cet univers vous êtes le symbole
’C’, plus d’information dans le fichier README.
Annexes¶
A - Configuration du client dhcp de la RPi¶
Connectez la carte SD de la RPi à la VM. Une fois celle-ci montée, le système de fichier de la Raspbian doit être visible dans le répertoire de votre choix. Éditez le fichier /media/user/rootfs/etc/dhcpcd.conf et décommentez certaines lignes vers la fin du fichier afin d’obtenir la configuration de repli suivante pour l’interface eth0 en cas d’échec de la transaction DHCP :
#It is possible to fallback to astatic IP if DHCP fails:
#define staticprofile
profile static_eth0
staticip_address=192.168.1.101/24
staticrouters=192.168.1.100
#fallback to static profile on eth0
interface eth0
fallback static_eth0
B - Récupération de la voie série¶
Cela se fait en utilisant un adpatateur TTL-232R-RPi. Vous devez modifier le fichier config.txt de la partition boot de la carte SD en rajoutant cette ligne :
Cela a pour effet de déconnecter l’interface bluetooth de la RPi et de libérer l’interface série qui devient disponible. Le cablage de l’adaptateur TTL-232R-RPi au port d’extension de la RPi :