From 7611074f677f1c3cfe5da426f387eeda1b6ad825 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 23 Apr 2019 00:08:54 +0200 Subject: installer: Run 'guix system init' with the right locale. * gnu/installer/utils.scm (run-shell-command): Add #:locale and honor it. * gnu/installer/newt/final.scm (run-install-shell): Add 'locale' parameter; pass it to 'install-system'. (run-final-page): Obtain locale from RESULT; pass it to 'run-install-shell'. * gnu/installer/final.scm (install-system): Add 'locale' parameter; pass it to 'run-shell-command'. --- gnu/installer/utils.scm | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'gnu/installer/utils.scm') diff --git a/gnu/installer/utils.scm b/gnu/installer/utils.scm index e91f90a84d..256722729c 100644 --- a/gnu/installer/utils.scm +++ b/gnu/installer/utils.scm @@ -54,9 +54,21 @@ number. If no percentage is found, return #f" (and result (string->number (match:substring result 1))))) -(define (run-shell-command command) +(define* (run-shell-command command #:key locale) + "Run COMMAND, a string, with Bash, and in the given LOCALE." (call-with-temporary-output-file (lambda (file port) + (when locale + (let ((supported? (false-if-exception + (setlocale LC_ALL locale)))) + ;; If LOCALE is not supported, then set LANGUAGE, which might at + ;; least give us translated messages. + (if supported? + (format port "export LC_ALL=\"~a\"~%" locale) + (format port "export LANGUAGE=\"~a\"~%" + (string-take locale + (string-index locale #\_)))))) + (format port "~a~%" command) ;; (format port "exit~%") (close port) -- cgit v1.2.3 From 9529f7850e3ae91cce70620e684fc6d0dc25e815 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Fri, 26 Apr 2019 13:56:22 +0200 Subject: installer: Take 'guix system init' exit code into account. This allows the installer to distinguish success from failure, and also ensures the shell that runs 'guix system init' exits upon completion. * gnu/installer/utils.scm (run-shell-command)[pause]: New procedure. Add "exec" before COMMAND in the script. Guard 'invoke' call and handle 'invoke-error?'. Add call to 'pause' on completion. * gnu/installer/final.scm (install-system): Remove 'false-if-exception'. --- gnu/installer/final.scm | 5 ++--- gnu/installer/utils.scm | 26 ++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) (limited to 'gnu/installer/utils.scm') diff --git a/gnu/installer/final.scm b/gnu/installer/final.scm index bf68a5aa2c..c41670c197 100644 --- a/gnu/installer/final.scm +++ b/gnu/installer/final.scm @@ -99,7 +99,7 @@ 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 a subshell. LOCALE must be the locale name under which that command will run, -or #f." +or #f. Return #t on success and #f on failure." (let ((install-command (format #f "guix system init ~a ~a" (%installer-configuration-file) @@ -114,5 +114,4 @@ or #f." (create-user-database users (%installer-target-dir)) (start-service 'cow-store (list (%installer-target-dir))) - (false-if-exception (run-shell-command install-command - #:locale locale)))) + (run-shell-command install-command #:locale locale))) diff --git a/gnu/installer/utils.scm b/gnu/installer/utils.scm index 256722729c..ddb96bc338 100644 --- a/gnu/installer/utils.scm +++ b/gnu/installer/utils.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Mathieu Othacehe +;;; Copyright © 2019 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,6 +20,8 @@ (define-module (gnu installer utils) #:use-module (guix utils) #:use-module (guix build utils) + #:use-module (guix i18n) + #:use-module (srfi srfi-34) #:use-module (ice-9 rdelim) #:use-module (ice-9 regex) #:use-module (ice-9 textual-ports) @@ -55,7 +58,12 @@ number. If no percentage is found, return #f" (string->number (match:substring result 1))))) (define* (run-shell-command command #:key locale) - "Run COMMAND, a string, with Bash, and in the given LOCALE." + "Run COMMAND, a string, with Bash, and in the given LOCALE. Return true if +COMMAND exited successfully, #f otherwise." + (define (pause) + (format #t (G_ "Press Enter to continue.~%")) + (read-line (current-input-port))) + (call-with-temporary-output-file (lambda (file port) (when locale @@ -69,7 +77,17 @@ number. If no percentage is found, return #f" (string-take locale (string-index locale #\_)))))) - (format port "~a~%" command) - ;; (format port "exit~%") + (format port "exec ~a~%" command) (close port) - (invoke "bash" "--init-file" file)))) + + (guard (c ((invoke-error? c) + (newline) + (format (current-error-port) + (G_ "Command failed with exit code ~a.~%") + (invoke-error-exit-status c)) + (pause) + #f)) + (invoke "bash" "--init-file" file) + (newline) + (pause) + #t)))) -- cgit v1.2.3