mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2025-01-18 21:46:35 +01:00
installer: Support dry-run from Guile via store.
This supports running the installer quasi-directly from Guile by only building a Guile installer-script in the store. Do something like: ./pre-inst-env guile -c '((@ (gnu installer) run-installer) #:dry-run? #t)' or and BE VERY CAREFUL WHEN NOT USING #:DRY-RUN #T! sudo -E ./pre-inst-env guile -c '((@ (gnu installer) run-installer))' for this to work, you also need connman. * gnu/installer.scm (installer-script, run-installer): New procedures. Change-Id: I8cc1746845ec99f738e35fa91bb2342a674cfa88
This commit is contained in:
parent
711855cb00
commit
035e5f0c74
1 changed files with 83 additions and 2 deletions
|
@ -21,10 +21,14 @@
|
|||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(define-module (gnu installer)
|
||||
#:use-module (guix build utils)
|
||||
#:use-module (guix derivations)
|
||||
#:use-module (guix discovery)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix modules)
|
||||
#:use-module (guix monads)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (guix store)
|
||||
#:use-module (guix utils)
|
||||
#:use-module (guix ui)
|
||||
#:use-module ((guix self) #:select (make-config.scm))
|
||||
|
@ -56,7 +60,9 @@ (define-module (gnu installer)
|
|||
#:use-module (ice-9 match)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (web uri)
|
||||
#:export (installer-program))
|
||||
#:export (installer-program
|
||||
installer-steps
|
||||
run-installer))
|
||||
|
||||
(define module-to-import?
|
||||
;; Return true for modules that should be imported. For (gnu system …) and
|
||||
|
@ -562,3 +568,78 @@ (define action
|
|||
(execl #$(program-file "installer-real" installer-builder
|
||||
#:guile guile-3.0-latest)
|
||||
"installer-real"))))
|
||||
|
||||
(define* (installer-script #:key dry-run?
|
||||
(steps (installer-steps #:dry-run? dry-run?)))
|
||||
(program-file
|
||||
"installer-script"
|
||||
#~(begin
|
||||
(use-modules (gnu installer)
|
||||
(gnu installer record)
|
||||
(gnu installer keymap)
|
||||
(gnu installer steps)
|
||||
(gnu installer dump)
|
||||
(gnu installer final)
|
||||
(gnu installer hostname)
|
||||
(gnu installer kernel)
|
||||
(gnu installer locale)
|
||||
(gnu installer parted)
|
||||
(gnu installer services)
|
||||
(gnu installer timezone)
|
||||
(gnu installer user)
|
||||
(gnu installer utils)
|
||||
(gnu installer newt)
|
||||
((gnu installer newt keymap)
|
||||
#:select (keyboard-layout->configuration))
|
||||
(gnu services herd)
|
||||
(guix i18n)
|
||||
(guix build utils)
|
||||
(guix utils)
|
||||
((system repl debug)
|
||||
#:select (terminal-width))
|
||||
(ice-9 match)
|
||||
(ice-9 textual-ports))
|
||||
(terminal-width 200)
|
||||
(let* ((current-installer newt-installer)
|
||||
(steps (#$steps current-installer)))
|
||||
(catch #t
|
||||
(lambda _
|
||||
((installer-init current-installer))
|
||||
(parameterize ((%run-command-in-installer
|
||||
(if #$dry-run?
|
||||
dry-run-command
|
||||
(installer-run-command current-installer)))
|
||||
(%installer-configuration-file
|
||||
(if #$dry-run?
|
||||
"config.scm"
|
||||
(%installer-configuration-file))))
|
||||
(let ((results (run-installer-steps
|
||||
#:rewind-strategy 'menu
|
||||
#:menu-proc
|
||||
(installer-menu-page current-installer)
|
||||
#:steps steps
|
||||
#:dry-run? #$dry-run?)))
|
||||
(result-step results 'final)
|
||||
((installer-exit current-installer)))))
|
||||
(const #f)
|
||||
(lambda (key . args)
|
||||
(sleep 10)
|
||||
((installer-exit current-installer))
|
||||
(display-backtrace (make-stack #t) (current-error-port))
|
||||
(apply throw key args)))))))
|
||||
|
||||
(define* (run-installer #:key dry-run?)
|
||||
"To run the installer from Guile without building it:
|
||||
./pre-inst-env guile -c '((@ (gnu installer) run-installer) #:dry-run? #t)'
|
||||
when using #:dry-run? #t, no root access is required and the LOCALE, KEYMAP,
|
||||
and PARTITION pages are skipped."
|
||||
(let* ((script (installer-script #:dry-run? dry-run?))
|
||||
(store (open-connection))
|
||||
(drv (run-with-store store
|
||||
(lower-object script)))
|
||||
(program (match (derivation->output-paths drv)
|
||||
((("out" . program)) program)))
|
||||
(outputs (build-derivations store (list drv))))
|
||||
(close-connection store)
|
||||
(format #t "running installer: ~a\n" program)
|
||||
(invoke "./pre-inst-env" "guile" program)))
|
||||
|
|
Loading…
Reference in a new issue