Update the UEFI boot loader entry to reflect FWS install medium branding, add sort-key directive for boot order control, align configuration formatting, and increase udev event timeout to 45 seconds for improved hardware compatibility during boot.
FWS
FWS est une distribution Linux live/installable basée sur Arch Linux, pensée pour remplacer Windows : bureau prêt à l'emploi, jeux (Steam/Proton-GE), réalité virtuelle (SteamVR), compatibilité applicative (winboat/Wine) et outillage de maintenance intégré. L'installateur graphique est Anaconda (celui de Fedora/RHEL), porté sur Arch : payload LiveOS (copie du live sur le disque), spokes FWS (choix du bureau, récapitulatif avant installation), finalisation pacman/GRUB/mkinitcpio en %post.
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 : Anaconda 45 porté sur Arch — payload LiveOS (installe FWS, pas Fedora), page « Récapitulatif avant installation » avec bouton Précédent, choix du bureau intégré
- Affichage live : Xorg + Openbox + splash de préparation (l'installateur peut mettre 1 à 2 min à apparaître en VM)
- Bureaux installables : GNOME, KDE Plasma, XFCE, Hyprland (Wayland — non compatible VR), i3 (X11 — compatible VR/SteamVR), ou ligne de commande seule
- Boot : UEFI (systemd-boot) + BIOS (syslinux) — entrées normale, safe graphics (nomodeset), Réparer FWS (recovery) et speech
- Compression : squashfs (xz)
Ce qu'il y a dans FWS
À l'installation
- Choix du bureau dans Anaconda, avec compatibilité VR affichée (i3 = SteamVR ✔ ; Hyprland = ✘)
- Page récapitulative avant toute écriture disque : config choisie (langue, clavier, fuseau, comptes, partitionnement, bureau, nom de machine) + matériel détecté (GPU, disques, virtualisation, réseau)
- Automatique en fin d'install : drivers GPU (NVIDIA/AMD/Intel), outils invité VM (VMware/VirtualBox/QEMU/Hyper-V), PipeWire + pavucontrol, Bluetooth (BlueZ + blueman), luminosité (brightnessctl), pare-feu firewalld activé, Steam + Wine + Monado + MangoHud + gamemode, clavier/locale, hostname, sudo pour l'utilisateur créé, branding FWS
Sur le système installé (outillage fws-*)
| Commande | Rôle | Accès |
|---|---|---|
fws-hello |
Bienvenue au 1er démarrage (mise à jour, codecs, Proton-GE, VR, raccourcis) | auto au 1er login |
fws-update |
Mise à jour complète (pacman + cache + orphelins + flatpak) | bouton de la barre |
fws-keys |
Panneau des raccourcis clavier réels (lit la config Hyprland/i3) | Super+K, bouton ⌨ |
fws-powermenu |
Verrouiller / déconnexion / suspendre / redémarrer / éteindre | Super+X, bouton |
fws-about |
« À propos » : le projet FWS + infos système | menu d'applications |
fws-vr-setup |
Drivers/runtimes VR (Vive/Index → SteamVR natif ; Quest → ALVR ; Monado) | Super+Shift+V (i3), menu |
fws-proton-ge |
Installe/actualise Proton-GE pour Steam (vérif sha512) | fws-hello, terminal |
fws-recovery |
Réparation guidée : GRUB, initramfs, pacman, chroot | entrée de boot « Réparer FWS » |
Hyprland & i3 : parité visuelle
Même identité Catppuccin Mocha (nuances de bleu) sur les deux : barre flottante arrondie (waybar / polybar) avec date+heure, indicateur de mises à jour, volume/réseau/CPU/RAM/luminosité/Bluetooth cliquables ; menus assortis (wofi / rofi) ; mêmes raccourcis (déclarés avec descriptions → Super+K) ; Dolphin en gestionnaire de fichiers ; thème SDDM « fws » maison (pur QtQuick, accent adapté au bureau ; GNOME garde GDM avec bannière FWS).
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 :
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 :
# 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 :
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 :
# 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.shdésactive automatiquement le sandbox landlock de pacman ≥ 7 (incompatible avec le kernel WSL) en ajoutantDisableSandboxdans/etc/pacman.conf. Tu n'as rien à faire.
Côté Arch Linux native (alternative)
Si tu build depuis une vraie Arch (pas WSL) :
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.
# 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 demkarchiso).sudopeut demander ton mot de passe. - L'image utilisée est
docker.io/library/archlinux:latest, pull explicite à chaque run (le taglatestn'est pas re-résolu sinon). - Le dépôt est monté au même chemin absolu dans le conteneur : l'ISO (
out/) etlocal-repo/reviennent directement sur l'hôte (re-chownautomatique 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
pacmanet unID/ID_LIKE« arch » dans/etc/os-release.
Démarrage rapide
Depuis Git Bash sur Windows (à la racine du repo) :
# Étape 1 : compilation des paquets AUR (winboat) + PKGBUILD locaux
# (anaconda porté sur Arch + ses dépendances python)
# → crée local-repo/ avec les .pkg.tar.zst
./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)
- Détection environnement : si lancé depuis Git Bash, bascule dans
wsl.exe -d Arch -u root. - Patch pacman : désactive landlock sur WSL (
DisableSandbox). - Refresh keyring :
pacman-key --init && --populate archlinux, mise à jourarchlinux-keyring. pacman -Syucomplet (obligatoire — sinonmakepkgplante sur les "conflicting files" lors des splits de paquets typegcc-libs).- Install des outils de build :
base-devel git. - Création d'un utilisateur
fwsbuildnon-root avecsudoNOPASSWD (makepkg refuse de tourner en root). - Clone + build AUR :
winboat-binviamakepkg -s --noconfirm, plus les PKGBUILD locaux depkgbuilds/(anaconda, anaconda-widgets, pykickstart, blivet, python-meh patché…). Le build est incrémental : un paquet déjà présent danslocal-repo/à la bonne version est sauté. - Création du repo local :
repo-add local-repo/fws-local.db.tar.gz. - Cleanup : suppression de l'utilisateur
fwsbuild.
Durée : quelques minutes en incrémental ; le premier build complet (anaconda + deps) est plus long.
Ce que fait build.sh (étape par étape)
- Détection environnement : Git Bash → bascule dans WSL ; sinon exécution locale.
- Update miroirs :
reflector --latest 10 --sort rate. - Install
archiso. - Fusion configs :
cp -ar configs/releng/* /tmp/fws-build/releng/puis overlayconfigs/baseline/*par-dessus (baseline prioritaire). - Activation NetworkManager sur le live (symlink réel
multi-user.target.wants/). - Injection du repo local : ajoute
[fws-local](SigLevel = Optional TrustAll) en tête depacman.conf. dos2unixsur l'arborescence (au cas où tu as édité depuis Windows).mkarchiso -v -w /tmp/fws-build/work -o out/ /tmp/fws-build/releng.- Cleanup du workdir.
Durée : 5–15 minutes selon la machine et le cache pacman.
Test rapide en QEMU
./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
- Menu de boot : installation (défaut), safe graphics (
nomodeset), Réparer FWS (fws.recovery=1→ assistant consolefws-recovery), speech. Toutes les entrées plafonnent les workers udev bloqués (udev.event_timeout=45) systemd→ autologin root surtty1.zprofile→ mode recovery si demandé, sinonstartx.xinitrc→ Openbox + splash « Préparation de l'installateur » (le démarrage peut prendre 1 à 2 min en VM), bind mount/run/rootfsbase(source du payload LiveOS), patch du hub Anaconda, puisdbus-run-session liveinst- Anaconda : accueil → hub (langue, clavier, disque, utilisateur, bureau FWS) → « Commencer l'installation » → page Récapitulatif (bouton Précédent / Lancer l'installation) → installation → écran de réussite → extinction
- En cas d'échec : écran de debug avec tous les logs (liveinst, %post chrooté, anaconda)
Personnalisation
- Paquets du live :
configs/releng/packages.x86_64 - Paquets baseline :
configs/baseline/packages.x86_64 - Overlay rootfs :
configs/releng/airootfs/ouconfigs/baseline/airootfs/ - Kickstart de l'installateur :
configs/releng/airootfs/usr/share/anaconda/interactive-defaults.ks(payload LiveOS via--liveinst+ tout le%post: bureaux, drivers, pare-feu, branding) - Spokes Anaconda FWS :
configs/baseline/airootfs/usr/lib/python3.14/site-packages/pyanaconda/ui/gui/spokes/(fws_desktop.py,fws_recap.py) + glades dansusr/share/anaconda/ui/spokes/ - Configs bureaux & thèmes :
configs/releng/airootfs/usr/local/share/fws/(hyprland, i3, waybar, polybar, wofi, rofi, picom) etusr/share/sddm/themes/fws/ - Outils fws-* :
configs/releng/airootfs/usr/local/bin/ - Branding ISO :
configs/releng/profiledef.sh(iso_name,iso_label,iso_publisher)
⚠ Règle d'or de la fusion : au build,
configs/baseline/*est copié par-dessusconfigs/releng/*— tout fichier homonyme de baseline écrase celui de releng. Ça concerne notammentprofiledef.sh,packages.x86_64,pacman.conf,efiboot/loader/entries/01-archiso-linux.confetsyslinux/syslinux.cfg: toute modification d'un de ces fichiers doit être reportée dans les deux profils (des divergences ont déjà fait perdre silencieusementfirewalldet le capudev.event_timeoutd'une ISO). Vérifier avec :comm -12 <(cd configs/baseline && find . -type f | sort) <(cd configs/releng && find . -type f | sort)
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 bleu 1-2 min au boot du live | Normal en VM : un worker udev traîne (plafonné à 45 s) — le splash « Préparation de l'installateur » l'indique. Attendre. |
| L'installateur semble figé / fenêtre blanche | Rendu logiciel en VM : la fenêtre Anaconda se peint lentement. Patienter quelques secondes. |
| Session Hyprland/i3 : fenêtres au contenu noir en VM | Compositing sur GPU virtuel — picom est auto-désactivé en VM (config FWS) ; si tu l'as réactivé, pkill picom. |
| Hyprland crash au lancement en VM | Géré : le wrapper fws-hyprland force le rendu logiciel (kms_swrast/llvmpipe) sous hyperviseur. Sur vrai GPU, rendu matériel normal. |
| Steam plante à l'install de SteamVR | En VM : steam -cef-disable-gpu -cef-disable-gpu-compositing (et la VR ne peut PAS marcher en VM — GPU/USB inaccessibles). |
| Icône Bluetooth absente / blueman en erreur | Pas d'adaptateur Bluetooth (cas VM) : le module de barre se cache et l'applet ne se lance pas — comportement voulu. |
| Le système installé ne boote plus | Booter l'ISO → entrée « Réparer FWS (recovery) » → réinstaller GRUB / régénérer l'initramfs. |
| Réinstallation par-dessus une install existante | Le kickstart nettoie tout (zerombr + clearpart --all), mais en cas de comportement étrange au 2ᵉ passage, effacer/recréer le disque virtuel. |
| ISO qui ne boote qu'en UEFI | Connu : l'ISO actuelle n'embarque que l'image El-Torito EFI (les bootmodes BIOS du profil ne produisent pas /syslinux) — à élucider ; utiliser une VM/machine UEFI. |
| Retours à la ligne CRLF | build.sh lance dos2unix automatiquement, mais si tu modifies pendant le build, relancer. |
Logs utiles
# Pendant le build
tail -f /tmp/fws-build/work/iso/arch/pkglist.x86_64.txt
# Dans le LIVE (Ctrl+Alt+F2, login root) — pendant/après l'installation
journalctl -b # système
cat /tmp/fws-liveinst.log # sortie complète de liveinst/anaconda
cat /tmp/anaconda.log # log principal anaconda
cat /tmp/fws-post-chroot.log # %post chrooté = grub-install/mkinitcpio
# En cas d'échec, l'écran de debug du live affiche déjà tout ça (zenity).
# Sur le système installé
cat /var/log/fws-post.log # trace complète du %post d'installation
journalctl -b # premier démarrage
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 (Arch Linux), redistribué sous les termes de la GPL-3.0-or-later.
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.
Base légale complète
| Document | Objet |
|---|---|
| LICENSE | Texte intégral GPL-3.0-or-later |
| COPYRIGHT.md | Droits d'auteur du dépôt & périmètre |
| LICENSING.md | Politique de licences, offre écrite GPL (sources), checklist release |
| THIRD-PARTY-LICENSES.md | Inventaire des logiciels tiers (Anaconda, deps…) & analyse de compatibilité |
| TRADEMARKS.md | Marques & non-affiliation (Arch, Red Hat, Fedora, Anaconda, Windows…) |
| NOTICE | Attributions Apache/MIT/BSD |
| AUTHORS.rst | Auteurs FWS + auteurs originaux d'archiso |
| CONTRIBUTING.rst | Contribuer (inbound = outbound, DCO) |
✅ Déjà réglé : offre écrite GPL (URL dépôt + contact),
os-releaseFWS (le live ne s'annonce plus « Arch Linux », via hook pacman) etmotd(plus de lienarchlinux.org).⚠️ Reste avant diffusion publique (détail dans LICENSING.md §6) : rendre le dépôt public (sinon l'offre GPL n'est pas opposable), retirer le branding Red Hat/Fedora de l'UI Anaconda lors de la migration, et trancher sur
python-iso639(AGPL-3.0-only). Ces documents ne sont pas un avis juridique.