# FWS **FWS** est une distribution Linux live/installable basée sur **Arch Linux**, livrée sous forme d'ISO bootable BIOS/UEFI. L'installateur graphique est **en cours de migration de Calamares vers Anaconda** (Calamares retiré au commit 05ae9c3, intégration d'Anaconda en cours — voir le chantier dédié). Le projet est conçu pour être **construit depuis Windows via WSL** (les scripts détectent Git Bash et basculent automatiquement dans WSL), mais fonctionne aussi directement depuis une **Arch Linux native** ou depuis **toute distribution non-Arch (Fedora, Ubuntu…) via une bascule automatique dans un conteneur Arch podman**. --- ## Aperçu - **Base** : Arch Linux (rolling release) - **Installateur** : en migration Calamares → Anaconda (Calamares retiré, Anaconda en préparation ; payload `liveimg` pour installer FWS et non Fedora) - **Affichage live** : Xorg + Openbox (session graphique conservée pour l'installateur) - **Bureaux installables** : XFCE, KDE Plasma, GNOME, Hyprland (choix à l'installation) - **Boot** : BIOS (syslinux) + UEFI (systemd-boot) - **Compression** : squashfs (xz) --- ## Environnement requis — INSTALLATION ULTRA PRÉCISE ### Côté Windows (machine hôte) | Composant | Version / état requis | Commande de vérif | |---|---|---| | Windows | 10 (22H2+) ou 11 | `winver` | | WSL | **WSL 2** (pas WSL 1) | `wsl --status` | | Virtualisation CPU | Activée dans le BIOS (VT-x / AMD-V) | Gestionnaire des tâches → Performance → CPU → "Virtualisation : Activé" | | Git for Windows | ≥ 2.40 (fournit Git Bash) | `git --version` | | Espace disque libre | ≥ 25 GB sur la partition WSL | — | | RAM | ≥ 8 GB (16 GB recommandés) | — | #### 1. Activer WSL 2 Dans **PowerShell administrateur** : ```powershell wsl --install --no-distribution wsl --set-default-version 2 wsl --update ``` Puis **redémarrer Windows**. #### 2. Installer Arch Linux dans WSL Arch n'est pas dans le store Microsoft. Installer **ArchWSL** : ```powershell # Télécharger la dernière release Invoke-WebRequest -Uri "https://github.com/yuk7/ArchWSL/releases/latest/download/Arch.zip" -OutFile "$env:TEMP\Arch.zip" Expand-Archive "$env:TEMP\Arch.zip" -DestinationPath "$env:LOCALAPPDATA\ArchWSL" & "$env:LOCALAPPDATA\ArchWSL\Arch.exe" ``` Au premier lancement, la distribution s'enregistre sous le nom **`Arch`** (ce nom est attendu par les scripts — il est paramétrable via `ARCH_WSL_DISTRO` si besoin). Vérifier : ```powershell wsl -l -v # Doit afficher : # NAME STATE VERSION # * Arch Stopped 2 ``` #### 3. Installer Git for Windows Télécharger depuis https://git-scm.com/download/win et installer avec les options par défaut. **Git Bash** est inclus. --- ### Côté WSL Arch (préparation système) Le **premier lancement** de la WSL ouvre une session root. Effectuer une seule fois : ```bash # 1. Initialiser le keyring (sinon pacman refuse tout install signé) pacman-key --init pacman-key --populate archlinux # 2. Mettre à jour le keyring AVANT toute autre opération # (les WSL fraîches ont un keyring périmé) pacman -Sy --noconfirm archlinux-keyring # 3. Mise à jour complète du système pacman -Syu --noconfirm # 4. Vérifier que /tmp est bien un tmpfs (sinon mkarchiso lent) mount | grep '/tmp' ``` > **Note** : le script `setup-aur.sh` désactive automatiquement le sandbox landlock de pacman ≥ 7 (incompatible avec le kernel WSL) en ajoutant `DisableSandbox` dans `/etc/pacman.conf`. Tu n'as rien à faire. --- ### Côté Arch Linux native (alternative) Si tu build depuis une vraie Arch (pas WSL) : ```bash sudo pacman -Syu sudo pacman -S --needed base-devel git archiso reflector dos2unix ``` Les scripts détectent l'absence de WSL et s'exécutent en local. Il faut être **root** ou avoir `sudo` configuré. --- ### Côté Fedora / Linux non-Arch (conteneur podman) Sur une distribution **qui n'est pas Arch** (Fedora, Ubuntu, Debian…), les scripts détectent l'hôte non-Arch et **se relancent automatiquement dans un conteneur Arch** via podman. Tu n'as qu'à installer podman, puis lancer les scripts normalement. ```bash # Fedora sudo dnf install -y podman # Debian / Ubuntu sudo apt install -y podman # Puis, à la racine du repo, exactement comme sur Arch : ./setup-aur.sh ./build.sh ``` Détails utiles : - **podman rootful obligatoire** : les scripts préfixent `sudo podman` (rootless ne gère pas les mounts/chroot de `mkarchiso`). `sudo` peut demander ton mot de passe. - L'image utilisée est `docker.io/library/archlinux:latest`, pull explicite à chaque run (le tag `latest` n'est pas re-résolu sinon). - Le dépôt est monté **au même chemin absolu** dans le conteneur : l'ISO (`out/`) et `local-repo/` reviennent directement sur l'hôte (re-`chown` automatique vers toi). - Le cache pacman est conservé entre les runs dans le volume `fws-pacman-cache`. - SELinux enforcing (Fedora) est géré par `--privileged` — rien à configurer. > Pour forcer l'exécution **locale** (si tu es déjà sur Arch et que pacman est là), > la bascule ne se déclenche pas : la détection exige `pacman` **et** un > `ID`/`ID_LIKE` « arch » dans `/etc/os-release`. --- ## Démarrage rapide Depuis **Git Bash sur Windows** (à la racine du repo) : ```bash # Étape 1 : compilation des paquets AUR (winboat) + deps locales # → crée local-repo/ avec les .pkg.tar.zst # (Calamares retiré ; l'installateur Anaconda est un chantier en cours) ./setup-aur.sh # Étape 2 : build de l'ISO via mkarchiso # → fusionne configs/releng + configs/baseline # → injecte le repo local dans pacman.conf # → sort l'ISO dans ./out/ ./build.sh ``` L'ISO finale est générée dans `./out/FWS-YYYY.MM.DD-x86_64.iso`. --- ## Ce que fait `setup-aur.sh` (étape par étape) 1. **Détection environnement** : si lancé depuis Git Bash, bascule dans `wsl.exe -d Arch -u root`. 2. **Patch pacman** : désactive landlock sur WSL (`DisableSandbox`). 3. **Refresh keyring** : `pacman-key --init && --populate archlinux`, mise à jour `archlinux-keyring`. 4. **`pacman -Syu`** complet (obligatoire — sinon `makepkg` plante sur les "conflicting files" lors des splits de paquets type `gcc-libs`). 5. **Install des outils de build** : `base-devel git`. 6. **Création d'un utilisateur `fwsbuild`** non-root avec `sudo` NOPASSWD (makepkg refuse de tourner en root). 7. **Clone + build AUR** : `winboat-bin` via `makepkg -s --noconfirm`, plus les PKGBUILD locaux de `pkgbuilds/` (deps Anaconda). Calamares n'est plus compilé. 8. **Création du repo local** : `repo-add local-repo/fws-local.db.tar.gz`. 9. **Cleanup** : suppression de l'utilisateur `fwsbuild`. **Durée** : quelques minutes (winboat-bin + deps locales ; Calamares et ses ~12 dépendances Qt6 ne sont plus compilés). --- ## Ce que fait `build.sh` (étape par étape) 1. **Détection environnement** : Git Bash → bascule dans WSL ; sinon exécution locale. 2. **Update miroirs** : `reflector --latest 10 --sort rate`. 3. **Install `archiso`**. 4. **Fusion configs** : `cp -ar configs/releng/* /tmp/fws-build/releng/` puis overlay `configs/baseline/*` par-dessus (baseline prioritaire). 5. **Activation NetworkManager** sur le live (symlink réel `multi-user.target.wants/`). 6. **Injection du repo local** : ajoute `[fws-local]` (`SigLevel = Optional TrustAll`) en tête de `pacman.conf`. 7. **`dos2unix`** sur l'arborescence (au cas où tu as édité depuis Windows). 8. **`mkarchiso -v -w /tmp/fws-build/work -o out/ /tmp/fws-build/releng`**. 9. **Cleanup** du workdir. **Durée** : 5–15 minutes selon la machine et le cache pacman. --- ## Test rapide en QEMU ```bash ./scripts/run_archiso.sh -i out/FWS-*.iso # BIOS ./scripts/run_archiso.sh -u -i out/FWS-*.iso # UEFI ``` --- ## Structure du projet | Chemin | Rôle | |---|---| | `setup-aur.sh` | Build des paquets AUR (winboat) + PKGBUILD locaux, crée `local-repo/` | | `build.sh` | Build de l'ISO via `mkarchiso` | | `configs/releng/` | Profil principal (base ArchISO releng) | | `configs/baseline/` | Overlay FWS (surcharge le profil releng) — **prioritaire** sur releng | | `local-repo/` | Repo pacman local (généré par `setup-aur.sh`) | | `out/` | ISOs générées | | `fws/mkarchiso` | Binaire `mkarchiso` embarqué (fork) | | `scripts/run_archiso.sh` | Lanceur QEMU | --- ## Séquence de boot de l'ISO 1. Démarrage de l'ISO FWS (BIOS ou UEFI) 2. `systemd` → autologin root sur `tty1` 3. `.zprofile` → `startx` 4. `.xinitrc` → Openbox (session graphique du live) 5. **[Chantier C]** lancement de l'installateur Anaconda — pas encore câblé (Calamares retiré au commit 05ae9c3) --- ## Personnalisation - **Paquets du live** : `configs/releng/packages.x86_64` - **Paquets baseline** : `configs/baseline/packages.x86_64` - **Overlay rootfs** : `configs/releng/airootfs/` ou `configs/baseline/airootfs/` - **Kickstart de l'installateur** : `configs/releng/airootfs/usr/share/anaconda/interactive-defaults.ks` (payload liveimg + %post) - **Branding ISO** : `configs/releng/profiledef.sh` (`iso_name`, `iso_label`, `iso_publisher`) --- ## Dépannage | Symptôme | Cause / fix | |---|---| | `Aucune distribution WSL Arch joignable` | Aucune distro Arch n'est installée/joignable. Les scripts auto-détectent désormais toute distro dont le nom contient « arch » (via `wsl -l -q`) ; installe ArchWSL (nom `Arch`) ou `wsl --install -d archlinux`, ou force `ARCH_WSL_DISTRO=NomDeMaDistro`. | | `WSL introuvable` | WSL n'est pas installé. PowerShell admin : `wsl --install`, puis installe une distro Arch. | | `pacman: signature unknown trust` | Keyring périmé → `pacman -Sy --noconfirm archlinux-keyring` puis relancer. | | `makepkg: conflicting files` | `pacman -Syu` incomplet avant le build. Relancer `setup-aur.sh`. | | `mkarchiso` plante sur `[fws-local]` | Le repo local n'a pas été généré. Relancer `setup-aur.sh`. | | Écran noir après login Hyprland | Tu testes dans VirtualBox → pas d'accélération GPU. Utiliser QEMU/KVM avec `virtio-gpu` ou bare-metal. | | Retours à la ligne CRLF | `build.sh` lance `dos2unix` automatiquement, mais si tu modifies pendant le build, relancer. | ### Logs utiles ```bash # Pendant le build tail -f /tmp/fws-build/work/iso/arch/pkglist.x86_64.txt # Dans l'ISO (autologin tty1) journalctl -b # Hyprland post-install cat ~/.local/share/hyprland/hyprland.log ``` --- ## Variables d'environnement supportées | Variable | Effet | Défaut | |---|---|---| | `ARCH_WSL_DISTRO` | Nom de la distro WSL Arch | `Arch` | | `MSYS_NO_PATHCONV` | Désactive la conversion auto des chemins Git Bash | `1` (forcé dans les scripts) | --- ## Licence & origine 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 la liste des auteurs originaux d'archiso. Les modifications spécifiques à FWS (scripts `build.sh`, `setup-aur.sh`, overlay `configs/baseline/`, intégration de l'installateur + Xorg autostart, chaîne de build WSL) sont également distribuées sous GPL-3.0-or-later.