diff options
author | Ludovic Courtès <ludo@gnu.org> | 2023-09-21 16:19:21 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2023-10-01 22:58:19 +0200 |
commit | 21deb89e287b5821975544118bf137562a91d4e1 (patch) | |
tree | 4ab9c9ba2ab0e97d2bce9411deeac8260c3545be | |
parent | ae50099c4633d2042951bb69c3a8f602ea79cb46 (diff) | |
download | guix-21deb89e287b5821975544118bf137562a91d4e1.tar.gz guix-21deb89e287b5821975544118bf137562a91d4e1.zip |
services: guix: Use the right locale package on GNU/Hurd.
Fixes a bug introduced in 0dd293b4d9095137c9952e16ca951f887b7e7018
whereby guix-daemon on GNU/Hurd would have ‘GUIX_LOCPATH’ set to the
“wrong” locale data (2.35 instead of 2.37).
Consequently, it would fail to setlocale(3) and calls to
‘std::stoi’ (when reading the output of ‘guix authenticate’) would
throw, leading to this error message of guix-daemon:
unexpected build daemon error: stoi
This would manifest when sending store items to a childhurd:
$ guix copy --to=localhost:10022 sed
guix copy: sending 1 store item (1 MiB) to 'localhost'...
guix copy: error: unknown error while sending files over SSH
The “unknown error” is the ‘stoi’ exception.
This commit fixes that, but for the ‘guix-daemon’ service only.
* gnu/services/base.scm (guix-shepherd-service)[locales]: New variable.
Use it instead of ‘glibc-utf8-locales’.
-rw-r--r-- | gnu/services/base.scm | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/gnu/services/base.scm b/gnu/services/base.scm index b3f2d2e8b8..10e0d4cf9d 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -62,8 +62,9 @@ util-linux xfsprogs)) #:use-module (gnu packages bash) #:use-module ((gnu packages base) - #:select (coreutils glibc glibc-utf8-locales tar - canonical-package)) + #:select (coreutils glibc glibc/hurd + glibc-utf8-locales make-glibc-utf8-locales + tar canonical-package)) #:use-module ((gnu packages compression) #:select (gzip)) #:use-module (gnu packages fonts) #:autoload (gnu packages guile-xyz) (guile-netlink) @@ -87,6 +88,7 @@ #:use-module ((guix self) #:select (make-config.scm)) #:use-module (guix diagnostics) #:use-module (guix i18n) + #:autoload (guix utils) (target-hurd?) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) @@ -1831,6 +1833,12 @@ proxy of 'guix-daemon'...~%") (define (guix-shepherd-service config) "Return a <shepherd-service> for the Guix daemon service with CONFIG." + (define locales + (let-system (system target) + (if (target-hurd? (or target system)) + (make-glibc-utf8-locales glibc/hurd) + glibc-utf8-locales))) + (match-record config <guix-configuration> (guix build-group build-accounts authorize-key? authorized-keys use-substitutes? substitute-urls max-silent-time timeout @@ -1912,8 +1920,7 @@ proxy of 'guix-daemon'...~%") ;; 'nss-certs'. See ;; <https://bugs.gnu.org/32942>. (string-append "GUIX_LOCPATH=" - #$glibc-utf8-locales - "/lib/locale") + #$locales "/lib/locale") "LC_ALL=en_US.utf8" ;; Make 'tar' and 'gzip' available so ;; that 'guix perform-download' can use |