ssh: Decompose 'connect-to-remote-daemon'.

* guix/ssh.scm (remote-daemon-channel): New procedure.
(connect-to-remote-daemon): Implement in terms of it.
This commit is contained in:
Ludovic Courtès 2017-04-21 19:01:03 +02:00 committed by Ludovic Courtès
parent 615c5298f7
commit e537833726
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -33,6 +33,7 @@ (define-module (guix ssh)
#:use-module (ice-9 match)
#:use-module (ice-9 binary-ports)
#:export (open-ssh-session
remote-daemon-channel
connect-to-remote-daemon
send-files
retrieve-files
@ -88,11 +89,11 @@ (define* (open-ssh-session host #:key user port
(message (format #f (_ "SSH connection to '~a' failed: ~a~%")
host (get-error session))))))))))
(define* (connect-to-remote-daemon session
#:optional
(socket-name "/var/guix/daemon-socket/socket"))
"Connect to the remote build daemon listening on SOCKET-NAME over SESSION,
an SSH session. Return a <nix-server> object."
(define* (remote-daemon-channel session
#:optional
(socket-name
"/var/guix/daemon-socket/socket"))
"Return an input/output port (an SSH channel) to the daemon at SESSION."
(define redirect
;; Code run in SESSION to redirect the remote process' stdin/stdout to the
;; daemon's socket, à la socat. The SSH protocol supports forwarding to
@ -127,13 +128,20 @@ (define redirect
(_
(primitive-exit 1)))))))
(let ((channel
(open-remote-pipe* session OPEN_BOTH
;; Sort-of shell-quote REDIRECT.
"guile" "-c"
(object->string
(object->string redirect)))))
(open-connection #:port channel)))
(open-remote-pipe* session OPEN_BOTH
;; Sort-of shell-quote REDIRECT.
"guile" "-c"
(object->string
(object->string redirect))))
(define* (connect-to-remote-daemon session
#:optional
(socket-name
"/var/guix/daemon-socket/socket"))
"Connect to the remote build daemon listening on SOCKET-NAME over SESSION,
an SSH session. Return a <nix-server> object."
(open-connection #:port (remote-daemon-channel session)))
(define (store-import-channel session)
"Return an output port to which archives to be exported to SESSION's store