LINUX:Systemd-Dracut et Kernel
But
Sous Fedora, le service RNGD est lancé d'office; il transmet les données d'un générateur de nombres aléatoires d'un périphérique matériel au pool d'entropie de nombres aléatoires du noyau.
Mais dans mon cas, il reste au statut défaillant.
Dans cet article, nous allons analyser ce cas et voir comment contourner ce problème.
Installation de RNGD
Le paquet concerné est normalement installé d'office sinon on exécute la commande suivante:
dnf install rng-tools opensc
Le paquet lui est lié et est nécessaire.
Test de RNGD
Il est possible de tester ce service interactivement avant de l'activer:
rngd -f
Sur ma vieille machine, sous Fedora 36, voici la sortie:
Initializing available sources [hwrng ]: Initialization Failed [rdrand]: Initialization Failed [jitter]: JITTER timeout set to 5 sec [jitter]: Initializing AES buffer [jitter]: Unable to obtain AES key, disabling JITTER source [jitter]: Initialization Failed [pkcs11]: No pkcs11 slots available [pkcs11]: Initialization Failed [rtlsdr]: Initialization Failed Can't open any entropy source Maybe RNG device modules are not loaded
Le service s'arrête et est en erreur.
Sur une autre machine, sous Fedora 37, le service se lance correctement:
Initializing available sources [hwrng ]: Initialization Failed [rdrand]: Initialization Failed [jitter]: Initializing AES buffer [jitter]: Enabling JITTER rng support [jitter]: Initialized [pkcs11]: No pkcs11 slots available [pkcs11]: Initialization Failed [rtlsdr]: Initialization Failed ...
Lancement de RNGD
L'activation et le lancement du service "rngd" se fait comme décrit précédemment mais on se rend compte rapidement que même si on a désactivé son lancement, il se lance quand même au démarrage de la machine et dans mon premier cas, il est en erreur. Son lancement est inclus dans le Kernel. Il faut donc trouver un moyen de l'en retirer.
Dracut
"dracut" a pour fonction d'ajouter toute une série de fonctionnalité au kernel lors de son lancement.
Après une brève recherche, on repère ce que l'on cherche dans le répertoire "/usr/lib/dracut/modules.d/06rngd".
On peut vérifier l'intégration du service "rngd" via la commande suivante qui permet de lister son contenu:
lsinitrd /boot/initramfs-<n° kernel>.img | grep rngd
Ce qui donne pour le kernel n° 6.0.7-200.fc36.x86_64:
lsinitrd /boot/initramfs-6.0.7-200.fc36.x86_64.img | grep rngd
En analysant le contenu du script "module-setup.sh" se trouvant dans le répertoire "/usr/lib/dracut/modules.d/06rngd", on remarque que ce service n'est pas inclus si le paquet concerné n'est pas installé.
Solution
Il faut donc le désinstaller:
dnf remove rng-tools
et ensuite il faut recréer le kernel ou attendre l'installation du kernel suivant puis redémarrer la machine avec ce kernel.
Haveged
Il existe une alternative. On peut le remplacer par le service "haveged".
On l'installe si nécessaire:
dnf install haveged
On l'active et on le lance comme classiquement:
systemctl enable haveged.service systemctl start haveged.service