Subject: [PATCH 0/1] (Help needed!) machine: Implement 'digital-ocean-environment-type'.

From: [email-masked] (Jakob L. Kreuze)
Date: Mon, 19 Aug 2019 12:41:24 -0400

Hi all,

I've spent the past couple of days attempting to add rudimentary support
to 'guix deploy' for some more complicated use-cases. I think I've made
some decent progress, but I've reached a point where I'm having an issue
that's beyond my abilities.

'deploy-digital-ocean' gets to a point where there's a droplet running a
"bootstrap" configuration of the Guix System, but I can't keep an open
SSH channel for sending over the operating-system configuration
specified for the deployment.

sending 3 store items (0 MiB) to '167.71.253.223'...
;;; [2019/08/19 12:21:33.409456, 0] write_to_channel_port: [GSSH ERROR] Remote channel is closed: #<input-output: channel (open) d3b2e0>
Backtrace:
In ice-9/eval.scm:
    619:8 19 (_ #(#(#<directory (guile-user) e17140>)))
In guix/ui.scm:
  1692:12 18 (run-guix-command _ . _)
In guix/store.scm:
   623:10 17 (call-with-store _)
In srfi/srfi-1.scm:
    640:9 16 (for-each #<procedure 48d21c0 at guix/scripts/deploy.s…> …)
In guix/scripts/deploy.scm:
    96:20 15 (_ _)
In ice-9/boot-9.scm:
    829:9 14 (catch _ _ #<procedure 48d4980 at guix/scripts/deploy.…> …)
In guix/store.scm:
  1803:24 13 (run-with-store #<store-connection 256.99 43d6420> _ # _ …)
In unknown file:
          12 (_ #<procedure 48fe260 at ice-9/eval.scm:330:13 ()> #<…> …)
          11 (_ #<procedure 4975a20 at ice-9/eval.scm:330:13 ()> #<…> …)
          10 (_ #<procedure 4975840 at ice-9/eval.scm:330:13 ()> #<…> …)
In guix/monads.scm:
    482:9  9 (_ _)
In unknown file:
           8 (_ #<procedure 4975660 at ice-9/eval.scm:330:13 ()> #<…> …)
In guix/remote.scm:
   134:10  7 (_ _)
In guix/store.scm:
  1696:38  6 (_ #<store-connection 256.99 3606720>)
In guix/ssh.scm:
    358:4  5 (send-files #<store-connection 256.99 3606720> _ _ # _ # …)
In guix/store.scm:
  1568:12  4 (export-paths #<store-connection 256.99 3606720> _ #<i…> …)
  1548:22  3 (export-path #<store-connection 256.99 3606720> _ #<in…> …)
   697:13  2 (process-stderr _ _)
   660:10  1 (dump-port #<input-output: socket 15> #<input-output: …> …)
In unknown file:
           0 (put-bytevector #<input-output: channel (open) d3b2e0> # …)

ERROR: In procedure put-bytevector:
Throw to key `guile-ssh-error' with args `("write_to_channel_port" "Remote channel is closed" #<input-output: channel (open) d3b2e0> #f)'.

I can connect to the droplet over SSH, but trying to manually deploy to
the droplet with 'managed-host-environment-type' fails with the same
error. I am still able to deploy to my various Guix QEMU guests using
'managed-host-environment-type' without fail -- this seems to be
specific to Digital Ocean droplets running this configuration.

(use-modules (gnu))
(use-service-modules networking ssh)

(operating-system
  (host-name "gnu-bootstrap")
  (timezone "Etc/UTC")
  (bootloader (bootloader-configuration
               (bootloader grub-bootloader)
               (target "/dev/vda")
               (terminal-outputs '(console))))
  (file-systems (cons (file-system
                        (mount-point "/")
                        (device "/dev/vda1")
                        (type "ext4"))
                      %base-file-systems))
  (services
   (append (list (static-networking-service "eth0" "~a"
                    #:netmask "~a"
                    #:gateway "~a"
                    #:name-servers '("84.200.69.80" "84.200.70.40"))
                 (service openssh-service-type
                          (openssh-configuration
                           (permit-root-login 'without-password))))
           %base-services)))

I suspect there may an issue with the configuration of the bootstrap
system's SSH daemon, but the logs are devoid of anything particularly
telling. If anyone is willing to offer up their knowledge of SSH to
suggest what could be going wrong, I would appreciate it greatly.

Thank you,
Jakob

Jakob L. Kreuze (1):
  machine: Implement 'digital-ocean-environment-type'.

 doc/guix.texi                 |  21 +-
 gnu/local.mk                  |   1 +
 gnu/machine/digital-ocean.scm | 409 ++++++++++++++++++++++++++++++++++
 3 files changed, 428 insertions(+), 3 deletions(-)
 create mode 100644 gnu/machine/digital-ocean.scm

-- 
2.22.0