Cette page est en cours de rédaction, elle peut être incomplète. La documentation décrit un cas d’utilisation fonctionnant uniquement après que la Pull Request #100 ait été fusionné.
Illustrer ce que voit l’utilisateur & l’assistant
Nous allons voir ici comment aider l’utilisateur en profitant du mécanisme des flocons.
L’idée est la suivante :
- L’utilisateur à un
flocon
dans sa configuration ce qui lui permet de modifier la provenance des sources qu’il utilise pour ses paquets, modules, etc. GLF-OS est un simple module que l’on appose sur une configuration NixOS, le flocon que nous fournissons par défaut à l’utilisateur récupère le module GLF-OS du dépôtGaming-Linux-FR/GLF-OS
. Nous allons voir un exemple de dépannage où l’assistant fournira une branche temporaire de debug à l’utilisateur. L’utilisateur aura trois tâches,rebuild
, fournir les logs et alerter la personne lorsque le problème est résolu.
Contexte
Dans cet exemple, nous allons partir d’un cas connu, l’utilisation de GLF-OS sur un laptop équipé d’un ancien GPU NVIDIA. Cet situation implique deux problèmes :
- L’utilisateur doit utiliser une ancienne version du pilote GPU, dans notre exemple la version
470
. - Puisque l’utilisateur utilise une ancienne version (
470
), il doit désactiver l’optionhardware.nvidia.dynamicBoost.enable
qui inclut la fonctionnalitéDynamic Boost
uniquement disponible à partir du pilote560
et plus, cette option est activé par défaut avec GLF-OS.
Dans la confiuration, ça corresponds à :
hardware.nvidia.package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.legacy_470;
hardware.nvidia.dynamicBoost.enable = lib.mkForce false;
# ou
hardware.nvidia = {
package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.legacy_470;
dynamicBoost.enable = lib.mkForce false;
};
Situation
Récupérer les informations
L’utilisateur vous a fourni dans une issue ou un help-me
sur discord, des informations sur ça machine (corresponds au retour de commande glf-systeminfo
).
--- Infos ---
Machine:
Type: Laptop System: LENOVO product: 80DU v: Lenovo Y70-70 Touch serial: <superuser required>
Mobo: LENOVO model: Lenovo Y70-70 Touch v: 31900058WIN serial: <superuser required>
UEFI: LENOVO v: 9ECN31WW(V1.14) date: 08/18/2014
--- CPU ---
Architecture : x86_64
Mode(s) opératoire(s) des processeurs : 32-bit, 64-bit
Identifiant constructeur : GenuineIntel
Nom de modèle : Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz
--- GPU ---
00:02.0 VGA compatible controller: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 860M] (rev a2)
--- Disque ---
Filesystem Size Used Avail Use% Mounted on
devtmpfs 393M 0 393M 0% /dev
tmpfs 3,9G 0 3,9G 0% /dev/shm
tmpfs 2,0G 7,1M 2,0G 1% /run
/dev/sda2 228G 37G 180G 17% /
efivarfs 88K 56K 28K 67% /sys/firmware/efi/efivars
tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-journald.service
tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-tmpfiles-setup-dev-early.service
tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-tmpfiles-setup-dev.service
tmpfs 3,9G 1,2M 3,9G 1% /run/wrappers
tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-vconsole-setup.service
/dev/sda1 511M 91M 421M 18% /boot
tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-tmpfiles-setup.service
tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-sysctl.service
tmpfs 1,0M 0 1,0M 0% /run/credentials/getty@tty1.service
tmpfs 786M 72K 786M 1% /run/user/1000
--- RAM ---
total utilisé libre partagé tamp/cache disponible
Mem: 7,7Gi 1,2Gi 4,9Gi 148Mi 2,0Gi 6,5Gi
Échange: 0B 0B 0B
Dans la section GPU
, vous pouvez remarquer 01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX860M] (rev a2)
, ça nous apprends que le GPU est une GTX860M.
La commande sudo nvidia-smi --version
nous apprends que nous utilisons le driver 565.77 :
NVIDIA-SMI version : 565.77
NVML version : 565.77
DRIVER version : 565.77
CUDA Version : 12.7
Puisque nous savons déjà comment résoudre le problème, passons à l’étape dédié aux tests
Création d’une branche de debug
Nous allons supposer que vous avez déjà configuré git et votre compte Github, si vous ne l’avez pas fait, consulter la page sur “Comment contribuer”.
- Depuis la page du projet, cliquez sur le bouton
Fork
pour créer une copie du projet. - Depuis votre machine :
git clone https://github.com/votreUtilisateur/GLF-OS
- Assurez-vous de partir de la branche
main
git checkout main
- Créez une nouvelle branche :
git checkout -b debug_user
Le nom de la nouvelle branche n’a pas d’importance, essayez de mettre un prefix
debug_
ou n’importe qu’elle information qui permette de clairement comprendre le rôle de cette branche.
- Poussez votre branche vers votre fork
git push origin debug_user
Modifier le flocon utilisateur
Demandez à l’utilisateur d’ouvrir le fichier /etc/nixos/flake.nix
puis d’effectuer les modifications suivantes :
Par défaut, l’utilisateur devrait avoir le flocon :
{
description = "GLF-OS";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
glf.url = "github:Gaming-Linux-FR/GLF-OS/main";
};
outputs = { self, nixpkgs, glf, ... }@inputs:
let
pkgsSettings = system: import nixpkgs {
inherit system;
config.allowUnfree = true;
};
in {
nixosConfigurations."GLF-OS" = nixpkgs.lib.nixosSystem {
pkgs = pkgsSettings "x86_64-linux";
modules = [
./configuration.nix
inputs.glf.nixosModules.default
];
};
};
}
Ici, l’utilisateur doit éditer la section inputs et ajouter un caractère #
devant glf.url
. Ensuite, il ajoute une nouvelle ligne pointant vers votre dépôt :
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
#glf.url = "github:Gaming-Linux-FR/GLF-OS/main";
glf.url = "github:yourGithubUsername/GLF-OS/debug_user";
};
Vous devez faire attention à bien préciser le nom de votre branche de debug, auquel cas, les modifications portés sur votre branche n’auront aucune conséquence sur la machine utilisateur.
Test de la branche
L’utilisateur doit maintenant effectuer les commandes :
glf-update && glf-switch
Si aucune erreur n’a été commise, l’utilisateur ne devrait avoir aucune erreur.
Correction
L’assistant peut maintenant ajouter des modifications pour corriger le problème chez l’utilisateur.
Nous allons ouvrir le fichier ./modules/default/debug.nix
.
{ lib, config, pkgs, ... }:
{
options.glf.debug.enable = lib.mkOption {
description = "Enable GLF debug";
type = lib.types.bool;
default = true;
};
config = lib.mkIf config.glf.debug.enable {
# Add your debug configurations here
};
}
Nous allons ajouter notre correctif mentionné au début de cette page à savoir :
hardware.nvidia.package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.legacy_470;
hardware.nvidia.dynamicBoost.enable = lib.mkForce false;
Nous avons maintenant :
{ lib, config, pkgs, ... }:
{
options.glf.debug.enable = lib.mkOption {
description = "Enable GLF debug";
type = lib.types.bool;
default = true;
};
config = lib.mkIf config.glf.debug.enable {
# Add your debug configurations here
hardware.nvidia.package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.legacy_470;
hardware.nvidia.dynamicBoost.enable = lib.mkForce false;
};
}
git add `./modules/default/debug.nix`
git commit -m "Fixer la version du pilote nvidia sur 470, désactivation de dynamic Boost".
git push origin
Prenez le temps d’indiquer un message à vos commits, ça vous permettra à vous aux mainteneurs du projet de comprendre ce que vous avez fait.
Test de la correction chez l’utilisateur
Depuis l’application Console
,
glf-update && glf-switch
Puisque nous touchons au pilote nvidia, l’utilisateur devrait redémarrer pour s’assurer que la correction ait bien fonctionné.
Après le redémarrage, l’utilisateur s’assure que son driver est à la bonne version :
sudo nvidia-smi --version
Rapporter la solution au projet
Maintenant que vous avez confirmé que la modification a bien résolu le problème, il vous reste plus qu’à ouvrir une issue pour expliquer ce que vous avez fait. Une pull request “propre” sera ensuite ouverte pour inclure les modifications.
Lorsque le projet à introduit les changements au projet, l’utilisateur doit ensuite rebasculer sur l’input GLF d’origine, sinon il ne recevra pas les mises à jours du module.