| [TOC] | |
| # OpenSSH WASM port | |
| This is the port of [OpenSSH] to [WASM]+[WASI] (which is then integrated into | |
| [nassh]). | |
| Most people who want to hack on the Secure Shell app do not need to make changes | |
| here. Typically this will be built once and copied into the [nassh] tree. If | |
| you don't have binaries already, run `./nassh/bin/plugin` to install recent | |
| versions. | |
| # Contact | |
| The [chromium-hterm mailing list](https://groups.google.com/a/chromium.org/forum/?fromgroups#!forum/chromium-hterm) | |
| can be used to contact other users and developers for questions. | |
| # Building | |
| ## Development Tools | |
| You'll need some extra packages to compile. Adjust these for your distro. | |
| ``` | |
| $ sudo apt-get install \ | |
| gcc g++ git make cmake lbzip2 \ | |
| python-is-python3 python3 pylint3 python3-requests \ | |
| curl zlib1g-dev zip unzip rsync pkg-config xz-utils patch | |
| ``` | |
| ## Build Script | |
| To compile, you just have to run `./build.sh`. It should take care of | |
| downloading the SDK and building all the required dependencies. | |
| When it's finished, the `output/` directory will hold all the compiled objects, | |
| and the `output/plugin/` directory can be copied over to [nassh]. | |
| ## OpenSSH Upstream Git | |
| The `openssh-git` package allows for quickly testing upstream OpenSSH git. | |
| ``` | |
| # Initialize all the projects. | |
| $ ./build.sh | |
| # Clone upstream git & build it. | |
| $ ./third_party/openssh-git/build | |
| # Copy it for local testing. | |
| $ cp output/build/wasm32-wasip1/openssh-git/work/openssh-git/ssh \ | |
| ../nassh/plugin/wasm/ssh.wasm | |
| # Make changes and rebuild quickly. | |
| $ cd output/build/wasm32-wasip1/openssh-git/work/openssh-git/ | |
| <make changes> | |
| $ make ssh | |
| ``` | |
| # Source Layout | |
| If you're hacking on the source, here are the files you most likely care about: | |
| * [bin/]: Tools for building/testing ssh_client. | |
| * [lint]: Helper tool for linting various code. | |
| * [ssh_client.py]: Utility library for Python build code. | |
| * [build.sh]: The main compile script. Takes care of downloading & compiling | |
| OpenSSH, and any other software. Run it and forget! | |
| * `output/`: All download & compiled objects are saved here. | |
| * `bin/`: Various helper tools used at build time. | |
| * `build/`: All subprojects get an individual build directory under an ABI | |
| specific directory. | |
| * `build/`: Projects needed to build other projects (e.g. toolchains). | |
| * `wasm32-wasip1/`: Projects compiled for WASM using the WASI ABI. | |
| * `wasm32-wasip1-threads/`: Projects compiled for WASM using the WASI ABI | |
| with threading enabled. | |
| * `distfiles/`: All downloaded archives are cached here. | |
| * `home/`: Scratch dir used as $HOME when building projects. | |
| * `plugin/`: The final output of the build process for [nassh]. | |
| * `wasi-sdk/`: The WASI SDK which contains the toolchain and all headers & | |
| libs for building WASM programs. | |
| * [third_party/]: All third party projects have a unique subdir. | |
| You can run their `build` script directly to compile them, but dependencies | |
| are not checked. Use [build.sh] to handle ordering. | |
| * [ldns/]: DNS library supporting DNSSEC and such. | |
| * [mandoc/]: Tools to generate html from man pages. | |
| * `openssh-*/`: Code to download & build [OpenSSH]. | |
| * [openssl/]: Code to download & build [OpenSSL] (the crypto lib). | |
| * [zlib/]: Standard compression library. | |
| * [wassh-libc-sup/]: Supplemental WASI C library code. | |
| # References | |
| Here's a random list of documents which would be useful to people. | |
| * [OpenSSH]: The ssh client we use | |
| * [RFC 4251 - The Secure Shell (SSH) Protocol Architecture](https://tools.ietf.org/html/rfc4251) | |
| * [RFC 4252 - The Secure Shell (SSH) Authentication Protocol](https://tools.ietf.org/html/rfc4252) | |
| * [RFC 4253 - The Secure Shell (SSH) Transport Layer Protocol](https://tools.ietf.org/html/rfc4253) | |
| * [RFC 4254 - The Secure Shell (SSH) Connection Protocol](https://tools.ietf.org/html/rfc4254) | |
| * [RFC 4716 - The Secure Shell (SSH) Public Key File Format](https://tools.ietf.org/html/rfc4716) | |
| [nassh]: ../nassh/ | |
| [OpenSSH]: https://www.openssh.com/ | |
| [OpenSSL]: https://www.openssl.com/ | |
| [WASI]: https://wasi.dev/ | |
| [WASM]: https://webassembly.org/ | |
| [bin/]: ./bin | |
| [build.sh]: ./build.sh | |
| [Makefile]: ./Makefile | |
| [third_party/]: ./third_party/ | |
| [pylint]: ./bin/pylint | |
| [ssh_client.py]: ./bin/ssh_client.py | |
| [ldns/]: ./third_party/ldns/ | |
| [mandoc/]: ./third_party/mandoc/ | |
| [openssl/]: ./third_party/openssl/ | |
| [zlib/]: ./third_party/zlib/ | |
| [wassh-libc-sup/]: ./wassh-libc-sup/ |