23 个版本
0.3.9 | 2024年7月26日 |
---|---|
0.3.8 | 2024年6月5日 |
0.3.5 | 2024年5月28日 |
0.2.9 | 2024年4月11日 |
0.1.0 | 2022年7月24日 |
#73 在 开发工具 中排名
每月下载量 8,635
在 64 个 Crates 中使用(直接使用 4 个)
100KB
2K SLoC
ocipkg
包分发的 OCI 仓库。
功能
ocipkg 被设计为一个轻量级的 OCI 仓库客户端
- 读取和写入 oci-archive 格式(OCI 图像布局 的 tar 归档)。
- 无需外部容器运行时(例如 docker 或 podman)即可将容器镜像推送到 OCI 仓库或从 OCI 仓库拉取
此外,ocipkg 还提供了用于使用 OCI 仓库进行包分发的实用工具
- 用于从文件、目录和具有
Cargo.toml
元数据的 Rust 项目构建容器的 CLI 工具。 build.rs
助手,用于获取并将库文件(例如*.a
或*.so
)作为容器链接
为什么选择 ocipkg?
在编写 Rust 中的 FFI crate 时,我决定启动这个项目。问题是“如何获取一个与 FFI crate 链接的共享/静态库”。这是困扰我的问题,阻碍了便携式 C++ 库的创建。
我们有三种选择
- 使用系统中的库
- ✔ 系统管理员准备的库,他们最熟悉系统。
- ❌ 开发者必须知道库在用户系统中的分布情况,例如 Ubuntu 22.04、20.04、18.04、Debian sid、11、10、9、RHEL9、8、7、ArchLinux、Gentoo Linux、FreeBSD、macOS(使用 brew)、Windows(使用 winget、chocolatey、scoop)等。
- ❌ 一些系统不允许多版本库共存。
- 大多数
*-sys
crate 支持此选项。
- 从互联网获取源代码,并构建和链接它们
- ✔ 开发者可以完全控制库。
- ❌ 用户系统中需要开发工具,例如
cmake
,并且需要额外的构建资源。 - 一些 crate 支持此选项,并以
*-src
命名。
- 在构建时从互联网上获取编译好的库
- ✔ 开发者也可以完全控制库。
- ❌ 需要 HTTP(或其它协议)服务器来分发库
- ❌ 开发者必须为每个支持的平台准备二进制文件,例如
x86_64-unknown-linux-gnu
,x86_64-pc-windows-msvc
,aarch64-unknown-linux-gnu
,...
ocipkg 专注于选项 3,即帮助通过 OCI 注册表分发开发者编译的二进制文件。
示例
Rust
- 创建包:examples/rust/lib
- 使用包:examples/rust/exe
C++/cmake
- 创建包:examples/cpp/lib
CLI 工具
安装
cargo install ocipkg-cli
ocipkg
命令
TBW
cargo-ocipkg
命令
一个用于创建和发布由 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)
文件名形式为 ocipkg_{{ hash }}.tar
,此哈希值是根据镜像名称和 Cargo.toml
计算得出的。
容器镜像名称使用 git 提交哈希值确定,格式为 {{ registry }}:$(git rev-parse HEAD --short)
,其中注册表名称由 Cargo.toml
设置。
[package.metadata.ocipkg]
registry = "ghcr.io/termoshtt/ocipkg/dynamic/rust"
可以通过 cargo-ocipkg publish
发布此容器。
$ cargo ocipkg publish --release
Publish container (ghcr.io/termoshtt/ocipkg/dynamic/rust:be7f108)
链接
开放容器倡议 (OCI) 是一个位于 Linux 基金会 的项目。
由于我们从不运行容器,因此该项目不依赖于 OCI 运行时规范。
使用 OCI 注册表分发任何文件(非系统镜像)的想法基于 ORAS。
试图使用 OCI 注册表分发软件包的类似项目
许可证
© 2020 Toshiki Teramura (@termoshtt)
该项目许可协议为以下之一
- Apache 许可证 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
供您选择。
依赖关系
~9–21MB
~333K SLoC