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.
This commit is contained in:
Mathieu Othacehe 2021-12-30 11:33:37 +01:00
parent 0c9693d8b3
commit e92723452d
No known key found for this signature in database
GPG key ID: 8354763531769CA6

View file

@ -119,6 +119,28 @@ (define (call-with-mnt-container thunk)
(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 @@ (define (assert-exit x)
(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)