diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-02-19 22:47:56 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-03-05 23:40:23 +0100 |
commit | 8a4b11c6a911effddf4cac4b33f5c3c70392b797 (patch) | |
tree | 31d7ecdc17ab4cb2555b2a39a92b227f4ebd6aa2 /gnu/installer/utils.scm | |
parent | f901f5d2bc7ed37235ea8b4c51fde80c227234bb (diff) | |
download | guix-8a4b11c6a911effddf4cac4b33f5c3c70392b797.tar guix-8a4b11c6a911effddf4cac4b33f5c3c70392b797.tar.gz |
installer: Run commands without hopping through the shell.
* gnu/installer/utils.scm (run-shell-command): Rename to...
(run-command): Remove call to 'call-with-temporary-output-file' and hop
through Bash. Expect COMMAND to be a list of strings rather than a
string.
* gnu/installer/final.scm (install-system): Turn INSTALL-COMMAND into a
list of strings and pass it to 'run-command'.
* gnu/installer/newt/page.scm (edit-file): Likewise.
Diffstat (limited to 'gnu/installer/utils.scm')
-rw-r--r-- | gnu/installer/utils.scm | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/gnu/installer/utils.scm b/gnu/installer/utils.scm index 4dc26374b1..0a91ae1e4a 100644 --- a/gnu/installer/utils.scm +++ b/gnu/installer/utils.scm @@ -32,7 +32,7 @@ read-all nearest-exact-integer read-percentage - run-shell-command + run-command syslog-port syslog @@ -68,48 +68,48 @@ number. If no percentage is found, return #f" (and result (string->number (match:substring result 1))))) -(define* (run-shell-command command #:key locale) - "Run COMMAND, a string, with Bash, and in the given LOCALE. Return true if +(define* (run-command command #:key locale) + "Run COMMAND, a list of strings, in the given LOCALE. Return true if COMMAND exited successfully, #f otherwise." + (define env (environ)) + (define (pause) (format #t (G_ "Press Enter to continue.~%")) (send-to-clients '(pause)) + (environ env) ;restore environment variables (match (select (cons (current-input-port) (current-clients)) '() '()) (((port _ ...) _ _) (read-line port)))) - (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 "exec ~a~%" command) - (close port) - - (guard (c ((invoke-error? c) - (newline) - (format (current-error-port) - (G_ "Command failed with exit code ~a.~%") - (invoke-error-exit-status c)) - (syslog "command ~s failed with exit code ~a" - command (invoke-error-exit-status c)) - (pause) - #f)) - (syslog "running command ~s~%" command) - (invoke "bash" "--init-file" file) - (syslog "command ~s succeeded~%" command) - (newline) - (pause) - #t)))) + (setenv "PATH" "/run/current-system/profile/bin") + + (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? + (setenv "LC_ALL" locale) + (setenv "LANGUAGE" + (string-take locale + (string-index locale #\_)))))) + + (guard (c ((invoke-error? c) + (newline) + (format (current-error-port) + (G_ "Command failed with exit code ~a.~%") + (invoke-error-exit-status c)) + (syslog "command ~s failed with exit code ~a" + command (invoke-error-exit-status c)) + (pause) + #f)) + (syslog "running command ~s~%" command) + (apply invoke command) + (syslog "command ~s succeeded~%" command) + (newline) + (pause) + #t)) ;;; |