shellac

builds.sr.ht status

shellac is a suite of software which aims to provides OS-level process control for the Elixir language. The software is composed of two sub-projects which coordinate to accomplish this goal:

Prerequisites

You will need a Rust toolchain, which includes the build tool cargo, in order to sucesfully build this package. Please visit the Rust website for instructions on how to install these tools. This library can be built with the “stable channel” of the Rust compiler.

Getting Started

  1. Add {:lacca, "~> 0.2"} to your mix.exs file’s dependencies.
  2. Run mix deps.get to download the dependency.
  3. Run mix deps.compile to verify that the package compiles sucessfully.
  4. Use the library in your program, for instance …
{:ok, pid} = Lacca.start "echo", ["hello, world."]
Lacca.read_stdout pid
# {:ok, "hello, world.\n"}
Lacca.stop pid

Note on Native Code

This library builds a native executable which is bundled into the priv/ directory of this OTP application during the mix compile phase. To do this you must have a working Rust toolchain installed on any machine that will be compiling a project that depends on lacca. You do not need the toolchain installed on deployment targets, however when building a release, e.g: with the mix release command, you will need to ensure that the resulting binaries can be executed on the target system.

Some common gotchas include:

Protocol Versioning

Please note that this is alpha-quality software. There are plans to introduce backwards compatibility to the resin daemon at a later date; for example it would be possible to use a newer resin binary w/ an older lacca binary.

However this functionality is not implemented in the prototype v0. For best results it is strongly encouraged that you use matching versions of resin and lacca which were compiled together from the same sources. (This would be the default behavior if you are using mix to fetch your dependencies, as it will build resin from source for the current architecture.)

Protocol Format

shellac v0 packets are sent on the wire as follows:

Packet Types

Packet types are as follows:

TBD

1. Start Process  :: (exec: string, args: [string]])
2. Kill Process   :: ()
3. DataOut        :: (ty: (Stdout | Stderr), buf: [u8])
4. DataIn         :: (buf: [u8])
5. ExitStatus     :: ( u32? )
6. ErrorReport    :: (string)

Future Additions

Lacca Design

When the lacca application starts it will kick off a supervision process. To start an OS-level process lacca will perform the following initialization sequence:

TODO