diff options
author | David Thompson <dthompson2@worcester.edu> | 2019-03-09 16:48:21 -0500 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2019-03-09 18:00:28 -0500 |
commit | 8b6b0e48362753b45b034394021119e88ac95131 (patch) | |
tree | 06fafeee9b7de319c3f6c25d6c3d211925b781f7 /gnu | |
parent | 2b613a1a5d4d41b0b5d1f6ea7254585be0c209fa (diff) |
Take another stab at this whole guix deploy thing.wip-deploy2
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/local.mk | 3 | ||||
-rw-r--r-- | gnu/machine.scm | 59 |
2 files changed, 61 insertions, 1 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index 63857d98a8..e0b3c19f35 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -545,6 +545,7 @@ GNU_SYSTEM_MODULES = \ %D%/system/shadow.scm \ %D%/system/uuid.scm \ %D%/system/vm.scm \ + %D%/machine.scm \ \ %D%/build/accounts.scm \ %D%/build/activation.scm \ @@ -611,7 +612,7 @@ GNU_SYSTEM_MODULES += \ %D%/installer/newt/user.scm \ %D%/installer/newt/utils.scm \ %D%/installer/newt/welcome.scm \ - %D%/installer/newt/wifi.scm + %D%/installer/newt/wifi.scm installerdir = $(guilemoduledir)/%D%/installer dist_installer_DATA = \ diff --git a/gnu/machine.scm b/gnu/machine.scm new file mode 100644 index 0000000000..4fde7d5c01 --- /dev/null +++ b/gnu/machine.scm @@ -0,0 +1,59 @@ +(define-module (gnu machine) + #:use-module ((gnu packages package-management) #:select (guix)) + #:use-module (gnu system) + #:use-module (guix derivations) + #:use-module (guix inferior) + #:use-module (guix packages) + #:use-module (guix ssh) + #:use-module (guix store) + #:use-module (oop goops) + #:use-module (ssh session) + #:export (<machine> + system + display-name + build-os + deploy-os + remote-eval + + <sshable-machine> + host-name + ssh-port + ssh-user)) + +(define-class <machine> () + (system #:getter system #:init-keyword #:system)) + +(define-method (display-name (machine <machine>)) + (operating-system-host-name (system machine))) + +(define-method (build-os (machine <machine>) store) + (let* ((guixdrv (run-with-store store (package->derivation guix))) + (guixdir (and (build-derivations store (list guixdrv)) + (derivation->output-path guixdrv))) + (osdrv (run-with-store store (operating-system-derivation + (system machine))))) + (and (build-derivations store (list osdrv)) + (list (derivation-file-name osdrv) + (derivation->output-path osdrv))))) + +(define-method (deploy-os (machine <machine>) store osdrv) + (error "not implemented")) + +(define-method (remote-eval (machine <machine>) exp) + (error "not implemented")) + +(define-class <sshable-machine> (<machine>) + (host-name #:getter host-name #:init-keyword #:host-name) + (ssh-port #:getter ssh-port #:init-keyword #:ssh-port #:init-form 22) + (ssh-user #:getter ssh-user #:init-keyword #:ssh-user #:init-form "root") + ;; ??? - SSH key config? + ) + +(define-method (deploy-os (machine <sshable-machine>) store osdrvs) + (let ((session (open-ssh-session (host-name machine) + #:user (ssh-user machine) + #:port (ssh-port machine)))) + (with-store store (send-files store osdrvs + (connect-to-remote-daemon session) + #:recursive? #t)) + #t)) |