diff options
author | Mathieu Othacehe <othacehe@gnu.org> | 2021-12-30 11:33:37 +0100 |
---|---|---|
committer | Mathieu Othacehe <othacehe@gnu.org> | 2022-01-14 14:29:19 +0100 |
commit | e92723452d2f1e7639579ea327d3fff6fa25ef4c (patch) | |
tree | 7c2fb7493b723e334fb402db714eab74a26e7b1b /gnu/installer | |
parent | 0c9693d8b3f9ecd40732ec86b732bbf99f8e8b4d (diff) | |
download | guix-e92723452d2f1e7639579ea327d3fff6fa25ef4c.tar guix-e92723452d2f1e7639579ea327d3fff6fa25ef4c.tar.gz |
installer: Install the locale before mounting the cow-store.
Fixes: <https://issues.guix.gnu.org/52831>.
Make sure to install the en_US.utf8 fallback locale if the selected locale is
not supported.
* gnu/installer/final.scm (install-locale): New procedure.
(install-system): Call it.
Diffstat (limited to 'gnu/installer')
-rw-r--r-- | gnu/installer/final.scm | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gnu/installer/final.scm b/gnu/installer/final.scm index bef5f9fd52..276af908f7 100644 --- a/gnu/installer/final.scm +++ b/gnu/installer/final.scm @@ -119,6 +119,28 @@ it can interact with the rest of the system." (match (waitpid pid) ((_ . status) status)))) +(define (install-locale locale) + "Install the given LOCALE or the en_US.utf8 locale as a fallback." + (let ((supported? (false-if-exception + (setlocale LC_ALL locale)))) + (if supported? + (begin + (syslog "install supported locale ~a~%." locale) + (setenv "LC_ALL" locale)) + (begin + ;; If the selected locale is not supported, install a default UTF-8 + ;; locale. This is required to copy some files with UTF-8 + ;; characters, in the nss-certs package notably. Set LANGUAGE + ;; anyways, to have translated messages if possible. + (syslog "~a locale is not supported, installating en_US.utf8 \ +locale instead.~%" locale) + (setlocale LC_ALL "en_US.utf8") + (setenv "LC_ALL" "en_US.utf8") + (setenv "LANGUAGE" + (string-take locale + (or (string-index locale #\_) + (string-length locale)))))))) + (define* (install-system locale #:key (users '())) "Create /etc/shadow and /etc/passwd on the installation target for USERS. Start COW-STORE service on target directory and launch guix install command in @@ -169,6 +191,10 @@ or #f. Return #t on success and #f on failure." (lambda () (dynamic-wind (lambda () + ;; Install the locale before mounting the cow-store, otherwise + ;; the loaded cow-store locale files will prevent umounting. + (install-locale locale) + ;; Save the database, so that it can be restored once the ;; cow-store is umounted. (copy-file database-file saved-database) |