* [ANN] Guile-SSH 0.8.0 released
@ 2015-08-03 23:03 Artyom Poptsov
2015-09-01 12:08 ` Ludovic Courtès
0 siblings, 1 reply; 5+ messages in thread
From: Artyom Poptsov @ 2015-08-03 23:03 UTC (permalink / raw)
To: Guile Users' Mailing List
[-- Attachment #1: Type: text/plain, Size: 4562 bytes --]
Hello Guilers,
I'm pleased to announce Guile-SSH 0.8.0:
https://github.com/artyom-poptsov/guile-ssh/releases/tag/v0.8.0
A signed package can be found here:
- ftp://memory-heap.org/software/guile-ssh/guile-ssh-0.8.0.tar.gz
- ftp://memory-heap.org/software/guile-ssh/guile-ssh-0.8.0.tar.gz.sig
Guile-SSH is a library that provides access to the SSH protocol for GNU
Guile programs. Guile-SSH 0.8.0 API is sufficient for building of SSH
servers and SSH clients. In addition, it provides key management
facilities that allow to read and manipulate private and public keys,
and generate new keypairs.
Note that this release breaks bawkward compatibility with Guile-SSH
0.7.2 due to deletion of 'channel-open-forward/reverse' procedure from
(ssh channel) module (I suspect the procedure had no use anyway). Aside
From that, an application that worked with Guile-SSH 0.7.2 likely will
work with Guile-SSH 0.8.2 with little or no modification.
The release includes an experimental distributed forms module that
contains procedures for interaction with remote REPLs (RREPLs) over SSH.
Here's an example of evaluation of scheme code on a RREPL by means of
'with-ssh' procedure:
--8<---------------cut here---------------start------------->8---
(use-modules (ssh session)
(ssh auth)
(ssh dist))
(let ((session (make-session #:user "alice" #:host "www.example.org")))
(connect! session)
(userauth-agent! session)
(display (with-ssh (make-node session)
(gethostname)))
(newline))
--8<---------------cut here---------------end--------------->8---
And here's an example of 'dist-map' usage. In this example, we're
spreading the job of multiplying the list of numbers to two RREPLs:
--8<---------------cut here---------------start------------->8---
(dist-map (list node-1 node-2)
(lambda (n) (* n n))
(make-list 10000 500))
--8<---------------cut here---------------end--------------->8---
Also there is a new (ssh tunnel) module that provides procedures for
making of SSH tunnels. As a practical example, one could make a
Guile-RPC[1] call over an SSH tunnel as follows:
--8<---------------cut here---------------start------------->8---
(let ((t (make-tunnel session
#:port 12345
;; Suppose a Guile-RPC server listens on
;; 127.0.0.1:23456 on the remote host:
#:host "127.0.0.1"
#:host-port 23456)))
(call-with-ssh-forward t
(lambda (socket)
(RPC-PROGRAM-proc some-data #x123 socket))))
--8<---------------cut here---------------end--------------->8---
Here's an excerpt from the NEWS file:
--8<---------------cut here---------------start------------->8---
* Changes in version 0.8.0 (2015-08-04)
** Implement port forwarding
** Add distributed forms
** Require libssh 0.6.4 or 0.6.5
** New module: (ssh tunnel)
The module provides hi-level procedures for SSH tunneling.
** New module: (ssh dist)
The module provides distributed forms of 'map' and 'eval', as well as
remote REPL (RREPL) implementation.
** New module: (ssh dist job)
Low-level API for distributed jobs.
** New module: (ssh dist node)
Low-level API for distributed nodes.
** New procedure 'channel-accept-forward' in (ssh channel)
** New procedure 'channel-listen-forward' in (ssh channel)
** Remove 'channel-open-forward/reverse' procedure from (ssh channel)
** Examples
*** Add an RPC client example
Add an example program that does an RPC call over a secure channel using
a Guile-SSH tunnel. See 'examples/rpc' directory.
*** Add a RREPL example
Add a demo program that connects to a remote REPL (RREPL).
** Update documentation
--8<---------------cut here---------------end--------------->8---
In addition, the structure of the Info documentation was updated, so it
should be easier now for a programmer to get started with Guile-SSH API.
As always, comments and bug reports are very welcome. I'm especially
interested in comments related to new Guile-SSH features -- it was fun
to tinker with distributed forms and SSH tunnels, but I'd love to hear
your opinion, Guilers, on what features are really useful for you, what
aren't so useful and what needs to be fixed.
Thanks!
- Artyom
[1] https://www.gnu.org/software/guile-rpc/
--
Artyom V. Poptsov <poptsov.artyom@gmail.com>; GPG Key: 0898A02F
Home page: http://poptsov-artyom.narod.ru/
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [ANN] Guile-SSH 0.8.0 released
[not found] <mailman.71.1438704082.32144.guile-user@gnu.org>
@ 2015-08-05 13:46 ` Artyom Poptsov
0 siblings, 0 replies; 5+ messages in thread
From: Artyom Poptsov @ 2015-08-05 13:46 UTC (permalink / raw)
To: Guile Users' Mailing List
[-- Attachment #1: Type: text/plain, Size: 500 bytes --]
Hello,
just found that I've signed the package with an attached GPG signature
(file 'guile-ssh-0.8.0.tar.gz.gpg' on the FTP server) instead of a
detached signature. My bad, that's what the late night software
releases can lead to.
Here's the detached signature for the package:
ftp://memory-heap.org/software/guile-ssh/guile-ssh-0.8.0.tar.gz.sig
Thanks,
- Artyom
--
Artyom V. Poptsov <poptsov.artyom@gmail.com>; GPG Key: 0898A02F
Home page: http://poptsov-artyom.narod.ru/
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [ANN] Guile-SSH 0.8.0 released
2015-08-03 23:03 Artyom Poptsov
@ 2015-09-01 12:08 ` Ludovic Courtès
0 siblings, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2015-09-01 12:08 UTC (permalink / raw)
To: guile-user
Hi!
Artyom Poptsov <poptsov.artyom@gmail.com> skribis:
> * Changes in version 0.8.0 (2015-08-04)
> ** Implement port forwarding
> ** Add distributed forms
> ** Require libssh 0.6.4 or 0.6.5
> ** New module: (ssh tunnel)
> The module provides hi-level procedures for SSH tunneling.
> ** New module: (ssh dist)
> The module provides distributed forms of 'map' and 'eval', as well as
> remote REPL (RREPL) implementation.
> ** New module: (ssh dist job)
> Low-level API for distributed jobs.
> ** New module: (ssh dist node)
Maybe this went unnoticed, but these are really awesome features!
A couple of comments on ‘with-ssh’. I think the manual should
explicitly remind people that the REPL server must already be running on
the remote machine. I wonder if it would make sense to offer an
alternate option where the calling machine invokes ‘guile’ on the remote
side and talks to it on stdin; this could simplify some use cases.
WDYT?
I tried something along the lines of the example that’s in the manual:
(let ((session (make-session #:user "ludo" #:host "xxx")))
(connect! session)
(userauth-agent! session)
(with-ssh (make-node session)
(use-modules (ice-9 q))
(list 1 2 3)))
This returns the 4 values, including '(1 2 3) as expected.
However, this:
(let ((session (make-session #:user "ludo" #:host "xxx")))
(connect! session)
(userauth-agent! session)
(with-ssh (make-node session)
(use-modules (ice-9 ftw))
(scandir "/")))
returns only two values, the language and the module.
Am I missing something?
Thanks,
Ludo’.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [ANN] Guile-SSH 0.8.0 released
[not found] <mailman.95.1441123237.10692.guile-user@gnu.org>
@ 2015-09-01 18:06 ` Artyom Poptsov
2015-09-02 19:55 ` Ludovic Courtès
0 siblings, 1 reply; 5+ messages in thread
From: Artyom Poptsov @ 2015-09-01 18:06 UTC (permalink / raw)
To: guile-user-request; +Cc: guile-user
[-- Attachment #1: Type: text/plain, Size: 1508 bytes --]
Hi Ludovic.
> Maybe this went unnoticed, but these are really awesome features!
Thanks!
> I think the manual should explicitly remind people that the REPL
> server must already be running on the remote machine.
I guess it is already mentioned in the manual. From "(guile-ssh)
Distributed Forms":
To make use of the procedures listed in this section you will need an
SSH daemon and a GNU Guile REPL server both running on the remote
host.
Or should I elaborate on this?
> I wonder if it would make sense to offer an alternate option where the
> calling machine invokes ?guile? on the remote side and talks to it on
> stdin; this could simplify some use cases. WDYT?
Sure enough, we can call 'guile' on the remote side using
'channel-request-exec' before using of procedures from (ssh dist). That
looks like a great idea, I need to think about the implementation.
> However, this:
> (let ((session (make-session #:user "ludo" #:host "xxx")))
> (connect! session)
> (userauth-agent! session)
> (with-ssh (make-node session)
> (use-modules (ice-9 ftw))
> (scandir "/")))
> returns only two values, the language and the module.
Thank you for reporting that bug, fixed in 76d8df2 on the master. Also
I fixed parsing of RREPL errors, in c7b6a79.
Please check if it works for you.
- Artyom
--
Artyom V. Poptsov <poptsov.artyom@gmail.com>; GPG Key: 0898A02F
Home page: http://poptsov-artyom.narod.ru/
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [ANN] Guile-SSH 0.8.0 released
2015-09-01 18:06 ` [ANN] Guile-SSH 0.8.0 released Artyom Poptsov
@ 2015-09-02 19:55 ` Ludovic Courtès
0 siblings, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2015-09-02 19:55 UTC (permalink / raw)
To: guile-user
Artyom Poptsov <poptsov.artyom@gmail.com> skribis:
>> I think the manual should explicitly remind people that the REPL
>> server must already be running on the remote machine.
>
> I guess it is already mentioned in the manual. From "(guile-ssh)
> Distributed Forms":
>
> To make use of the procedures listed in this section you will need an
> SSH daemon and a GNU Guile REPL server both running on the remote
> host.
Oh right.
> Or should I elaborate on this?
Maybe in the ‘with-ssh’ example (which is what lazy folks like me will
copy/paste to their REPL), you could replace “Example:” with something
like:
For example, assuming a REPL server is running at
@code{www.example.org}, the following code invokes @code{gethostname}
on that machine:
>> I wonder if it would make sense to offer an alternate option where the
>> calling machine invokes ?guile? on the remote side and talks to it on
>> stdin; this could simplify some use cases. WDYT?
>
> Sure enough, we can call 'guile' on the remote side using
> 'channel-request-exec' before using of procedures from (ssh dist). That
> looks like a great idea, I need to think about the implementation.
Maybe that could be an option of <node> objects.
>> However, this:
>
>> (let ((session (make-session #:user "ludo" #:host "xxx")))
>> (connect! session)
>> (userauth-agent! session)
>> (with-ssh (make-node session)
>> (use-modules (ice-9 ftw))
>> (scandir "/")))
>
>> returns only two values, the language and the module.
>
> Thank you for reporting that bug, fixed in 76d8df2 on the master. Also
> I fixed parsing of RREPL errors, in c7b6a79.
>
> Please check if it works for you.
I confirm that it fixes the problem.
Thanks!
Ludo’.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-09-02 19:55 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <mailman.95.1441123237.10692.guile-user@gnu.org>
2015-09-01 18:06 ` [ANN] Guile-SSH 0.8.0 released Artyom Poptsov
2015-09-02 19:55 ` Ludovic Courtès
[not found] <mailman.71.1438704082.32144.guile-user@gnu.org>
2015-08-05 13:46 ` Artyom Poptsov
2015-08-03 23:03 Artyom Poptsov
2015-09-01 12:08 ` Ludovic Courtès
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).