2020-09-05
md
Ubuntu 20.04 Server: Wi-Fi, Snap, etc.
Il faut lire le f***u manuel (RTFM)!

Un ordinateur de petit format, un HP Pavilion, se morfondait dans un coin en grand besoin d'un nouveau but dans la vie. Pour preuve du fait que l'ordinateur est plutôt ancien, disons simplement qu'il dispose d'un processeur AMD Athlon 64 X2 et qu'il a est livré avec Windows Vista Media Center (32 bits) préinstallé. J'ai décidé qu'il pourrait bien être un système de sauvegarde à distance étêté (sans moniteur et sans clavier). À cette fin, son petit disque dur a été remplacé par un Seagate de 2 To libéré d'un boîtier USB 2.0. La carte d'extension du syntonisateur télé a été retirée. De plus, le lecteur de CD-ROM pour être éventuellement remplacé par un deuxième disque dur. Il ne restait plus qu'à installer une distribution de Linux serveur et c'est là qu'un problème s'est manifesté. Je n'ai pas pu faire fonctionner l'interface réseau Wi-Fi. Comme le dit le sous-titre, c'était de ma faute, la solution était dans le manuel.

Table of Contents

  1. Quelle distribution serveur ?
  2. Installation et configuration initiales
  3. Installing de l'interface Wi-Fi
  4. Suppression de Snap
  5. Désactivation des mises à niveau automatiques
  6. Désactivation de CloudInit
  7. Conclusion

Quelle distribution serveur ? toc

Bien que j'aie installé diverses distributions « légères » de Linux sur un certain nombre d'ordinateurs monocarte basés sur l'architecture ARM ces dernières années, mon expérience avec les systèmes AMD64 est beaucoup plus limitée. L'installation de Debian sur un vieil ordinateur Dell il y a quelques mois était relativement simple (voir Scripts de sauvegarde de Domoticz), même si la légèreté système fut surprenante. j'ai installé cette même distribution dite « non libre » (non-free) et constaté que l'installateur ait trouvé les interfaces réseau Ethernet et Wi-Fi et pouvait procéder à l'installation de Debian « standard » avec l'une ou l'autre de ces interfaces. Cependant, je n'ai pas pu faire fonctionner la carte Wi-Fi avec l'image installée.

La tentative suivante a été d'installer Mint 20 Mate. Cela s'est bien passé et le Wi-Fi a fonctionné dans cette distribution. Cependant, installer une interface utilisateur graphique complète qui ne serait pas utilisée uniquement pour activer la carte Wi-Fi n'était pas très satisfaisant. Bien sûr, il aurait été possible de supprimer l'interface graphique et de se retrouver avec une distribution plus légère.

Mon troisième essai a été d'installer Ubuntu Server. Son installateur n'a pas trouvé l'interface Wi-Fi et encore une fois, je n'ai pas pu installer la carte Wi-Fi une fois que le système d'exploitation fonctionnait. J'ai également remarqué que Snap était installé et qu'il se trouve que j'ai un préjugé probablement injustifié contre ce gestionnaire de paquets.

À ce moment-là, il y a quelques semaines, j'ai manqué de temps et j'ai dû abandonner le projet. Hier, j'ai pu y revenir et j'ai réussi à mettre en place le Wi-Fi dans Ubuntu Server et à modifier ce dernier à mon goût.

Installation et configuration initiales toc

La première chose que j'ai faite après le démarrage initial a été de modifier le fichier sudoers pour réduire le nombre de fois où il est nécessaire de saisir le mot de passe utilisateur avec la commande sudo.

michel@hpav:~$ sudo visudo [sudo] password for michel: ****** not echoed to screen

... # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # Default user privileges %michel ALL=(ALL:ALL) NOPASSWD: ALL # See sudoers(5) for more information on "#include" directives: ...

Le seul membre du groupe michel étant l'utilisateur michel, le préfixe de pourcentage (%) n'est donc pas vraiment nécessaire. Bien sûr, d'autres devront s'adapter et utiliser le bon utilisateur ou groupe s'ils font la même chose. Ensuite, comme d'habitude, le système doit être mis à jour puis mis à niveau. Bien sûr, il est nécessaire d'avoir une connexion réseau pour cela mais heureusement, Linux n'a généralement aucun problème à mettre en place des interfaces Ethernet filaires.

michel@hpav:~$ sudo apt update && sudo apt upgrade -y Hit:1 http://ca.archive.ubuntu.com/ubuntu focal InRelease ... The following package was automatically installed and is no longer required: squashfs-tools Use 'sudo apt autoremove' to remove it. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. michel@hpav:~$ sudo apt autoremove Reading package lists... Done ... Removing squashfs-tools (1:4.4-1) ... Processing triggers for man-db (2.9.1-1) ...
L'étape suivante consistait à réparer une erreur, car je n'ai pas inclus le serveur SSH lors de l'installation d'Ubuntu alors que je pense qu'il y avait la possibilité de le faire. J'ai d'abord vérifié que le prérequis était installé, puis il était simple d'ajouter le serveur puis de vérifier le tout.

michel@hpav:~$ ssh -V OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f 31 Mar 2020 michel@hpav:~$ sudo apt-get install openssh-server ... michel@hpav:~$ sudo systemctl status sshd ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-09-04 20:21:15 UTC; 6min ago Docs: man:sshd(8) man:sshd_config(5) Process: 728 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) Main PID: 729 (sshd) Tasks: 1 (limit: 4391) Memory: 4.4M CGroup: /system.slice/ssh.service └─729 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups Sep 04 20:21:15 hpav systemd[1]: Starting OpenBSD Secure Shell server... Sep 04 20:21:15 hpav sshd[729]: Server listening on 0.0.0.0 port 22. Sep 04 20:21:15 hpav sshd[729]: Server listening on :: port 22. Sep 04 20:21:15 hpav systemd[1]: Started OpenBSD Secure Shell server. Sep 04 20:22:38 hpav sshd[889]: Accepted password for michel from 192.168.1.126 port 54664 ssh2 Sep 04 20:22:38 hpav sshd[889]: pam_unix(sshd:session): session opened for user michel by (uid=0)

Comme on peut le voir, j'ai ouvert une session SSH environ une minute après le démarrage du serveur. Tout a été fait dans les sessions SSH à partir de là.

Parce que ce serveur sera déplacé vers un autre réseau dont je sais qu'il utilise un sous-réseau (subnet) différent, j'ai délibérément continué avec une adresse IP dynamique qui n'est pas la meilleure solution pour un serveur. Pour faciliter la recherche de l'adresse, en particulier lorsque le système sera utilisé sans clavier et sans moniteur, j'ai installé le service avahi-daemonet de type ZeroConfiguration puis j'ai modifié son fichier de configuration afin qu'il annonce le serveur comme un système bureau.

michel@hpav:~$ apt-cache policy avahi-daemon avahi-daemon: Installed: (none) Candidate: 0.7-4ubuntu7 Version table: 0.7-4ubuntu7 500 500 http://ca.archive.ubuntu.com/ubuntu focal/main amd64 Packages michel@hpav:~$ sudo apt install avahi-daemon -y Reading package lists... Done ... Need to get 223 kB of archives. After this operation, 991 kB of additional disk space will be used. ...

michel@hpav:~$ sudo nano /etc/avahi/avahi-daemon.conf
... [publish] ... publish-workstation=yes

michel@hpav:~$ sudo systemctl restart avahi-daemon

En vérifiant sur mon bureau, j'ai trouvé le serveur avec le navigateur Zeronconf.

michel@hpav:~$ avahi-browse --all + wlp3s0 IPv6 hpav [00:2b:83:28:eb:17] Workstation local + wlp3s0 IPv4 hpav [00:2b:83:28:eb:17] Workstation local + enp4s0 IPv6 hpav [00:2b:83:28:eb:17] Workstation local + enp4s0 IPv4 hpav [00:2b:83:28:eb:17] Workstation local ...

Le fuseau horaire n'est pas défini comme indiqué par l'lutilitaire timedatect

michel@hpav:~$ timedatectl Local time: Sat 2020-09-05 23:08:31 UTC Universal time: Sat 2020-09-05 23:08:31 UTC RTC time: Sat 2020-09-05 23:08:31 Time zone: Etc/UTC (UTC, +0000) System clock synchronized: yes NTP service: active RTC in local TZ: no

Puisque je sais que la ville voisine de Halifax (N.-É.) se trouve dans la base de données des fuseaux horaires, il était facile de confirmer le nom correct du fuseau horaire local en vue de le définir avec le même utilitaire.

michel@hpav:~$ timedatectl list-timezones | grep Halifax America/Halifax michel@hpav:~$ sudo timedatectl set-timezone America/Halifax

Un autre appel de l'utilitaire a montré que la dernière étape était réussie.

michel@hpav:~$ timedatectl Local time: Sat 2020-09-05 20:09:01 ADT Universal time: Sat 2020-09-05 23:09:01 UTC RTC time: Sat 2020-09-05 23:09:01 Time zone: America/Halifax (ADT, -0300) System clock synchronized: yes NTP service: active RTC in local TZ: no

L'étape suivante consistait à faire fonctionner la carte réseau Wi-Fi. Encore une fois, il serait préférerable qu'un serveur soit connecté au réseau local avec un câble Ethernet, mais cette machine est destinée à vivre au sous-sol d'un parent où il n'y a aucun espoir d'y acheminer un câble du routeur situé à l'étage.

Installing the Wi-Fi Interface toc

En l'occurrence, Ubuntu a non seulement reconnu l'interface Wi-Fi, mais a également installé les pilotes.

michel@hpav:~$ lsusb ... Bus 001 Device 003: ID 15a9:0004 Gemtek WUBR-177G [Ralink RT2571W] ... michel@hpav:~$ sudo lshw -C Network *-usb:1 DISABLED description: Wireless interface product: 802.11 bg WLAN vendor: Ralink physical id: 9 bus info: usb@1:9 logical name: wlx00e533bf124a version: 0.01 serial: 00:E5:33:BF:12:4A capabilities: usb-2.00 ethernet physical wireless configuration: broadcast=yes driver=rt73usb driverversion=5.4.0-45-generic firmware=N/A link=no maxpower=300mA multicast=yes speed=480Mbit/s wireless=IEEE 802.11 michel@hpav:~$ lsmod | grep rt rt73usb 36864 0 rt2x00usb 24576 1 rt73usb rt2x00lib 61440 2 rt73usb,rt2x00usb mac80211 843776 2 rt2x00lib,rt2x00usb cfg80211 704512 2 rt2x00lib,mac80211 crc_itu_t 16384 2 rt73usb,firewire_core

Le paquet NetManager n'est pas installé, j'ai donc supposé que l'ajout de paramètres dans le fichier de configuration /etc/network/interfaces ou /etc/dhcp/dhcpcd.conf et l'ajout d'un fichier de configuration pour WPA Supplicant avec les informations d'identification Wi-Fi devraient faire l'affaire, tout comme cela a été le cas dans de nombreuses installations de distributions basées sur Debian sur des ordinateurs monocarte. Pour faire court, je n'y arrivais pas, mais j'ai finalement atterri sur un article, Ubuntu 20.04: Connect to WiFi from command line de Lubos Rendek (13 mai 2020), qui m'a mis sur la bonne voie. Il s'avère que depuis un certain temps,Ubuntu utilise un autre outil de configuration réseau: Netplan. Après avoir lu une partie de la documentation sur ce site et le billet How to Use the Netplan Network Configuration Tool on Linux de Jack Wallen (7 septembre 2018), j'ai créé le netplanfichier de configuration suivant.

michel@hpav:~$ cat /etc/netplan/00-installer-config.yaml # This is the network config written by 'subiquity' network: version: 2 renderer: networkd ethernets: enp0s7: dhcp4: true optional: true wifis: wlx00e533bf124a: dhcp4: true optional: true access-points: "my_wifi_ssid_in_quotes": password: "my_wifi_psk_in_quotes"

Notez que subiquity est l'installeur d'Ubuntu, et conséquemment, le fichier .yaml ne sera pas remplacé. La section ethernets avait été créée par l'installateur, j'y ai ajouté la ligne optional: true car cela ne ferait pas de suspendre le processus de démarrage en attendant une connexion Ethernet qui à la fin ne sera pas utilisée. J'avais trouvé le nom de l'interface de la carte Wi-Fi, wlx001644ac8279, avec la commande lshw ci-dessus, mais il peut être trouvé avec la commande ip a également.

Après un redémarrage, on constate que la carte Wi-Fi n'était pas prise en charge.

michel@hpav:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:2b:83:28:eb:17 brd ff:ff:ff:ff:ff:ff inet 192.168.1.133/24 brd 192.168.1.255 scope global dynamic enp0s7 ... 3: wlx00e533bf124a: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether 00:E5:33:BF:12:4A brd ff:ff:ff:ff:ff:ff

Heureusement, le journal système contenait des informations pertinentes :

michel@hpav:~$ journalctl --no-pager | grep netplan ... Sep 04 21:02:42 hpav systemd[1]: Started WPA supplicant for netplan wlx00e533bf124a. Sep 04 21:02:42 hpav systemd[559]: netplan-wpa-wlx00e533bf124a.service: Failed to execute command: No such file or directory Sep 04 21:02:42 hpav systemd[559]: netplan-wpa-wlx00e533bf124a.service: Failed at step EXEC spawning /sbin/wpa_supplicant: No such file or directory ...

En fait, j'ai trouvé les informations d'une autre manière, d'abord en affichant les services défaillants; il y en avait un, puis en vérifiant son statut.

michel@hpav:~$ sudo systemctl --no-pager | grep fail ● netplan-wpa-wlx00e533bf124a.service loaded failed failed WPA supplicant for netplan wlx00e533bf124a michel@hpav:~$ sudo systemctl status netplan-wpa-wlx00e533bf124a.service ● netplan-wpa-wlx00e533bf124a.service - WPA supplicant for netplan wlx00e533bf124a Loaded: loaded (/run/systemd/system/netplan-wpa-wlx00e533bf124a.service; enabled-runtime; vendor preset: enabled) Active: failed (Result: exit-code) since Fri 2020-09-04 22:27:11 UTC; 5min ago Main PID: 568 (code=exited, status=203/EXEC) Sep 04 22:27:11 hpav systemd[1]: Started WPA supplicant for netplan wlx00e533bf124a. Sep 04 22:27:11 hpav systemd[568]: netplan-wpa-wlx00e533bf124a.service: Failed to execute command: No such file or directory Sep 04 22:27:11 hpav systemd[568]: netplan-wpa-wlx00e533bf124a.service: Failed at step EXEC spawning /sbin/wpa_supplicant: No such file or directory Sep 04 22:27:11 hpav systemd[1]: netplan-wpa-wlx00e533bf124a.service: Main process exited, code=exited, status=203/EXEC Sep 04 22:27:11 hpav systemd[1]: netplan-wpa-wlx00e533bf124a.service: Failed with result 'exit-code'.

J'ai vérifié que le paquet, appelé wpasupplicant, qui contient wpa_supplicant n'était pas installé, puis je l'ai installé de la manière habituelle.

michel@hpav:~$ apt-cache policy wpasupplicant wpasupplicant: Installed: (none) Candidate: 2:2.9-1ubuntu4.1 Version table: 2:2.9-1ubuntu4.1 500 500 http://ca.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages 2:2.9-1ubuntu4 500 500 http://ca.archive.ubuntu.com/ubuntu focal/main amd64 Packages michel@hpav:~$ sudo apt install wpasupplicant Reading package lists... Done ... Setting up wpasupplicant (2:2.9-1ubuntu4.1) ...

Après un redémarrage, l'écran de bienvenue a montré que tout fonctionnait.

Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-45-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Fri 04 Sep 2020 10:39:19 PM UTC System load: 1.09 Usage of /: 0.3% of 1.79TB Memory usage: 4% Swap usage: 0% Temperature: 40.0 C Processes: 124 Users logged in: 0 IPv4 address for enp0s7: 192.168.1.133 IPv6 address for enp0s7: fd00:fc:8d4f:71b2:13d:82aa:18ecb:de95 IPv6 address for enp0s7: 2607:fea8:f1a0:d1d8:13d:82aa:18ecb:de95 IPv4 address for wlx00e533bf124a: 192.168.1.134 IPv6 address for wlx00e533bf124a: 2607:fea8:f1a0:d1d8::d IPv6 address for wlx00e533bf124a: fd00:fc:8d4f:71b2:a79:33bf:1e9a:124a IPv6 address for wlx00e533bf124a: 2607:fea8:f1a0:d1d8:a79:33bf:1e9a:124a

Si j'avais lu la page de manuel pour netplan, j'aurais réalisé immédiatement que WPA Supplicant devait être installé.

michel@hpav:~$ man netplan ... Properties for device type wifis: Note that systemd-networkd does not natively support wifi, so you need wpasupplicant installed if you let the networkd renderer handle wifi.

In conclusion, installation of a Wi-Fi network interface in Ubuntu Server 20.04 is not complicated at all:

  1. Make sure that the hardware driver is loaded.
  2. Install the wpasupplicant package.
  3. Add the needed Wi-Fi credentials to the the /etc/netplan/xxx.yaml file.

En somme, l'installation d'une interface réseau Wi-Fi dans Ubuntu Server 20.04 n'est pas du tout compliquée:

  1. Assurez-vous que le pilote matériel est chargé.
  2. Installez le paquet wpasupplicant.
  3. Ajoutez les informations d'identification Wi-Fi nécessaires au fichier /etc/netplan/xxx.yaml.

Curieux, j'ai vérifié comment l'interface Wi-Fi est gérée sur mon bureau exécutant Mint 19 qui est dérivé d'Ubuntu.

michel@hp:~$ uname -a Linux hp 5.4.0-42-generic #46~18.04.1-Ubuntu SMP Fri Jul 10 07:21:24 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux michel@hp:~$ cat /etc/netplan/1-network-manager-all.yaml # Let NetworkManager manage all devices on this system network: version: 2 renderer: NetworkManager

J'apprécie le fait qu'Ubuntu Server utilise le contrôleur de configuration intégré systemd-networkd au lieu d'installer un autre paquet. Cependant, il y a certains aspects d'Ubuntu Server que je voulais changer.

Suppression de Snap toc

Snap de Canonical est un gestionnaire de paquet qui rivalise avec Flatpak et AppImage. Je pense que son étroite intégration au système système (essayez la commande df -h pour voir ce que je veux dire) va à contresens. De plus, j'ai été déçu par les premiers paquet Snap dans Ubuntu 18.04 ce qui fut l'une des raisons, mais seulement mineure, qui m'a poussé à revenir à Mint (la raison principale est que je préfère le bureau Mate).

La suppression du paquet et du service Snap n'a pas été compliquée en suivant les instructions trouvées dans Disabling Snaps in Ubuntu 20.04 de Kevin Custer (20 avril 2020). J'ai remarqué que les paquets Snap installés n'étaient pas les mêmes que dans l'article, mais l'auteur a peut-être exécuté la version de bureau complète d'Ubuntu. Sur mon système, snap list a montré seuls core18 et lxd étaient en cours en plus du service spand. Les commandes suivantes ont suffit pour supprimer Snap sur mon système.

michel@hpav:~$ snap remove lxd michel@hpav:~$ snap remove core18 michel@hpav:~$ snap umount /snap/core/xxxx michel@hpav:~$ sudo apt purge snapd

Malheureusement, n'ayant pas fait attention, je ne me souviens pas du nom réel du service principal Snap qui a dû être démonté. Il peut être trouvé en exécutant la commande df. Je n'ai trouvé aucun des répertoires liés à Snap mentionnés dans l'article, mais il y avait un répertoire supplémentaire, presque vide, que j'ai supprimé.

michel@hpav:~$ sudo rm -rf /root/snap

Désactivation des mises à niveau automatiques toc

Par défaut, les mises à niveau automatiques sont activées. Je préfère contrôler les mises à jour du système donc il fallait désactiver cette option.

michel@hpav:~$ sudo dpkg-reconfigure unattended-upgrades Replacing config file /etc/apt/apt.conf.d/20auto-upgrades with new version

Le service qui gère les mises à niveau, un script Python, est toujours chargé par systemd. Si cela doit être évité, consultez How To Disable Unattended Upgrades On Ubuntu de sk (16 mars 2020) pour plus de détails sur la façon de supprimer le paquet définitivement. J'attendrai d'être sûr que c'est ce que je veux, même si cela devrait être assez simple de réinstaller le paquet supprimé si désiré.

Désactivation de CloudInit toc

Suite à Hitoriki, (How to remove cloud-init from Ubuntu Server 20.04 (20 juin 2020) j'ai désactivé CloudInit.

michel@hpav:~$ sudo touch /etc/cloud/cloud-init.disabled

Cela prendra effet au prochain démarrage. Après avoir lu ce que fait CloudInit, j'ai préféré désactiver le service au cas où... Or la désactivation du service n'a pas changé les paramètres régionaux, le fuseau horaire ou le nom d'hôte, alors peut-être que je supprimerai simplement le paquet un peu plus tard.

Conclusion toc

Avec tous ces changements, j'ai constaté que le système d'exploitation occupe 118 Mo sur les 3,72 Go de mémoire disponible, ce qui représente un encombrement relativement faible. Selon htop le système exécutait 29 tâches une fois la séquence de démarrage initiale terminée. Ce n'est pas trop mal, mon serveur Debian a 78 tâches chargées qui utilisent 141,7 Mo mais il exécute deux serveurs importants, syncthing et nginx pas encore ajoutés dans le système Ubuntu.

Aujourd'hui, j'ai cherché à savoir comment utiliser ce serveur distant pour constater qu'il est possible qu'Ubuntu soit remplacé par un système NAS léger. Peu importe, cet exercice était une leçon que je suis heureux d'avoir achevée.