# splitter **Repository Path**: openkylin/splitter ## Basic Information - **Project Name**: splitter - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-16 - **Last Updated**: 2026-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 中文 | [English](README.en.md) # splitter ## 介绍 splitter用于生成openKylin distroless镜像制作的原材料slices。 一般情况下,制作一个应用容器镜像会直接使用`RUN apt install`在镜像中打包所需的应用及其依赖软件包。这种以DEB为最小粒度的镜像打包方式会导致镜像内包含冗余文件,暴露更多攻击点,并且额外增加镜像体积影响传播。 Distroless镜像是一种精简的容器镜像,旨在最小化容器的大小和攻击面。与一般的容器镜像不同,distroless镜像不包含操作系统的许多组件,只包含运行应用程序所需的最小依赖项。 openKylin distroless镜像构建时,首先使用splitter对DEB软件包进行切分处理,每个软件包会被切分成多个slices(每个slice包含一组具有特定功能的文件集合),软件包之间的依赖关系也更精细地表现为slice之间的依赖;然后以slice为最小构建单元生成最终的distroless镜像,可以有效减少冗余文件,进而降低安全风险。 ## 安装指南 splitter处于开发阶段。 ### 源码构建 1. 安装Rust ``` curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` 2. 克隆源码仓库 ``` git clone https://gitee.com/openkylin/splitter.git cd splitter cargo build --release ``` 3. 验证 ``` ./target/release/splitter --help ``` ## 核心概念 ### Slice 描述文件 openKylin 的 slice 生成依赖于 **Slice 描述文件** 定义的软件包切分规则。**Slice 描述文件** 文件以 YAML 格式定义了一个 DEB 包如何被精确地拆解成多个功能独立的、可按需组合的 “Slice”。 以libssl1.1的Slice 描述文件(命名为:libssl1-1.yaml)为例: ```yaml package: libssl1.1 deps: - libssl1.1_copyright slices: copyright: contents: common: - /usr/share/doc/libssl1.1/copyright data: contents: common: - /usr/share/doc/libssl1.1/README.Debian - /usr/share/doc/libssl1.1/changelog.Debian.gz libs: contents: extra: linux-amd64: - /usr/lib/x86_64-linux-gnu/engines-1.1/*.so - /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 - /usr/lib/x86_64-linux-gnu/libssl.so.1.1 linux_arm64: - /usr/lib/aarch64-linux-gnu/engines-1.1/*.so - /usr/lib/aarch64-linux-gnu/libcrypto.so.1.1 - /usr/lib/aarch64-linux-gnu/libssl.so.1.1 linux-riscv64: - /usr/lib/riscv64-linux-gnu/engines-1.1/*.so - /usr/lib/riscv64-linux-gnu/libcrypto.so.1.1 - /usr/lib/riscv64-linux-gnu/libssl.so.1.1 ``` 上述Slice 描述文件,即libssl1-1.yaml文件中,`slices`指示 libssl1.1 的软件包被切分为:`libssl1.1_data`、`libssl1.1_libs`和`libssl1.1_copyright`三个slices,以及这些slice所包含的文件内容(详细信息请查看[slices](https://gitee.com/openkylin/slices)。 ## 使用说明 `splitter` 提供了两个核心命令:`cut` 用于根据Slice 描述文件切分软件包,`gen` 用于自动生成Slice 描述文件。本章节介绍这两个命令的具体使用方法。 ### 生成 Slices (`cut` 命令) splitter使用cut命令行对软件包切分生成所需的slices(可设置SPLITTER_SLICE_REPO环境变量到自定义slice-releases源) 使用本地安装的splitter: ```bash # 示例 splitter cut -r 2.0 -a riscv64 -o /path/to/output ca-certificates_data tzdata_data ``` 上述命令中`-r/--release`指定所需slices所属的openKylin版本,`-a/--arch`指定OS架构,`-o/--output`指定生成slices的输出路径,`ca-certificates_data tzdata_data`是用户指定要生成的slices。 最终生成的所有slices打包保存在`/path/to/output.tar.xz`文件中。 ### 自动生成 Slice 描述文件 (gen 命令) splitter 新增了 `gen` 命令,可以根据DEB包的内容自动生成初始的Slice 描述文件,方便开发者快速创建和维护Slice 描述文件。 使用本地安装的splitter: ```bash # 示例:为 tzdata 包生成 Slice 描述文件 splitter gen -r 2.0 -o /path/to/output -p tzdata ``` 此命令将为 `tzdata` DEB包生成一个基本的 Slice 描述文件 `tzdata.yaml`,开发者可以根据需要进一步编辑和完善。 ## 参与贡献 欢迎广大开发者参与openKylin distroless镜像生态建设! 1. 请在[slices](https://gitee.com/openkylin/slices)提issue描述对distroless镜像的需求,并与社区讨论、开发相关Slice 描述文件 2. 关于splitter的需求/bug请提交issue或PR