Terminaux légers/serveur pour Primtux 3 amd64 legacy et Raspberry Pi - Version imprimable +- PrimTux, la distribution éducative (https://forum.primtux.fr) +-- Forum : PrimTux: LA DISTRIBUTION: présentation, aide et développement (https://forum.primtux.fr/forumdisplay.php?fid=5) +--- Forum : Tutoriels généraux (https://forum.primtux.fr/forumdisplay.php?fid=14) +--- Sujet : Terminaux légers/serveur pour Primtux 3 amd64 legacy et Raspberry Pi (/showthread.php?tid=1404) |
Terminaux légers/serveur pour Primtux 3 amd64 legacy et Raspberry Pi - moricef1 - 03-04-2020 Linux Terminal Server Project (LTSP] En 2015, à l’occasion d’une discussion avec notre directrice d’école, il s’est avéré que l’état du parc informatique dans sa classe de petite et moyenne sections était bien en dessous de ses besoins. Ceux-ci sont de quatres postes au plus. Considérant le coût important que peut représenter l’achat de postes informatiques complets (environ 2900 € pour 4 postes), c’est vers une architecture client-serveur, qui rempli adéquatement les conditions d’économie de place et de coûts, que mon choix se portera. Le rôle de clients sera attribué aux Raspberry Pi, des nano-ordinateurs mono-carte de faible coût et peu gourmands en énergie électrique. Le serveur, qui sera aussi serveur de sauvegardes pour la mairie, fera tourner une distribution éducative. La machine sera un ordinateur de bureau de bonne facture avec un bon processeur et suffisamment d’espace disque et de mémoire. L’ensemble fonctionnera sous des systèmes d’exploitation GNU- Linux. Le choix de Linux s’explique par l’absence de coût d’installation logicielle (pas licences à payer) et par la fiabilité (peu ou prou de virus) et la stabilité du système, donc de sa maintenance (très peu de redémarrage des serveurs, etc). À la recherche d’informations concernant un système clients-serveur à base de Raspberry, je découvre le projet Linux Terminal Server Project (LTSP)[LTSP]. Celui-ci, grace à debootstrap, permet de construire un système complet dans un répertoire donné et la commande chroot permet « d’entrer » dans ce nouveau système. Dans un premier temp, j’étais convaincu que ce système correspondrait en tout point à mon projet : LTSP permet en effet de mettre en place assez facilement et rapidement un système client-serveur linux en recyclant comme clients des machines de faibles puissances ou obsolètes en regard de la demande croissante en ressources des systèmes actuels. De plus, LTSP est largement plébicité dans le domaine de l’informatique pédagogique et il existe de nombreux exemples où il est couplé avec le Raspberry. Mais dans les faits, l’installation d’un système racine via LTSP est assez longue, et hasar- deuse si la connexion internet est de qualité moyenne : à la moindre coupure inetrnet, il faut recommencer toute l’installation du système chrooté. Nous avons finalement constaté que LTSP n’était qu’une collection de scripts, une sorte de front-end, utilisant en arrière-plan des outils déjà existants de base sous Linux, conçu pour faciliter l’installation du système par des utilisateurs n’ayant pas de grandes connaissances en informatique et pour correspondre à une plage de systèmes assez large. Il est également clair que LTSP n’est pas fait pour une virtualisation totale car les scripts ne prennent leur configuration qu’installés en dur dans le système hôte. LTSP est prévu en fait pour être installé directement sur la machine hôte, comme système dédié. Or, pour des questions de sécurité évidentes, car le serveur sera aussi utilisé comme serveur de sauvegardes pour la mairie, il n’est pas question de mélanger les activités scolaires et les activités administratives de la mairie dans un même environnement. Ainsi, devant le manque de documentation et le fait qu’en utilisant les outils sous-jacents déjà complètement documentés, nous obtiendrions un résultat semblable, nous avons abandonné LTSP pour ne garder de lui que son gestionnaire de connexion LTSP Display Manager (LDM) sur les Raspberry. [h] Les outils de base Unix/GNU/Linux[/h] En décorticant LTSP, nous avons constaté que : — l’installation du système chrooté peut se faire sans LTSP, directement avec les outils de base debootstrap et chroot — le principe de communication entre les serveur LTSP et les clients est basé sur SSH 2 . — Nous avons utilisé et configuré le protocole SSH pour la communication entre les Rasp- berry et le serveur. C’est par SSH, que sont transmises les actions du clavier et de la souris et par lui encore qu’arrivent les images à l’écran. Le son est géré à part par le serveur de son Pulseaudio. [h] La partie logicielle[/h] Présentation du système De fait, lors des tests sur les Raspberry avec Raspbian Jessie installée, nous avons pu constaté l’évolution de SytemVInit vers systemd. Par la suite, j’ai abandonné le principe de chroot pour celui de conteneur par systemd-nspawn, beaucoup plus simple à mettre en place et à contrôler. Primtux tournera donc dans un conteneur systemd-nspawn, l’évolution du chroot utilisé dans LTSP. Ceci est valable pour primtux 3 amd64 legacy et raspberry sous raspbian stretch lite avec systemd. Toutes les commandes sont effectuées en tant qu'administrateur root [h]Les clients raspberry[/h] Sur le raspberry, on commence par installer l'image sur la carte sd puis au premier lancement, on lance raspi-config pour configurer les locales en fr UTF8, le clavier en français azerty et le fuseau horaire, le nom d'hôte et passer au Predictable Network Interface Names via raspi-config -> Network options -> N3 Network interface names. Ref. : https://www.raspberrypi.org/forums/viewtopic.php?t=191252 Ensuite on force l'adresse MAC de la carte réseau dans /boot/cmdline.txt en rajoutant à la fin : Code : smsc95xx.macaddr=B8:27:EB:XX:XX:XX Activation du serveur ssh Créer un fichier texte vide nommé ssh dans le répertoire /boot Installer les paquets nécessaires au son et LDM On installe ensuite les paquets suivants : xserver-xorg pulseaudio pulseaudio-module-zeroconf alsa-base ldm fuse et ntfs-3g (pour pouvoir monter les clés usb en ntfs) Code : apt-get update && apt-get upgrade && apt-get install xserver-xorg pulseaudio pulseaudio-module-zeroconf alsa-base ldm fuse ntfs-3g Activation du montage des périphériques de stockages USB Remplacer la ligne MountFlags=slave par MountFlags=shared dans /lib/systemd/system/systemd-udevd.service Code : # This file is part of systemd. Configuration du réseau La configuration réseau sera effectuée par le biais de systemd-networkd par DHCP. Passer de Network Manager à Systemd-Networkd Il est relativement simple de passer de Network Manager à systemd-networkd (et vice versa). Tout d'abord, désactivez le service network-manager et activez systemd-networkd comme suit : Code : systemctl disable network-manager Code : systemctl enable systemd-resolved Code : rm /etc/resolv.conf Dans /etc/dhcpcd.conf, on change : Code : # Use the hardware address of the interface for the Client ID. Configuration du serveur de son PulseAudio On ajoute si il n'y est pas déjà le fichier /etc/asound.conf : Code : pcm.!default { Code : [Unit] Code : load-module module-native-protocol-tcp auth-ip-acl=192.168.0.0/16;127.0.0.1 Code : ### Network access (may be configured with paprefs, so leave this commented Code : systemctl start pulseaudio.service Code : systemctl enable pulseaudio.service Connexion au serveur par LDM Créer le service /etc/systemd/system/ldm-primtux3-connect.service. On lance le script après l'établissement du réseau. : Code : [Unit] Code : #!/bin/sh Code : chmod +x /root/primtux_client.sh Clonage de la carte SD du Raspberry Voir ce tuto : http://www.framboise314.fr/clonez-la-carte-sd-de-votre-raspberry-pi/. N’oubliez pas de modifier l’adresse MAC dans /boot/cmdline.txt et le nom d’hôte dans raspi-config (ou dans /etc/hostname) après le clonage. [h]Le serveur headless debian stretch[/h] (Je n'explique pas tout ici pour le serveur) Le serveur est installé sur 2 disques durs de 1 TO chacun avec 2 cartes réseau. Les disques sont partitionnés avec raid 1 logiciel et lvm. Configuration du réseau La configuration réseau sera effectuée par le biais de systemd-networkd. Sur les deux cartes réseau présentes physiquement, une sera configurée en DHCP sur un sous-réseau 192.168.10.0/24 et la seconde sera pontée et obtiendra aussi son adresse par DHCP sur le sous-réseau 192.168.2.0/24. Les deux cartes seront de toute manière en adressage statique sur le serveur DHCP. Le conteneur aura une adresse séparée 192.168.2.4/24, dirigée sur le pont, via une interface réseau virtuelle sur l'hôte. Passer de Network Manager à Systemd-Networkd Il est relativement simple de passer de Network Manager à systemd-networkd (et vice versa). Tout d'abord, désactivez le service network-manager et activez systemd-networkd comme suit. Code : systemctl disable network-manager Code : systemctl enable systemd-resolved Code : rm /etc/resolv.conf Pour configurer les périphériques réseau avec systemd-networkd , vous devez spécifier les informations de configuration dans les fichiers texte avec l’extension .network. Ces fichiers de configuration réseau sont ensuite stockés et chargés depuis /etc/systemd/network. Lorsqu'il y a plusieurs fichiers, systemd-networkd les charge et les traite un par un dans l'ordre lexical. Commençons par créer un dossier /etc/systemd/network. Code : mkdir /etc/systemd/network Code : ip link Code : 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default Code : nano /etc/systemd/network/enp2s0.network Code : [Match] Code : nano /etc/systemd/network/enp4s1.network Code : [Match] Code : nano /etc/systemd/network/bro.netdev Code : [NetDev] Code : nano /etc/systemd/network/bro.network Code : [Match] Code : systemctl restart systemd-networkd Création du conteneur primtux3 Dans /var/lib/container/primtux3 en y copiant une Primtux 3 déjà installée sur une machine virtuelle Virtualbox sur une ordinateur du réseau. Sur le serveur, à cause des limitations de droits de connexion en ssh, créer auparavant un répertoire de destination intermédiaire dans le compte utilisateur: Code : mkdir primtux3_vm Créer d’abord le fichier d’exclusion : Le fichier exclud.lst : Code : -------------------- Code : sudo rsync -ravHz --exclude-from=exclud.lst -e "ssh -p 222" / user@192.168.X.X:~/primtux3_vm/ Code : cp -a /home/user/primtux3_vm /var/lib/machines/primtux3 Code : ls -l /var/lib/machines/primtux3 Code : nano /etc/systemd/system/primtux3.service Code : [Unit] Code : systemctl enable primtux3.service Code : systemctl start primtux3.service [h]Configuration du son coté serveur[/h] Toutes les données sont transférées par ssh sauf le son qui l’est par le serveur de son pulseaudio sur les raspberry. Dans chaque compte, il faut indiquer où aller chercher le serveur de son pulseaudio - c’est-à-dire sur les raspberry : ça se fait dans ~.fluxbox/startup en ajoutant PULSE_SERVER=$LTSP_CLIENT export PULSE_SERVER et aussi pendant qu’on y est export LANG=fr_FR.UTF-8 afin d’avoir primtux3 en français. Il faut garder le même nombre de lignes au fichier donc on remplace 3 lignes commentées par les précédentes : Code : #!/bin/sh Code : <?xml version="1.0" encoding="UTF-8" standalone="no"?> Code : cp -a /home/01-mini mini1 Démarrer le container, se loguer dedans avec Code : machinectl login primtux3 Vérifier dans /etc/passwd, changer le shell si nécessaire pour /bin/bash car ssh en a besoin. Pour sortir du container, taper rapidement 3 fois ] en maintenant la touche control + Alt Gr enfoncée (^]]]) [h]Serveur DHCP[/h] Je met ici la configuartion du serveur dhcp avec le paquet isc-dhcp-server, mais dans mon cas j’utilise un pare-feu pfSense qui fait office de serveur dhcp (entre autres). Configuration du serveur isc-dhcp-server. On installe le paquet isc-dhcp-server : Code : apt-get install isc-dhcp-server Code : # Voilà ! Le flux vidéo n'est pas toujours terrible, le son parfois haché. Tuxpaint plante à la fermeture, mais contrairement à Eiffel, ça ne fige pas tout le serveur X, il reste possible d'utiliser le reste des applications. Mais dans l'ensemble, c'est quand même fluide. Il y a peut être moyen d'optimiser tout ça. Il n'y a pas de verrouillage du pavé numérique dans la fenêtre de connexion de ldm et je n’ai pas encore chercher à le faire avec primtux3. Je l’ai aussi testé sur un odroid-c2 avec une armbian 64 stretch. To be continued ... Sources : https://www.freedesktop.org/software/systemd/man/systemd-nspawn.html http://www.olafdietsche.de/2016/06/25/network-systemd-nspawn-container https://wiki.archlinux.org/index.php/systemd-networkd https://lindenberg.io/blog/post/debian-containers-with-systemd-nspawn/ http://xmodulo.com/switch-from-networkmanager-to-systemd-networkd.html https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ Terminaux légers/serveur pour Primtux 3 amd64 legacy et Raspberry Pi - Philippe Dpt35 - 03-04-2020 Merci d'avoir pris la peine de rédiger ce tuto. Terminaux légers/serveur pour Primtux 3 amd64 legacy et Raspberry Pi - mothsart - 04-04-2020 Très intéressant. Ca serait sans doute utile de mettre tout ça sur le wiki. Peut-être rajouter une intro (avant d’enchaîner les points techniques) avec le pourquoi, la cible de cette installation. Comme ça, je vois pas mal de manip qui pourraient être automatisé dans un script. (ça pourrait être un taf complémentaire) Est-ce possible d'expliquer pourquoi Network Manager est remplacé par Systemd-Networkd ? C'est intéressant de savoir que les efforts effectués pour la rpi permettent également de supporter odroid-c2 ! Terminaux légers/serveur pour Primtux 3 amd64 legacy et Raspberry Pi - moricef1 - 12-04-2020 Bonsoir, Voilà, j'ai rajouté une intro pour expliquer un peu les motivations du projet. Concernant le choix de systemd-networkd, c'est tout d'abord parce qu'il me semble être bien intégré dans systemd, et si je me souviens bien, depuis le temps que je ne l'utilise plus, parce qu'il faut à network-manager un frontend graphique. Alors que, que ce soit sur le serveur, ou sur les raspberry, aucun n'ont d'interface graphique.à part un server x sur les raspi nécessaire pour le gestionnaire de connexion LDM. Ensuite ce projet date un peu certes, 2016, et si je me souviens bien cela fonctionnait bien sur Odroid-c2 et c'est principalement un vrai port ethernet qui semblait intéressant.. Mais vu le prix de l'odroid, j'ai abandonné l'idée de remplacer les raspi par cette machine. Quant aux scripts pour faciliter l'installation, je n'en ai pas pris la peine. Terminaux légers/serveur pour Primtux 3 amd64 legacy et Raspberry Pi - Philippe Dpt35 - 12-04-2020 Merci pour cette intro très utile. Dans le tuto, pourrais-tu compléter cette partie: Citation :Les clients raspberryIl serait là aussi fort utile de préciser de quelle image système tu parles, voire de donner un lien. Si l'on s'aperçoit qu'il y a de la demande pour mettre en place cette solution, on pourrait alors travailler à la réalisation de scripts, avec les adaptations nécessaires pour une PrimTux4. |