[Supplemental 2020/03/09: Ajout de Ubuntu Server, comment fixer une adresse IP manuellement et configuration du WiFi]

Maintenant que j'ai un beau boîtier pour mon Raspberry Pi 3 B+, il faut l'utiliser ! Je me disais que mon site pourrait être servi par un RPi, c'est le moment de mettre en oeuvre ! 

Ingrédients

D'abord, listons le matériel nécessaire :

  • Un Raspberry Pi - évidemment. 🙂 Je vais utiliser un modèle 3 B+, mais il est possible qu'un modèle 2 puisse faire l'affaire. N'en ayant pas, je ne peux pas l'affirmer... Le modèle 3 convient également très bien.
  • Un boîtier pour le RPi - à moins de vivre dangereusement avec le RPi à l'air libre, il vaut mieux le protéger dans un boîtier. Tous les goûts sont dans la nature, comme tout plein de boîtiers, il y a l'embarras du choix ! Moi j'ai l'Argon One. 😉
  • Une alimentation micro USB et un câble de qualité - important ! Une alimentation de qualité assure la fiabilité de l'appareil, et évite que le RPi 3 émette des alertes de sous-voltage récurrents... J'ai un chargeur Aukey, et un câble microUSB Amazon Basics. Le chargeur Aukey a fait ses preuves, et le câble Amazon est un câble robuste et épais. Mais mon Argon One pompe un peu trop de courant au goût du RPi 3B+, et le RPi 3B+ me signale des baisses de tension... 😕
  • Une carte microSD - libre choix de capacité et de vitesse. La taille, voir ce qu'on veut mettre sur le serveur. 4 Go minimum pour écrire l'image disque, je conseille 8 Go pour pouvoir en faire quelque chose après. La vitesse de la carte, à voir, j'ai cru comprendre que le RPi ne pouvait pas exploiter correctement les cartes les plus rapides. Mon choix s'est tout de même porté sur une SanDisk Extreme 64 Go. 
  • Un écran HDMI et un clavier USB pour l'installation initiale - Une télé peut faire l'affaire. J'ai employé mon écran de test au boulot. 😉
  • Optionnel, un disque externe - même un SSD ! Le RPi peut démarrer sur un périphérique USB après une petite manipulation, et on peut utiliser des supports plus robustes que de simples cartes SD. J'utilise un SSD SanDisk SSD Plus de 120 Go dans un boîtier Inateck FE2004 (mais j'aurais dû prendre un Inateck SA01001, il va mieux avec l'Argon One 😑).

Ensuite, les logiciels :

  • Raspbian - une déclinaison de Debian pour le RPi. Il existe des images préinstallées chez Raspberry Pi. Pour mon usage serveur, j'utilise Raspbian Strech Lite, pas besoin d'encombrer l'espace limité avec une interface graphique qui ne servira pas.
  • Ubuntu Server - Canonical a aussi sorti une déclinaison de Ubuntu pour Raspberry Pi. Canonical étant plus cutting edge que Debian/Raspbian, ils proposent une version 64 bits et un noyau Linux 5, ainsi que des packages plus récents. J'expérimente beaucoup sur mes serveurs perso, je choisis Ubuntu. 😉 Pour une stabilité à toute épreuve, il faut s'orienter vers Raspbian.
  • Apache - le célèbre serveur web. Je devrais changer pour NGINX, mais j'ai la flemme d'apprendre la syntaxe du fichier de configuration...
  • php - le non moins célèbre langage, moteur de quasi tous les CMS.
  • MariaDB - fork de MySQL, moteur de bases de données libre. 
  • Joomla! - un CMS sympa. 😉 J'ai déjà donné dans Plone, Wordpress ne m'attire pas trop. En fait au final peu importe le CMS pour moi, vu que je n'utilise que les fonctions de base...

Tous les logiciels sont libres et gratuits, c'est la beauté de la solution. 😉 J'achète juste le peu de composants pour monter un serveur RPi (dans les 90 € dans mon cas), j'utilise le surplus de ma bande passante à la maison et hop plus besoin de mon VPS SSD à 45 € de l'année chez OVH. 😉

Installer un serveur web sur RPi pour Joomla!

Maintenant qu'on a tout ce qu'il nous faut, let's go !

Préparons déjà la carte SD. Je télécharge la dernière image de Raspbian chez Raspberry Pi, ou la dernière image d'Ubuntu Server chez Canonical. Ensuite, j'utilise Rufus pour la recopier sur la carte SD. Son fonctionnement est assez simple pour se passer d'explications, je pense, sélectionner le périphérique à utiliser, choisir l'image à écrire avec le bouton SELECTION, et DEMARRER. 😉

Ensuite, montage du RPi dans le boîtier. Je renvoie chacun à sa notice, mais ça ne devrait pas être très compliqué. Mon Argon One nécessitait plus de manipulations que le boîtier officiel, mais il est autrement plus stylé. 😆 J'insère la carte SD précédemment préparée dans le RPi, je branche la sortie HDMI à l'écran, connecte le clavier, et c'est parti, le RPi démarre sur Raspbian.

Le nom et le mot de passe de l'utilisateur par défaut sont pi / raspberry pour Raspbian, ubuntu / ubuntu pour Ubuntu Server. Ce dernier demande de changer le mot de passe par défaut à la première connexion (attention clavier anglais US par défaut !).

Remarque sur les commandes utilisées dans ce document : j'ai l'habitude de me connecter en root sur mes serveurs, mais si ce n'est pas votre cas, il faut utiliser sudo devant les commandes qui requièrent un accès administrateur. On peut changer le mot de passe root par la commande suivante (sudo vous demandera le mot de passe de votre compte) :

sudo passwd root

Vous pouvez alors vous connecter en root avec la commande su (le mot de passe de l'utilisateur root vous sera demandé).

Raspbian

Première chose à faire, passer par raspi-config. C'est l'utilitaire en mode texte de configuration des options de Raspbian. Première chose à faire, changer le mot de passe de pi, par Change User Password. Précautions d'usage bien sûr, pas trivial, pas trop court, tout ça.

J'affecte après une adresse IP fixe à mon serveur en passant dans Network Options (c'est plus pratique pour un serveur), je mets le clavier en azerty, je change le fuseau horaire dans Localisation Options, et surtout, j'active le serveur SSH dans Interfacing Options. Sans quoi l'intérêt du RPi s'effondre...

Important, utiliser Expand Filesystem dans Advanced Options pour agrandir la partition du Raspbian pour occuper tout l'espace de la carte SD. De base elle fait 8 Go, je crois ? 

Notez que Raspbian utilise maintenant dhcpcd pour les interfaces réseau, pour fixer une adresse sur une interface manuellement, il faut éditer le fichier /etc/dhcpcd.conf :

interface eth0
static ip_address=192.168.1.15/24
static routers=192.168.1.1
static domain_name_servers=9.9.9.9,8.8.8.8,192.168.1.1

interface <interface> : L'interface réseau à considérer. On peut lister les interfaces réseaux par la commande ipconfig -a. Sur un Raspberry Pi Model 3 on devrait avoir lo0, eth0 et wlan0.

static ip_address=<adresse> : L'adresse à utiliser.

static routers=<adresse> : L'adresse de la passerelle.

static domain_name_servers=<adresse>,<adresse>, ... : Les adresses serveurs de noms à utiliser.

Ubuntu Server

Sur Ubuntu Server, pas de script sympa pour configurer tout ça, on fait à la main. 😐 Mais Canonical a une chouette page qui décrit tout le processus d'installation.

Déjà, le clavier est en anglais US, on peut choisir un autre clavier par la commande suivante :

dpkg-reconfigure keyboard-configuration

Il se peut que dpkg se plaigne de fichiers verrouillés, c'est probablement à cause des mises à jour automatiques, qui peuvent prendre du temps au premier démarrage. Surveillez les processus actifs par ps ax.

On va aussi préciser le fuseau horaire (c'est pratique quand on regarde la date des fichiers) :

dpkg-reconfigure tzdata

Enfin, on va fixer une adresse IP (pour ne pas à avoir à chercher quelle est l'adresse de notre serveur...). Ubuntu utilise maintenant Netplan, qui par défaut utilise NetworkManager pour affecter des adresses aux interfaces par DHCP.

On va créer le fichier 01-netcfg.yaml (qui n'existe pas par défaut) :

network:
    version: 2
    renderer: networkd
    ethernets:
        eth0:
            dhcp4: no
            dhcp6: yes
            addresses: [192.168.1.15/24]
            gateway4: 192.168.1.1
            nameservers:
                addresses: [9.9.9.9,8.8.8.8,192.168.1.1]

Pour fixer une IP, on utilise networkd et on lui donne les paramètres de l'interface eth0 (On peut lister les interfaces réseaux par la commande ip a. Sur un Raspberry Pi Model 3 on devrait avoir lo0, eth0 et wlan0).

dhcp4: <yes/no> : Utiliser ou non DCHP pour les adresses IPV4. Dans notre cas, no.
dhcp6: <yes/no> : Utiliser ou non DCHP pour les adresses IPV6. Personnellement je me repose sur l'autoconfiguration pour IPV6 chez moi.
addresses: [<adresse>,<adresse>, ...] : La ou les adresses IP à utiliser.
gateway4: <adresse> : L'adresse de la passerelle.
nameservers: addresses: [<adresse>,<adresse>, ...] : Les adresses des serveurs de noms à utiliser.

Attention, les fichiers yaml de Netplan doivent être correctement indentés !

Ubuntu Server active SSH par défaut et étend la partition racine si elle n'occupe pas tout l'espace disque.

Canonical a un motd dynamique, géré par les scripts dans /etc/update-motd.d. Pour ma part je désactive (chmod -x) 10-help-text, je le sais déjà, et 50-motd-news, pas vraiment besoin de pubs quand je me connecte. Il n'y a pas de fichier /etc/motd, mais s'il est créé, son contenu sera affiché après le motd dynamique.

Dernière petite chose pour Ubuntu, l'image ne vient pas avec les utilitaires VideoCore fournis avec les images Raspbian. Il faut ajouter le repository ppa:ubuntu-raspi2/ppa :

add-apt-repository ppa:ubuntu-raspi2/pp

Et ajouter les paquets correspondant :

apt install libraspberrypi-bin libraspberrypi-dev

Beaucoup de ces paquets s'attendent que l'utilisateur soit un membre des groupes suivants :

groupadd -f --system gpio
groupadd -f --system i2c
groupadd -f --system input
groupadd -f --system spi

Enfin, les utilitaires VideoCore sont placés dans /opt/vc/bin pour Raspbian, alors qu'Ubuntu les installe dans /usr. On va faire un alias pour que les utilitaires ne soient pas perdus :

ln -s /usr /opt/vc

Webmin

Ensuite, j'installe Webmin. C'est un outil d'administration fantastique, ça évite de se galérer à la ligne de commande pour tout un tas de truc. Je colle les lignes suivantes dans /etc/apt/sources.list.d/webmin.list :

deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib

Il faut ajouter la signature de l'auteur à apt :

wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.asc

Je lance un apt update, un apt install webmin, et hop on est prêt à s'y connecter (en root par défaut). Là je change le nom de l'utilisateur pi, et j'en profite pour aller régler l'heure du système via NTP. 

Apache

J'installe Apache, par apt install apache2, ce qui me ramène un Apache 2.4. Je ramène mes fichiers de conf existants, et ça roule. Sinon, il faut créer un site virtuel. Dans Webmin c'est facile (Servers / Apache Webserver / Create virtual host). Mais en fait c'est pas facile de savoir quoi mettre en conf... Joomla! a une doc (un peu succinte) ici, Apache a une doc exhastive sur les serveurs virtuels, Et Cipherli.st donne des exemples de directives pour utiliser les algos de cryptage sécurisés. En mixant bien le tout, j'arrive à une définition pas mal. 😉

PHP

Pour PHP,Ubuntu est cutting edge, propose donc la 7.3 directement. Mais le dépôt Raspbian par défaut ne propose que PHP 7.0 (dernière en date 7.3). J'aime toujours le bleeding edge, donc je sors mon dépôt alternatif pour PHP. 😉 Je crée le fichier /etc/apt/sources.list.d/php.list :

deb https://packages.sury.org/php/ stretch main

Mais ce con de Debian/Raspbian ne sait pas récupérer à partir de sources en https... Il faut installer les paquets idoine :

apt install apt-transport-https lsb-release ca-certificates

Et pour ne pas que apt ne se plaigne qu'il ne connaît pas cette source, il faut installer sa signature :

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

Maintenant je peux installer PHP et les modules nécessaires à Joomla! (le minimum nécessaire) :

apt install php7.3 php7.3-fpm php7.3-mbstring php7.3-mysql php7.3-xml php7.3-zip

Ne pas oublier de revoir son php.ini, en suivant ce genre de doc.

MariaDB

J'installe ensuite MariaDB. En version 10.3. Alors qu'il y a une 10.4 stable. 😢 Tant pis. De toute façon vu l'utilisation basique de la base par Joomla! (ou les autres CMS), cela n'a que peu d'importance :

apt install mariadb-server

Là le serveur MariaDB est accessible en local avec les identifiants root. Ça mérite d'être changé. Dans Webmin par exemple. 😉

Joomla!

Dans mon cas actuel, je récupère un site Joomla! existant sur un nouveau serveur. Donc je me contente de copier le répertoire, corriger les droits au besoin, et restaurer la base SQL. Dans le cas d'une nouvelle installation, je renvoie vers la très bonne doc de Joomla!.

Voilà, j'ai maintenant un serveur Joomla! opérationnel sur mon RPi ! Techniquement pour qu'il soit réellement utilisable, il faut encore ouvrir des ports sur son routeur, mais ce n'est pas l'objet de cette doc. Il y en a plein le net, faut chercher. 😉

Sécurisation (de base)

SSL

Donc le serveur fonctionne à présent, mais il faut le sécuriser un peu. Déjà, mettre en place une connexion SSL pour le serveur web. Avant, ça coûtait cher. Maintenant, avec Let's Encrypt, c'est gratuit et quasi-automatique

iptables

Ensuite, il ne faut pas accepter n'importe quelle connexion de n'importe où. En ayant un Linux, solution simple, iptables. Pareil, trop vaste sujet pour cette doc sans prétention, il y a un tuto très bien là. J'ai comme toujours mon fichier déjà fait. 😆 Attention à ne pas oublier iptables-persistent :

apt install iptables-persistent

fail2ban

C'est bien de filtrer les connexions, mais il y a des accès indésirables sur les connexions autorisées, comme les tentatives force brute... fail2ban est là pour ça. Il scrute les logs pour repérer les échecs d'authentification et créée une règle iptables pour bloquer l'adresse IP de l'attaquant potentiel. C'est aussi un trop vaste sujet pour ma doc de serveur RPi à pas cher. Le wiki Ubuntu a une doc pour les services courants (dont SSH), et cette page a un complément pour Joomla!.

Envoi de mail

Mon serveur étant hébergé sur une ligne domestique, l'envoi de mail est problématique, la plupart des services de messagerie refusant les connexions douteuses potentiellement sources de spams... Donc j'envoie les messages via GMail et Postfix. Un tuto bien fait m'a appris comment. 😉 J'ai choisi Internet with smarthost pour ma part, j'ignore la différence avec Internet site...

Boot USB

Pour la dernière partie de cette doc (qui fait plus de liens vers d'autres sites qu'expliquer des choses 😑), je remplace ma carte SD par un SSD USB, le RPi pouvant démarrer sur un périphérique externe. Framboise 314 explique très bien la manipulation. 😉 En résumé (pour RPi 3), il faut mettre program_usb_boot_mode=1 dans le fichier /boot/config.txt pour Raspbian, /boot/firmware/usercfg.txt pour Ubuntu (accessible même sous Windows en connectant la carte telle quelle - Partiton system-boot pour Ubuntu) et démarrer avec un Raspbian postérieur à 2017-04-10.

Pour Ubuntu, il reste une petite étape. Le bootloader par défaut est configuré en dur pour démarrer à partir de la certe SD, ce qui fait que ça bloque le démarrage. Mais la page de wiki d'Ubuntu recommande de changer ça. Il faut remplacer la ligne :

kernel=uboot_rpi_3.bin (pour un RPi 3, il y a plusieurs sections correspondant aux divers modèles)

par :

kernel=vmlinuz
initramfs initrd.img followkernel

Ubuntu a un fichier de surcharge de config.txt, usercfg.txt, donc on aura :

# Place "config.txt" changes (dtparam, dtoverlay, disable_overscan, etc.) in
# this file. Please refer to the README file for a description of the various
# configuration files on the boot partition.

[pi4]
kernel=vmlinuz
initramfs initrd.img followkernel

[pi2]
kernel=vmlinuz
initramfs initrd.img followkernel

[pi3]
kernel=vmlinuz
initramfs initrd.img followkernel

Et voilou, le RPi démarre sur le disque USB ! 😉

Maintenant que le RPi est préparé, il faut copier la SD sur le disque externe. Moi j'ai un SSD à pas cher dans un boîtier USB3. Mais la carte SD contenant Raspbian est multi-partitionnée et c'est la galère si on veut copier ça à la main. C'est là que je fais appel à Win32DiskImager (oui j'utilise Windows 😉). Notice exprès pour RPi ici.

Chez moi ça a pris quelques heures à copier... Je ne sais quoi blâmer, la carte SD, le SSD ou le disque qui a servi de tampon. Et curieusement la même opération pour Ubuntu a pris juste 30 min... 🤔 Mais bon, tout est bien arrivé à destination, et le RPi démarre sans problème sur le SSD !

J'ai relancé raspi-config pour agrandir à nouveau la partition, mon SSD faisant 120 Go, mais il me dit qu'il peut pas, vu que ce n'est pas une carte SD... 😕 Je vois pas le problème en soi, c'est pas le type de media qui détermine le type de partition ou comment la gérer, mais bon...

Heureusement il existe encore un bon tuto en ligne. 😉 C'est une question de fdisk et parted, mais j'ai la flemme de lire les manpages juste pour m'en servir une fois... 😆

Encore une fois, Ubuntu m'étonne en bien, il a redimensionné la partion seul sans manipulation supplémentaire. 😉

Economie d'énergie

Comme je le disais, l'Argon One consomme juste assez de courant pour déclancher l'alerte de sous-voltage... J'ai donc la mort dans l'âme désactivé le WiFi, le Bluetooth, la carte son et la sortie HDMI (en fait c'est juste le WiFi qui me dérange, ça faisait une interface de secours...).

Pour cela, je vais utiliser principalement /boot/config.txt pour Raspbian, /boot/firmware/usercfg.txt pour Ubuntu. C'est pratique, on ne touche pas à l'OS, c'est un soft-switch.

Pour désactiver la carte son :

dtparam=audio=off

Pour désactiver le WiFi et le Bluetooth :

dtoverlay=pi3-disable-wifi
dtoverlay=pi3-disable-bt

Pour le HDMI, pas de soft switch, on passe par /etc/rc.local :

/usr/bin/tvservice -o

A ajouter avant exit 0 (ou tout endroit approprié dans le fichier 😉).

J'ai donc un beau serveur Joomla! RPi, raisonnablement sécurisé, qui démarre sur un SSD externe, et qui ne consomme plus autant de courant ! 👍

Wi-Fi

Bon à postériori, ayant acheté une meilleure alimentation pour mon RPi et ayant vu qu'il survivait très bien aux sous-voltages, j'ai réactivé le Wi-Fi. Et ça m'a été utile le jour où la configuration réseau pour eth0 a sauté sans raison, j'ai pu me connecter via wlan0.

Raspbian

Pour Raspbian, on passe par raspi-config. Network Options / Wi-fi permet de renseigner SSID et mot de passe. Et ça marche tout seul ! On peut également éditer le fichier /etc/wpa_supplicant/wpa_supplicant.conf pour définir plus d'options, comme plusieurs réseaux Wi-Fi :

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=FR

network={
ssid="one"
scan_ssid=1
psk="testingPassword"
priority=1
id_str="one"
}

network={
ssid="testing"
psk="testingPassword"
priority=1
id_str="two"
}

Depuis Debian 10 (Buster), le fichier /etc/wpa_supplicant/wpa_supplicant.conf doit contenir les lignes suivantes :

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=FR 

country=<code pays> doit être correctement défini pour utiliser les bonnes fréquences de canaux 5 GHz.

ssid="<nom réseau>" : Le SSID du réseau à rejoindre.

scan_ssid=1 : Si le réseau est masqué, ce paramètre permet de s'y connecter quand même.

psk="<mot de passe>" : Mot de passe du réseau.

priority=<nombre> : En cas de réseaux multiples, définit la priorité de chacun. Par défaut 0, et on se connecte en priorité au plus grand nombre.

id_str="<nom court>" : Permet de nommer une connexion Wi-Fi, pour pouvoir l'activer simplement par ifup <nom court>.

Ubuntu Server

Ubuntu propose NetworkManager, un utilitaire de gestion de réseaux (doc complète là). On l'installe par la commande suivante :

apt install network-manager

On peut alors utiliser la commande nmcli.

nmcli d permet de lister les interfaces réseau disponibles :

# nmcli d
DEVICE TYPE STATE CONNECTION
wlan0 wifi disconnected --
eth0 ethernet unmanaged --
lo loopback unmanaged --
p2p-dev-wlan0 wifi-p2p unmanaged --

Ici il n'y a que wlan0 qui est configurable par NetworkManager, vu qu'on a fixé eth0.

Vérifions que le Wi-Fi est activé par nmcli r :

# nmcli r
WIFI-HW WIFI WWAN-HW WWAN
enabled enabled enabled enabled

C'est OK ! Si jamais WIFI est marqué disabled, il suffit de le rallumer par nmcli r wifi on.

Cherchons les réseaux à portée par nmcli d wifi list :

# nmcli d wifi list
IN-USE  SSID MODE CHAN RATE SIGNAL BARS SECURITY
        -- Infra 11 130 Mbit/s 85 ▂▄▆█ WPA2
CELESTIALBEING Infra 6 130 Mbit/s 80 ▂▄▆_ WPA1 WPA2
CELESTIALBEING-5G Infra 44 270 Mbit/s 80 ▂▄▆_ WPA1 WPA2
CELESTIALBEING Infra 2 270 Mbit/s 69 ▂▄▆_ WPA2

On va se connecter à CELESTIALBEING-5G :

# nmcli d wifi connect "CELESTIALBEING-5G" password "aeolialives!!!"
Device 'wlan0' successfully activated with '12345678-9abc-def0-1234-56789abcdf01'.

La commande se décompose ainsi :

nmcli d (d pour devices) wifi connect "<SSID à rejoindre>" password "<mot de passe du réseau>"

Ne pas oublier les guillemets si le SSID et/ou le mot de passe comportent des caractères spéciaux susceptibles d'être interprêtés comme des commandes !

On peut voir les réseaux connectés par nmcli c (si DEVICE est égal à --, c'est qu'il n'est pas connecté !) :

# nmcli c
NAME UUID TYPE DEVICE
CELESTIALBEING-5G 12345678-9abc-def0-1234-56789abcdf01 wifi wlan0

Et ip a me donne les détails de la connexion :

# ip a
[. . .]
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 01:23:45:67:89:ab brd ff:ff:ff:ff:ff:ff
inet 192.168.1.180/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
valid_lft 12862sec preferred_lft 12862sec

Il m'est arrivé d'avoir une erreur comme celle-là :

# nmcli d wifi connect "CELESTIALBEING-5G" password "aeolialives!!!"
Error: Connection activation failed: (7) Secrets were required, but not provided.

Pourtant le mot de passe était bon, et le réseau Wi-Fi est bien listé dans les connexions :

# nmcli c
NAME             UUID TYPE DEVICE
CELESTIALBEING-5G 12345678-9abc-def0-1234-56789abcdf01 wifi --

Je relance la connexion :

# nmcli c up "CELESTIALBEING-5G"
Passwords or encryption keys are required to access the wireless network 'CELESTIALBEING-5G'.
Warning: password for '802-11-wireless-security.psk' not given in 'passwd-file' and nmcli cannot ask without '--ask' option.
Error: Connection activation failed: Secrets were required, but not provided
Hint: use 'journalctl -xe NM_CONNECTION=12345678-9abc-def0-1234-56789abcdf01 + NM_DEVICE=wlan0' to get more details.

Apparemment le mot de passe ne s'est pas enregistré correctement, on va lui fournir avec le paramètre --ask, comme suggéré.

# nmcli c up "CELESTIALBEING-5G" --ask
Passwords or encryption keys are required to access the wireless network 'CELESTIALBEING-5G'.
Password (802-11-wireless-security.psk): •••••••••••••••
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)

 Yes ça marche ! 😁 Et en étant régi par NetworkManager, le Wi-Fi se reconnecte au réseau au redémarrage. 😉

Pour ajouter un réseau masqué ou pré-enregistrer un réseau :

# nmcli c add type wifi con-name "ALAWS" ifname wlan0 ssid "ALAWS-GN-X"
# nmcli c modify "ALAWS" wifi-sec.key-mgmt wpa-psk wifi-sec.psk "mementomori"

Les commandes se décomposent ainsi :

nmcli c add type wifi con-name "<nom court>" ifname wlan0 ssid "<ssid>"

nmcli c modify "<nom court>" wifi-sec.key-mgmt wpa-psk wifi-sec.psk "<mot de passe>"

Voilà, je crois que j'ai fait le tour. 😉