From 69c37e7c79b8756e300438fd2d25f6d40db5e04b Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Wed, 19 Jul 2023 02:49:40 -0400 Subject: Uncomment `/etc/locale.gen` entry and use first column for `LANG` variable (#1939) --- archinstall/lib/installer.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'archinstall/lib/installer.py') diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 8c5e7648..836b6b79 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -366,7 +366,7 @@ class Installer: with open(f'{self.target}/etc/hostname', 'w') as fh: fh.write(hostname + '\n') - def set_locale(self, locale_config: LocaleConfiguration): + def set_locale(self, locale_config: LocaleConfiguration) -> bool: modifier = '' lang = locale_config.sys_lang encoding = locale_config.sys_enc @@ -386,15 +386,32 @@ class Installer: modifier = f"@{modifier}" # - End patch - with open(f'{self.target}/etc/locale.gen', 'a') as fh: - fh.write(f'{lang}.{encoding}{modifier} {encoding}\n') + locale_gen = self.target / 'etc/locale.gen' + locale_gen_lines = locale_gen.read_text().splitlines(True) - (self.target / "etc" / "locale.conf").write_text(f'LANG={lang}.{encoding}{modifier}\n') + # A locale entry in /etc/locale.gen may or may not contain the encoding + # in the first column of the entry; check for both cases. + entry_re = re.compile(rf'#{lang}(\.{encoding})?{modifier} {encoding}') + + for index, line in enumerate(locale_gen_lines): + if entry_re.match(line): + uncommented_line = line.removeprefix('#') + locale_gen_lines[index] = uncommented_line + locale_gen.write_text(''.join(locale_gen_lines)) + lang_value = uncommented_line.split()[0] + break + else: + error(f"Invalid locale: language '{locale_config.sys_lang}', encoding '{locale_config.sys_enc}'") + return False try: SysCommand(f'/usr/bin/arch-chroot {self.target} locale-gen') except SysCallError as e: error(f'Failed to run locale-gen on target: {e}') + return False + + (self.target / 'etc/locale.conf').write_text(f'LANG={lang_value}\n') + return True def set_timezone(self, zone :str, *args :str, **kwargs :str) -> bool: if not zone: -- cgit v1.2.3-54-g00ecf