Add kdedev_on_immuable
All checks were successful
deploy / docker (push) Successful in 1m12s

This commit is contained in:
Florian RICHER 2024-10-06 17:48:37 +02:00
parent 96237a6fad
commit 5ac60a1aee
2 changed files with 219 additions and 0 deletions

View file

@ -32,6 +32,10 @@ Il permet de configurer l'IDE, compiler, exécuter et gérer les dépendances av
Pour le configurer, il suffit de suivre la procédure sur ce [lien](https://community.kde.org/Get_Involved/development/Set_up_a_development_environment).
> **EDIT**: Aujourd'hui, il est recommandé d'utiliser `kde-builder`. C'est le même outil sauf qu'il est écrit en python au lieu de perl. C'est plus simple pour les développeurs qui souhaitent contribuer au projet, car python est plus connu. La configuration reste exactement la même.
>
> [Pour plus d'info](https://kde-builder.kde.org/en/getting-started/before-building.html#install-kde-builder)
### Mes premières difficultés
Il faut savoir que quand j'ai commencé à vouloir contribuer au projet KDE. Le projet était en train de migrer de QT5 à QT6.

View file

@ -0,0 +1,215 @@
---
title: Configurer kde-builder sur des bases immuables et lancer un projet KDE
description: Je vais vous expliquer comment configurer kde-builder sur des bases immuables comme NixOS ou Fedora Atomic et vous allez lancer votre premier programme compilé avec kde-builder.
slug: kdedev_on_immuable
date: 2024-10-06 00:00:00+0000
categories:
- Linux
tags:
- KDE
weight: 1 # You can add weight to some posts to override the default sorting (date descending)
---
## Introduction
Les systèmes d'exploitation à base immuable, tels que NixOS ou Fedora Atomic, offrent de nombreux avantages en termes de stabilité et de sécurité. Cependant, ils présentent également des défis uniques pour les développeurs, notamment lorsqu'il s'agit de configurer des environnements de développement comme kde-builder. Dans ce post, nous explorerons comment surmonter ces obstacles en utilisant des outils comme distrobox ou toolbox, permettant ainsi aux développeurs de profiter des avantages des systèmes immuables tout en conservant la flexibilité nécessaire pour travailler efficacement avec kde-builder.
## Préparer son environnement
### Introduction
La préparation de l'environnement de développement est essentielle pour utiliser kde-builder sur des systèmes immuables. Les outils et étapes varient selon la distribution : Fedora Atomic intègre toolbox, facilitant le processus, tandis que NixOS nécessite la configuration manuelle de distrobox.
Je vais donc dans un premier temps expliquer comment installer distrobox sur NixOS. Ensuite, je finirais par la configuration générale pour Fedora Atomic et aussi pour Nix OS.
### Installation de distrobox sur Nix OS
Pour installer distrobox, il suffit de rajouter dans sa configuration `configuration.nix` ou dans son `flake` la configuration suivante:
```nix
# Active docker
virtualisation.docker = {
enable = true;
};
# Rajoute l'utilisateur au group docker pour éviter d'utiliser la commande sudo tout le temps.
# Par contre, ça rajoute un risque d'élévation de privilège sur le système
# Voir le warning ici https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user
users.users.<user>.extraGroups = [ "docker" ];
# On peut aussi l'ajouter en rootless
virtualisation.docker.rootless = {
enable = true;
# L'option setSocketVariable définit la variable DOCKER_HOST pour l'instance Docker rootless pour les utilisateurs normaux par défaut.
setSocketVariable = true;
};
# Si vous souhaitez utiliser podman à la place
virtualisation.containers.enable = true;
virtualisation = {
podman = {
enable = true;
# Ajoute l'alias `docker` pour une utilisation plus transparente avec les outils compatibles docker seulement
dockerCompat = true;
# Nécessaire pour que les conteneurs sous podman-compose puissent communiquer entre eux.
defaultNetwork.settings.dns_enabled = true;
};
};
# On rajoute distrobox
environment.systemPackages = with pkgs; [ distrobox ];
```
Une fois la configuration ajouté, il suffit de taper la commande:
Sans flake
```nix
nixos-rebuild switch
```
Avec flake
```nix
nixos-rebuild switch --flake [path du flake]#[nom de la configuraiton]
```
## Création du container pour travailler
### NixOS Distrobox
Pour créer le container avec distrobox, on peut passer par ce fichier `distrobox.ini`
```ini
; Nom de notre environnement
[kdedev]
image=quay.io/fedora/fedora:latest
; Change le home directory si vous souhaitez isoler votre environnement de travail de votre home directory host
home="${HOME}/.distrobox_home/kdedev"
; Uniquement si vous possedez une carte NVIDIA. Distrobox va intégrer des patchs pour mieux gérer les intégrations avec NVIDIA.
nvidia=true
; Si vous souhaitez faire une image rootless
root=false
; Pull l'image durant la création de l'environnement
pull=true
```
Ensuite, il suffit de taper la commande pour créer notre environnement nommé `kdedev`
```bash
distrobox assemble create
```
Une fois l'environnement créer, il reste une dernière étape à faire.
Je recommande de rajouter ceci dans votre `~/.bashrc` ou dans le `bashrc` situé dans le container configuré avec `home`:
```bash
alias new_shell="env -u PATH -u QML2_IMPORT_PATH -u QT_PLUGIN_PATH -u NIXPKGS_QT6_QML_IMPORT_PATH -u XDG_CONFIG_DIRS bash -l"
```
Vous pouvez l'éditer plus facilement en allant dans votre environnement de travail avec:
```bash
distrobox enter kdedev
```
Cet alias peut-être utile pour retirer les variables d'environnements que rajoute NixOS. Sur Fedora Atomic, ça ne pose pas de problème, car ils respectent la FHS donc les librairies pointent au même endroit que dans le container. Sauf que Nix OS ne respecte pas la FHS (pour de bonnes raisons), donc on peut avoir des conflits lors de la compilation ou de l'exécution de programme que l'on aura compilé avec `kde-builder`.
> La FHS est une structure de fichier normalisé dans le monde Linux [plus d'info ici](https://fr.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)
Pour l'utiliser, une fois dans votre environnement de travail, il suffit de faire:
```bash
distrobox enter kdedev # Pour rentrer dans votre environnement de travail
new_shell
```
### Fedora Toolbox
Pour la configuration avec Fedora Toolbox, c'est assez simple, car Fedora intègre tout par défaut. Il suffit de taper la commande:
```bash
toolbox create -r [numéro de release fedora] [nom de l'environnement]
```
Dans notre cas, ça sera:
```bash
toolbox create -r 40 kdedev
```
**Note**: À l'heure ou j'écris le post, j'ai encore des soucis pour lancer `kwin` avec Fedora Toolbox. J'ai des problèmes de permission sur les DRM. Je pense que c'est lié à `selinux`.
J'obtiens l'erreur ci-dessous lors du lancement de `kwin_wayland`
```bash
KMS: DRM_IOCTL_MODE_CREATE_DUMB failed: Permission denied
```
> DRM : C'est Direct Rendering Manager et non Digital Rights Management [pour plus d'infos](https://en.wikipedia.org/wiki/Direct_Rendering_Manager)
## Test de notre environnement
Avant de lancer notre test, il faut installer `kde-builder`. Vous pouvez voir mon post précédent [ici]({{< ref "/post/kde_contribution.md#ma-configuration" >}}) ou vous pouvez suivre ce [lien](https://kde-builder.kde.org/en/getting-started/before-building.html#install-kde-builder) qui est le même que dans le post.
**Rappel** Il faut l'installer dans votre environnement créer juste avant.
```bash
distrobox enter kdedev
```
__NixOS Distrobox__
```bash
toolbox enter kdedev
```
__Fedora Toolbox__
Une fois votre environnement configurer, normalement vous pouvez tester de compiler `solid` avec la commande :
```bash
kde-builder solid
```
Puis de lancer solid avec la commande:
```bash
source "$HOME/kde/build/solid/prefix.sh" && solid-hardware6 list
```
Voilà 🙂 Normalement vous êtes prêt à travailler sur KDE avec un système immuable.
## Note pour le démarrage de KDE Plasma Mobile
Pour plasma-mobile, il est nécessaire de configurer d'autres variables d'environnements. Voici le script que j'utilise :
```bash
source "$HOME/kde/build/plasma-mobile/prefix.sh"
QT_QPA_PLATFORM=offscreen plasma-mobile-envmanager --apply-settings
# Environment variables
export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
export QT_QUICK_CONTROLS_MOBILE=1
export PLASMA_PLATFORM=phone:handheld
export QT_QUICK_CONTROLS_STYLE=org.kde.breeze
QT_QPA_PLATFORM=wayland dbus-run-session kwin_wayland --xwayland "plasmashell -p org.kde.plasma.mobileshell" --width 360 --height 720
```
> [Source](https://invent.kde.org/plasma/plasma-mobile/-/wikis/Building-and-Testing-Locally#running-the-shell-in-a-window)
Vous pouvez aussi lancer le menu du haut sans lancer tout `kwin` avec le script :
```bash
source "$HOME/kde/build/plasma-mobile/prefix.sh"
QT_QPA_PLATFORM=offscreen plasma-mobile-envmanager --apply-settings
# Environment variables
export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
export QT_QUICK_CONTROLS_MOBILE=1
export PLASMA_PLATFORM=phone:handheld
export QT_QUICK_CONTROLS_STYLE=org.kde.breeze
qmlscene-qt6 "$HOME/kde/src/plasma-mobile/tests/ActionDrawerTest.qml"
```