19个版本
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.2.5 | 2022年8月28日 |
#158 in Unix API
每月131次下载
125KB
2.5K SLoC
ocipkg
包分发的OCI注册表。
功能
ocipkg设计为一个轻量级的OCI注册表客户端
- 读取和写入oci-archive格式(OCI镜像布局的tar归档)。
- 无需外部容器运行时(如docker或podman)即可将容器镜像推送到OCI注册表并从OCI注册表拉取
此外,ocipkg还提供了一些实用工具,用于使用OCI注册表进行包分发
- 用于从文件、目录和带有
Cargo.toml
元数据的Rust项目构建容器的命令行工具。 build.rs
辅助工具,用于获取和链接库文件(*.a
或*.so
)作为容器
为什么选择ocipkg?
当我用Rust编写FFIcrate时,我决定启动这个项目。问题在于“如何获取与FFIcrate链接的共享/静态库”。这是困扰我的问题,并阻止我创建可移植的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
命令行工具
安装
cargo install ocipkg-cli
ocipkg
命令
待办事项
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
,这个hash是从镜像名称和Cargo.toml
计算得出的。
使用git提交hash确定容器镜像名称,格式为{{ 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 License, Version 2.0, (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可协议 (LICENSE-MIT或https://opensource.org/licenses/MIT)
任选其一。
依赖关系
~19–33MB
~553K SLoC