#!/bin/bash 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" if [ -n "$WSL_DISTRO_NAME" ]; then echo -e "\e[36mBuild exécuté depuis WSL ($WSL_DISTRO_NAME) en tant que root...\e[0m" IN_WSL=1 else echo -e "\e[36mLancement du processus de build dans WSL ($DISTRO_NAME) en tant que root...\e[0m" fi if [ -z "$IN_WSL" ]; then # ── Depuis Git Bash ────────────────────────────────────── SCRIPT_DIR_WIN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -W)" WORK_DIR_WSL=$(MSYS_NO_PATHCONV=1 wsl.exe -d "$DISTRO_NAME" -u root -- \ wslpath "$(echo "$SCRIPT_DIR_WIN" | sed 's|/|\\\\|g')" 2>/dev/null | tr -d '\r\n') echo "==> Dossier de travail WSL : $WORK_DIR_WSL" MSYS_NO_PATHCONV=1 wsl.exe -d "$DISTRO_NAME" -u root -- bash << EOF set -e WORK_DIR="${WORK_DIR_WSL}" echo "==> Dossier de travail : \$WORK_DIR" echo "==> Mise à jour des miroirs et installation de archiso..." pacman -Sy --noconfirm reflector || true reflector --verbose --latest 10 --sort rate --save /etc/pacman.d/mirrorlist || true pacman -Sy --noconfirm archiso echo "==> Préparation de l'environnement de build..." rm -rf /tmp/fws-build mkdir -p /tmp/fws-build/releng # Copie configs/releng/ en base if [ -d "\$WORK_DIR/configs/releng" ]; then cp -ar "\$WORK_DIR/configs/releng/"* /tmp/fws-build/releng/ echo "==> configs/releng/ copié" fi # Fusionne configs/baseline/ par dessus (priorité aux fichiers baseline) if [ -d "\$WORK_DIR/configs/baseline" ]; then cp -ar "\$WORK_DIR/configs/baseline/"* /tmp/fws-build/releng/ echo "==> configs/baseline/ fusionné (prioritaire)" fi 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/multi-user.target.wants/ 2>/dev/null || echo " (aucun symlink)" # Copie le repo local Calamares if ls "\$WORK_DIR/local-repo/"*.pkg.tar.zst &>/dev/null 2>&1; then echo "==> Copie du repo local Calamares..." mkdir -p /tmp/fws-build/local-repo cp -a "\$WORK_DIR/local-repo/"* /tmp/fws-build/local-repo/ echo "==> Injection [fws-local] dans pacman.conf..." sed -i '/^\[fws-local\]/,/^$/d' /tmp/fws-build/releng/pacman.conf PACMAN_TMP=\$(mktemp) printf '[fws-local]\nSigLevel = Optional TrustAll\nServer = file:///tmp/fws-build/local-repo\n\n' \ > "\$PACMAN_TMP" cat /tmp/fws-build/releng/pacman.conf >> "\$PACMAN_TMP" mv "\$PACMAN_TMP" /tmp/fws-build/releng/pacman.conf echo "==> Vérification pacman.conf :" head -5 /tmp/fws-build/releng/pacman.conf else echo "==> Aucun repo local détecté." fi echo "==> Correction des retours à la ligne Windows (dos2unix)..." pacman -S --needed --noconfirm dos2unix find /tmp/fws-build/releng -type f -exec dos2unix {} + 2>/dev/null echo "==> Lancement de mkarchiso..." mkdir -p "\$WORK_DIR/out" mkarchiso -v -w /tmp/fws-build/work -o "\$WORK_DIR/out" /tmp/fws-build/releng echo "==> Nettoyage..." rm -rf /tmp/fws-build/work echo "==> Build terminé ! ISO dans \$WORK_DIR/out" EOF else # ── Déjà dans WSL ──────────────────────────────────────── WORK_DIR="$PWD" echo "==> Dossier de travail : $WORK_DIR" echo "==> Mise à jour et installation de archiso..." pacman -Sy --noconfirm reflector || true reflector --verbose --latest 10 --sort rate --save /etc/pacman.d/mirrorlist || true pacman -Sy --noconfirm archiso echo "==> Préparation de l'environnement de build..." rm -rf /tmp/fws-build mkdir -p /tmp/fws-build/releng if [ -d "$WORK_DIR/configs/releng" ]; then cp -ar "$WORK_DIR/configs/releng/"* /tmp/fws-build/releng/ echo "==> configs/releng/ copié" fi if [ -d "$WORK_DIR/configs/baseline" ]; then cp -ar "$WORK_DIR/configs/baseline/"* /tmp/fws-build/releng/ echo "==> configs/baseline/ fusionné (prioritaire)" fi 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/multi-user.target.wants/ 2>/dev/null || echo " (aucun symlink)" if ls "$WORK_DIR/local-repo/"*.pkg.tar.zst &>/dev/null 2>&1; then echo "==> Copie du repo local Calamares..." mkdir -p /tmp/fws-build/local-repo cp -a "$WORK_DIR/local-repo/"* /tmp/fws-build/local-repo/ echo "==> Injection [fws-local] dans pacman.conf..." sed -i '/^\[fws-local\]/,/^$/d' /tmp/fws-build/releng/pacman.conf PACMAN_TMP=$(mktemp) printf '[fws-local]\nSigLevel = Optional TrustAll\nServer = file:///tmp/fws-build/local-repo\n\n' \ > "$PACMAN_TMP" cat /tmp/fws-build/releng/pacman.conf >> "$PACMAN_TMP" mv "$PACMAN_TMP" /tmp/fws-build/releng/pacman.conf echo "==> Vérification pacman.conf :" head -5 /tmp/fws-build/releng/pacman.conf else echo "==> Aucun repo local détecté." fi echo "==> Correction des retours à la ligne Windows (dos2unix)..." pacman -S --needed --noconfirm dos2unix find /tmp/fws-build/releng -type f -exec dos2unix {} + 2>/dev/null echo "==> Lancement de mkarchiso..." mkdir -p "$WORK_DIR/out" mkarchiso -v -w /tmp/fws-build/work -o "$WORK_DIR/out" /tmp/fws-build/releng echo "==> Nettoyage..." rm -rf /tmp/fws-build/work echo "==> Build terminé ! L'ISO se trouve dans '$WORK_DIR/out'." fi echo -e "\e[32mScript de build terminé avec succès.\e[0m"