容器运行时云原生【免费下载链接】youkiA container runtime written in Rust项目地址https://gitcode.com/gh_mirrors/yo/youki点击查看免费下载本文以仓库 docs/src/user/basic_setup.md 为核心骨架整理而成youki 是一个用 Rust 编写的 OCI 容器运行时同类项目如 runc、crun本文完整覆盖其平台与系统要求、运行时依赖、预编译二进制安装、Docker 运行时接入、源码构建含 cross-rs 交叉编译、子 crate 依赖引用以及非 Linux 平台下的 Vagrant 虚拟化方案。读完本文你可以独立完成 youki 从「环境准备」到「构建出二进制并交给 Docker 使用」的完整流程并知道如何在自己项目中复用 its 子 crate。平台与系统前置要求youki 目前只支持 Linux 平台在其他平台上运行或构建需要使用某种形式的虚拟化仓库为此提供了 Vagrantfile详见后文。同时youki 目前只支持且预期使用 systemd 作为 init 系统在其他 init 系统下无法正常工作。项目正在推进把 systemd 相关功能放到 feature flag 之后在 crates/youki/Cargo.toml 中已经可以看到systemdfeature 的声明它聚合了libcgroups/systemd、libcontainer/systemd与v2但在那之前使用 youki 需要一台启用 systemd 的系统。也就是说在动手安装前请先确认操作系统为 Linuxx86_64 或 aarch64 等主流架构系统使用 systemd 作为 init 系统主流 Debian/Ubuntu/Fedora/RHEL 发行版均满足非 Linux 平台如 macOS、Windows请直接跳至文末的 Vagrant 方案。运行时依赖安装youki 的musl 静态二进制构建没有额外的运行时依赖解压即可直接运行。对于其余构建形态需要按发行版通过包管理器安装运行时依赖Debian、Ubuntu 及相关发行版sudo apt-get install libseccomp2Fedora、CentOS、RHEL 及相关发行版sudo dnf install libseccomplibseccomp是 seccomp 系统调用过滤能力的底层库youki 在实现 OCI 的 seccomp 配置时需要与它交互libcontainer中的 seccomp 相关实现依赖该库参见 crates/libcontainer/src/seccomp。安装预编译二进制Release 包以 root 身份从项目官方 GitHub Release 下载预编译二进制文档中对应 v0.7.0 的 musl 静态构建musl 构建无运行时依赖直接放进/usr/bin# curl -sSfL https://github.com/youki-dev/youki/releases/download/v0.7.0/youki-0.7.0-$(uname -m)-musl.tar.gz | tar -xzvC /usr/bin/ youki命令说明$(uname -m)会自动代入当前机器的架构如x86_64或aarch64因此同一命令可在不同架构上使用tar -xzvC /usr/bin/ youki只解出youki这一个二进制并放到/usr/bin/下该 Release 包对应仓库中0.7.0版本与 crates/youki/Cargo.toml 中version 0.7.0一致。运行 youki把它接入 Dockeryouki 属于低级low-level容器运行时可以直接用它来创建、启动容器但纯命令行操作会比较繁琐。更常见的做法是把它配置给 Docker 这类高级high-level容器运行时由高级运行时负责镜像拉取、网络、卷等youki 只负责 OCI runtime 层面的容器生命周期。下面的示例以 Docker 为例Docker 的安装请参考官方文档。安装好 Docker 后把 youki 配置为 Docker 的一个 runtimesudo cat /etc/docker/daemon.json EOF { runtimes: { youki: { path: /usr/bin/youki } } } EOF sudo systemctl reload docker配置完成后即可用 youki 作为底层运行时运行容器docker run --rm --runtime youki hello-world更完整的用法rootful / rootless 两种模式、独立使用 youki 而不依赖 Docker、日志级别等请参见 docs/src/user/basic_usage.md。其中也给出了更丰富的daemon.json写法例如通过runtimeArgs传入--debug、--systemd-log等参数。从源码构建 youki构建需求Rust 工具链youki 使用 Rust 编写编译需要安装 Rust 工具链安装方法见 Rust 官网推荐使用rustup。使用 rustup 安装后正确的编译器版本会自动根据仓库根目录的 rust-toolchain.toml 选择无需手动干预。当前仓库该文件内容为[toolchain] profiledefault channel1.96.0即固定使用 Rust 1.96.0 稳定版工具链。构建依赖安装不使用 cross-rs 时先安装构建依赖再运行just youki-dev或just youki-release。按发行版安装构建依赖Debian、Ubuntu 及相关发行版sudo apt-get install \ pkg-config \ libsystemd-dev \ build-essential \ libelf-dev \ libseccomp-dev \ libclang-dev \ libssl-devFedora、CentOS、RHEL 及相关发行版sudo dnf install \ pkg-config \ systemd-devel \ elfutils-libelf-devel \ libseccomp-devel \ clang-devel \ openssl-devel这些依赖的用途与项目实现一一对应libsystemd-dev/systemd-develyouki 依赖 systemdjournald 日志、systemd cgroup 管理等crates/youki/Cargo.toml 中的tracing-journald依赖即用于向 journald 输出日志libseccomp-dev/libseccomp-develseccomp 支持libelf-dev/elfutils-libelf-develcgroups v2 设备过滤的 eBPF 程序相关见 crates/libcgroups/src/v2/deviceslibclang-dev/clang-devellibbpf 等依赖的 bindgen 构建需要 clanglibssl-dev/openssl-devel部分依赖链需要 OpenSSL。仓库的 CI 配置justfile 中的ci-prepare同样安装这一组 Ubuntu 依赖可以作为依赖清单的交叉验证。获取源码目前 youki 只能从源码安装需要先克隆仓库获取源码如果只是把自己的项目里把 youki 的子 crate 作为依赖见后文Cargo 会自动替你克隆仓库无需手动执行这一步。克隆仓库git clone https://gitcode.com/gh_mirrors/yo/youki该命令会在当前目录下创建一个名为youki的目录本文档及仓库其余文档中提到的「仓库根目录root directory」均指这个youki/目录。使用 just 构建仓库使用 just 作为命令运行器封装构建流程。进入克隆出的目录后# go into the cloned directory cd youki just youki-dev # or youki-release ./youki -h # get information about youki command构建完成后youki 二进制会放在克隆目录的根目录下即youki/youki。关于两种构建模式可以从仓库 justfile 中看到其定义# build youki in dev mode youki-dev: {{ cwd }}/scripts/build.sh -o {{ cwd }} -c youki # build youki in release mode youki-release: {{ cwd }}/scripts/build.sh -o {{ cwd }} -r -c youki即just youki-dev调用 scripts/build.sh 以 debug 模式编译不带-rjust youki-release带-r以 release 模式编译。两种模式都输出到-o {{ cwd }}即仓库根目录。从 scripts/build.sh 可以看到目标三元组默认取本机 host targetTARGET${TARGET:-$HOST_TARGET}并支持musl、gnu/glibc、arm64/aarch64、amd64/x86_64等快捷别名scripts/build.sh。此外工作区根 Cargo.toml 为 release 配置开启了lto true用于进一步优化产物。使用 cross-rs 交叉编译仓库支持通过 cross-rs 编译 youki其优势包括无缝支持不同架构的交叉编译支持的 target 列表见仓库根目录的 Cross.toml无构建期依赖编译过程在容器中完成本机不需要装各种 C 库开发包构建 musl 目标静态二进制时无运行时依赖产物可直接拷贝到目标机器运行。使用 cross-rs 时唯一的构建依赖是 cross-rs 本身及其依赖rustup 与 docker 或 podman。CARGOcross TARGETmusl just youki-dev # or youki-release这里TARGETmusl会被 scripts/build.sh 展开为$(uname -m)-unknown-linux-musl即当前架构的 musl 静态目标。从 Cross.toml 可以看到仓库预配置的四个目标[build] default-target x86_64-unknown-linux-gnu env.passthrough [XDG_RUNTIME_DIR] [target.aarch64-unknown-linux-gnu] dockerfile cross/Dockerfile.gnu [target.x86_64-unknown-linux-gnu] dockerfile cross/Dockerfile.gnu [target.aarch64-unknown-linux-musl] dockerfile cross/Dockerfile.musl [target.x86_64-unknown-linux-musl] dockerfile cross/Dockerfile.musl即支持 gnu / musl 两种 libc 形态、x86_64 / aarch64 两种架构。其中 cross/Dockerfile.musl 会在 cross 基础镜像内安装libseccomp-static、libelf-static等静态库并通过环境变量配置静态链接LIBSECCOMP_LINK_TYPEstatic、WASMEDGE_DEP_STDCXX_LINK_TYPEstatic从而产出真正静态的 musl 二进制——这正是前文「musl 静态构建无运行时依赖」的底层原因。构建产物验证构建完成后除了用./youki -h查看命令帮助还可以用./youki info查看运行环境信息。从 crates/youki/src/main.rs 的入口实现可以看到main在启动时会先调用pentacle::ensure_sealed()处理 CVE-2019-5736 类攻击防护把/proc/self/exe复制到匿名内存文件描述符并封印后重新执行防止恶意容器修改宿主机上的运行时二进制然后解析命令行、初始化可观测性observability并按子命令分发到create、start、kill、delete、state、run、spec、list等标准 OCI 命令。顺带一提日志级别在 crates/youki/src/observability.rs 中定义debug 构建默认debug级别release 构建默认error级别--log-level可以显式指定--debug标志兼容 runc/crun等价于把级别设为debug且当两者同时出现时--log-level优先。在自己的项目中把 youki 子 crate 作为依赖youki 工作区由多个 crate 组成见根 Cargo.toml 的members [crates/*, ...]包括liboci-cliOCI CLI 参数定义、libcontainer容器核心实现、libcgroupscgroup 控制等。你可以在自己的项目中以 git 依赖方式引用任意子 crate[dependencies] ... liboci-cli { git https://github.com/youki-dev/youki.git } ...这里以liboci-cli为例按需替换成你要用的子 crate 即可。随后即可在源码中直接引用use liboci_cli::{...}例如 crates/youki/src/main.rs 中就用到了use liboci_cli::{CommonCmd, GlobalOpts, StandardCmd};把create、start、delete、run、spec等命令的参数解析统一收口在liboci_cli中——这也是为什么把子 crate 拆出来可以方便其他项目复用同一套 OCI CLI 定义。非 Linux 平台用 Vagrant 运行 youki如前文所述youki 只支持 Linux。要在非 Linux 平台上构建/使用 it需要虚拟化。仓库在根目录提供了 Vagrantfile使用 Vagrant 完成所需的虚拟机搭建Vagrant 的安装请参考官方文档。安装并配置好 Vagrant 后在克隆出的youki目录中执行 vagrant 命令即可在 VM 内运行 youki# in the youki directory # for rootless mode, which is default vagrant up default vagrant ssh default # or if you want to develop in rootful mode vagrant up rootful vagrant ssh rootful # in virtual machine cd youki just youki-dev # or youki-release从 Vagrantfile 的配置可以看出两个 VM 均基于bento/fedora-42并在 provision 脚本里自动安装构建所需依赖git gcc docker wget pkg-config systemd-devel dbus-devel elfutils-libelf-devel libseccomp-devel clang-devel openssl-devel just以及 Rust 工具链rustup同时通过内核参数关闭 cgroup v2 统一层级以兼容测试环境rootful模式还额外配置了 root SSH 登录。也就是说vagrant up后你进入的是一台已经具备完整 youki 构建环境的 Fedora 虚拟机。说明该 Vagrantfile 还包含containerd2youki、podmane2e等用于集成测试的 VM 定义对应 justfile 中的containerd-test、test-rootless-podman等任务日常按default/rootful使用即可。常见注意事项小结系统要求youki 仅支持 Linux且要求 systemd 作为 init 系统systemd 相关特性正在迁移到 feature flagsystemdfeature见 crates/youki/Cargo.toml。运行时依赖musl 静态二进制零运行时依赖其他形态需要libseccompDebian 系包名为libseccomp2。构建方式推荐just youki-dev/just youki-release需要交叉编译时用CARGOcross TARGETmusl just youki-dev支持的目标见 Cross.toml。产物位置源码构建的二进制位于仓库根目录youki/youki预编译 Release 包解压后放/usr/bin/youki。接入高层运行时通过/etc/docker/daemon.json注册youkiruntime 并systemctl reload docker即可docker run --runtime youki ...详细的 rootful/rootless 两种使用模式见 docs/src/user/basic_usage.md。安全加固youki 入口会自动执行/proc/self/exe的内存封印pentacle::ensure_sealed()用于缓解 CVE-2019-5736 一类针对运行时二进制的攻击构建后请勿移除相关逻辑。至此你已经掌握了 youki 的完整安装路径无论是直接使用官方预编译二进制、从源码自建还是在非 Linux 平台通过 Vagrant 虚拟机运行都可以按本文流程完成后续深入使用容器生命周期、rootless 模式、日志调优请继续阅读 docs/src/user/basic_usage.md。赞分享容器运行时云原生【免费下载链接】youkiA container runtime written in Rust项目地址https://gitcode.com/gh_mirrors/yo/youki点击查看免费下载相关推荐从源码构建 Velero 完整实战指南编译、交叉编译、镜像制作、测试与运行从源码构建 Velero 完整实战指南编译、交叉编译、镜像制作、测试与运行 本指南以 Velero 项目 v0.8.1 官方文档当时项目还叫 Heptio云原生灾备存储后端JNA Android 开发环境搭建与交叉编译构建指南JNA Android 开发环境搭建与交叉编译构建指南 导读 本文基于 JNA 仓库中的 www/AndroidDevelopmentEnvironment.m系统编程后端COLMAP 安装与源码构建完全指南从预编译二进制到跨平台编译、库链接与 PyCOLMAPCOLMAP 安装与源码构建完全指南从预编译二进制到跨平台编译、库链接与 PyCOLMAP COLMAP 是通用的 Structure from Motion计算机视觉图形学图像处理上一篇开源音乐播放器Wora的安装与配置指南下一篇3步突破大麦自动抢票工具的高效配置与实战技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考