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:
		
							parent
							
								
									0c9693d8b3
								
							
						
					
					
						commit
						e92723452d
					
				
					 1 changed files with 26 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue