« Le routeur en tête réseau PI » : différence entre les versions
| Ligne 211 : | Ligne 211 : | ||
Un dernier problème: Lorsque on reboote sans l'écran HDMI... l'écran LCD ne marche pas c'est ballot | Un dernier problème: Lorsque on reboote sans l'écran HDMI... l'écran LCD ne marche pas c'est ballot | ||
====== Fichier config.txt ====== | |||
On l'édite avec<syntaxhighlight lang="bash"> | |||
sudo vi /boot/firmware/config.txt | |||
</syntaxhighlight>Et on y trouves <syntaxhighlight lang="ini"> | |||
# --- added by adafruit-pitft-helper --- | |||
[all] | |||
hdmi_force_hotplug=0 | |||
dtparam=spi=on | |||
dtparam=i2c1=on | |||
dtparam=i2c_arm=on | |||
dtoverlay=pitft28-capacitive,rotate=90,speed=64000000,fps=30,drm | |||
# --- end adafruit-pitft-helper --- | |||
</syntaxhighlight>Alors qu'avec :<syntaxhighlight lang="ini"> | |||
# --- added by adafruit-pitft-helper --- | |||
[all] | |||
hdmi_force_hotplug=0 | |||
dtparam=spi=on | |||
dtparam=i2c1=on | |||
dtparam=i2c_arm=on | |||
dtoverlay=pitft28-capacitive,rotate=270,speed=64000000,fps=30,drm | |||
hdmi_force_hotplug=1 | |||
hdmi_group=2 | |||
hdmi_mode=82 | |||
dtoverlay=gpio-key,gpio=17,keycode=105,label="BTN1" | |||
dtoverlay=gpio-key,gpio=22,keycode=106,label="BTN2" | |||
dtoverlay=gpio-key,gpio=23,keycode=107,label="BTN3" | |||
dtoverlay=gpio-key,gpio=27,keycode=108,label="BTN4" | |||
# --- end adafruit-pitft-helper --- | |||
</syntaxhighlight>C'est mieux et en plus on peut gérer les 4 boutons de droite. | |||
J'ai ai profité pour retourner l'écran (rotate=270) car avec un rotatate=90 les boutons sont a gauche. | |||
====== Le fichier cmdline.txt ====== | |||
Toujours pour le modifier:<syntaxhighlight lang="bash"> | |||
sudo vi /boot/firmware/cmdline.txt | |||
</syntaxhighlight>On y trouve <syntaxhighlight lang="text"> | |||
console=serial0,115200 console=tty1 root=PARTUUID=b104592a-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=FR | |||
</syntaxhighlight>On supprime la "sérial console" et on active fbcon.<syntaxhighlight lang="text"> | |||
console=tty1 fbcon=map:10 root=PARTUUID=b104592a-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=FR | |||
</syntaxhighlight>On reboote et ca marche! Même sans l'écran HDMI. | |||
Dans tous les cas on peut acceder au frame buffer sur /dev/fb1 pour la carte écran LCD.<syntaxhighlight lang="bash"> | |||
cp /dev/random /dev/fb1 | |||
</syntaxhighlight>et on voit du bruit sur l'écran. | |||
Version du 3 décembre 2025 à 23:02
Présentation
La première étape sera de créer ce qui sera la tête du réseau.
Schématiquement on a un raspberry PI en frontal. Il n'a en aucun cas besoin de wifi donc un simple Raspbery PI2 sera suffisant.
En revanche il lui faudra deus "pattes" réseau donc un adaptateur USB - Ethernet sera nécessaire. De plus un écran Adafruit 2.8' sera utilisé pour le "status".
Architecture réseau:
- eth0 (le port Ethernet standard) sera relié au WAN en tant que client DHCP. C'est sur le routeur auquel il est relié que le serveur DHCP attribuera (ou pas) une IP fixe.
- eth1 (le port Ethernet sur USB) sera relié au LAN. Il sera configuré en serveur DHCP et s'occupera du sub-net 10.11.11.0/24. Les autres raspberry seront reliés à ce port via un switch.
Derrière on aura toute sorte de serveurs basés sur des raspberry PI du genre:
- Serveur node-red
- Serveur MariaDB
- Serveur MediaWiki
- ce dont on aura besoin...
Modules installés
Sur ce serveur "front" on aura donc installé:
- Un serveur DHCP pour eth1
- Un serveur ssh sur eth0 et eth1 utilisé comme "rebond"
- Un reverse proxy pour faire suivre les demandes vers les serveurs sur le "LAN 10.11.11"
- Un broker MQTT ouvert sur eth0 et eth1
- Un driver d"écran Adafruit é.8'
Installation
La carte SD
On utilise Raspberry Pi Imager https://www.raspberrypi.com/software/
On choisit le modèle (moi c'est un raspberry PI 2 y'a pas besoin de mieux). Puis "SUIVANT"
On ne veut pas de "desktop" on choisit "Raspberry PI OS (other)
On choisit la dernière version sans desktop puis "SUIVANT"
Moi j'ai qu'un seul port SD il n'y a pas d'ambiguïté je le sélectionne puis "SUIVANT"
On donne le nom à notre serveur puis "SUIVANT"
On donne la localisation puis "SUIVANT"
On définit le nom de l'utilisateur et son mot de passe puis "SUIVANT"
On peut ignorer le wifi dans notre cas (un raspberry PI 2 n'est pas équité!) "SUIVANT"
On s'arrête un peut sur cette page.
On a définit un login que n'est pas "pi" mais qui peut être aisément trouvé. Notre mot de passe est sûrement très sécurisé mais toujours faillible. Comme le routeur sera probablement acessible de l'extérieur il est nécessaire, a mon avis, de sécuriser le process de login ssh par une clé. J'ai mis la clé publique du PC que j'utilise habituellement pour la maintenance. Une seconde clé pourra être ajouté ultérieurement.
"SUIVANT"
Je ne penses pas que ce soit nécessaire d'utiliser Pi Connect, d'autant plus que le PI devra être le moins chargé possible. "SUIVANT"
On a un dernier récapitulatif. "WRITE".
Oui je comprends, on efface et on flashe la carte!
Ca s'écrit... si une fenêtre proposant de formater la carte s'ouvre... fermez là.
Apres avoir écrit la carte, on la vérifie (c'est indispensable pour être sûr de la qualité de la carte)
C'est terminé. On peut soit en faire une seconde (un backup? mais il faudrait plutôt faire la copie après les étapes suivantes). "FINISH"
La carte est prête on peut lancer le premier boot.
On insère la carte dans le PI2 en question. On y branche un clavier et un écran (ne pas brancher l'adaptateur USB Ethernet la première fois) et GO! On blanche le courant.
Premier boot
Il boote correctement.
Moi il bloque un moment sur Network Manager mais continue (je penses que c'est eth1 sur le port USB qui n'est relié a rien qui le gène)
Il boote normalement, affiche la progression sur la console sur l'écran HDMI.
La fin est un succinct :
[ OK ] Reached target cloud-init.target - Cloud-init target.
Et rien ne se passe. C'est normal, pas de panique.
La console à l'écran se limite à... la console de base pour voir les erreurs. Pour se loguer il y a deux solutions :
- Par ssh depuis une autre machine
- en allant sur une autre console de login "hardware" grâce a <ctrl> + <F2> jusqu'à <F6>. La première <ctrl> <F1> sera toujours là ou seront affichés les messages.
On va configurer les trucs de base.
raspi-config
On lance le programme "raspi-config". On a fait beaucoup du travail au moment de la préparation de la carte SD mais il en reste un peu.
sudo raspi-config
On a le "classique"
Dans 1 "System options" choisir S6 "Autologin"
Selectionner <Yes> qui nous réponds "Console autologin is enabled".
Oui si quelqu'un rentre chez nous, branche un écran et un clavier sur la machine il sera logué automatiquement... c'est un risque que je prends car, comme ces machines marchent très bien et durent des années il m'arrive d'oublier leur mot de passe.
Dans 6 "Advanced Options" on choisit A1 "Expand Filesystem"
Et le PI nous réponds :
Root partition has been resized.
The filesystem will be enlarged upon the next reboot
On valide par <OK>
Au cas ou on lance un 8 "Update" mais si on vient de faire la carte il ne doit pas se passer grand chose.
On branche l'adaptateur USB Ethernet et on reboote
sudo reboot
on voit le shutdown se dérouler sur la console et le redémarrage.
Le boot bloque un moment sur le démarrage du network manager sur eth1 mais on peut utiliser le serveur quand même.
On peut vérifier que le "resize filesystem" est bien passé:
df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p2 229G 2.6G 217G 2% /
J'ai utilisé une carte de 256 Go on y est presque!
Configuration de l'écran
Adafuit le fabricant de l'écran donnait autrefois une distribution spécifique pour cet écran. C'était rapide mais pas très "propre".
Maintenant il y a un script python pour faire ce travail. Adafuit donne le process ici: https://learn.adafruit.com/adafruit-2-8-pitft-capacitive-touch/easy-install-2
Je suis bon camarade je donne ici la méthode.
Installation des outils
Il faut d'abord installer les outils python de virtualisation d'environnement.
sudo apt install python3-venv
python -m venv env --system-site-packages
source env/bin/activate
Ensuite on installe le script qui installera lui même l'écran.
cd ~
sudo apt-get update
sudo apt-get install -y git python3-pip
pip3 install --upgrade adafruit-python-shell click Flask-SQLAlchemy
git clone https://github.com/adafruit/Raspberry-Pi-Installer-Scripts.git
cd Raspberry-Pi-Installer-Scripts
Bon je penses que certains apt-get install sont superflus mais je ne prends pas de risques.
Installation elle même
Ici chez Adafruit donne une instruction pour chaque modèle d'écran.
Pour l'écran 2.8'' capacitif :
sudo -E env PATH=$PATH python3 adafruit-pitft.py --display=28c --rotation=90 --install-type=console
SI j'avais utilisé la version résistive
sudo -E env PATH=$PATH python3 adafruit-pitft.py --display=28r --rotation=90 --install-type=console
Ca se termine
PITFT Updating console to PiTFT...
Remove fbcp from /etc/rc.local, if it's there...
Configuring boot/config.txt for default HDMI
Installing console fbcon map helper...
Installing console fbcon map service...
PITFT Created symlink '/etc/systemd/system/multi-user.target.wants/con2fbmap.service' → '/etc/systemd/system/con2fbmap.service'.
PITFT Job for con2fbmap.service failed because the control process exited with error code.
See "systemctl status con2fbmap.service" and "journalctl -xeu con2fbmap.service" for details.
Turning off console blanking
Setting raspi-config to boot to console w/o login...
PITFT Success!
Settings take effect on next boot.
REBOOT NOW? [Y/n] Reboot started...
Connection to 192.168.0.77 closed by remote host.
Connection to 192.168.0.77 closed.
En rebootant le PI.
Et l'écran est actif.
Un dernier problème: Lorsque on reboote sans l'écran HDMI... l'écran LCD ne marche pas c'est ballot
Fichier config.txt
On l'édite avec
sudo vi /boot/firmware/config.txt
Et on y trouves
# --- added by adafruit-pitft-helper ---
[all]
hdmi_force_hotplug=0
dtparam=spi=on
dtparam=i2c1=on
dtparam=i2c_arm=on
dtoverlay=pitft28-capacitive,rotate=90,speed=64000000,fps=30,drm
# --- end adafruit-pitft-helper ---
Alors qu'avec :
# --- added by adafruit-pitft-helper ---
[all]
hdmi_force_hotplug=0
dtparam=spi=on
dtparam=i2c1=on
dtparam=i2c_arm=on
dtoverlay=pitft28-capacitive,rotate=270,speed=64000000,fps=30,drm
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=82
dtoverlay=gpio-key,gpio=17,keycode=105,label="BTN1"
dtoverlay=gpio-key,gpio=22,keycode=106,label="BTN2"
dtoverlay=gpio-key,gpio=23,keycode=107,label="BTN3"
dtoverlay=gpio-key,gpio=27,keycode=108,label="BTN4"
# --- end adafruit-pitft-helper ---
C'est mieux et en plus on peut gérer les 4 boutons de droite.
J'ai ai profité pour retourner l'écran (rotate=270) car avec un rotatate=90 les boutons sont a gauche.
Le fichier cmdline.txt
Toujours pour le modifier:
sudo vi /boot/firmware/cmdline.txt
On y trouve
console=serial0,115200 console=tty1 root=PARTUUID=b104592a-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=FR
On supprime la "sérial console" et on active fbcon.
console=tty1 fbcon=map:10 root=PARTUUID=b104592a-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=FR
On reboote et ca marche! Même sans l'écran HDMI. Dans tous les cas on peut acceder au frame buffer sur /dev/fb1 pour la carte écran LCD.
cp /dev/random /dev/fb1
et on voit du bruit sur l'écran.