OCI Registry for package distribution.
$XDG_DATA_HOME/ocipkg
)
with image name and tags, and safely shared by several local projects.| Library type | Create package in Rust | Use package from Rust | |:-------------|:-----------------------|:----------------------| | static |examples/static/rust/lib | examples/static/rust/exe | | dynamic |examples/dynamic/rust/lib | examples/dynamic/rust/exe |
bash
cargo install --features=cli ocipkg@0.1.0-rc.0
ocipkg
commandTBW
cargo-ocipkg
commandA tool for creating and publishing container using
library built by cargo build
.
$ cargo ocipkg build --release
Finished release [optimized] target(s) in 0.00s
Creating oci-archive (/home/teramura/github.com/termoshtt/ocipkg/examples/dynamic/rust/lib/target/release/ocipkg_dd0c7a812fd0fcbc.tar)
The filename is in form of ocipkg_{{ hash }}.tar
,
and this hash is calculated from image name and Cargo.toml
.
Container image name is determined using git commit hash
as {{ registry }}:$(git rev-parse HEAD --short)
where registry name is set by Cargo.toml
:
toml
[package.metadata.ocipkg]
registry = "ghcr.io/termoshtt/ocipkg/dynamic/rust"
This container can be published by cargo-ocipkg publish
:
$ cargo ocipkg publish --release
Publish container (ghcr.io/termoshtt/ocipkg/dynamic/rust:be7f108)
I have determined to start this project while writing FFI crate in Rust. The problem is "how to get a share/static library linked to FFI crate". This is the problem bothered me and prevent from creating portable C++ library.
We have three options:
*-sys
crate support this option.cmake
, is required in user system,
and requires additional build resources.*-src
.x86_64-unknown-linux-gnu
, x86_64-pc-windows-msvc
, aarch64-unknown-linux-gnu
,...ocipkg focuses on 3., i.e. helping distributing binary compiled by the developer through OCI registry.
Open Container Initiative (OCI) is a project under Linux Foundation.
The idea that distribute binary files (not a system image) using OCI registry is based on ORAS.
Similar projects trying to distribute packages using OCI registries:
© 2020 Toshiki Teramura (@termoshtt)
This project is licensed under either of
at your option.