feat(anaconda): add hostname field to user spoke and fix keyboard layout by territory

Replace keyboard correction logic in kickstart with anaconda package patches:

- Add "Nom de machine" (hostname) field to the User spoke in anaconda GUI
- user.py writes the hostname value to /tmp/fws-hostname for the kickstart %post
- Simplify kickstart to read from /tmp/fws-hostname instead of live hostname
- Fix keyboard layout selection to use full locale (e.g. fr_CH) instead of just language (fr)
  to correctly derive territory-specific keymaps (ch(fr) for Switzerland, not fr for France)
- Remove outdated fix_keyboard() function from kickstart

Also add --network=host flag to podman run in setup-aur.sh to ensure DNS and internet
connectivity through the host stack instead of the bridge (fixes timeout issues on
certain networks with firewalld/NAT).

Bump anaconda pkgrel from 2 to 4.
This commit is contained in:
2026-06-23 10:48:32 +02:00
parent 1184ba17d9
commit 7d6bba42b2
3 changed files with 115 additions and 51 deletions
@@ -89,17 +89,15 @@ SYSROOT=/mnt/sysroot
# DNS pour que « pacman -S <bureau> » fonctionne dans le chroot.
cp -f /etc/resolv.conf "$SYSROOT/etc/resolv.conf" 2>/dev/null || true
# --- Hostname : reprendre celui saisi dans Anaconda, sinon « fws » -----------
# BUG observé : Anaconda écrit un /etc/hostname VIDE dans la cible (le hostname
# du spoke Réseau n'est pas capté). On reprend donc le hostname COURANT du LIVE
# (Anaconda l'applique au live quand on le saisit dans le spoke) s'il diffère du
# défaut archiso, sinon on pose un défaut propre « fws » — jamais de hostname
# vide. (Ce %post tourne APRÈS l'écriture d'Anaconda → on écrase son fichier
# vide.)
HN="$(cat /proc/sys/kernel/hostname 2>/dev/null)"
case "$HN" in
""|archlinux|localhost|localhost.localdomain) HN="fws" ;;
esac
# --- Hostname : valeur saisie dans le champ « Nom de machine » du spoke User --
# Anaconda ne capte PAS le hostname du spoke Réseau (→ /etc/hostname vide). On a
# donc ajouté un champ Hostname au spoke Utilisateur (cf. patch du paquet
# anaconda) : user.py écrit la valeur dans /tmp/fws-hostname (live). On la
# nettoie (caractères de hostname valides) et on l'écrit dans la cible ; défaut
# « fws » si vide/absent → plus jamais de hostname vide ni « archiso ».
HN=""
[ -f /tmp/fws-hostname ] && HN="$(tr -cd 'a-zA-Z0-9._-' < /tmp/fws-hostname)"
[ -n "$HN" ] || HN="fws"
echo "$HN" > "$SYSROOT/etc/hostname"
# Choix du bureau (écrit par l'addon « Choix du bureau », à venir ; valeur lue
@@ -207,44 +205,6 @@ else
echo "[FWS] AVERTISSEMENT : grub-install a échoué — bootloader à refaire à la main"
fi
# --- 3bis) Clavier : corriger le keymap selon le TERRITOIRE de la locale ------
# BUG observé : Anaconda dérive le clavier de la LANGUE en IGNORANT le territoire
# → fr_CH (Suisse) donne « fr » (France) au lieu du clavier SUISSE. On corrige :
# si un keymap console spécifique au territoire existe (fr_CH, de_CH…), on
# l'impose dans /etc/vconsole.conf, et on règle aussi le clavier X11 (pour un
# bureau installé ensuite) via langtable. Locale lue dans /etc/locale.conf, à
# défaut dans /root/anaconda-ks.cfg (« lang … »).
fix_keyboard() {
local langv loc lng terr font xk xl xv
langv="$(. /etc/locale.conf 2>/dev/null; printf '%s' "${LANG:-}")"
[ -n "$langv" ] || langv="$(sed -n 's/^lang[[:space:]]\+//p' /root/anaconda-ks.cfg 2>/dev/null | head -1)"
loc="${langv%%.*}" # fr_CH.UTF-8 → fr_CH
lng="${loc%%_*}" # fr
terr="${loc#*_}"; [ "$terr" = "$loc" ] && terr="" # CH
[ -n "$terr" ] || return 0
find /usr/share/kbd/keymaps -name "${lng}_${terr}.map.gz" 2>/dev/null | grep -q . || return 0
# vconsole (console TTY) : keymap du territoire (ex. fr_CH). On préserve FONT.
font="$(grep '^FONT=' /etc/vconsole.conf 2>/dev/null)"
{ echo "KEYMAP=${lng}_${terr}"; [ -n "$font" ] && echo "$font"; } > /etc/vconsole.conf
# X11 (bureau) : layout/variant via langtable (ex. fr_CH → 'ch(fr)' → ch/fr).
xk="$(python3 -c "import langtable; k=langtable.list_keyboards(languageId='$lng', territoryId='$terr'); print(k[0] if k else '')" 2>/dev/null)"
case "$xk" in
*'('*')') xl="${xk%%(*}"; xv="${xk#*(}"; xv="${xv%)}" ;;
?*) xl="$xk"; xv="" ;;
*) return 0 ;;
esac
mkdir -p /etc/X11/xorg.conf.d
cat > /etc/X11/xorg.conf.d/00-keyboard.conf <<EOF
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "$xl"
Option "XkbVariant" "$xv"
EndSection
EOF
}
fix_keyboard || echo "[FWS] clavier : ajustement territoire ignoré"
# --- 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)"