Fedora pour mon poste de travail

Rédigé par Alexandre le 2024-03-14

#linux #fedora #notes

J'ai changé plusieurs fois de distribution sur mon poste de travail à cause du client VPN d'AWS. qui n'est compatible qu'avec Ubuntu 18.04 (plus maintenu) et 20.04 (fin de support en 2025). Mon premier choix a été d'utiliser une Ubuntu 22.04 et de bidouiller le client VPN pour le faire fonctionné. Une fois que j'ai réussi mon compte, j'ai vite changé pour Linux Mint 21 basé sur Ubuntu 22.04) Le VPN y tournait tout aussi bien que sur Ubuntu.

Après plusieurs semaines à travailler sous Linux Mint, j'ai fini par me lasser des choix logiciels fait par cette distribution. La nostalgie d'une Debian bien propre a fini par avoir raison de moi et ai installé Debian Sid. Le client VPN d'AWS, après bidouillage, y fonctionnait très bien. Cependant après quelques semaines, j'ai commencé à avoir des incidents assez aléatoires comme des déconnexions du wifi ou le poste qui surchauffe. Comme il s'agit de mon poste de travail, chercher puis réparer les problèmes sur mon poste engendre une baisse de ma productivité. Certains me diront que j'aurais pu choisir la version testing (Trixie) ou stable (Bookworm) de Debian, plutôt qu'unstable (Sid), mais j'aime être à jour et ai établi mes quartiers sur la dernière version de GNOME.

Tout ça pour finalement m'orienter vers Fedora Silverblue. Cependant je n'ai pas été capable de faire fonctionner le client VPN d'AWS dessus. Après avoir tenté pendant un moment, les coupables sont SELinux (que j'ai pu contourner), mais surtout le système en lecture seule (système immuable). Au final, j'ai installé une Fedora Workstation et tout fonctionne au poil. Un petit bémol tout de même, démarrer mon Dell XPS 15 9520 avec une alimentation non-officielle branchée empêche le système de démarrer. C'est curieux, mais ne m'handicape pas.

Dans la suite de l'article, je liste les différentes étapes que j'ai suivi post-installation de Fedora Workstation pour y être comme à la maison.

Remplacer l'éditeur par défaut

Longtemps utilisateur de nano, je ne peux aujourd'hui plus me passer de vim donc je remplace le premier par le second :

$ sudo dnf install vim vim-airline vim-default-editor
$ sudo dnf remove nano default-editor nano-default-editor

Je déploie maintenant ma configuration :

$ tee ~/.vimrc <<EOF
set nocompatible
set backspace=indent,eol,start
set confirm
set number
set expandtab
set smarttab
set shiftwidth=2
set tabstop=2

" Turn on syntax highlighting by default
syntax on

" Configure airline plugin
let g:airline#extensions#tabline#enabled = 1
EOF

Histoire que le comportement soit identique pour les commandes précédées de sudo, je ma configuration dans le dossier de l'utilsiateur root :

$ sudo cp ~/.vimrc /root/

Remplacer le terminal

Ayant pas mal été sous NixOS, j'ai du mal à me passer du terminal qui y est installé par défaut pour GNOME. Du coup, je le remet :

$ sudo dnf install gnome-console

Maintenant que le terminal est installé, supprimer celui par défaut :

$ sudo dnf remove gnome-terminal*

Quelques extensions pour Gnome

La personnalisation de GNOME passe par l'installation d'extension. Ici j'installe celles que j'ai l'habitude d'utiliser et qui permettent :

  • gnome-shell-extension-appindicator: afficher les icônes d'applications réduitent du coté droit de la barre de GNOME (équivalent de systray pour Windows)
  • gnome-shell-extension-gsconnect: notifications, contrôle multimédia et bien d'autres choses pour les ordiphones sous Android (nécessite KDEConnect sur l'ordiphone)

Voici comment installer tout ça en une seule fois :

$ sudo dnf install gnome-shell-extension-appindicator gnome-shell-extension-gsconnect

Redémarrer le système afin que les extensions soient activables. Après le redémarrage, installer l'outil permettant d'activer les extensions :

$ sudo dnf install gnome-extensions-app

Lancer l'application en cherchant Extension puis en cochant les cases :

  • AppIndicator and KStatusNotifierItem Support
  • GSConnect

Il est également possible de désactiver l'extension Backgorund Logo afin de ne plus avoir le logo fedora sur le fond d'écran.

Pour le style

J'ai beaucoup de mal avec les icônes et les curseurs par défaut de GNOME, du coup je les change systématiquement.
Je commence par les icônes en utilisant ceux du thème papirus, que j'installe comme ceci :

$ sudo dnf install papirus-icon-theme

Maintenant, le thème bibata pour le curseur :

$ cd /tmp && \
wget https://github.com/ful1e5/Bibata_Cursor/releases/latest/download/Bibata-Modern-Amber.tar.xz && \
wget https://github.com/ful1e5/Bibata_Cursor/releases/latest/download/Bibata-Modern-Classic.tar.xz && \
wget https://github.com/ful1e5/Bibata_Cursor/releases/latest/download/Bibata-Modern-Ice.tar.xz && \
find . -maxdepth 1 -name "Bibata*.tar.xz" -exec tar xf {} \; && \
find . -maxdepth 1 -name "Bibata*.tar.xz" -exec rm {} \; && \
mv Bibata-* /usr/share/icons/

Afin d'appliquer ces éléments, il est nécessaire d'installer un paquet supplémentaire :

$ sudo dnf install gnome-tweaks

Ouvrir l'application Ajustement et se rendre dans la section Appearance :

  • Curseur : choisir Bibata-Modern-*
  • Icônes : choisir Papirus-*

La prise en compte des changements peu prendre un peu de temps. Au mieux, fermer et réouvrir la session pour appliquer les changements.

Ansible

L'utilisation de la documentation officielle pour installer ansible nécessite l'installation de quelques pré-requis système :

$ sudo dnf install pipx python3-pip

Activer l'hibernation

Désactiver zRAM

Par défaut Fedora semble avoir fait le choix de compresser la RAM, plutôt que d'offrir un vrai SWAP. Sur ma machine, je ne suis pas convaincu de l'intérêt et surtout j'aimerais que le CPU fasse autre chose que de compresser des données pour les mettre en RAM. Du coup, je désactive et désinstalle totalement zRAM à l'aide des commandes suivantes :

$ sudo systemctl stop swap-create@zram0 && \
sudo dnf remove zram-generator-defaults

Maintenant, on se retrouve sans SWAP, il faut donc en créé un.

Créer du SWAP

Je recommande à tous d'utiliser le chiffrement lors de l'installation de Fedora. Cela évite qu'en cas de vol de votre machine, vos données ne soient accessible. Le seul inconvénient étant de saisir une phrase de passe supplémentaire au démarrage de l'OS. Bref, par défaut, Fedora utilise le système de fichier BTRFS, il faut donc passer par un SWAP de type fichier, comme sous Windows :

$ mkdir /tmp/rootdisk
$ root_uuid="$(findmnt -no UUID -T /)"
$ mount /dev/disk/by-uuid/$root_uuid /tmp/rootdisk
$ sudo btrfs sub create /tmp/rootdisk/@swap
$ sudo umount /tmp/rootdisk
$ sudo mkdir /swap
$ sudo mount -o subvol=@swap "UUID=${root_uuid}" /swap
$ sudo btrfs filesystem mkswapfile --size $(awk '/MemTotal/{print $2}' /proc/meminfo)k --uuid clear /swap/swapfile
$ sudo swapon /swap/swapfile
$ free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi        11Gi       1,1Gi       1,6Gi       4,9Gi       4,1Gi
Swap:           15Gi       1,9Gi        14Gi
$ sudo tee /etc/fstab <<EOF
UUID=${root_uuid} /swap      btrfs subvol=@swap,x-systemd.device-timeout=0  0  0
/swap/swapfile			          none	     swap  defaults                                                 0  0
EOF

A partir de maintenant, le SWAP est disponible et va permettre d'activer l'hibernation.

Activer l'hibernation

$ cat <<-EOF | sudo tee /etc/dracut.conf.d/resume.conf
add_dracutmodules+=" resume "
EOF
$ sudo dracut -f
$ swap_uuid="$(findmnt -no UUID -T /)" && \
resume_offset="$(sudo btrfs inspect-internal map-swapfile -r /swap/swapfile)" && \
sudo grubby --args="resume=UUID=${swap_uuid} resume_offset=${resume_offset}" --update-kernel=ALL

Par défaut Fedora utilise SELinux, ce qui est une bonne chose en terme de sécurité mais qui ne fait pas du tout bon ménage avec l'hibernation. Du coup je modifie la configuration de SELinux afin qu'il écrive des alertes dans les logs plutôt qu'il ne bloque réellement les choses :

$ sudo sed -i "s#enforcing#permissive#g" /etc/selinux/config

Redémarrer la machine puis tester :

$ sudo systemctl hibernate

Si tout fonctionne, pour la part j'installe et active cette extension GNOME pour avoir des boutons dans mon interface.

Un prompt sympa

Le prompt est la ligne située avant toute commande dans un terminal. J'aime que celui-ci soit personnalisé notamment pour voir d'un seul coup d'oeil où je me trouve (ssh, compte root, etc). J'utilise ce site (en anglais) afin de personnaliser/colorer mon prompt. Les propositions par défaut sont assez chouette je trouve, mais il est aussi possible de se faire quelque chose de complètement personnalisé. Bref, je vous laisse jeter un coup d'oeil.

https://robotmoon.com/bash-prompt-generator/

En bonus pour Fedora Silverblue

Lorsque le disque système est chiffré, un mot de passe est demandé juste après grub. Sur Fedora Workstation, le clavier est dans la langue configurée au moment de l'installation, mais pas sur Fedora Silverblue. Je propose dans ce bonus de corriger ce problème.

Une fois que grub apparait, appuyer sur la touche e. A la fin de la ligne commençant par linux, ajouter vconsole.keymap=fr. Appuyer ensuite simultanément sur les touches Ctrl et x pour démarrer.
La fenêtre de saisie du mot de passe de déchiffrement apparaît maintenant avec un fr juste en dessous. Saisir le mot de passe et démarrer normalement.

Une fois le système démarré, installer la commande permettant d'éditer grub :

$ rpm-ostree install grubby

Redémarrer le système toujours en éditant grub pour changer le clavier, puis une fois sur le système, ouvrir un terminal et utiliser la commande suivante :

$ sudo grubby --args="vconsole.keymap=fr" --update-kernel=ALL

Le clavier sera maintenant en AZERTY pour déchiffrer le disque à chaque démarrage.

Les mots de la fin

Si j'ai fini par m'orienté vers Fedora ce n'est pas vraiment un hasard. En effet, le projet sert de vitrine à GNOME sur lequel j'ai mes marques depuis maintenant plusieurs annéess. En second point, j'ai testé Fedora Silverblue sur mon poste personnel à coté d'une NixOS et je risque de basculer définitivement sur Fedora. J'ajouterais aussi que je m'intéresse fortement à CoreOS qui semble idéal pour une infrastructure industrialisée avec de la VM jetable, un peu comme si c'était des conteneurs. Et enfin, c'est un système mis à jour très régulièrement et donc avec des paquets frais, sans pour autant remettre en question sa stabilité.