## OCI Tar Builder This is a library that can be used to build OCI tar archives. It is used by the `wasi-demo-app` crate to build the OCI tar archive that is used to run the demo app. The current implementation is to support encapsulating the `wasi-demo-app` wasm module as an OCI tar. ### Contributing We welcome contributions to this to make it more robust, useful, and generally better. ### Library Usage The library is currently not published to crates.io, so you will need to add the following to your `Cargo.toml`: ```toml [dependencies] oci-tar-builder = { git = "https://github.com/containerd/runwasi.git" } ``` See [wasi-demo-app build script](../wasi-demo-app/build.rs) for an example. ### Executable usage There is an experimental executable that uses the library and can package a wasm module as an OCI image with wasm layers. See the [OCI WASM in containerd](https://docs.google.com/document/d/11shgC3l6gplBjWF1VJCWvN_9do51otscAm0hBDGSSAc) for more information. To generate the package and import to a registry using a tool such as [regctl](https://github.com/regclient/regclient/blob/main/docs/regctl.md#image-commands): ``` cargo run --bin oci-tar-builder -- --name wasi-demo-oci --repo ghcr.io/containerd/runwasi --tag latest --module ./target/wasm32-wasi/debug/wasi-demo-app.wasm -o ./dist/img-oci.tar regctl image import localhost:5000/wasi-demo-oci:latest ./dist/img-oci.tar ``` View the manifest created, notice that the media types for the layers are `application/vnd.bytecodealliance.wasm.component.layer.v0+wasm` which are subject to change. ``` Name: localhost:5000/wasi-demo-oci:latest MediaType: application/vnd.oci.image.manifest.v1+json Digest: sha256:6c48b431d29a1ea1ece13fa50e9f33e4d164e07f6a501dbed668aed947002c5c Annotations: io.containerd.image.name: ghcr.io/containerd/runwasi/wasi-demo-oci:latest org.opencontainers.image.ref.name: latest Total Size: 2.590MB Config: Digest: sha256:beb7483682ae4ec45d02cd7cee8ee733f8dc610cb7e91070dc8f10567365bdd7 MediaType: application/vnd.oci.image.config.v1+json Size: 138B Layers: Digest: sha256:656e978ae0c37156a6abe06052a588e5c700346650765859981ebd2089cffd42 MediaType: application/vnd.bytecodealliance.wasm.component.layer.v0+wasm Size: 2.590MB ``` ### Spec See the [OCI Image Spec](https://github.com/opencontainers/image-spec/blob/bc9c4bd/image-layout.md) for more information on the OCI tar format. In order to be compatible with Docker, since Docker does not currently support the OCI format, this also includes a `manifest.json` file at the root of the tar that describes the image in a way that Docker can import it.