From 241bd5c2191a47e9e5a4a9f0d668e68a716e855f Mon Sep 17 00:00:00 2001 From: fkDeath Date: Thu, 28 May 2026 18:00:25 +0200 Subject: [PATCH] =?UTF-8?q?fix(Installer=20=E2=94=80=20Multi-Desktop):=20F?= =?UTF-8?q?ix=20Multi=20Desktop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 160 +++++------------- build.sh | 15 +- .../etc/calamares/modules/desktop.conf | 71 +------- .../modules/fws-desktop-choice/main.py | 43 ----- .../modules/fws-desktop-choice/module.desc | 5 - .../etc/calamares/modules/packagechooser.conf | 33 ---- .../etc/calamares/modules/packages.conf | 6 +- .../etc/calamares/modules/shellprocess.conf | 30 +--- .../airootfs/etc/calamares/settings.conf | 3 +- .../etc/systemd/system/calamares.service | 10 -- .../airootfs/usr/local/bin/calamares-launcher | 33 ---- .../usr/local/bin/fws-desktop-init-cli | 17 -- .../usr/local/bin/fws-desktop-init-common | 80 --------- .../usr/local/bin/fws-desktop-init-gnome | 13 -- .../usr/local/bin/fws-desktop-init-hyprland | 16 -- .../usr/local/bin/fws-desktop-init-kde | 14 -- .../usr/local/bin/fws-desktop-init-xfce | 14 -- configs/baseline/packages.x86_64 | 10 +- configs/baseline/profiledef.sh | 7 - .../etc/systemd/system/calamares.service | 8 +- .../usr/local/bin/fws-desktop-init-cli | 15 -- .../usr/local/bin/fws-desktop-init-common | 58 ++----- .../usr/local/bin/fws-desktop-init-gnome | 11 +- .../usr/local/bin/fws-desktop-init-hyprland | 10 +- .../usr/local/bin/fws-desktop-init-kde | 6 +- .../usr/local/bin/fws-desktop-init-xfce | 6 +- configs/releng/packages.x86_64 | 10 +- configs/releng/profiledef.sh | 6 - setup-calamares.sh | 27 +-- 29 files changed, 116 insertions(+), 621 deletions(-) delete mode 100644 configs/baseline/airootfs/etc/calamares/modules/fws-desktop-choice/main.py delete mode 100644 configs/baseline/airootfs/etc/calamares/modules/fws-desktop-choice/module.desc delete mode 100644 configs/baseline/airootfs/etc/calamares/modules/packagechooser.conf delete mode 100644 configs/baseline/airootfs/etc/systemd/system/calamares.service delete mode 100644 configs/baseline/airootfs/usr/local/bin/calamares-launcher delete mode 100644 configs/baseline/airootfs/usr/local/bin/fws-desktop-init-cli delete mode 100644 configs/baseline/airootfs/usr/local/bin/fws-desktop-init-common delete mode 100644 configs/baseline/airootfs/usr/local/bin/fws-desktop-init-gnome delete mode 100644 configs/baseline/airootfs/usr/local/bin/fws-desktop-init-hyprland delete mode 100644 configs/baseline/airootfs/usr/local/bin/fws-desktop-init-kde delete mode 100644 configs/baseline/airootfs/usr/local/bin/fws-desktop-init-xfce delete mode 100644 configs/releng/airootfs/usr/local/bin/fws-desktop-init-cli diff --git a/README.md b/README.md index b244d4c..dd3dd62 100644 --- a/README.md +++ b/README.md @@ -1,166 +1,94 @@ -# FWS Linux +# FWS -**FWS Linux** est une distribution live/installable basée sur **Arch Linux**, livrée sous forme d'ISO bootable BIOS/UEFI avec l'installeur graphique **Calamares**. +**FWS** est une distribution Linux live/installable basée sur **Arch Linux**, livrée sous forme d'ISO bootable BIOS/UEFI avec l'installeur graphique **Calamares** lancé automatiquement au démarrage. -Le projet se construit depuis **Windows via WSL** (ou directement depuis Arch Linux) avec `mkarchiso`. +Le projet est construit avec une chaîne `mkarchiso` adaptée pour fonctionner **depuis Windows via WSL** (Git Bash → WSL Arch), sans nécessiter de machine Linux dédiée. --- ## Aperçu -| | | -|---|---| -| **Base** | Arch Linux (rolling release) | -| **Installeur** | Calamares (compilé depuis l'AUR) | -| **Environnement live** | Xorg + Openbox — Calamares se lance automatiquement | -| **Bureaux installables** | XFCE, KDE Plasma, GNOME, Hyprland, CLI | -| **Boot** | BIOS (syslinux) + UEFI (systemd-boot) | -| **Compression** | squashfs (xz) | -| **Build** | Windows + WSL (Arch) ou Arch Linux natif | - ---- +- **Base** : Arch Linux (rolling release) +- **Installeur** : Calamares (compilé depuis l'AUR, servi via un repo local pacman) +- **Affichage live** : Xorg + Openbox, lancement automatique de Calamares +- **Bureau installé** : XFCE + LightDM avec autologin du premier compte créé +- **Boot** : BIOS (syslinux) + UEFI (systemd-boot) +- **Compression** : squashfs (xz) +- **Build** : Windows + WSL (Arch) ou directement depuis Arch ## Prérequis -### Depuis Windows -- Windows 10/11 avec **WSL 2** -- Une distribution **Arch Linux** dans WSL (`Arch`, `ArchLinux`, `ArchWSL`…) -- **Git Bash** pour lancer les scripts +### Côté Windows +- Windows 10/11 +- WSL 2 avec une distribution **Arch Linux** installée (`Arch`, `ArchLinux`, `ArchWSL`…) +- Git Bash (pour exécuter les scripts depuis Windows) -### Depuis Arch Linux (WSL ou natif) +### Côté Arch (WSL ou natif) Les scripts installent automatiquement les paquets nécessaires (`archiso`, `base-devel`, `git`, `reflector`, `dos2unix`). ---- - ## Démarrage rapide ```bash -# Étape 1 — Build des paquets AUR (calamares, winboat-bin) et création du repo local +# 1. Préparation : compile Calamares depuis l'AUR, crée le repo local, +# patche pacman.conf et configure les services systemd (Xorg + autostart). ./setup-calamares.sh -# Étape 2 — Build de l'ISO +# 2. Build de l'ISO via mkarchiso (fusionne configs/releng + configs/baseline) ./build.sh ``` L'ISO finale est générée dans `./out/`. -Les deux scripts détectent automatiquement s'ils tournent depuis **Git Bash** (bascule automatique dans WSL en root) ou directement depuis **WSL/Arch**. - ---- +Les deux scripts détectent automatiquement s'ils sont lancés depuis **Git Bash** (et basculent dans WSL en root) ou directement depuis **WSL/Arch**. ## Structure du projet -``` -FWS/ -├── build.sh # Build de l'ISO via mkarchiso -├── setup-calamares.sh # Build des paquets AUR + création du repo local -├── configs/ -│ ├── releng/ # Profil principal (base ArchISO releng) -│ │ ├── profiledef.sh # Métadonnées ISO (nom, label, bootmodes…) -│ │ ├── packages.x86_64 # Liste des paquets du live -│ │ ├── pacman.conf # Config pacman pour le build -│ │ └── airootfs/ # Overlay rootfs du profil releng -│ │ ├── etc/calamares/ # Config et modules Calamares -│ │ └── usr/local/bin/ # Scripts fws-desktop-init-* -│ └── baseline/ # Overlay FWS appliqué par-dessus releng (prioritaire) -│ └── airootfs/etc/calamares/ # Branding et modules surchargés -├── local-repo/ # Repo pacman local généré (calamares, winboat-bin) -├── out/ # ISOs générées -└── scripts/ - └── run_archiso.sh # Test rapide en QEMU -``` +| Chemin | Rôle | +|--------|------| +| `setup-calamares.sh` | Préparation one-shot : build Calamares (AUR), repo local, services systemd, autostart Xorg + Calamares | +| `build.sh` | Build de l'ISO via `mkarchiso` (utilisable depuis Git Bash ou WSL) | +| `configs/releng/` | Profil principal (base ArchISO releng) | +| `configs/baseline/` | Overlay FWS appliqué par-dessus `releng` (prioritaire) | +| `local-repo/` | Repo pacman local généré (Calamares + dépendances AUR) | +| `out/` | ISOs générées | +| `fws/mkarchiso` | Binaire `mkarchiso` embarqué (fork) | ---- +## Séquence de boot de l'ISO -## Environnements de bureau - -Calamares propose le choix du bureau à l'installation. Chaque option est gérée par un script `fws-desktop-init-*` qui installe les paquets, configure le display manager et supprime ce qui ne sert pas. - -| Bureau | Display Manager | Script | -|--------|-----------------|--------| -| **XFCE** | LightDM | `fws-desktop-init-xfce` | -| **KDE Plasma** | SDDM | `fws-desktop-init-kde` | -| **GNOME** | GDM | `fws-desktop-init-gnome` | -| **Hyprland** | SDDM | `fws-desktop-init-hyprland` | -| **CLI** | — | `fws-desktop-init-cli` | - -Tous les bureaux installent un socle commun : **Firefox**, **LibreOffice**, **MariaDB**, **Wine**, **Podman** et **WinBoat** (avec support KVM). - ---- - -## Séquence de boot de l'ISO live - -1. Démarrage (BIOS ou UEFI) +1. Démarrage de l'ISO FWS (BIOS ou UEFI) 2. `systemd` → autologin root sur `tty1` 3. `xorg-start.service` → `Xorg :0` 4. `calamares.service` → `DISPLAY=:0 calamares` 5. **Fallback** : si les services échouent, `.zprofile` relance Xorg + Openbox + Calamares manuellement +6. Après installation, le système démarre sur LightDM puis ouvre automatiquement la session XFCE du compte installé ---- - -## Séquence Calamares - -``` -welcome → locale → keyboard → partition → users → desktop environement → summary - → [installation] → - partition · mount · unpackfs · machineid · fstab · locale · - keyboard · localecfg · users · networkcfg · hwclock · - services-systemd · packages · initcpiocfg · initcpio · desktop environement · - grubcfg · bootloader · umount - → finished -``` - ---- - -## Test en QEMU +## Test rapide en QEMU ```bash ./scripts/run_archiso.sh -i out/fws-*.iso # BIOS ./scripts/run_archiso.sh -u -i out/fws-*.iso # UEFI ``` ---- - ## Personnalisation -| Quoi | Où | -|------|----| -| Paquets du live | `configs/releng/packages.x86_64` | -| Overlay rootfs | `configs/releng/airootfs/` ou `configs/baseline/airootfs/` | -| Modules Calamares | `configs/baseline/airootfs/etc/calamares/modules/` | -| Séquence Calamares | `configs/releng/airootfs/etc/calamares/settings.conf` | -| Branding ISO | `configs/releng/profiledef.sh` (`iso_name`, `iso_label`…) | -| Branding Calamares | `configs/releng/airootfs/etc/calamares/branding/fws/branding.desc` | -| Paquets installés | `configs/releng/airootfs/etc/calamares/modules/packages.conf` | - ---- +- **Paquets** : éditer `configs/releng/packages.x86_64` +- **Overlay rootfs** : déposer les fichiers dans `configs/releng/airootfs/` ou `configs/baseline/airootfs/` +- **Modules / séquence Calamares** : `configs/baseline/airootfs/etc/calamares/` +- **Branding ISO** : `configs/releng/profiledef.sh` (`iso_name`, `iso_label`, `iso_publisher`…) ## Dépannage -**`pacman.conf` introuvable** -: Vérifier que `configs/releng/pacman.conf` existe. - -**Calamares ne démarre pas dans l'ISO** -: Se logger sur tty (autologin root) et consulter : -```bash -journalctl -u xorg-start -u calamares -``` - -**Erreurs de retours à la ligne (CRLF)** -: `build.sh` exécute `dos2unix` automatiquement sur tout le profil. Éditer depuis Windows ne pose pas de problème. - -**`mkarchiso` échoue sur un paquet AUR** -: Relancer `./setup-calamares.sh` pour reconstruire le repo local. - -**WSL — `DisableSandbox` manquant** -: `setup-calamares.sh` l'ajoute automatiquement à `/etc/pacman.conf` si WSL est détecté (pacman ≥ 7 utilise landlock, non supporté par le kernel WSL). +- **`pacman.conf introuvable`** : vérifier que `configs/releng/pacman.conf` existe. +- **Calamares ne démarre pas dans l'ISO** : se logger en tty (autologin root) et lancer `journalctl -u xorg-start -u calamares`. +- **Erreurs de retours à la ligne** : `build.sh` lance `dos2unix` sur l'arborescence ; si vous éditez des fichiers depuis Windows, ce n'est pas un problème. +- **`mkarchiso` échoue sur un paquet AUR** : relancer `./setup-calamares.sh` pour reconstruire le repo local. --- -## Licence +## Licence & origine -FWS est un fork d'**[archiso](https://gitlab.archlinux.org/archlinux/archiso)** (Arch Linux), redistribué sous **GPL-3.0-or-later**. +FWS est un fork de **[archiso](https://gitlab.archlinux.org/archlinux/archiso)** (Arch Linux), redistribué sous les termes de la **GPL-3.0-or-later**. -Voir [LICENSE](LICENSE) pour le texte complet et [AUTHORS.rst](AUTHORS.rst) pour les auteurs originaux d'archiso. +Voir [LICENSE](LICENSE) pour le texte complet, et [AUTHORS.rst](AUTHORS.rst) pour la liste des auteurs originaux d'archiso. -Les ajouts spécifiques à FWS (`build.sh`, `setup-calamares.sh`, `configs/baseline/`, scripts `fws-desktop-init-*`, intégration Calamares + WinBoat, chaîne WSL) sont également distribués sous GPL-3.0-or-later. +Les modifications spécifiques à FWS (scripts `build.sh`, `setup-calamares.sh`, overlay `configs/baseline/`, intégration Calamares + Xorg autostart, chaîne de build WSL) sont également distribuées sous GPL-3.0-or-later. diff --git a/build.sh b/build.sh index 784ff71..3da7f37 100644 --- a/build.sh +++ b/build.sh @@ -5,16 +5,7 @@ export MSYS_NO_PATHCONV=1 set -e trap 'echo -e "\e[31mErreur lors de l execution (build.sh).\e[0m"; exit 1' ERR -DISTRO_NAME="${ARCH_WSL_DISTRO:-Arch}" - -# Auto-détection si la distro par défaut est inaccessible -if [ -z "$IN_WSL" ] && ! wsl.exe -d "$DISTRO_NAME" -u root -- echo ok >/dev/null 2>&1; then - for _name in "Arch" "ArchLinux" "archlinux" "arch" "ArchWSL"; do - if wsl.exe -d "$_name" -u root -- echo ok >/dev/null 2>&1; then - DISTRO_NAME="$_name"; break - fi - done -fi +DISTRO_NAME="Arch" if [ -n "$WSL_DISTRO_NAME" ]; then echo -e "\e[36mBuild exécuté depuis WSL ($WSL_DISTRO_NAME) en tant que root...\e[0m" @@ -37,9 +28,9 @@ WORK_DIR="${WORK_DIR_WSL}" echo "==> Dossier de travail : \$WORK_DIR" echo "==> Mise à jour des miroirs et installation de archiso..." -pacman -Syu --noconfirm reflector || true +pacman -Sy --noconfirm reflector || true reflector --verbose --latest 10 --sort rate --save /etc/pacman.d/mirrorlist || true -pacman -Syu --noconfirm archiso +pacman -Sy --noconfirm archiso echo "==> Préparation de l'environnement de build..." rm -rf /tmp/fws-build diff --git a/configs/baseline/airootfs/etc/calamares/modules/desktop.conf b/configs/baseline/airootfs/etc/calamares/modules/desktop.conf index 3fbc8e7..e731b60 100644 --- a/configs/baseline/airootfs/etc/calamares/modules/desktop.conf +++ b/configs/baseline/airootfs/etc/calamares/modules/desktop.conf @@ -1,65 +1,8 @@ --- -# Module packagechooser : sélection d'environnement de bureau -# Un seul choix possible (boutons radio) - -mode: required -id: desktop - -items: - - id: xfce - packages: [] - name: - - locale: "" - value: "Xfce (Recommandé)" - description: - - locale: "" - value: "Léger, rapide et stable — déjà inclus dans l'ISO, aucun téléchargement." - - - id: kde - packages: - - plasma-meta - - konsole - - dolphin - - sddm - name: - - locale: "" - value: "KDE Plasma" - description: - - locale: "" - value: "Bureau moderne, riche en fonctionnalités et très personnalisable." - - - id: gnome - packages: - - gnome - - gdm - name: - - locale: "" - value: "GNOME" - description: - - locale: "" - value: "Interface épurée centrée sur la productivité." - - - id: hyprland - packages: - - hyprland - - xdg-desktop-portal-hyprland - - xdg-desktop-portal-gtk - - waybar - - wofi - - kitty - - swaybg - - swayidle - - swaylock - - xorg-xwayland - - wl-clipboard - - grim - - slurp - - qt5-wayland - - qt6-wayland - - sddm - name: - - locale: "" - value: "Hyprland" - description: - - locale: "" - value: "Compositeur Wayland dynamique — tiling Wayland (utilisateurs avancés)." +# Minimal Calamares view module config for desktop selection +# This tells Calamares to use our QML page from the branding folder. +module: view +name: desktop +qml: "branding/fws/desktop.qml" +title: "Choix de l'environnement" +description: "Sélectionne le bureau à installer" diff --git a/configs/baseline/airootfs/etc/calamares/modules/fws-desktop-choice/main.py b/configs/baseline/airootfs/etc/calamares/modules/fws-desktop-choice/main.py deleted file mode 100644 index 02ea0b7..0000000 --- a/configs/baseline/airootfs/etc/calamares/modules/fws-desktop-choice/main.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -""" -Calamares job : lit le choix de bureau depuis GlobalStorage -(packagechooser_desktop) et l'écrit dans /run/fws-desktop pour -que shellprocess puisse appeler le bon fws-desktop-init-*. -""" -import libcalamares - -VALID_DESKTOPS = {"xfce", "kde", "gnome", "hyprland"} -FALLBACK = "xfce" - - -def pretty_name(): - return "Sauvegarde du choix d'environnement de bureau" - - -def run(): - gs = libcalamares.globalstorage - - raw = gs.value("packagechooser_desktop") - - # packagechooser peut renvoyer une str ou une liste selon la version - if isinstance(raw, list): - choice = raw[0] if raw else FALLBACK - elif isinstance(raw, str): - choice = raw.strip() - else: - choice = FALLBACK - - if choice not in VALID_DESKTOPS: - choice = FALLBACK - - try: - with open("/run/fws-desktop", "w") as fh: - fh.write(choice) - except OSError as exc: - return ( - "Impossible d'écrire /run/fws-desktop", - f"{exc}\nLe bureau sera xfce par défaut.", - ) - - libcalamares.utils.debug(f"fws-desktop-choice : bureau sélectionné = {choice}") - return None diff --git a/configs/baseline/airootfs/etc/calamares/modules/fws-desktop-choice/module.desc b/configs/baseline/airootfs/etc/calamares/modules/fws-desktop-choice/module.desc deleted file mode 100644 index b01a8f9..0000000 --- a/configs/baseline/airootfs/etc/calamares/modules/fws-desktop-choice/module.desc +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: "job" -name: "fws-desktop-choice" -interface: "python" -script: "main.py" diff --git a/configs/baseline/airootfs/etc/calamares/modules/packagechooser.conf b/configs/baseline/airootfs/etc/calamares/modules/packagechooser.conf deleted file mode 100644 index 6aaa7ff..0000000 --- a/configs/baseline/airootfs/etc/calamares/modules/packagechooser.conf +++ /dev/null @@ -1,33 +0,0 @@ ---- -# packagechooser — un seul choix (radio buttons) -# method: legacy → stocke l'id dans GlobalStorage["packagechooser_packagechooser"] -# Les scripts fws-desktop-init-* gèrent l'installation réelle. - -mode: required -method: legacy - -items: - - id: cli - packages: [] - name: "CLI uniquement" - description: "Installation minimale en ligne de commande, sans interface graphique." - - - id: kde - packages: [] - name: "KDE Plasma" - description: "Bureau moderne, hautement personnalisable et riche en fonctionnalités." - - - id: gnome - packages: [] - name: "GNOME" - description: "Interface épurée et intuitive, centrée sur la productivité." - - - id: xfce - packages: [] - name: "Xfce" - description: "Léger, rapide et stable. Idéal pour tous les systèmes, y compris les machines plus anciennes." - - - id: hyprland - packages: [] - name: "Hyprland" - description: "Compositeur Wayland dynamique avec tiling automatique (utilisateurs avancés)." diff --git a/configs/baseline/airootfs/etc/calamares/modules/packages.conf b/configs/baseline/airootfs/etc/calamares/modules/packages.conf index 2496666..8aefcd2 100644 --- a/configs/baseline/airootfs/etc/calamares/modules/packages.conf +++ b/configs/baseline/airootfs/etc/calamares/modules/packages.conf @@ -1,6 +1,10 @@ --- +# Étape post-unpackfs : retire les paquets live-only. +# Tous les paquets utiles sont déjà dans le squashfs. +# Pas besoin d'installer quoi que ce soit depuis internet. + backend: pacman -update_db: true +update_db: false update_system: false operations: diff --git a/configs/baseline/airootfs/etc/calamares/modules/shellprocess.conf b/configs/baseline/airootfs/etc/calamares/modules/shellprocess.conf index 5baffba..2064ce4 100644 --- a/configs/baseline/airootfs/etc/calamares/modules/shellprocess.conf +++ b/configs/baseline/airootfs/etc/calamares/modules/shellprocess.conf @@ -1,33 +1,21 @@ --- -# dontChroot: true = exécuté dans le live system. -# ${ROOT} → substitué par Calamares (GlobalStorage "rootMountPoint"). -# $(cat ...) → substitution bash pure, Calamares ne la touche PAS. +# Exécuté HORS chroot (live system) pour accéder à l'ISO montée. +# But : restaurer le kernel (retiré du squashfs par mkarchiso) et +# corriger les fichiers mkinitcpio archiso-spécifiques. dontChroot: true -timeout: 7200 script: # Copie le kernel depuis l'ISO vers /boot du système cible - 'cp "$(find /run/archiso/bootmnt -name vmlinuz-linux 2>/dev/null | head -1)" "${ROOT}/boot/vmlinuz-linux"' + - 'DESKTOP="$(cat /run/fws-desktop 2>/dev/null || printf xfce)"' + - 'if [ -z "$DESKTOP" ]; then DESKTOP="xfce"; fi' + - 'if [ ! -f "${ROOT}/usr/local/bin/fws-desktop-init-$DESKTOP" ]; then echo "Script bureau introuvable: $DESKTOP" >&2; exit 1; fi' + - 'chroot "${ROOT}" /bin/bash "/usr/local/bin/fws-desktop-init-$DESKTOP"' - # DNS : copie le vrai fichier resolv.conf (résout le symlink cassé dans le chroot) - - 'cp --remove-destination "$(readlink -f /etc/resolv.conf)" "${ROOT}/etc/resolv.conf"' - - # Bypass temporaire du keyring pacman (vide dans le chroot fraîchement installé) - # Empêche "error: keyring is not writable" lors du pacman -Sy dans le chroot. - - 'sed -i "s/^SigLevel[[:space:]]*=.*/SigLevel = Never/" "${ROOT}/etc/pacman.conf" || true' - - # Lance le script d'init du bureau choisi - - 'chroot "${ROOT}" /bin/bash "/usr/local/bin/fws-desktop-init-$(cat /run/fws-desktop 2>/dev/null || echo xfce)"' - - # Restaure SigLevel correct pour l'utilisateur final - - 'sed -i "s/^SigLevel[[:space:]]*=.*/SigLevel = Required DatabaseOptional/" "${ROOT}/etc/pacman.conf" || true' - - # Copie le keyring du live system → le système installé aura un keyring fonctionnel - - 'mkdir -p "${ROOT}/etc/pacman.d/gnupg" && chmod 700 "${ROOT}/etc/pacman.d/gnupg" && cp -a /etc/pacman.d/gnupg/. "${ROOT}/etc/pacman.d/gnupg/"' - - # Supprime le drop-in archiso (surcharge HOOKS inexistants post-install) + # Supprime le drop-in archiso (surcharge HOOKS avec des hooks inexistants post-install) - 'rm -f "${ROOT}/etc/mkinitcpio.conf.d/archiso.conf"' # Remplace le linux.preset archiso par le preset standard (default + fallback) + # \x27 = ' et \x22 = " pour éviter les conflits de quotes dans YAML/bash - 'printf "PRESETS=(\x27default\x27 \x27fallback\x27)\nALL_kver=\x22/boot/vmlinuz-linux\x22\nALL_config=\x22/etc/mkinitcpio.conf\x22\nALL_microcode=(/boot/*-ucode.img)\ndefault_image=\x22/boot/initramfs-linux.img\x22\nfallback_image=\x22/boot/initramfs-linux-fallback.img\x22\nfallback_options=\x22-S autodetect\x22\n" > "${ROOT}/etc/mkinitcpio.d/linux.preset"' diff --git a/configs/baseline/airootfs/etc/calamares/settings.conf b/configs/baseline/airootfs/etc/calamares/settings.conf index 736723c..6775d1b 100644 --- a/configs/baseline/airootfs/etc/calamares/settings.conf +++ b/configs/baseline/airootfs/etc/calamares/settings.conf @@ -12,7 +12,7 @@ sequence: - keyboard - partition - users - - packagechooser + - desktop - summary - exec: - partition @@ -27,7 +27,6 @@ sequence: - hwclock - networkcfg - packages - - fws-desktop-choice - shellprocess - initcpiocfg - initcpio diff --git a/configs/baseline/airootfs/etc/systemd/system/calamares.service b/configs/baseline/airootfs/etc/systemd/system/calamares.service deleted file mode 100644 index b9b58fc..0000000 --- a/configs/baseline/airootfs/etc/systemd/system/calamares.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=FWS Installer (Calamares) -After=graphical.target - -[Service] -Type=simple -ExecStart=/usr/bin/calamares - -[Install] -WantedBy=graphical.target diff --git a/configs/baseline/airootfs/usr/local/bin/calamares-launcher b/configs/baseline/airootfs/usr/local/bin/calamares-launcher deleted file mode 100644 index 3dfcdf3..0000000 --- a/configs/baseline/airootfs/usr/local/bin/calamares-launcher +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -# Sélection de l'environnement de bureau AVANT le démarrage de Calamares. -# Les services systemd n'héritent pas de $DISPLAY — on force :0 (session Xorg live). - -export DISPLAY=":0" - -DESKTOP="xfce" # valeur par défaut si zenity échoue - -CHOICE=$(zenity \ - --list \ - --title="FWS — Environnement de bureau" \ - --text="Quel environnement de bureau souhaitez-vous installer ?" \ - --column="Environnement" \ - --column="Description" \ - --width=580 \ - --height=340 \ - "Xfce (Recommandé)" "Léger et rapide — idéal pour tous les systèmes" \ - "KDE Plasma" "Moderne, riche en fonctionnalités et personnalisable" \ - "GNOME" "Interface épurée centrée sur la productivité" \ - "Hyprland" "Compositeur Wayland dynamique (utilisateurs avancés)" \ - 2>/dev/null) || true - -case "${CHOICE:-}" in - "Xfce (Recommandé)") DESKTOP="xfce" ;; - "KDE Plasma") DESKTOP="kde" ;; - "GNOME") DESKTOP="gnome" ;; - "Hyprland") DESKTOP="hyprland" ;; - *) DESKTOP="xfce" ;; -esac - -printf '%s' "$DESKTOP" > /run/fws-desktop - -exec /usr/bin/calamares "$@" diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-cli b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-cli deleted file mode 100644 index 8df36d6..0000000 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-cli +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -set -euo pipefail - -. /usr/local/bin/fws-desktop-init-common - -# Mode CLI : pas d'interface graphique. -# On installe uniquement les outils serveur + WinBoat + Wine. -fws_install_packages mariadb mariadb-clients wine \ - qemu-base podman podman-compose git - -mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql \ - >/dev/null 2>&1 || true -fws_enable_services mariadb.service podman.socket - -printf 'kvm\nkvm_intel\nkvm_amd\n' > /etc/modules-load.d/kvm.conf - -fws_disable_services lightdm.service sddm.service gdm.service diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-common b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-common deleted file mode 100644 index d74207e..0000000 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-common +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash -set -euo pipefail - -fws_first_user() { - awk -F: '$3 >= 1000 && $1 != "nobody" { print $1; exit }' /etc/passwd -} - -fws_install_packages() { - pacman -Sy --noconfirm --needed "$@" -} - -fws_enable_services() { - for service in "$@"; do - systemctl enable "$service" >/dev/null 2>&1 || true - done -} - -fws_disable_services() { - for service in "$@"; do - systemctl disable "$service" >/dev/null 2>&1 || true - done -} - -# Retire Xfce + LightDM présents dans le squashfs du live system. -# Appelé par les scripts KDE / GNOME / Hyprland pour ne pas laisser -# les sessions Xfce apparaître dans le sélecteur du DM. -fws_remove_xfce() { - pacman -Rns --noconfirm xfce4 xfce4-goodies \ - lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings \ - 2>/dev/null || true -} - -fws_write_dmrc() { - local user_name="$1" - local session_name="$2" - - if [ -n "$user_name" ] && [ -d "/home/$user_name" ]; then - printf '[Desktop]\nSession=%s\n' "$session_name" > "/home/$user_name/.dmrc" - fi -} - -# Configure SDDM : session par défaut uniquement, PAS d'autologin. -# L'utilisateur devra entrer son mot de passe à chaque démarrage. -fws_write_sddm_config() { - local session_name="$1" - - mkdir -p /etc/sddm.conf.d - printf '[General]\nDefaultSession=%s.desktop\n\n[Theme]\nCurrent=\n' \ - "$session_name" \ - > /etc/sddm.conf.d/50-fws.conf -} - -# Configure LightDM : session par défaut uniquement, PAS d'autologin. -fws_write_lightdm_config() { - local session_name="$1" - - mkdir -p /etc/lightdm/lightdm.conf.d - printf '[Seat:*]\nuser-session=%s\nallow-guest=false\n' \ - "$session_name" \ - > /etc/lightdm/lightdm.conf.d/50-fws.conf -} - -# Paquets installés par défaut sur tous les bureaux -fws_install_base_apps() { - fws_install_packages firefox libreoffice-fresh mariadb mariadb-clients wine - - # MariaDB - mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql \ - >/dev/null 2>&1 || true - fws_enable_services mariadb.service - - # Dépendances WinBoat : KVM, Podman, Podman Compose - fws_install_packages qemu-base podman podman-compose - - # Charge les modules KVM au démarrage - printf 'kvm\nkvm_intel\nkvm_amd\n' > /etc/modules-load.d/kvm.conf - - # Active le socket Podman pour l'utilisateur root - fws_enable_services podman.socket -} diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-gnome b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-gnome deleted file mode 100644 index eff0598..0000000 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-gnome +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -set -euo pipefail - -. /usr/local/bin/fws-desktop-init-common - -first_user="$(fws_first_user)" - -fws_remove_xfce -fws_install_base_apps -fws_install_packages gnome gdm -fws_disable_services lightdm.service sddm.service -fws_enable_services gdm.service -fws_write_dmrc "$first_user" gnome diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-hyprland b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-hyprland deleted file mode 100644 index f93c162..0000000 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-hyprland +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -set -euo pipefail - -. /usr/local/bin/fws-desktop-init-common - -first_user="$(fws_first_user)" - -fws_remove_xfce -fws_install_base_apps -fws_install_packages hyprland xdg-desktop-portal-hyprland xdg-desktop-portal-gtk \ - waybar wofi kitty swaybg swayidle swaylock xorg-xwayland wl-clipboard \ - grim slurp qt5-wayland qt6-wayland sddm -fws_disable_services lightdm.service gdm.service -fws_enable_services sddm.service -fws_write_sddm_config hyprland -fws_write_dmrc "$first_user" hyprland diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-kde b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-kde deleted file mode 100644 index 2e4144b..0000000 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-kde +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -set -euo pipefail - -. /usr/local/bin/fws-desktop-init-common - -first_user="$(fws_first_user)" - -fws_remove_xfce -fws_install_base_apps -fws_install_packages plasma-meta konsole dolphin sddm -fws_disable_services lightdm.service gdm.service -fws_enable_services sddm.service -fws_write_sddm_config plasma -fws_write_dmrc "$first_user" plasma diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-xfce b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-xfce deleted file mode 100644 index e7eab11..0000000 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-xfce +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -set -euo pipefail - -. /usr/local/bin/fws-desktop-init-common - -first_user="$(fws_first_user)" - -# Xfce est déjà dans le squashfs — on s'assure juste qu'il est complet -fws_install_base_apps -fws_install_packages xfce4 xfce4-goodies lightdm lightdm-gtk-greeter -fws_disable_services sddm.service gdm.service -fws_enable_services lightdm.service -fws_write_lightdm_config xfce -fws_write_dmrc "$first_user" xfce diff --git a/configs/baseline/packages.x86_64 b/configs/baseline/packages.x86_64 index e84b61d..4c85b8f 100644 --- a/configs/baseline/packages.x86_64 +++ b/configs/baseline/packages.x86_64 @@ -94,16 +94,18 @@ xorg-xsetroot openbox ttf-dejavu +# --- Bureau FWS installé --- +xfce4 +xfce4-goodies +lightdm +lightdm-gtk-greeter + # --- Calamares (fournis par fws-local) --- calamares kpmcore qt5-base qt5-svg qt6-base -# Dépendances runtime du module packagechooser de Calamares -kcoreaddons -ki18n -kwidgetsaddons # --- Agents VM (pratique pour tester l'ISO) --- qemu-guest-agent diff --git a/configs/baseline/profiledef.sh b/configs/baseline/profiledef.sh index b019980..68c1c64 100644 --- a/configs/baseline/profiledef.sh +++ b/configs/baseline/profiledef.sh @@ -16,11 +16,4 @@ airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' bootstrap_tarball_compression=(xz -9e) file_permissions=( ["/etc/shadow"]="0:0:400" - ["/usr/local/bin/calamares-launcher"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-common"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-xfce"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-kde"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-gnome"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-hyprland"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-cli"]="0:0:755" ) diff --git a/configs/releng/airootfs/etc/systemd/system/calamares.service b/configs/releng/airootfs/etc/systemd/system/calamares.service index b9b58fc..c0898fe 100644 --- a/configs/releng/airootfs/etc/systemd/system/calamares.service +++ b/configs/releng/airootfs/etc/systemd/system/calamares.service @@ -1,10 +1,12 @@ [Unit] -Description=FWS Installer (Calamares) -After=graphical.target +Description=Calamares Installer +After=display-manager.service +Requires=display-manager.service [Service] Type=simple ExecStart=/usr/bin/calamares +Restart=on-failure [Install] -WantedBy=graphical.target +WantedBy=graphical.target \ No newline at end of file diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-cli b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-cli deleted file mode 100644 index 63926f8..0000000 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-cli +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -set -euo pipefail - -. /usr/local/bin/fws-desktop-init-common - -fws_install_packages mariadb mariadb-clients wine \ - qemu-base podman podman-compose git - -mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql \ - >/dev/null 2>&1 || true -fws_enable_services mariadb.service podman.socket - -printf 'kvm\nkvm_intel\nkvm_amd\n' > /etc/modules-load.d/kvm.conf - -fws_disable_services lightdm.service sddm.service gdm.service diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-common b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-common index d74207e..c52910b 100644 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-common +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-common @@ -15,21 +15,13 @@ fws_enable_services() { done } + fws_disable_services() { for service in "$@"; do systemctl disable "$service" >/dev/null 2>&1 || true done } -# Retire Xfce + LightDM présents dans le squashfs du live system. -# Appelé par les scripts KDE / GNOME / Hyprland pour ne pas laisser -# les sessions Xfce apparaître dans le sélecteur du DM. -fws_remove_xfce() { - pacman -Rns --noconfirm xfce4 xfce4-goodies \ - lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings \ - 2>/dev/null || true -} - fws_write_dmrc() { local user_name="$1" local session_name="$2" @@ -39,42 +31,26 @@ fws_write_dmrc() { fi } -# Configure SDDM : session par défaut uniquement, PAS d'autologin. -# L'utilisateur devra entrer son mot de passe à chaque démarrage. -fws_write_sddm_config() { - local session_name="$1" - - mkdir -p /etc/sddm.conf.d - printf '[General]\nDefaultSession=%s.desktop\n\n[Theme]\nCurrent=\n' \ - "$session_name" \ - > /etc/sddm.conf.d/50-fws.conf -} - -# Configure LightDM : session par défaut uniquement, PAS d'autologin. fws_write_lightdm_config() { - local session_name="$1" + local user_name="$1" + local session_name="$2" + + if [ -z "$user_name" ]; then + return 0 + fi mkdir -p /etc/lightdm/lightdm.conf.d - printf '[Seat:*]\nuser-session=%s\nallow-guest=false\n' \ - "$session_name" \ - > /etc/lightdm/lightdm.conf.d/50-fws.conf + printf '[Seat:*]\nautologin-user=%s\nautologin-user-timeout=0\nuser-session=%s\nautologin-session=%s\ngreeter-hide-users=true\nallow-guest=false\n' "$user_name" "$session_name" "$session_name" > /etc/lightdm/lightdm.conf.d/50-fws.conf } -# Paquets installés par défaut sur tous les bureaux -fws_install_base_apps() { - fws_install_packages firefox libreoffice-fresh mariadb mariadb-clients wine +fws_write_sddm_config() { + local user_name="$1" + local session_name="$2" - # MariaDB - mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql \ - >/dev/null 2>&1 || true - fws_enable_services mariadb.service + if [ -z "$user_name" ]; then + return 0 + fi - # Dépendances WinBoat : KVM, Podman, Podman Compose - fws_install_packages qemu-base podman podman-compose - - # Charge les modules KVM au démarrage - printf 'kvm\nkvm_intel\nkvm_amd\n' > /etc/modules-load.d/kvm.conf - - # Active le socket Podman pour l'utilisateur root - fws_enable_services podman.socket -} + mkdir -p /etc/sddm.conf.d + printf '[Autologin]\nUser=%s\nSession=%s.desktop\nRelogin=false\n' "$user_name" "$session_name" > /etc/sddm.conf.d/50-fws.conf +} \ No newline at end of file diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-gnome b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-gnome index eff0598..4d3ed8b 100644 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-gnome +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-gnome @@ -5,9 +5,8 @@ set -euo pipefail first_user="$(fws_first_user)" -fws_remove_xfce -fws_install_base_apps -fws_install_packages gnome gdm -fws_disable_services lightdm.service sddm.service -fws_enable_services gdm.service -fws_write_dmrc "$first_user" gnome +fws_install_packages gnome sddm +fws_disable_services lightdm.service gdm.service +fws_enable_services sddm.service +fws_write_sddm_config "$first_user" gnome +fws_write_dmrc "$first_user" gnome \ No newline at end of file diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-hyprland b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-hyprland index f93c162..8370387 100644 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-hyprland +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-hyprland @@ -5,12 +5,8 @@ set -euo pipefail first_user="$(fws_first_user)" -fws_remove_xfce -fws_install_base_apps -fws_install_packages hyprland xdg-desktop-portal-hyprland xdg-desktop-portal-gtk \ - waybar wofi kitty swaybg swayidle swaylock xorg-xwayland wl-clipboard \ - grim slurp qt5-wayland qt6-wayland sddm +fws_install_packages hyprland xdg-desktop-portal-hyprland xdg-desktop-portal-gtk waybar wofi kitty swaybg swayidle swaylock xorg-xwayland wl-clipboard grim slurp qt5-wayland qt6-wayland sddm fws_disable_services lightdm.service gdm.service fws_enable_services sddm.service -fws_write_sddm_config hyprland -fws_write_dmrc "$first_user" hyprland +fws_write_sddm_config "$first_user" hyprland +fws_write_dmrc "$first_user" hyprland \ No newline at end of file diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-kde b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-kde index 2e4144b..1a0d32e 100644 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-kde +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-kde @@ -5,10 +5,8 @@ set -euo pipefail first_user="$(fws_first_user)" -fws_remove_xfce -fws_install_base_apps fws_install_packages plasma-meta konsole dolphin sddm fws_disable_services lightdm.service gdm.service fws_enable_services sddm.service -fws_write_sddm_config plasma -fws_write_dmrc "$first_user" plasma +fws_write_sddm_config "$first_user" plasma +fws_write_dmrc "$first_user" plasma \ No newline at end of file diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-xfce b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-xfce index e7eab11..ba868ff 100644 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-xfce +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-xfce @@ -5,10 +5,8 @@ set -euo pipefail first_user="$(fws_first_user)" -# Xfce est déjà dans le squashfs — on s'assure juste qu'il est complet -fws_install_base_apps fws_install_packages xfce4 xfce4-goodies lightdm lightdm-gtk-greeter fws_disable_services sddm.service gdm.service fws_enable_services lightdm.service -fws_write_lightdm_config xfce -fws_write_dmrc "$first_user" xfce +fws_write_lightdm_config "$first_user" xfce +fws_write_dmrc "$first_user" xfce \ No newline at end of file diff --git a/configs/releng/packages.x86_64 b/configs/releng/packages.x86_64 index 017e8e1..f94ce57 100644 --- a/configs/releng/packages.x86_64 +++ b/configs/releng/packages.x86_64 @@ -93,16 +93,18 @@ xorg-xsetroot openbox ttf-dejavu +# --- Bureau FWS installé --- +xfce4 +xfce4-goodies +lightdm +lightdm-gtk-greeter + # --- Calamares (fournis par fws-local) --- calamares kpmcore qt5-base qt5-svg qt6-base -# Dépendances runtime du module packagechooser de Calamares -kcoreaddons -ki18n -kwidgetsaddons # --- Agents VM (pratique pour tester l'ISO) --- qemu-guest-agent diff --git a/configs/releng/profiledef.sh b/configs/releng/profiledef.sh index 0d81634..429e6f2 100644 --- a/configs/releng/profiledef.sh +++ b/configs/releng/profiledef.sh @@ -22,10 +22,4 @@ file_permissions=( ["/usr/local/bin/choose-mirror"]="0:0:755" ["/usr/local/bin/Installation_guide"]="0:0:755" ["/usr/local/bin/livecd-sound"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-common"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-cli"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-xfce"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-kde"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-gnome"]="0:0:755" - ["/usr/local/bin/fws-desktop-init-hyprland"]="0:0:755" ) diff --git a/setup-calamares.sh b/setup-calamares.sh index dcad142..1429195 100644 --- a/setup-calamares.sh +++ b/setup-calamares.sh @@ -50,7 +50,7 @@ fi # Vérifications # ============================================================ command -v pacman >/dev/null || error "pacman introuvable (lance depuis Arch / WSL)" -[ "$EUID" -eq 0 ] || exec su -c "bash '$0'" root +[ "$EUID" -eq 0 ] || exec su -c "bash $0" root success "Arch Linux (root) ✓" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -120,31 +120,6 @@ for pkg in "${AUR_PACKAGES[@]}"; do su - "$BUILD_USER" -c "git clone https://aur.archlinux.org/${pkg}.git $BUILD_DIR/$pkg" \ || error "Clonage $pkg échoué" - # Patch spécifique au paquet calamares : - # — s'assurer que packagechooser n'est pas dans SKIP_MODULES - # — s'assurer que le support Python est activé - if [ "$pkg" = "calamares" ]; then - info "Patch du PKGBUILD calamares (activation packagechooser)…" - - PKGBUILD_FILE="$BUILD_DIR/$pkg/PKGBUILD" - - # Dépendances de build pour packagechooser - pacman -S --needed --noconfirm extra-cmake-modules kcoreaddons ki18n kwidgetsaddons - - # Le PKGBUILD utilise un tableau bash : local _skip_modules=(... packagechooser ...) - # On supprime simplement les mots du fichier, quelle que soit la structure. - sed -i -E 's/\bpackagechooserq\b[[:space:]]?//g' "$PKGBUILD_FILE" - sed -i -E 's/\bpackagechooser\b[[:space:]]?//g' "$PKGBUILD_FILE" - - # Vérification - if grep -qE '\bpackagechooser' "$PKGBUILD_FILE"; then - warn "packagechooser encore présent dans le PKGBUILD !" - grep -n 'packagechooser' "$PKGBUILD_FILE" - else - success "packagechooser retiré du SKIP_MODULES ✓" - fi - fi - info "Build $pkg (peut prendre plusieurs minutes)…" su - "$BUILD_USER" -c "cd $BUILD_DIR/$pkg && makepkg -s --noconfirm" \ || error "Build $pkg échoué"