chore: migrate from calamares to anaconda installer
Remove Calamares compilation and configuration, replace with Anaconda installer setup. Changes: - Remove Calamares-related entries from .gitignore - Update README with migration status from Calamares to Anaconda - Rename setup-calamares.sh references to setup-aur.sh - Remove Calamares packages from package lists - Add anaconda and liveimg payload packages - Add Anaconda kickstart configuration (interactive-defaults.ks) - Update boot sequence documentation: remove Calamares desktop selection, simplify to Openbox live environment - Remove Calamares-specific troubleshooting entries - Clean up .xinitrc and .zlogin to remove Calamares launcher - Update build scripts to reference local repo generically instead of Calamares-specific
This commit is contained in:
-12
@@ -2,15 +2,3 @@ out/
|
|||||||
local-repo/
|
local-repo/
|
||||||
configs/baseline/airootfs/etc/systemd/system/multi-user.target.wants/
|
configs/baseline/airootfs/etc/systemd/system/multi-user.target.wants/
|
||||||
configs/releng/airootfs/etc/systemd/system/multi-user.target.wants/
|
configs/releng/airootfs/etc/systemd/system/multi-user.target.wants/
|
||||||
# Ignore le contenu généré de usr/lib (libs Calamares) MAIS conserve le module
|
|
||||||
# de choix de bureau FWS — sinon il est absent des clones et la sélection
|
|
||||||
# multi-desktop est cassée pour quiconque clone le dépôt.
|
|
||||||
configs/baseline/airootfs/usr/lib/*
|
|
||||||
!configs/baseline/airootfs/usr/lib/calamares/
|
|
||||||
configs/baseline/airootfs/usr/lib/calamares/*
|
|
||||||
!configs/baseline/airootfs/usr/lib/calamares/modules/
|
|
||||||
configs/baseline/airootfs/usr/lib/calamares/modules/*
|
|
||||||
!configs/baseline/airootfs/usr/lib/calamares/modules/fws-desktop-choice/
|
|
||||||
configs/baseline/airootfs/usr/bin/
|
|
||||||
configs/baseline/airootfs/usr/include/
|
|
||||||
configs/baseline/airootfs/usr/share/calamares/branding/default/
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# FWS
|
# FWS
|
||||||
|
|
||||||
**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.
|
**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.
|
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.
|
||||||
|
|
||||||
@@ -9,8 +9,8 @@ Le projet est conçu pour être **construit depuis Windows via WSL** (les script
|
|||||||
## Aperçu
|
## Aperçu
|
||||||
|
|
||||||
- **Base** : Arch Linux (rolling release)
|
- **Base** : Arch Linux (rolling release)
|
||||||
- **Installeur** : Calamares 3.4.2 (compilé depuis l'AUR, servi via un repo pacman local)
|
- **Installateur** : en migration Calamares → Anaconda (Calamares retiré, Anaconda en préparation ; payload `liveimg` pour installer FWS et non Fedora)
|
||||||
- **Affichage live** : Xorg + Openbox, lancement automatique de Calamares
|
- **Affichage live** : Xorg + Openbox (session graphique conservée pour l'installateur)
|
||||||
- **Bureaux installables** : XFCE, KDE Plasma, GNOME, Hyprland (choix à l'installation)
|
- **Bureaux installables** : XFCE, KDE Plasma, GNOME, Hyprland (choix à l'installation)
|
||||||
- **Boot** : BIOS (syslinux) + UEFI (systemd-boot)
|
- **Boot** : BIOS (syslinux) + UEFI (systemd-boot)
|
||||||
- **Compression** : squashfs (xz)
|
- **Compression** : squashfs (xz)
|
||||||
@@ -90,7 +90,7 @@ pacman -Syu --noconfirm
|
|||||||
mount | grep '/tmp'
|
mount | grep '/tmp'
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note** : le script `setup-calamares.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.
|
> **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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -112,9 +112,10 @@ Les scripts détectent l'absence de WSL et s'exécutent en local. Il faut être
|
|||||||
Depuis **Git Bash sur Windows** (à la racine du repo) :
|
Depuis **Git Bash sur Windows** (à la racine du repo) :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Étape 1 : compilation de Calamares + winboat depuis l'AUR
|
# Étape 1 : compilation des paquets AUR (winboat) + deps locales
|
||||||
# → crée local-repo/ avec les .pkg.tar.zst signés
|
# → crée local-repo/ avec les .pkg.tar.zst
|
||||||
./setup-calamares.sh
|
# (Calamares retiré ; l'installateur Anaconda est un chantier en cours)
|
||||||
|
./setup-aur.sh
|
||||||
|
|
||||||
# Étape 2 : build de l'ISO via mkarchiso
|
# Étape 2 : build de l'ISO via mkarchiso
|
||||||
# → fusionne configs/releng + configs/baseline
|
# → fusionne configs/releng + configs/baseline
|
||||||
@@ -127,7 +128,7 @@ L'ISO finale est générée dans `./out/FWS-YYYY.MM.DD-x86_64.iso`.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Ce que fait `setup-calamares.sh` (étape par étape)
|
## 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`.
|
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`).
|
2. **Patch pacman** : désactive landlock sur WSL (`DisableSandbox`).
|
||||||
@@ -135,11 +136,11 @@ L'ISO finale est générée dans `./out/FWS-YYYY.MM.DD-x86_64.iso`.
|
|||||||
4. **`pacman -Syu`** complet (obligatoire — sinon `makepkg` plante sur les "conflicting files" lors des splits de paquets type `gcc-libs`).
|
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`.
|
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).
|
6. **Création d'un utilisateur `fwsbuild`** non-root avec `sudo` NOPASSWD (makepkg refuse de tourner en root).
|
||||||
7. **Clone + build AUR** : `calamares` puis `winboat-bin` via `makepkg -s --noconfirm`.
|
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`.
|
8. **Création du repo local** : `repo-add local-repo/fws-local.db.tar.gz`.
|
||||||
9. **Cleanup** : suppression de l'utilisateur `fwsbuild`.
|
9. **Cleanup** : suppression de l'utilisateur `fwsbuild`.
|
||||||
|
|
||||||
**Durée** : 15–40 minutes (Calamares = ~12 dépendances Qt6 à compiler).
|
**Durée** : quelques minutes (winboat-bin + deps locales ; Calamares et ses ~12 dépendances Qt6 ne sont plus compilés).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -172,11 +173,11 @@ L'ISO finale est générée dans `./out/FWS-YYYY.MM.DD-x86_64.iso`.
|
|||||||
|
|
||||||
| Chemin | Rôle |
|
| Chemin | Rôle |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `setup-calamares.sh` | Build Calamares + winboat depuis l'AUR, crée `local-repo/` |
|
| `setup-aur.sh` | Build des paquets AUR (winboat) + PKGBUILD locaux, crée `local-repo/` |
|
||||||
| `build.sh` | Build de l'ISO via `mkarchiso` |
|
| `build.sh` | Build de l'ISO via `mkarchiso` |
|
||||||
| `configs/releng/` | Profil principal (base ArchISO releng) |
|
| `configs/releng/` | Profil principal (base ArchISO releng) |
|
||||||
| `configs/baseline/` | Overlay FWS (Calamares, branding, scripts desktop-init) — **prioritaire** sur releng |
|
| `configs/baseline/` | Overlay FWS (surcharge le profil releng) — **prioritaire** sur releng |
|
||||||
| `local-repo/` | Repo pacman local (généré par `setup-calamares.sh`) |
|
| `local-repo/` | Repo pacman local (généré par `setup-aur.sh`) |
|
||||||
| `out/` | ISOs générées |
|
| `out/` | ISOs générées |
|
||||||
| `fws/mkarchiso` | Binaire `mkarchiso` embarqué (fork) |
|
| `fws/mkarchiso` | Binaire `mkarchiso` embarqué (fork) |
|
||||||
| `scripts/run_archiso.sh` | Lanceur QEMU |
|
| `scripts/run_archiso.sh` | Lanceur QEMU |
|
||||||
@@ -188,10 +189,8 @@ L'ISO finale est générée dans `./out/FWS-YYYY.MM.DD-x86_64.iso`.
|
|||||||
1. Démarrage de l'ISO FWS (BIOS ou UEFI)
|
1. Démarrage de l'ISO FWS (BIOS ou UEFI)
|
||||||
2. `systemd` → autologin root sur `tty1`
|
2. `systemd` → autologin root sur `tty1`
|
||||||
3. `.zprofile` → `startx`
|
3. `.zprofile` → `startx`
|
||||||
4. `.xinitrc` → Openbox + Calamares
|
4. `.xinitrc` → Openbox (session graphique du live)
|
||||||
5. Utilisateur choisit son bureau (XFCE / KDE / GNOME / Hyprland) via `packagechooser`
|
5. **[Chantier C]** lancement de l'installateur Anaconda — pas encore câblé (Calamares retiré au commit 05ae9c3)
|
||||||
6. Calamares installe le système → `shellprocess` appelle `/usr/local/bin/fws-desktop-init-<bureau>` qui installe les paquets et configure le display manager
|
|
||||||
7. Reboot → connexion automatique sur le bureau choisi
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -200,11 +199,8 @@ L'ISO finale est générée dans `./out/FWS-YYYY.MM.DD-x86_64.iso`.
|
|||||||
- **Paquets du live** : `configs/releng/packages.x86_64`
|
- **Paquets du live** : `configs/releng/packages.x86_64`
|
||||||
- **Paquets baseline** : `configs/baseline/packages.x86_64`
|
- **Paquets baseline** : `configs/baseline/packages.x86_64`
|
||||||
- **Overlay rootfs** : `configs/releng/airootfs/` ou `configs/baseline/airootfs/`
|
- **Overlay rootfs** : `configs/releng/airootfs/` ou `configs/baseline/airootfs/`
|
||||||
- **Modules / séquence Calamares** : `configs/baseline/airootfs/etc/calamares/settings.conf`
|
- **Kickstart de l'installateur** : `configs/releng/airootfs/usr/share/anaconda/interactive-defaults.ks` (payload liveimg + %post)
|
||||||
- **Choix des bureaux** : `configs/baseline/airootfs/etc/calamares/modules/packagechooser.conf`
|
|
||||||
- **Scripts d'install bureau** : `configs/releng/airootfs/usr/local/bin/fws-desktop-init-*`
|
|
||||||
- **Branding ISO** : `configs/releng/profiledef.sh` (`iso_name`, `iso_label`, `iso_publisher`)
|
- **Branding ISO** : `configs/releng/profiledef.sh` (`iso_name`, `iso_label`, `iso_publisher`)
|
||||||
- **Branding Calamares** : `configs/baseline/airootfs/etc/calamares/branding/fws/`
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -215,11 +211,8 @@ L'ISO finale est générée dans `./out/FWS-YYYY.MM.DD-x86_64.iso`.
|
|||||||
| `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`. |
|
| `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. |
|
| `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. |
|
| `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-calamares.sh`. |
|
| `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-calamares.sh`. |
|
| `mkarchiso` plante sur `[fws-local]` | Le repo local n'a pas été généré. Relancer `setup-aur.sh`. |
|
||||||
| Calamares ne démarre pas dans l'ISO | Sur la VM, basculer en `tty2` (autologin root) et lancer `journalctl -b`. |
|
|
||||||
| `Calamares Initialization Failed: desktop@desktop` | Module mal configuré dans `settings.conf` — vérifier que la séquence utilise `packagechooser`, pas `desktop`. |
|
|
||||||
| `Variables manquantes : DESKTOP` | Les `$DESKTOP` dans `shellprocess.conf` sont interprétés par Calamares — utiliser une command substitution `$(cat /run/fws-desktop)` à la place. |
|
|
||||||
| É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. |
|
| É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. |
|
| Retours à la ligne CRLF | `build.sh` lance `dos2unix` automatiquement, mais si tu modifies pendant le build, relancer. |
|
||||||
|
|
||||||
@@ -231,7 +224,6 @@ tail -f /tmp/fws-build/work/iso/arch/pkglist.x86_64.txt
|
|||||||
|
|
||||||
# Dans l'ISO (autologin tty1)
|
# Dans l'ISO (autologin tty1)
|
||||||
journalctl -b
|
journalctl -b
|
||||||
cat /var/log/Calamares.log
|
|
||||||
|
|
||||||
# Hyprland post-install
|
# Hyprland post-install
|
||||||
cat ~/.local/share/hyprland/hyprland.log
|
cat ~/.local/share/hyprland/hyprland.log
|
||||||
@@ -254,4 +246,4 @@ FWS est un fork de **[archiso](https://gitlab.archlinux.org/archlinux/archiso)**
|
|||||||
|
|
||||||
Voir [LICENSE](LICENSE) pour le texte complet, et [AUTHORS.rst](AUTHORS.rst) pour la liste des 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 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.
|
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.
|
||||||
|
|||||||
+2
-2
@@ -196,9 +196,9 @@ echo "==> Vérification des services systemd..."
|
|||||||
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/ 2>/dev/null || echo " (aucun service)"
|
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/ 2>/dev/null || echo " (aucun service)"
|
||||||
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants/ 2>/dev/null || echo " (aucun symlink)"
|
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants/ 2>/dev/null || echo " (aucun symlink)"
|
||||||
|
|
||||||
# Copie le repo local (calamares + winboat-bin)
|
# Copie le repo local (winboat-bin + deps Anaconda packagées)
|
||||||
if ls "$WORK_DIR/local-repo/"*.pkg.tar.zst &>/dev/null 2>&1; then
|
if ls "$WORK_DIR/local-repo/"*.pkg.tar.zst &>/dev/null 2>&1; then
|
||||||
echo "==> Copie du repo local Calamares..."
|
echo "==> Copie du repo local fws-local..."
|
||||||
mkdir -p /tmp/fws-build/local-repo
|
mkdir -p /tmp/fws-build/local-repo
|
||||||
cp -a "$WORK_DIR/local-repo/"* /tmp/fws-build/local-repo/
|
cp -a "$WORK_DIR/local-repo/"* /tmp/fws-build/local-repo/
|
||||||
|
|
||||||
|
|||||||
@@ -154,9 +154,9 @@ echo "==> Vérification des services systemd..."
|
|||||||
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/ 2>/dev/null || echo " (aucun service)"
|
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/ 2>/dev/null || echo " (aucun service)"
|
||||||
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants/ 2>/dev/null || echo " (aucun symlink)"
|
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants/ 2>/dev/null || echo " (aucun symlink)"
|
||||||
|
|
||||||
# Copie le repo local (calamares + winboat-bin)
|
# Copie le repo local (winboat-bin + deps Anaconda packagées)
|
||||||
if ls "$WORK_DIR/local-repo/"*.pkg.tar.zst &>/dev/null 2>&1; then
|
if ls "$WORK_DIR/local-repo/"*.pkg.tar.zst &>/dev/null 2>&1; then
|
||||||
echo "==> Copie du repo local Calamares..."
|
echo "==> Copie du repo local fws-local..."
|
||||||
mkdir -p /tmp/fws-build/local-repo
|
mkdir -p /tmp/fws-build/local-repo
|
||||||
cp -a "$WORK_DIR/local-repo/"* /tmp/fws-build/local-repo/
|
cp -a "$WORK_DIR/local-repo/"* /tmp/fws-build/local-repo/
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,9 @@ if [ ! -d /run/archiso ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
xsetroot -solid "#1a1a2e"
|
xsetroot -solid "#1a1a2e"
|
||||||
openbox &
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
# Choix du bureau AVANT Calamares (le module packagechooser n'est pas compilé
|
# TODO (chantier C) : lancer l'installateur graphique Anaconda dans cette session.
|
||||||
# dans le paquet calamares AUR). Écrit /run/fws-desktop, lu pendant l'install.
|
# Calamares a été retiré (commit 05ae9c3) et son remplacement Anaconda n'est pas
|
||||||
/usr/local/bin/fws-pick-desktop || true
|
# encore câblé. En attendant, on lance Openbox au premier plan : le serveur X a
|
||||||
|
# ainsi un client (sinon startx rendrait la main et X se fermerait aussitôt).
|
||||||
exec calamares
|
exec openbox
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ if grep -Fqa 'accessibility=' /proc/cmdline &> /dev/null; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Provisionnement automatique archiso (param noyau script=) : LIVE uniquement.
|
# Provisionnement automatique archiso (param noyau script=) : LIVE uniquement.
|
||||||
# Sur le système installé /run/archiso n'existe pas ; de plus shellprocess.conf
|
# Sur le système installé /run/archiso n'existe pas, donc ce bloc ne s'exécute
|
||||||
# retire ce fichier de la cible. Ceci est une seconde barrière de sécurité.
|
# jamais hors du live — c'est la barrière qui empêche l'auto-script sur la cible.
|
||||||
if [[ -d /run/archiso ]]; then
|
if [[ -d /run/archiso ]]; then
|
||||||
~/.automated_script.sh
|
~/.automated_script.sh
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Démarrage automatique de Xorg + Calamares uniquement dans le live FWS.
|
# Démarrage automatique de Xorg uniquement dans le live FWS.
|
||||||
# Sur le système installé, /run/archiso n'existe pas, donc rien ne se lance.
|
# Sur le système installé, /run/archiso n'existe pas, donc rien ne se lance.
|
||||||
if [[ -d /run/archiso && "$(tty)" == "/dev/tty1" && -z "$DISPLAY" ]]; then
|
if [[ -d /run/archiso && "$(tty)" == "/dev/tty1" && -z "$DISPLAY" ]]; then
|
||||||
exec startx -- vt1
|
exec startx -- vt1
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# ============================================================
|
# ============================================================
|
||||||
# FWS — paquets de l'ISO live
|
# FWS — paquets de l'ISO live
|
||||||
# Objectif : système live bootable + installeur Calamares
|
# Objectif : système live bootable + installateur Anaconda
|
||||||
# fonctionnel + jeu minimal d'outils de rescue.
|
# (migration depuis Calamares) + jeu minimal d'outils de rescue.
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
# --- Base système ---
|
# --- Base système ---
|
||||||
@@ -86,7 +86,7 @@ htop
|
|||||||
alsa-utils
|
alsa-utils
|
||||||
sof-firmware
|
sof-firmware
|
||||||
|
|
||||||
# --- Xorg + Openbox (pour Calamares) ---
|
# --- Xorg + Openbox (session graphique de l'installateur) ---
|
||||||
xorg-server
|
xorg-server
|
||||||
xorg-xinit
|
xorg-xinit
|
||||||
xorg-xrandr
|
xorg-xrandr
|
||||||
@@ -100,13 +100,6 @@ xfce4-goodies
|
|||||||
lightdm
|
lightdm
|
||||||
lightdm-gtk-greeter
|
lightdm-gtk-greeter
|
||||||
|
|
||||||
# --- Calamares (fournis par fws-local) ---
|
|
||||||
calamares
|
|
||||||
kpmcore
|
|
||||||
qt5-base
|
|
||||||
qt5-svg
|
|
||||||
qt6-base
|
|
||||||
|
|
||||||
# --- Agents VM (pratique pour tester l'ISO) ---
|
# --- Agents VM (pratique pour tester l'ISO) ---
|
||||||
qemu-guest-agent
|
qemu-guest-agent
|
||||||
virtualbox-guest-utils-nox
|
virtualbox-guest-utils-nox
|
||||||
|
|||||||
@@ -0,0 +1,153 @@
|
|||||||
|
# ============================================================================
|
||||||
|
# FWS — interactive-defaults.ks
|
||||||
|
#
|
||||||
|
# Kickstart de base, lu AUTOMATIQUEMENT par Anaconda quand l'install est
|
||||||
|
# lancée en mode interactif (chemin fixe codé en dur dans Anaconda :
|
||||||
|
# /usr/share/anaconda/interactive-defaults.ks). Aucun inst.ks= n'est requis.
|
||||||
|
#
|
||||||
|
# RÔLE : empêcher Anaconda d'installer Fedora.
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Sans payload défini, Anaconda utilise DNF → des RPM depuis les dépôts
|
||||||
|
# Fedora = il installe Fedora. Anaconda n'a AUCUN backend pacman. La seule
|
||||||
|
# façon de poser FWS/Arch est le payload « liveimg » : il recopie une image
|
||||||
|
# de système de fichiers (ici le squashfs du live = FWS) sur le disque, puis
|
||||||
|
# on finalise nous-mêmes (grub, mkinitcpio, bureau) en %post. C'est le modèle
|
||||||
|
# « Sabayon » : le système installé EST une copie du live.
|
||||||
|
#
|
||||||
|
# L'utilisateur garde la main dans le GUI sur tout ce qui N'EST PAS fixé ici :
|
||||||
|
# partitionnement, fuseau, clavier, langue, création d'utilisateur, mot de
|
||||||
|
# passe root, etc.
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# --- Source d'installation : l'image du live (FWS), surtout pas Fedora -------
|
||||||
|
# Squashfs archiso sur le média booté :
|
||||||
|
# /run/archiso/bootmnt/<install_dir>/<arch>/airootfs.sfs
|
||||||
|
# install_dir=fws, arch=x86_64, airootfs_image_type=squashfs (cf. profiledef.sh).
|
||||||
|
# Anaconda loop-monte ce .sfs et rsync son contenu vers la cible.
|
||||||
|
#
|
||||||
|
# ⚠ À VALIDER sur ISO réelle : certaines versions d'Anaconda attendent une
|
||||||
|
# structure « LiveOS/rootfs.img » à l'intérieur du squashfs (format Fedora
|
||||||
|
# Live) et non un squashfs « plat » comme celui d'archiso. Si l'install
|
||||||
|
# échoue à monter la source, basculer sur un tarball de rootfs dédié :
|
||||||
|
# liveimg --url=file:///run/archiso/bootmnt/fws/x86_64/fws-rootfs.tar.gz
|
||||||
|
# (un build-rootfs.sh produirait alors ce tar via pacstrap).
|
||||||
|
liveimg --url=file:///run/archiso/bootmnt/fws/x86_64/airootfs.sfs
|
||||||
|
|
||||||
|
# --- Bootloader : géré à la main en %post ------------------------------------
|
||||||
|
# Anaconda lancerait « grub2-install » / « grub2-mkconfig » (binaires Fedora,
|
||||||
|
# préfixe grub2-) qui n'existent pas dans un rootfs Arch (lequel fournit
|
||||||
|
# grub-install / grub-mkconfig). On désactive donc l'étape native d'Anaconda.
|
||||||
|
# L'ESP (UEFI) ou la partition bios_boot (BIOS/GPT) reste créée par le
|
||||||
|
# partitionnement (auto ou manuel) car la plateforme l'impose.
|
||||||
|
bootloader --disabled
|
||||||
|
|
||||||
|
# Pas de section %packages : le payload liveimg n'installe aucun paquet
|
||||||
|
# (il copie une image). Toute installation de paquets se fait en %post.
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# %post --nochroot — s'exécute dans le LIVE, la cible montée sous /mnt/sysroot
|
||||||
|
# But : déposer dans la cible ce dont le %post chrooté aura besoin (DNS pour
|
||||||
|
# pacman, choix de bureau écrit par l'addon de sélection).
|
||||||
|
# ============================================================================
|
||||||
|
%post --nochroot --log=/tmp/fws-post-nochroot.log
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# Selon la version d'Anaconda la cible est sous /mnt/sysroot (récent) ou
|
||||||
|
# /mnt/sysimage (ancien).
|
||||||
|
SYSROOT=/mnt/sysroot
|
||||||
|
[ -d "$SYSROOT" ] || SYSROOT=/mnt/sysimage
|
||||||
|
|
||||||
|
# DNS pour que « pacman -S <bureau> » fonctionne dans le chroot.
|
||||||
|
cp -f /etc/resolv.conf "$SYSROOT/etc/resolv.conf" 2>/dev/null || true
|
||||||
|
|
||||||
|
# Choix du bureau (écrit par l'addon « Choix du bureau », à venir ; valeur lue
|
||||||
|
# par le %post chrooté ci-dessous). « cli » par défaut si absent.
|
||||||
|
if [ -f /tmp/fws-desktop ]; then
|
||||||
|
cp -f /tmp/fws-desktop "$SYSROOT/tmp/fws-desktop" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
%end
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# %post (chroot) — DANS le rootfs FWS recopié. pacman, grub-install,
|
||||||
|
# mkinitcpio existent ici : ce sont les outils Arch de l'image copiée.
|
||||||
|
# Log persistant : /var/log/fws-post.log sur le système installé.
|
||||||
|
# ============================================================================
|
||||||
|
%post --log=/var/log/fws-post.log
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# --- 1) Purge des résidus « live » (modèle Sabayon = live copié tel quel) ----
|
||||||
|
# Ce qui est propre au live casserait ou pollue le système installé.
|
||||||
|
rm -f /etc/mkinitcpio.conf.d/archiso.conf
|
||||||
|
rm -f /etc/systemd/system/getty@tty1.service.d/autologin.conf
|
||||||
|
for svc in choose-mirror.service pacman-init.service \
|
||||||
|
livecd-talk.service livecd-alsa-unmuter.service \
|
||||||
|
etc-pacman.d-gnupg.mount; do
|
||||||
|
rm -f "/etc/systemd/system/$svc"
|
||||||
|
rm -f /etc/systemd/system/*.target.wants/"$svc"
|
||||||
|
done
|
||||||
|
# cloud-init (présent dans l'airootfs archiso) : inutile sur un poste installé.
|
||||||
|
rm -f /etc/systemd/system/cloud-init.target.wants/* 2>/dev/null || true
|
||||||
|
# Hooks initramfs archiso, s'ils ont été recopiés en tant que paquet.
|
||||||
|
if pacman -Q mkinitcpio-archiso &>/dev/null; then
|
||||||
|
pacman -Rns --noconfirm mkinitcpio-archiso || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 2) initramfs propre (sans le hook « archiso ») --------------------------
|
||||||
|
mkinitcpio -P || echo "[FWS] AVERTISSEMENT : mkinitcpio a échoué"
|
||||||
|
|
||||||
|
# --- 3) GRUB installé à la main (cf. bootloader --disabled) ------------------
|
||||||
|
install_grub() {
|
||||||
|
if [ -d /sys/firmware/efi ]; then
|
||||||
|
pacman -Q efibootmgr &>/dev/null || pacman -Sy --noconfirm efibootmgr || true
|
||||||
|
grub-install --target=x86_64-efi --efi-directory=/boot/efi \
|
||||||
|
--bootloader-id=FWS --recheck
|
||||||
|
else
|
||||||
|
# BIOS : retrouver le disque physique portant « / ».
|
||||||
|
local rootsrc disk
|
||||||
|
rootsrc="$(findmnt -no SOURCE / 2>/dev/null)"
|
||||||
|
disk="$(lsblk -no pkname "$rootsrc" 2>/dev/null | head -1)"
|
||||||
|
[ -n "$disk" ] || { echo "[FWS] Disque BIOS introuvable"; return 1; }
|
||||||
|
grub-install --target=i386-pc --recheck "/dev/$disk"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
if install_grub; then
|
||||||
|
grub-mkconfig -o /boot/grub/grub.cfg || echo "[FWS] grub-mkconfig a échoué"
|
||||||
|
else
|
||||||
|
echo "[FWS] AVERTISSEMENT : grub-install a échoué — bootloader à refaire à la main"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 4) Bureau choisi : pacman -S du DE (non bloquant si pas de réseau) -------
|
||||||
|
DESK="cli"
|
||||||
|
[ -f /tmp/fws-desktop ] && DESK="$(tr -d '[:space:]' < /tmp/fws-desktop)"
|
||||||
|
DM=""
|
||||||
|
case "$DESK" in
|
||||||
|
kde) PKGS="plasma-meta sddm konsole dolphin"; DM="sddm" ;;
|
||||||
|
gnome) PKGS="gnome gdm"; DM="gdm" ;;
|
||||||
|
xfce) PKGS="xfce4 xfce4-goodies lightdm lightdm-gtk-greeter"; DM="lightdm" ;;
|
||||||
|
hyprland) PKGS="hyprland kitty wofi waybar sddm"; DM="sddm" ;;
|
||||||
|
cli|*) PKGS="" ;;
|
||||||
|
esac
|
||||||
|
if [ -n "$PKGS" ]; then
|
||||||
|
pacman-key --init &>/dev/null || true
|
||||||
|
pacman-key --populate archlinux &>/dev/null || true
|
||||||
|
if pacman -Sy --noconfirm $PKGS; then
|
||||||
|
[ -n "$DM" ] && systemctl enable "$DM" || true
|
||||||
|
systemctl set-default graphical.target || true
|
||||||
|
else
|
||||||
|
echo "[FWS] Bureau '$DESK' non installé (réseau ?) — à refaire après le 1er boot."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 5) Sécurité : verrouiller root s'il est resté SANS mot de passe ----------
|
||||||
|
# L'airootfs live a souvent un root sans mot de passe ; si l'utilisateur n'en a
|
||||||
|
# pas défini dans le GUI, on verrouille plutôt que de laisser le compte ouvert.
|
||||||
|
if passwd -S root 2>/dev/null | grep -qE '\bNP\b'; then
|
||||||
|
passwd -l root || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 6) Le resolv.conf du live ne doit pas rester figé -----------------------
|
||||||
|
# NetworkManager (activé sur le système installé) régénère /etc/resolv.conf.
|
||||||
|
rm -f /tmp/fws-desktop /etc/resolv.conf 2>/dev/null || true
|
||||||
|
%end
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# ============================================================
|
# ============================================================
|
||||||
# FWS — paquets de l'ISO live
|
# FWS — paquets de l'ISO live
|
||||||
# Objectif : système live bootable + installeur Calamares
|
# Objectif : système live bootable + installateur Anaconda
|
||||||
# fonctionnel + jeu minimal d'outils de rescue.
|
# (migration depuis Calamares) + jeu minimal d'outils de rescue.
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
# --- Base système ---
|
# --- Base système ---
|
||||||
@@ -85,7 +85,7 @@ htop
|
|||||||
alsa-utils
|
alsa-utils
|
||||||
sof-firmware
|
sof-firmware
|
||||||
|
|
||||||
# --- Xorg + Openbox (pour Calamares) ---
|
# --- Xorg + Openbox (session graphique de l'installateur) ---
|
||||||
xorg-server
|
xorg-server
|
||||||
xorg-xinit
|
xorg-xinit
|
||||||
xorg-xrandr
|
xorg-xrandr
|
||||||
@@ -99,13 +99,6 @@ xfce4-goodies
|
|||||||
lightdm
|
lightdm
|
||||||
lightdm-gtk-greeter
|
lightdm-gtk-greeter
|
||||||
|
|
||||||
# --- Calamares (fournis par fws-local) ---
|
|
||||||
calamares
|
|
||||||
kpmcore
|
|
||||||
qt5-base
|
|
||||||
qt5-svg
|
|
||||||
qt6-base
|
|
||||||
|
|
||||||
# --- Agents VM (pratique pour tester l'ISO) ---
|
# --- Agents VM (pratique pour tester l'ISO) ---
|
||||||
qemu-guest-agent
|
qemu-guest-agent
|
||||||
virtualbox-guest-utils-nox
|
virtualbox-guest-utils-nox
|
||||||
|
|||||||
+7
-7
@@ -11,7 +11,7 @@ Ce document décrit **l'environnement exact** sur lequel le build FWS fonctionne
|
|||||||
| Composant | Valeur de référence | Minimum acceptable | Pourquoi |
|
| Composant | Valeur de référence | Minimum acceptable | Pourquoi |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| CPU | AMD Ryzen 9 9950X3D (16 cores / 32 threads) | x86_64 avec **VT-x ou AMD-V activé dans le BIOS** | WSL 2 = Hyper-V → la virtualisation **doit** être activée dans le firmware |
|
| CPU | AMD Ryzen 9 9950X3D (16 cores / 32 threads) | x86_64 avec **VT-x ou AMD-V activé dans le BIOS** | WSL 2 = Hyper-V → la virtualisation **doit** être activée dans le firmware |
|
||||||
| RAM | 64 GB (61.67 GB utilisable) | 8 GB | `mkarchiso` charge l'image squashfs en RAM ; `makepkg` de Calamares compile en parallèle |
|
| RAM | 64 GB (61.67 GB utilisable) | 8 GB | `mkarchiso` charge l'image squashfs en RAM ; `makepkg` des paquets AUR compile en parallèle |
|
||||||
| Disque libre sur `C:` | ≥ 130 GB libres | 25 GB libres | WSL grossit dynamiquement ; squashfs intermédiaire peut atteindre 10 GB |
|
| Disque libre sur `C:` | ≥ 130 GB libres | 25 GB libres | WSL grossit dynamiquement ; squashfs intermédiaire peut atteindre 10 GB |
|
||||||
| Architecture | x86_64 | x86_64 | ArchWSL n'existe pas en ARM |
|
| Architecture | x86_64 | x86_64 | ArchWSL n'existe pas en ARM |
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ wsl.exe --shutdown
|
|||||||
DisableSandbox
|
DisableSandbox
|
||||||
```
|
```
|
||||||
|
|
||||||
> pacman ≥ 7 utilise **landlock** pour sandboxer les opérations FS. **Le kernel WSL ne supporte pas landlock** → tout install bloque. `setup-calamares.sh` l'ajoute automatiquement la première fois.
|
> pacman ≥ 7 utilise **landlock** pour sandboxer les opérations FS. **Le kernel WSL ne supporte pas landlock** → tout install bloque. `setup-aur.sh` l'ajoute automatiquement la première fois.
|
||||||
|
|
||||||
Vérifier :
|
Vérifier :
|
||||||
|
|
||||||
@@ -232,8 +232,8 @@ Aucune variable n'est requise **pour que ça marche**, mais les scripts en utili
|
|||||||
|
|
||||||
| Variable | Valeur | Quand |
|
| Variable | Valeur | Quand |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `MSYS_NO_PATHCONV=1` | forcée par `build.sh` et `setup-calamares.sh` | empêche Git Bash de convertir `/tmp/...` en chemins Windows |
|
| `MSYS_NO_PATHCONV=1` | forcée par `build.sh` et `setup-aur.sh` | empêche Git Bash de convertir `/tmp/...` en chemins Windows |
|
||||||
| `MSYS2_ARG_CONV_EXCL=*` | forcée par `setup-calamares.sh` | empêche la conversion d'arguments passés à `wsl.exe` |
|
| `MSYS2_ARG_CONV_EXCL=*` | forcée par `setup-aur.sh` | empêche la conversion d'arguments passés à `wsl.exe` |
|
||||||
| `ARCH_WSL_DISTRO` | optionnel, défaut = `Arch` | nom de la distro WSL si tu as renommé |
|
| `ARCH_WSL_DISTRO` | optionnel, défaut = `Arch` | nom de la distro WSL si tu as renommé |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -262,7 +262,7 @@ powershell.exe -Command "Start-Process powershell -Verb RunAs -ArgumentList 'Add
|
|||||||
|---|---|
|
|---|---|
|
||||||
| Accès internet depuis WSL | obligatoire (pacman, AUR, reflector) |
|
| Accès internet depuis WSL | obligatoire (pacman, AUR, reflector) |
|
||||||
| Proxy d'entreprise | configurer dans `/etc/wgetrc` + `/etc/pacman.d/mirrorlist` |
|
| Proxy d'entreprise | configurer dans `/etc/wgetrc` + `/etc/pacman.d/mirrorlist` |
|
||||||
| `mirrorlist` à jour | `reflector --latest 10 --sort rate` (fait par `setup-calamares.sh`) |
|
| `mirrorlist` à jour | `reflector --latest 10 --sort rate` (fait par `setup-aur.sh`) |
|
||||||
|
|
||||||
Tester depuis WSL :
|
Tester depuis WSL :
|
||||||
|
|
||||||
@@ -297,7 +297,7 @@ wsl.exe -d Arch -u root -- bash -c "pacman-key --init && pacman-key --populate a
|
|||||||
|
|
||||||
# Relance le build
|
# Relance le build
|
||||||
cd "/c/Users/$USER/Documents/1. FWS/FWS"
|
cd "/c/Users/$USER/Documents/1. FWS/FWS"
|
||||||
./setup-calamares.sh
|
./setup-aur.sh
|
||||||
./build.sh
|
./build.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -348,4 +348,4 @@ Defender : exclusion sur le dossier du repo
|
|||||||
Réseau : accès archlinux.org (HTTP/2 200), pas de proxy bloquant
|
Réseau : accès archlinux.org (HTTP/2 200), pas de proxy bloquant
|
||||||
```
|
```
|
||||||
|
|
||||||
Si **tout** ce qui précède est aligné, `./setup-calamares.sh && ./build.sh` doit produire `out/FWS-*.iso` en 25-55 min au total.
|
Si **tout** ce qui précède est aligné, `./setup-aur.sh && ./build.sh` doit produire `out/FWS-*.iso` en 25-55 min au total.
|
||||||
|
|||||||
+4
-4
@@ -1,15 +1,15 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# FWS — Build des paquets AUR (calamares + winboat-bin)
|
# FWS — Build des paquets AUR (winboat-bin) + PKGBUILD locaux (deps Anaconda)
|
||||||
# et création du repo pacman local fws-local/.
|
# et création du repo pacman local fws-local/.
|
||||||
#
|
#
|
||||||
# Rejoue-le si tu changes la liste AUR_PACKAGES ou pour
|
# Rejoue-le si tu changes la liste AUR_PACKAGES ou pour
|
||||||
# rafraîchir le repo local.
|
# rafraîchir le repo local.
|
||||||
# ============================================================
|
# ============================================================
|
||||||
set -e
|
set -e
|
||||||
trap 'rc=$?; echo -e "\033[0;31m[ERR] Échec (setup-calamares.sh) ligne $LINENO, code $rc.\033[0m" >&2; exit $rc' ERR
|
trap 'rc=$?; echo -e "\033[0;31m[ERR] Échec (setup-aur.sh) ligne $LINENO, code $rc.\033[0m" >&2; exit $rc' ERR
|
||||||
|
|
||||||
AUR_PACKAGES=(calamares winboat-bin)
|
AUR_PACKAGES=(winboat-bin)
|
||||||
DISTRO_NAME="${ARCH_WSL_DISTRO:-Arch}"
|
DISTRO_NAME="${ARCH_WSL_DISTRO:-Arch}"
|
||||||
|
|
||||||
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
|
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
|
||||||
@@ -60,7 +60,7 @@ if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" || -n "$WINDIR" ]]; then
|
|||||||
|
|
||||||
SCRIPT_DIR_WIN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -W)"
|
SCRIPT_DIR_WIN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -W)"
|
||||||
SCRIPT_PATH_WSL=$(MSYS_NO_PATHCONV=1 wsl.exe -d "$DISTRO_NAME" -u root -- \
|
SCRIPT_PATH_WSL=$(MSYS_NO_PATHCONV=1 wsl.exe -d "$DISTRO_NAME" -u root -- \
|
||||||
wslpath "$(echo "$SCRIPT_DIR_WIN" | sed 's|/|\\\\|g')/setup-calamares.sh" \
|
wslpath "$(echo "$SCRIPT_DIR_WIN" | sed 's|/|\\\\|g')/setup-aur.sh" \
|
||||||
2>/dev/null | tr -d '\r\n')
|
2>/dev/null | tr -d '\r\n')
|
||||||
[ -n "$SCRIPT_PATH_WSL" ] \
|
[ -n "$SCRIPT_PATH_WSL" ] \
|
||||||
|| error "Traduction du chemin vers WSL échouée (wslpath). Vérifie ARCH_WSL_DISTRO ($DISTRO_NAME)."
|
|| error "Traduction du chemin vers WSL échouée (wslpath). Vérifie ARCH_WSL_DISTRO ($DISTRO_NAME)."
|
||||||
|
|||||||
Reference in New Issue
Block a user