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:
+102
-1
@@ -25,7 +25,7 @@
|
||||
# ============================================================================
|
||||
pkgname=anaconda
|
||||
pkgver=45.8
|
||||
pkgrel=2
|
||||
pkgrel=4
|
||||
pkgdesc="The Anaconda installer (porté sur Arch pour FWS, payload liveimg)"
|
||||
arch=('x86_64')
|
||||
url="https://github.com/rhinstaller/anaconda"
|
||||
@@ -57,6 +57,107 @@ source=("anaconda-$pkgver.tar.gz::https://github.com/rhinstaller/anaconda/archiv
|
||||
sha256sums=('5ef1464bff7f28a4a09a821cbb0121f09ef504ec169288d742373f86807ec4ed')
|
||||
_srcdir="anaconda-anaconda-$pkgver"
|
||||
|
||||
prepare() {
|
||||
cd "$srcdir/$_srcdir"
|
||||
# ── FWS : clavier par défaut selon le TERRITOIRE de la locale ──────────────
|
||||
# set_layouts() amont fait « locale = get_language_id(self.language) » →
|
||||
# get_language_id JETTE le territoire (fr_CH.UTF-8 → 'fr') → list_keyboards('fr')
|
||||
# = 'fr(oss)' (France) au lieu de 'ch(fr)' (Suisse). On passe la LOCALE COMPLÈTE
|
||||
# (self.language) : langtable.list_keyboards('fr_CH.UTF-8') = 'ch(fr)'. La
|
||||
# validation l'accepte (is_valid_langcode → parse_locale().language non vide).
|
||||
# → le clavier du GUI ET du système installé suivent enfin la locale choisie.
|
||||
sed -i \
|
||||
's/^\(\s*\)locale = get_language_id(self\.language)/\1locale = self.language # FWS: garder le territoire (fr_CH -> ch(fr))/' \
|
||||
pyanaconda/modules/localization/localization.py
|
||||
# Garde-fou : casse le build si le motif amont a changé (le patch silencieux).
|
||||
grep -q 'locale = self.language # FWS' \
|
||||
pyanaconda/modules/localization/localization.py
|
||||
|
||||
# ── FWS : champ « Nom de machine » dans le spoke Utilisateur ───────────────
|
||||
# Anaconda ne propage PAS le hostname (le champ du spoke Réseau est perdu chez
|
||||
# nous → /etc/hostname vide). On ajoute donc un champ Hostname à l'onglet de
|
||||
# création de compte (ligne 2 de la grille, libre) ; user.py écrit la valeur
|
||||
# dans /tmp/fws-hostname, que le %post du kickstart applique à /etc/hostname.
|
||||
python3 - <<'PYEOF'
|
||||
import glob
|
||||
|
||||
# 1) user.glade : insérer label + entry "Host name" APRÈS le bloc username_entry.
|
||||
glades = [p for p in glob.glob("pyanaconda/**/user.glade", recursive=True)
|
||||
if 'username_entry' in open(p, encoding='utf-8').read()]
|
||||
assert glades, "FWS: user.glade introuvable"
|
||||
g = glades[0]
|
||||
s = open(g, encoding='utf-8').read()
|
||||
assert 'id="hostname_entry"' not in s, "FWS: glade déjà patché"
|
||||
i = s.index('id="username_entry"')
|
||||
k = s.index('</packing>', i) # fin du packing de username_entry
|
||||
j = s.index('</child>', k) + len('</child>') # fin du <child> EXTERNE (pas l'accessible)
|
||||
block = '''
|
||||
<child>
|
||||
<object class="GtkLabel" id="hostname_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="xpad">10</property>
|
||||
<property name="label" translatable="yes" context="GUI|User">_Host name</property>
|
||||
<property name="use-underline">True</property>
|
||||
<property name="mnemonic-widget">hostname_entry</property>
|
||||
<property name="xalign">1</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="hostname_entry">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="width-chars">50</property>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="hostname_entry-atkobject">
|
||||
<property name="AtkObject::accessible-name" translatable="yes">Host Name</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>'''
|
||||
open(g, 'w', encoding='utf-8').write(s[:j] + block + s[j:])
|
||||
|
||||
# 2) user.py (GUI) : récupérer le widget + écrire /tmp/fws-hostname dans apply().
|
||||
pys = glob.glob("pyanaconda/ui/gui/spokes/user.py")
|
||||
assert pys, "FWS: user.py introuvable"
|
||||
p = pys[0]
|
||||
s = open(p, encoding='utf-8').read()
|
||||
anchor = 'self._username_entry = self.builder.get_object("username_entry")'
|
||||
assert anchor in s, "FWS: ancre username_entry absente"
|
||||
s = s.replace(anchor,
|
||||
anchor + '\n self._hostname_entry = self.builder.get_object("hostname_entry")',
|
||||
1)
|
||||
ap = 'set_user_list(self._users_module, self._user_list, remove_unset=True)'
|
||||
assert ap in s, "FWS: ancre apply() absente"
|
||||
s = s.replace(ap, ap + '''
|
||||
|
||||
# FWS : mémorise le nom de machine saisi (cible pas encore montée) pour
|
||||
# le %post du kickstart, qui l'écrira dans /etc/hostname.
|
||||
try:
|
||||
_hn = self._hostname_entry.get_text().strip()
|
||||
except Exception:
|
||||
_hn = ""
|
||||
try:
|
||||
with open("/tmp/fws-hostname", "w") as _f:
|
||||
_f.write(_hn)
|
||||
except OSError:
|
||||
pass''', 1)
|
||||
open(p, 'w', encoding='utf-8').write(s)
|
||||
print("FWS: champ Hostname ajouté au spoke Utilisateur (glade + user.py)")
|
||||
PYEOF
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$srcdir/$_srcdir"
|
||||
# Glade désactivé (catalogue designer, inutile au runtime) → pas de dép glade.
|
||||
|
||||
Reference in New Issue
Block a user