[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ANN] Guile-SSH 0.11.0 released

From: Artyom V . Poptsov
Subject: [ANN] Guile-SSH 0.11.0 released
Date: Tue, 09 May 2017 10:25:42 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

Hello Guilers,

I'm pleased to announce Guile-SSH 0.11.0:

Please find the package signed with my GPG key[1] here:

This release adds support of GNU Guile version 2.2 (tested with GNU
Guile on Debian GNU/Linux) and fixes some bugs, namely
procedures working with RREPL now handle compilation errors, unbound
variable errors and unknown objects.

Also there's a new (ssh shell) module that provides some useful remote
shell procedures, and procedures from (ssh dist) and (ssh dist node) now
can work without procps package.

To make things a bit easier, I prepared a Docker image that contains the
latest GNU Guile (version at the moment) and Guile-SSH
installed -- which may be useful for testing and experimenting:

When run in the Docker container, most of the Guile-SSH tests with the
latest GNU Guile are passing, although there are some occasional test
failures due to segfaults in test driver; I'm hoping to fix this in the
upcoming releases.

Thanks for all the contributions, they where very helpful.  Contributors
listed in the documentation, 'AUTHORS' and 'THANKS' files included in
the distribution.

* What is Guile-SSH?

Guile-SSH is a library that provides access to the SSH protocol[2] for
programs written in GNU Guile interpreter.  It is built upon the
libssh[3] library.

Currently Guile-SSH provides the following features:
  - The API that is sufficient for building of standalone SSH clients and
    servers, or for embedding client/server functionality in your lispy Scheme
  - Several authentication methods are supported, including password
    authentication, public key and SSH agent authentication methods.
  - Key management procedures: you can make key pairs, read keys from files,
    get key hashes, get public keys from private keys etc.  DSS, RSA, RSA1 and
    ECDSA (by means of OpenSSL) are supported.
  - Port forwarding procedures and high-level API for creating of SSH tunnels.
  - Distributed forms ('dist-map', 'distribute', ...) that allow to spread the
    evaluation of Scheme code between remote hosts.  Or you can just connect
    to a remote REPL from Scheme using 'with-ssh' procedure and evaluate some
    expressions.  No special server needed on the remote side, just an SSH
    daemon and GNU Guile installed!
  - SFTP client API allows you to read and write remote files over the SSH
    protocol right from the Scheme code.
  - Remote popen API that allows you to make either input, output or
    bidirectional pipes to remote processes.
  - Detailed documentation in Texinfo format with examples included, even more
    examples in 'examples' directory.

* The list of user-visible changes

Here's the list of user-visible changes (an excerpt from NEWS file):

--8<---------------cut here---------------start------------->8---
* Changes in version 0.11.0 (2017-05-09)
** Add support of Guile 2.2
   Tested with GNU Guile version 2.0.14 (on Gentoo GNU/Linux) and (on Debian GNU/Linux.)

   Many thanks to Ludovic Court├Ęs for patches!
** New module (ssh shell)
   The module provides some procedures build upon (ssh popen) module for
   working with remote shell.
** Bugfixes
*** In (ssh tunnel)
**** 'main-loop' now handles "interrupted system call" errors
     that sometimes occur on 'select' call.
*** In (ssh dist node)
***** 'rrepl-get-result' now handles compilation errors
      The procedure would always fail to read compilation errors properly
      because it considered the message as "undefined" result.  Now this bug
      should be fixed.

      An example of an error that now should be handled is "no code for module"
      due to using a non-existing module in 'with-ssh' expression.

      Reported by Mathieu, in
***** 'rrepl-get-result' now handles "unbound variable" errors
      The procedure would always fail to read "unbound variable" errors
      properly, returning wrong result with only two values (current module
      name and current language name).  Now this bug should be fixed.

      Reported by Mathieu, in
***** 'rrepl-get-result' now handles unknown # objects
      The procedure would always fail to read unknown objects (e.g. instances
      of Guile-SSH session) properly, raising an obscure errors like
      "Unknown # object: #\<".  Now the procedure raises 'node-repl-error'
      with full evaluation result gotten from RREPL.

      Reported by Mathieu, in
** Changes in (ssh dist node)
*** 'node-eval' now can work without procps
    The procedure now checks if procps package is present on a node and uses
    fallback Guile-SSH implementation of 'pgrep' and 'pkill' if it is not.
    The fallback implementation of 'pgrep' is built upon pure bash, and
    'pkill' in addition requires Guile itself on the remote side.
*** New procedure 'node-loadavg'
    The procedure can be used to get average load of a node.
** Changes in (ssh dist)
   Procedures in the module now are capable of checking presence of procps
   package on a remote side and switching to fallback implementation of some
   of the procps tools when the package is not present -- thanks to updated
   'node-eval' procedure (see above.)

   At the end of the day it means that now the code can start/stop Guile REPL
   server on a remote side even without procps installed.
** Update unit tests
*** Add test cases for (ssh shell) module
** Update documentation
*** Add documentation for (ssh shell) module
*** Describe project goals in "Introduction" section
--8<---------------cut here---------------end--------------->8---

Happy hacking!

- Artyom


Artyom V. Poptsov <address@hidden>;  GPG Key: 0898A02F
Home page:

Attachment: signature.asc
Description: PGP signature

reply via email to

[Prev in Thread] Current Thread [Next in Thread]