- Configuration du système
- 1. Requis
- 2. Image système
- 3. Configuration système de base
- 3.2 Installation des dépendances / paquets
- 3.3 Changer le mot de passe
- 3.4. Configuration de DNSmasq et Hostapd
- 4. Installation de l'application MOvIT+
- 5. Configuration du démarrage
- 6. Optimisation du temps de démarrage
- 7. Mises à jour du système
Nous supposons ici que nous possédons deux interfaces WiFi, celle qui est intégrée dans le RaspberryPi (wifi0) et un dongle USB WiFi (wifi1). L'interface wifi0 sera configurée pour le point d'accès et l'interface wifi1 sera configurée comme client wifi pour l'accès Internet. Si vous n'avez pas de dongle WiFi, vous pouvez utilisez la connection câblée (eth0) pour la configuration.
L'interface PCB [MOvIT-Hardware pour Raspberry Pi 3/4] doit être installée sur le connecteur 40 pins du RaspberryPi.
L'entièreté des configurations ci-dessous sont basées sur une image de Raspberry Pi OS le plus récent.
La dernière version testée est la révision de May 2020.
Nous recommandons d'utiliser la version Raspberry Pi OS (32-bit) with desktop, la version 64 bits n'étant pas disponible en ce moment.
Utilisation headless : le fichier
wpa_supplicant.confdûment rempli peut être placé dans la partition boot d'une carte SD nouvellement flashé. Le système déplacera alors ce fichier au bon endroit et l'utilisera afin de permettre une connection au wifi voulue dès le premier démarrage.
Utilisation headless : SSH peut également être activé en plaçant un fichier vide et sans extension, nommé
ssh, dans la partition de boot de l'image fraîchement flashée.
N'est pas à jour. Utilisez la configuration système de base pour l'instant. Une image du système préconfiguré est disponible dans la section "Releases" sur GitHub directment. Utiliser la dernière version de cette image permet notamment d'éviter d'avoir à faire toutes les étapes de configuration qui suivent. Il peut cependant être utile de faire toute cette configuration manuellement pour mettre à jour l'image de base de RaspberryPi OS ou simplement pour permettre une meilleure compréhension du système.
Balena Etcher est le logiciel utilisé pour flasher l'image désirée sur une carte micro-SD facilement.
Veuillez suivre les étapes ci-dessous dans l'ordre.
Nous allons d'abord utiliser l'outil raspi-config pour les premières configurations.
- Ouvrir un terminal à partir du bureau
- lancer la commande:
raspi-config- Sélectionnez
2-Network Options -> Hostnameet donnez le nommovit-xxyyzzà votre système où xxyyzz représente les derniers octets de l'addresse MAC de l'appareil configuré. Ce format, également utilisé pour le nom du point d'accès plus tard, permet d'éviter les conflits de noms sur le même réseau ou la confusion entre les points d'accès si vous avez plusieurs systèmes MOvIT+ dans votre établissement. L'obtention de l'adresse MAC s'effectue par la commande suivante sur un terminal :
ifconfig wlan0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'- Activez SSH
- Activez I2C
- Activez SPI
- Configurez WiFi Client
Vous allez avoir besoin d'un accès Internet pour les étapes suivantes. Un redémarrage peut être nécessaire.
Toujours dans le terminal, installez les paquets avec les commandes suivantes :
# Source de nodejs 10.x
sudo wget -qO- https://deb.nodesource.com/setup_10.x | sudo bash -
# Update la liste des packages
sudo apt-get update
# Installation (tout sur la même ligne)
sudo apt-get install -y vim i2c-tools build-essential cmake mosquitto git libmosquittopp-dev mosquitto-clients mongodb mongodb-server libkrb5-dev libzmq3-dev nodejs yarn python3 python3-venv# Ajouter la source arm64
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
sudo apt-get update
sudo apt-get install mongodb-org
sudo apt-get install -y vim i2c-tools build-essential cmake mosquitto git libmosquittopp-dev mosquitto-clients libkrb5-dev libzmq3-dev nodejs yarn python3 python3-venv
Pour changer le mot de passe, la commande passwd permet de choisir un mot de passe après avoir entré le mot de passe précédant, soit raspberry pour une installation fraîche de Rasbian. Il est recommandé que le nouveau mot de passe soit movitdev par soucis d'uniformité entre les appareils.
Ces deux programmes vont nous permettre de créer un point d'accès sur notre interface wlan0, et de créer un serveur DHCP sur celui-ci pour pouvoir gérer les clients connectés sur l'AP (access point).
Avant d'installer ces logiciels, il est nécessaire de faire la commande suivante pour mettre à jour toutes les composantes du système fraîchement installé.
sudo apt-get update
sudo apt-get install dnsmasq hostapd -ySuite à cette commande, il faut mettre en place quelques fichiers de configuration. Le premier fichier à modifier est /etc/dnsmasq.conf dans lequel il faut ajouter quelques lignes à la fin, voici ces lignes:
interface=lo,wlan0
no-dhcp-interface=lo,eth0
bind-interfaces
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=192.168.10.50,192.168.10.150,12hLes adresses IP données par dnsmasq débuteront ainsi à 192.168.10.50 jusqu'à 192.168.10.150.
Un redémarrage peut être nécessaire pour permettre à HostAPd de terminer son installation.
Il faut ensuite modifier le fichier /etc/hostapd/hostapd.conf pour y écrire la configuration suivante :
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
interface=wlan0
driver=nl80211
ssid=Movit-xxyyzz
hw_mode=g
channel=11
wmm_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
wpa_passphrase=movitplus
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMPIl faut remplacer le ssid (nom du réseau) actuellement Movit-xxyyzz et remplacer xxyyzz par les derniers octets de l'addresse MAC comme précédemment. Il est recommandé que le mot de passe du point d'accès, représenté ici après wpa_passphrase=, soit movitplus par soucis d'uniformité entre les appareils. Si modifié, ce mot de passe doit avoir un minimum de 8 caractères pour respecter la norme WPA.
Ensuite, le fichier /etc/default/hostapd doit être modifié de façon à changer la clé DAEMON_CONF. Cette ligne fait comprendre à HostAPd où il doit lire son fichier de configuration au démarrage. Il faut la remplacer par :
DAEMON_CONF="/etc/hostapd/hostapd.conf"La configuration des adresses IP peut s'effectuer dans le fichier /etc/dhcpcd.conf. Ajoutez les lignes suivantes à la fin :
interface wlan0
static ip_address=192.168.10.1/24
nohook wpa_supplicantDNSmasq lit le fichier /etc/hosts afin d'associer certaines addresses à des noms de domaines. Cette fonction est utilisée pour rediriger le trafic vers la bonne addresse si une tentative est faite pour se connecter aux noms de domaines spécifiés. À ce fichier, il faut ajouter ces lignes à la fin :
#Un nom plus facile à retenir
192.168.10.1 movit movit.plusAssurez-vous que le fichier /etc/wpa_supplicant/wpa_supplicant.conf contient les bonnes informations qui seront utilisées par l'interface wifi1.
country=CA
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="NOM_DU_RESEAU" #Remplacer NOM_DU_RESEAU par le nom du réseau désiré
psk="MOT_DE_PASSE" #Remplacer MOT_DE_PASSE par le mot de passe de celui-ci
id_str="AP1"
}Un fichier de configuration doit être modifié pour permettre d'activer le partage de connection internet entre les deux interfaces, soit wlan0 et wlan1 (ou eth0). Ainsi, dans /etc/sysctl.conf, il faut décommenter la ligne net.ipv4.ip_forward=1. Il faut ensuite exécuter la commande sudo sysctl -p /etc/sysctl.conf pour mettre en effet ces changements.
Ensuite, pour permettre la transcription des addresses IP pour compléter la connection à internet, il faut exécuter la commande suivante :
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADEPour rendre ces règles persistantes, iptables-persistent est la meilleure solution. Pour l'installer :
sudo apt-get install iptables-persistentLorsque demandé, il faut appuyer sur oui pour sauvegarder les règles actuelles.
DNSmasq doit démarrer au bon moment pour fonctionner correctement. Pour assurer cela, il faut modifier une ligne dans son fichier .service de façon à ce qu'il démarre uniquement lorsque le démarrage des réseaux est complété. Dans le fichier /lib/systemd/system/dnsmasq.service, il faut ajouter "network-online.target" à ces deux lignes sous [Unit] :
Wants=nss-lookup.target network-online.target
After=network.target network-online.targetSi DNSmasq n'est pas activé au démarrage, cette commande permettra de le faire : sudo systemctl enable dnsmasq.service. Cependant, il devrait déjà l'être.
Pour finir, il faut activer systemd-networkd-wait-online.service qui s'occupe d'activer network-online.target pour l'utilisation des services qui nécessite l'accès à internet au démarrage. Il faut également s'assurer que networking.service est activé puisqu'il gère le processus mis en place plus haut.
systemctl enable systemd-networkd-wait-online.service
systemctl enable networking.serviceUne fois que toutes ces étapes sont complétées, il est nécessaire de redémarrer le Raspberry Pi. L'AP deviendra alors visible et accessible. Il permettra une connexion internet en passant par le point d'accés local nommé movit-xxyyzz. Testez votre connexion réseau et continuez à l'étape 4.
Voir le README.md du répertoire parent pour plus de détails sur les différentes partie du projet.
L'installation de MOvIt requiert un git clone habituel, mais comporte quelques subtilités avec les sous-modules. Ce répertoire devrait être installé sous home/pi/. La commande suivante installe tous les dossiers nécessaires, y compris les sous répertoires.
git clone https://github.com/introlab/MOvITPlus.git --recurse-submodulesPlusieurs autres étapes sont nécessaires au fonctionnement du projet. Les instructions d'installation du reste des composantes de MOvIT+ sont disponibles dans les README.md des répertoires GitHub correspondants. L'installation selon ces guides devrait ainsi se faire dans l'ordre suivant :
- MOvIT-Detect : Capteurs, code d’acquisition en C++ et communication avec le bus I2C et les périphériques.
- MOvIT-Detect-Backend : Code sous forme graphique avec Node-Red, base de données Mongo et communication entre toutes ces parties
- MOvIT-Detect-Frontend : Code en JavaScript permettant l’affichage d’une page web et l’interaction avec les couches inférieures
Le démarrage des différents services créés pour le projet est l'élément crucial permettant au RasbperryPi d'exécuter le code conçu dès le branchement de l'appareil.
Puisque l'image utilisée est Raspbian Buster Lite, alors le processus de démarrage des services se fait avec systemd. Celui-ci nécessite des fichiers .service dans le dossier /etc/systemd/system/ pour tous les services qu'il peut gérer. Ainsi, il faut créer ces fichiers et y définir les paramètres voulus pour chaques composants.
Après s'être dirigé dans le bon dossier via cd /etc/systemd/system/, il faut faire sudo nano nom-du-service.service, où nom-du-service.service est un des fichiers ci-dessous. Puis il faut copier le contenu respectif et répéter le tout pour chacun des services requis :
- movit_backend.service
[Unit]
Description=-------- MOVIT+ BACKEND with node-red
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=pi
ExecStart=/home/pi/MOvITPlus/MOvIT-Detect-Backend/node_modules/node-red/bin/node-red-pi -u /home/pi/MOvITPlus/MOvIT-Detect-Backend --max-old-space-size=256
[Install]
WantedBy=multi-user.target- movit_frontend.service
[Unit]
Description=-------- MOVIT+ FRONTEND Express server
After=movit_backend.service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
#The next line is the "yarn" command that runs on boot
# To change its behavior please refer to the corresponding script in package.json
# Package.json is located in the "WorkingDirectory".
ExecStart=/usr/bin/yarn start
WorkingDirectory=/home/pi/MOvITPlus/MOvIT-Detect-Frontend/
[Install]
WantedBy=multi-user.target```- movit_detect_python.service
[Unit]
Description=-------- MOVIT+ detect software (python)
After=network-online.target mosquitto.service
StartLimitIntervalSec=0
[Service]
# Set process niceness (priority) to maximum
# (without being a near real-time process)
Nice=-20
Type=simple
# Ensures the process always restarts when it crashes
Restart=always
RestartSec=1
User=pi
Group=pi
Environment=PYTHONPATH=/home/pi/MOvITPlus/MOvIT-Detect/python
ExecStart=/home/pi/MOvITPlus/MOvIT-Detect/python/venv/bin/python3 /home/pi/MOvITPlus/MOvIT-Detect/python/launcher.py
[Install]
WantedBy=multi-user.targetAfin que les services soit lancés au démarrage, les commandes suivantes sont essentielles :
sudo systemctl enable movit_backend.service
sudo systemctl enable movit_frontend.service
sudo systemctl enable movit_detect_python.serviceIl est recommandé de ne pas activer ces services avant la fin de l'installation du projet Voir la section Installation de MOvIT +
Pour pouvoir utiliser et tester les services immédiatement sans redémarrer le système, il sera nécessaire d'effectuer la commande suivante :
sudo systemctl daemon-reloadIl est possible de connaître l'état, lancer et arrêter les services avec les commandes suivantes :
systemctl status nom-du-service.service
sudo systemctl start nom-du-service.service
sudo systemctl stop nom-du-service.serviceLes commandes suivantes listent les services qui seront lancé au démarrage :
systemctl list-unit-files | grep enabled
systemctl list-unit-files | grep disabledExemple de réponse d'un des systèmes fonctionnels lors de l'exécution de ces commandes.
Certains services et certaines fonctionnalités peuvent être désactivées pour accélérer le démarrage du RaspberryPi. Dans le fichier /boot/config.txt, il faut ajouter ces lignes à la fin :
#disable bluetooth
dtoverlay=pi3-disable-bt
#---------Tested, seems fine
# Disable the rainbow splash screen
disable_splash=1
# Overclock the SD Card from 50 to 100MHz
# This can only be done with at least a UHS Class 1 card
dtoverlay=sdtweak,overclock_50=100
# Set the bootloader delay to 0 seconds. The default is 1s if not specified.
boot_delay=0Il faut également exécuter ces commandes :
sudo systemctl disable hciuart #Service systemd qui initialise le Bluetooth
sudo systemctl disable dhcpcd.service #Service de dhcpcd inutile
systemctl disable triggerhappy.service
systemctl disable triggerhappy.socketVoir l'exemple de réponse plus haut aux commandes systemctl list-unit-files pour plus de détails.
D'autres optimisations pourraient être faites, notamment en utilisant une version de Linux comportant uniquement les fonctionnalités nécessaires.
Une des parties de la mise est jour est simplement l'utilisation de la commande git pull dans le dossier parent. En plus du git pull habituel, il peut être également nécessaire de mettre à jour les sous-répertoires :
git pull
git submodule update --init --recursive- Charge les versions des sous-répertoires liées (tag de versions des sous-répertoires)
- Met à jour les scripts et les autres fichiers contenus par le répertoire parent
Les services devraient être arrêtés avant de procéder ainsi.