Un serveur pour le FabLab - YunoHost ?
Installer un serveur yunohost.org sur un Raspberry pour les besoins du FabLab : Projets d'IoT Projets de robotique Groupe de travail IA
- Installer un serveur avec la distribution Linux YunoHost
- Serveur d'impression 3D - Octoprint - Home Assistant
- Moyens informatiques
- Serveur de colocation d'Alsace Réseau Neutre
Installer un serveur avec la distribution Linux YunoHost
- Flasher Yunohost pour Raspberry avec Etcher
- Pour que le Raspberry (Yunohost 11, debian bullseye) se connecte en Wifi (par défaut il ne se connecte qu'en filaire)
- Écrire un fichier
wpa_supplicant.conf
dans la partition boot - voir : https://www.raspberryme.com/configurer-le-wifi-sur-un-pi-manuellement-a-laide-de-wpa_supplicant-conf/
-
Bien penser à modifier :
country=fr ssid="MyNetworkSSID" psk="Pa55w0rd1234"
- Écrire un fichier
- A partir de Yunohost 12 (Debian bookworm), il faudra suivre la doc' officielle
- Se connecter avec écran+clavier pour récupérer l'adresse IP
- user : root
- mdp : yunohost
- Se connecter à l'adresse IP récupérée depuis un PC sur le même réseau local
- Lancer la post-installation pour créer le premier utilisateur YunoHost qui en sera administrateur
- Mettre un mot de passe fort car il s'agit d'un serveur qui pourra potentiellement être exposé sur internet
- Ajouter le lien entre IP et adresses https://yunohost.org/oc/dns_local_network#configure-hosts-file-on-c
Configurer un HotSpot Wifi
- Configurer un point d'accès wifi qui partage la connexion ethernet de la brique avec les appareils connectés (bridge).
Ajouter du SWAP
- Pour les Raspberry 3B+ qui n'ont que 1G de RAM, il est préférable d'ajouter un fichier de SWAP d'au moins 1G
- Ca permettra d'installer les applications YunoHost même si la RAM demandée est importante
- https://www.tartarefr.eu/fr/blog/modifier-swap-rpi
sudo dphys-swapfile swapoff
sudo nano /etc/dphys-swapfile
- Modifier le fichier de configuration
CONF_SWAPSIZE=4096
...
CONF_MAXSWAP=4096
- Recréer le fichier de SWAP et redémarrer le SWAP
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
Impérativement régler la swappiness à 1 sinon la carte SD va mourir prématurément
Serveur d'impression 3D - Octoprint - Home Assistant
Lancement d'une impression
Depuis Bambu Studio
- Sélectionner l'imprimante :
- Lancer l'impression
Pour voir comment ajouter une imprimante à BambuStudio via Octoprint :
Depuis un navigateur
- Se connecter au serveur d'impression Octoprint correspondant à l'imprimante souhaitée, cf . https://innovation.iha.unistra.fr/books/1-fablab-vos-projets/page/adressage-ip-du-reseau-du-fablab#bkmrk-configuration-r%C3%A9seau
- Démarrer l'imprimante
- Se connecter à l'imprimante en sélectionnant le port série correspondant, par ex.
/dev/octo_ender3s1pro
Installation de Octoprint
Nous avons vu comment installer un serveur YunoHost sur une Raspberry Pi.
On souhaite maintenant installer plusieurs instances de Octoprint pour pouvoir piloter à distance plusieurs imprimantes 3D
- connexion via ssh au serveur
mkdir -p /opt/octoprint_deploy
cd /opt/octoprint_deploy
git clone https://github.com/paukstelis/octoprint_deploy.git
- débrancher l'imprimante à ajouter
- lancer le script de déploiement et d'upgrade :
./octoprint_deploy.sh
- taper
y
oun
en fonction des questions - rebrancher l'imprimante lorsque demandé pour la détection du port USB
Vérification que le système tourne :
sudo systemctl status ender3v2a
● ender3v2a.service - The snappy web interface for your 3D printer
Loaded: loaded (/etc/systemd/system/ender3v2a.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-06-20 09:17:48 CEST; 25min ago
Main PID: 51985 (octoprint)
Tasks: 14 (limit: 779)
CPU: 1min 33ms
CGroup: /system.slice/ender3v2a.service
└─51985 /home/fan_admin/OctoPrint/bin/python3 /home/fan_admin/OctoPrint/bin/octoprint serve --config=/home/fan_admin/.ender3v2a/config.yaml --basedir=/home/fan_admin/.ender3v2a --port=XXXXXX
- le système est bien
active (running)
- le port
XXXXXX
est indiqué - on se connecte donc à l'interface web d'octoprint via http://addresse_ip:XXXXXX
A condition d'avoir bien ouvert le port XXXXXX
dans le pare-feu YunoHost
Démarrage automatique du service systemd au démarrage de la Raspberry :
sudo systemctl enable ender3s1pro
Redémarrage du service au bout de 5s lorsqu'il échoue :
nano /etc/systemd/system/ender3s1pro.service
[Service]
Restart=on-failure
RestartSec=5s
Exposition d'Octoprint sur le réseau local via YunoHost :
- ajout d'une URL locale type
imprimante.local
- Installation d'une application redirect sur l'URL créée et pointant sur l'adresse locale et le port de l'imprimante
Exposition d'Octoprint sur le net via YunoHost :
Vous vous exposez à des attaques, sécurisez les comptes et vérifiez les droits d'accès avant de réaliser cela
- Ouverture du port dans le Firewall YunoHost https://fan.ynh.fr/yunohost/admin/#/tools/firewall
- ajout d'une URL publique
- Installation d'une application redirect
Installation de Klipper
- Ce nouveau firmware à installer sur le contrôleur de l'imprimante permet doit permettre d'améliorer les performances. Les algorithmes de planification de trajectoire fonctionnent sur un ordinateur déporté, par exemple notre serveur d'impression 3D
- Installation managée via KIAUH https://github.com/dw-0/kiauh
-
sudo apt-get update && sudo apt-get install git -y cd ~ && git clone https://github.com/dw-0/kiauh.git ./kiauh/kiauh.sh
- Installation des dépendances
sudo apt-get install avr-libc avrdude binutils-arm-none-eabi binutils-avr dfu-util gcc-arm-none-eabi gcc-avr libnewlib-arm-none-eabi libusb-1.0-0-dev libusb-dev stm32flash
cd ~ && git clone https://github.com/Klipper3d/klipper.git
- on installe 4 instances en respectant les noms des imprimantes https://innovation.iha.unistra.fr/books/1-fablab-vos-projets/page/adressage-ip-du-reseau-du-fablab#bkmrk-configuration-r%C3%A9seau
-
- (Méthode d'installation "manuelle" : https://www.klipper3d.org/OctoPrint.html )
- Configuration du printer.cfg via ssh https://www.klipper3d.org/Installation.html#configuring-klipper
cp klipper/config/printer-creality-ender3-s1-2021.cfg /home/fan_admin/printer_ender3s1pro_data/config
nano /home/fan_admin/printer_ender3s1pro_data/config/printer-creality-ender3-s1-2021.cfg
mv /home/fan_admin/printer_ender3s1pro_data/config/printer-creality-ender3-s1-2021.cfg /home/fan_admin/printer_ender3s1pro_data/config/printer.cfg
- Compiler et flasher le driver https://www.klipper3d.org/Installation.html#building-and-flashing-the-micro-controller
- Intégration avec Octoprint (qui est déjà installé) https://www.klipper3d.org/OctoPrint.html#configuring-octoprint-to-use-klipper
- Installation de l'interface Web Mainsail requiert d'abord d'installer Moonraker
kiauh/kiauh.sh
Moyens informatiques
Synthèse
PC
- 3 PC tours Ubuntu 22.04 administrés par le FabLab
- Eviter les màj sur le réseau du FabLab car limité à 20Go, plutôt faire un partage de connexion smartphone via USB ou se connecter à Osiris
- Arduino IDE (v1.8 dans les dépôts) --> Télécharger AppImage (2.3.2)
chmod +x arduino-ide...AppImage
- Télécharger BambuStudio.AppImage
chmod +x BambuStudio...AppImage
- FreeCAD 0.21 dans le PPA stable
sudo add-apt-repository ppa:freecad-maintainers/freecad-stable
- Inkscape 1.3.2 dans le PPA stable
sudo add-apt-repository ppa:inkscape.dev/stable
- Extension Inkcut pour traceur de découpe
- Extension Lasercut tabbed box
- Extension Lasercut Jigsaw
- Firefox LTS via les dépôts plutôt que le snap
- PrusaSlicer depuis snap
sudo snap install prusa-slicer
- Ultimaker Cura via les dépôts
sudo apt install cura
- Logiciels utiles pour la Robotique Open Source ROS
- QTcreator-ROS depuis snap (pour la robotique Open Source)
- Visual Studio Code sans tracker VSCodium
- Profils et Droits Ubuntu
- Un profil public
- Pour tout utilisateur du FabLab
- Français
- Automatic Login
- Même Password qu'étudiant
- un profil étudiant en robotique
- Pour les étudiants GEII ou toute personne voulant découvrir ou travailler sur la robotique Open Source avec ROS
- administrateur
- Anglais (pour ROS)
- en profil enseignant/administrateur
- Pour les enseignants de robotique, quelques workspace ROS propres, que les étudiants ne devraient pas avoir modifiés (rien ne les en empêche)
- administrateur
- Anglais (pour ROS)
- Pour les enseignants de robotique, quelques workspace ROS propres, que les étudiants ne devraient pas avoir modifiés (rien ne les en empêche)
- Un profil public
- 3 PC tours Windows administrés par l'IUT
Double-écran en salle A1-TP06
L'idée c'est de brancher un all-in-one comme écran secondaire du all-in-one voisin pour avoir 2 écrans. C'est pratique d'avoir 2 écrans quand on fait du VirtualBox et qu'on veut suivre de la doc' à côté. Voyons comment faire ça avec 2 Dell Optiplex 7470 en A1TP06 ?
Sur le all-in-one qui a besoin d'un écran externe : brancher le câble sur le port HDMI "normal"
Sur le all-in-one qui doit servir d'écran externe :
- installer ce driver Dell "On screen display" https://dl.dell.com/FOLDER05872073M/5/Dell-On-Screen-Display-Application_PRGT0_WIN_1.0.4.0_A02_03.EXE
- brancher le câble HDMI sur le port qui a un logo "input"
- appuyer sur le bouton qui est sous l'écran à droite
- le bouton est désactivable dans le BIOS mais activé par défaut
- déploiement du driver en ligne de commande :
PS C:\Users\install> .\Dell-On-Screen-Display-Application_PRGT0_WIN_1.0.4.0_A02_03.EXE /help
PS C:\Users\install> A02
Dell On-Screen Display Application, 1.0.4.0, A02
General Usage:
Dell-On-Screen-Display-Application_PRGT0_WIN_1.0.4.0_A02_03.exe [/<option1>[=<value1>]] [/<option2>[=<value2>]]...
See listing below for <option> and <value> information.
NOTE:If the folder name contains space, double quotes should be given for folder name
EXAMPLE:/s /e="c:\Folder Name"
Option - Description:
---------------------
(none) - Display of graphical user interface for guided installation/update or extraction.
/? or /h - Displays this Update Package usage information.
/s - Suppresses all graphical user interfaces of the Update Package.
/e=<path> - Extraction of update contents to a folder.
(NOTE: Requires /s option)
/passthrough ... - (Advanced) Sends all text following the /passthrough option directly to the vendor install software of the Update Package. This mode suppresses any provided graphical user interfaces, but not necessarily those of the vendor software.
/factoryinstall /passthrough (vendor command line parameter) - (Advanced) (commnad line parameters) will be passed to vendor installer directly without parsing MUP.xml. Post installation, If the vendor installer returns REBOOT_REQUIRED or REBOOT_UPDATE_PENDING, it will be turned to SUCCESS.
/l=<path> - Define a specific path for the Update Package log file.
(NOTE: This option can NOT be used in combination with /passthrough)
Example(s):
---------------------
Update the system silently
Dell-On-Screen-Display-Application_PRGT0_WIN_1.0.4.0_A02_03.exe /s
Extract the update contents to the folder C:\mydir\
Dell-On-Screen-Display-Application_PRGT0_WIN_1.0.4.0_A02_03.exe /s /e=C:\mydir
Pass command line arguments directly to vendor installer.
Turn the return code to success if required
Dell-On-Screen-Display-Application_PRGT0_WIN_1.0.4.0_A02_03.exe /factoryinstall /passthrough D:\Sample.xml C:\log\FI.log
Change from the default log location to C:\my path with spaces\log.txt
Dell-On-Screen-Display-Application_PRGT0_WIN_1.0.4.0_A02_03.exe /l="C:\my path with spaces\log.txt"
Réseau
- Routeur wifi 5G CradlePoint
- Émet un réseau wifi isolé de l'infrastructure réseau de l'IUT dans le FabLab (A1-01), le bureau du Fab-Manager (A1-05) et les deux salles adjacentes (A1-TP01 et A1-TP06)
- Connexion internet via SIM 5G SFR 20Go de quota 2€/mois
- Extension possible à un forfait illimité pour 10€/mois
- Passer en navigation privée si la connexion échoue
- Émet un réseau wifi isolé de l'infrastructure réseau de l'IUT dans le FabLab (A1-01), le bureau du Fab-Manager (A1-05) et les deux salles adjacentes (A1-TP01 et A1-TP06)
- Permet de créer un réseau et de fournir internet pour des PC, serveurs, et robots Linux/Ubuntu
- Permet de réaliser des projets de robotique avec ROS en connectant des ordinateur sous Linux/Ubuntu avec des IP fixes
- Permet de réaliser des projets d'IoT avec un serveur YunoHost exposé à internet
- VPN Wireguard arn-fai.net 4€/mois
Serveurs
- Un raspberry 3B+ installé sous Yunohost
- Usages locaux : serveur d'impression 3D octoprint
- Usages internet : expérimentations serveur autour de la collecte de données (IoT)
- OS Yunohost 11
- Connecté en filaire au Routeur 4G CradlePoint
- VPN Wireguard arn-fai.net 4€/mois
- Accès local via yunohost.local/yunohost/admin
- Exposition sur internet via VPN Wireguard arn-fai.net 4€/mois
- Nom de domaine public fourni par Yunohost : fan.ynh.fr
- Application serveur d'impression 3D Octoprint pour Ender3 S1Pro, Ender3 V2 A, Ender3 V2 B
- Applications YunoHost installées :
- WireGuard Client pour la connexion au serveur VPN wireguard
- Home Assistant
- pour faire de l'IoT
- pour synthétiser les serveurs Octoprint
- pour faire de l'IoT
- InfluxDB pour le stockage de données temporelles issues des capteur IoT
- Mosquitto comme serveur MQTT
- Node-RED pour programmer la récupération de données depuis les capteurs, les afficher sur un dashboard et les stocker dans une base de données MySQL ou InfluxDB
- phpMyAdmin pour gérer les bases de données MySQL
- Usages locaux : serveur d'impression 3D octoprint
- Un serveur virtuel (VPS) en colocation chez arn-fai.net
- Administré par le FabLab avec l'aide des administrateur bénévoles de l'association Alsace Réseau Neutre
- Un nom de domaine fablab-alsacenord.fr payé chez ovh
- Usage IA
- Un compte OpenAI du FabLab payé par la caisse de l'association
- L'application ChatGPT web pour se connecter à l'API OpenAI
- Usage FabLab
- Le site web de gestion du FabLab d'Alsace-Nord : fab-manager.com
- Installé via le paquet YunoHost
- Un Raspberry 5 installé sous HomeAssistant OS
Gestion parc informatique
Pour gérer les PC Ubuntu du FAN et les PC Windows de CréaBot, on installe le logiciel GLPI avec Fusion Inventory :
- Installer le paquet GLPI sur le raspberry 3B+
fan.ynh.fr
- Installation sur un domaine local, on ne veut pas de piratage de l'extérieur :
parcinfo.local
- Login par défaut : glpi:glpi
Serveur de colocation d'Alsace Réseau Neutre
Fab-Manager
Configuration
- https://manager.fablab-alsacenord.fr
- déploiement via app YunoHost
- installé dans
cd /var/www/fab-manager
- fichier de config :
nano .env
- recharger le service systemd :
sudo systemctl restart fab-manager-worker fab-manager-app
- renouvellement du certificat lets'Encrypt géré par YunoHost
Automatisation de la publication des projets de Fab-Manager vers Facebook
Ancien serveur hébergé Unistra
- https://fan-manager.di.unistra.fr/
- déploiement via docker comme dans la doc' officielle
- installé dans
cd /apps/fabmanager
- fichier de config :
nano config/env
- recharger l'environnement :
docker compose down
docker compose up -d
- script de renouvellement du certificat lets'Encrypt (à programmer avec crontab)
root@fan-manager:/apps/fabmanager# cat /usr/local/sbin/renew.sh
#!/bin/bash
certbot renew --dry-run -n > /tmp/renewornot 2>&1
if grep -Fxq 'Cert not due for renewal, but simulating renewal for dry run' "/tmp/renewornot"
then
echo "Certificat non arrivé à échéance...pas d'action"
else
echo "Renouvellement du certicat..."
cd /apps/fabmanager/
docker-compose down
cd /apps/fabmanager/letsencrypt/etc/live/fan-manager.di.unistra.fr
#certbot -n --renew-by-default --domain fan-manager.di.unistra.fr
certbot renew --post-hook "systemctl stop nginx"
cd /etc/letsencrypt/archive/fan-manager.di.unistra.fr
ls -Art | tail -n 4 |sort > /tmp/letslist
declare -a lets_array
lets_array=(`cat "/tmp/letslist"`)
cp -f /etc/letsencrypt/archive/fan-manager.di.unistra.fr/${lets_array[0]} /apps/fabmanager/letsencrypt/etc/archive/fan-manager.di.unistra.fr/cert198.pem
cp -f /etc/letsencrypt/archive/fan-manager.di.unistra.fr/${lets_array[1]} /apps/fabmanager/letsencrypt/etc/archive/fan-manager.di.unistra.fr/chain198.pem
cp -f /etc/letsencrypt/archive/fan-manager.di.unistra.fr/${lets_array[2]} /apps/fabmanager/letsencrypt/etc/archive/fan-manager.di.unistra.fr/fullchain198.pem
cp -f /etc/letsencrypt/archive/fan-manager.di.unistra.fr/${lets_array[3]} /apps/fabmanager/letsencrypt/etc/archive/fan-manager.di.unistra.fr/privkey198.pem
cd /apps/fabmanager/
killall nginx
docker-compose up -d
fi
exit