chisel

chisel

Debian 软件包精准切割与定制工具

Chisel 是一款专门用于切割和定制 Debian 软件包的工具。它采用软件包切片的概念,从软件包中提取最小且互补的文件集。Chisel 能创建高度定制的 Ubuntu 发行版切片,适合构建小型但功能完整的容器镜像。这个工具可以帮助用户获取 Ubuntu 的核心部分,实现精简与功能的平衡。

ChiselUbuntu容器镜像包管理软件切片Github开源项目

chisel Snap Build Tests

Chisel

Chisel是一个用于裁剪和切割Debian软件包的工具!

它基于软件包切片的概念 - 这些切片是最小的、互补的、松耦合的文件集合,基于软件包的元数据和内容。切片本质上是Debian软件包的子集,具有自己的内容和对其他内部和外部切片的依赖集。

<center>

pkg-slices


a-slice-of-ubuntu

</center>

这张图描述了一个简单的情况,其中软件包A和B都被分解成多个切片。在软件包层面,B依赖于A,但实际上,A中可能有一些B并不真正需要的文件(例如,B的正常运行不需要A_slice3)。有了这种切片定义,Chisel能够提取高度定制和专门化的Ubuntu发行版切片,可以将其视为一块石头,我们可以从中雕刻和提取运行应用程序所需的小而相关的部分。这非常适合用于创建更小但功能同样完整的容器镜像。

"雕塑在我开始工作之前就已经完整地存在于大理石块中。它已经在那里了,我只需要凿掉多余的材料。"

- 米开朗基罗

最终,这就像拥有一片Ubuntu - 只获取你所需要的。你可以鱼和熊掌兼得

使用Chisel

要安装最新版本的Chisel,请运行以下命令:

go install github.com/canonical/chisel/cmd/chisel@latest

Chisel通过chisel <命令>来调用。要获取更多信息:

  • 要查看帮助摘要,请输入chisel -h
  • 要查看所有命令的简短描述,请输入chisel help --all
  • 要查看某个命令的详细信息,请输入chisel help <命令>chisel <命令> -h

示例命令

Chisel依赖于一个切片数据库,该数据库按Ubuntu版本进行索引。

chisel cut --release ubuntu-22.04 --root myrootfs/ libgcc-s1_libs libssl3_libs

在这个例子中,Chisel会查找Ubuntu Jammy存档,获取提供的软件包,并根据"ubuntu-22.04" chisel-releases分支中可用的切片定义,仅将所需的切片安装到myrootfs文件夹中。

参考

Chisel发布

如上所述,Chisel依赖于软件包切片。这些切片需要在执行chisel命令之前定义。

默认情况下,Chisel会查找其中央chisel-releases数据库,其中软件包切片按Ubuntu版本定义和索引。发布版本由分支名称标识。例如:

chisel cut --release ubuntu-22.10 ...

将告诉Chisel在chisel-releases仓库的"ubuntu-22.10"分支中查找chisel.yaml文件。这个文件将指示Chisel从相应的Ubuntu存档的Kinetic发布中获取所请求的软件包切片,这些切片在同一分支中定义。

另外,也可以通过指定路径而不是分支名称来让Chisel指向自定义的本地Chisel发布。例如:

chisel cut --release release/ ...

Chisel发布配置

每个Chisel发布必须有一个"chisel.yaml"文件。

chisel.yaml:

format: <chiselReleaseFormat> archives: ubuntu: # Chisel要查找的Ubuntu存档 version: <ubuntuRelease> # 要查找的Ubuntu存档的类别/组件 components: [<componentName>, ...] # 要查找的Ubuntu存档的pocket/套件 suites: [<pocket>, ...]

示例:

format: v1 archives: ubuntu: version: 22.04 components: [main, universe] suites: [jammy, jammy-security, jammy-updates] public-keys: [ubuntu-archive-key-2018] public-keys: # Ubuntu Archive Automatic Signing Key (2018) <ftpmaster@ubuntu.com> # rsa4096/f6ecb3762474eda9d21b7022871920d1991bc93c 2018-09-17T15:01:46Z ubuntu-archive-key-2018: id: "871920D1991BC93C" armor: | -----BEGIN PGP PUBLIC KEY BLOCK----- mQINBFufwdoBEADv/Gxytx/LcSXYuM0MwKojbBye81s0G1nEx+lz6VAUpIUZnbkq dXBHC+dwrGS/CeeLuAjPRLU8AoxE/jjvZVp8xFGEWHYdklqXGZ/gJfP5d3fIUBtZ HZEJl8B8m9pMHf/AQQdsC+YzizSG5t5Mhnotw044LXtdEEkx2t6Jz0OGrh+5Ioxq X7pZiq6Cv19BohaUioKMdp7ES6RYfN7ol6HSLFlrMXtVfh/ijpN9j3ZhVGVeRC8k KHQsJ5PkIbmvxBiUh7SJmfZUx0IQhNMaDHXfdZAGNtnhzzNReb1FqNLSVkrS/Pns AQzMhG1BDm2VOSF64jebKXffFqM5LXRQTeqTLsjUbbrqR6s/GCO8UF7jfUj6I7ta LygmsHO/JD4jpKRC0gbpUBfaiJyLvuepx3kWoqL3sN0LhlMI80+fA7GTvoOx4tpq VlzlE6TajYu+jfW3QpOFS5ewEMdL26hzxsZg/geZvTbArcP+OsJKRmhv4kNo6Ayd yHQ/3ZV/f3X9mT3/SPLbJaumkgp3Yzd6t5PeBu+ZQk/mN5WNNuaihNEV7llb1Zhv Y0Fxu9BVd/BNl0rzuxp3rIinB2TX2SCg7wE5xXkwXuQ/2eTDE0v0HlGntkuZjGow DZkxHZQSxZVOzdZCRVaX/WEFLpKa2AQpw5RJrQ4oZ/OfifXyJzP27o03wQARAQAB tEJVYnVudHUgQXJjaGl2ZSBBdXRvbWF0aWMgU2lnbmluZyBLZXkgKDIwMTgpIDxm dHBtYXN0ZXJAdWJ1bnR1LmNvbT6JAjgEEwEKACIFAlufwdoCGwMGCwkIBwMCBhUI AgkKCwQWAgMBAh4BAheAAAoJEIcZINGZG8k8LHMQAKS2cnxz/5WaoCOWArf5g6UH beOCgc5DBm0hCuFDZWWv427aGei3CPuLw0DGLCXZdyc5dqE8mvjMlOmmAKKlj1uG g3TYCbQWjWPeMnBPZbkFgkZoXJ7/6CB7bWRht1sHzpt1LTZ+SYDwOwJ68QRp7DRa Zl9Y6QiUbeuhq2DUcTofVbBxbhrckN4ZteLvm+/nG9m/ciopc66LwRdkxqfJ32Cy q+1TS5VaIJDG7DWziG+Kbu6qCDM4QNlg3LH7p14CrRxAbc4lvohRgsV4eQqsIcdF kuVY5HPPj2K8TqpY6STe8Gh0aprG1RV8ZKay3KSMpnyV1fAKn4fM9byiLzQAovC0 LZ9MMMsrAS/45AvC3IEKSShjLFn1X1dRCiO6/7jmZEoZtAp53hkf8SMBsi78hVNr BumZwfIdBA1v22+LY4xQK8q4XCoRcA9G+pvzU9YVW7cRnDZZGl0uwOw7z9PkQBF5 KFKjWDz4fCk+K6+YtGpovGKekGBb8I7EA6UpvPgqA/QdI0t1IBP0N06RQcs1fUaA QEtz6DGy5zkRhR4pGSZn+dFET7PdAjEK84y7BdY4t+U1jcSIvBj0F2B7LwRL7xGp SpIKi/ekAXLs117bvFHaCvmUYN7JVp1GMmVFxhIdx6CFm3fxG8QjNb5tere/YqK+ uOgcXny1UlwtCUzlrSaP =9AdM -----END PGP PUBLIC KEY BLOCK-----

切片定义

每个Chisel发布版本中,每个Ubuntu软件包只能有一个切片定义文件。所有切片定义文件必须放在"slices"文件夹下,并遵循相同的结构。例如:

slices/B.yaml:

# (必需) 软件包的名称。 # 切片定义文件应相应命名(例如:"openssl.yaml") package: B # (必需) 切片列表 slices: # (必需) 切片的名称 slice2: # (可选)此切片依赖的其他切片列表 essential: - A_slice1 # (必需)此切片将安装的包中的文件列表 contents: /path/to/content: /path/to/another/multiple*/content/**: /path/to/moved/content: {copy: /bin/original} /path/to/link: {symlink: /bin/mybin} /path/to/new/dir: {make: true} /path/to/file/with/text: {text: "Some text"} /path/to/mutable/file/with/default/text: {text: FIXME, mutable: true} /path/to/temporary/content: {until: mutate} # (可选)变异脚本,用于重现维护者脚本, # 基于Starlark(https://github.com/google/starlark-go) mutate: | foo = content.read("/path/to/temporary/content") content.write("/path/to/mutable/file/with/default/text", foo)

示例:

package: mypkg slices: bins: essential: - mypkg_config contents: /bin/mybin: /bin/moved: {copy: /bin/original} /bin/linked: {symlink: /bin/mybin} config: contents: /etc/mypkg.conf: {text: "The configuration."} /etc/mypkg.d/: {make: true}

要查找更多真实切片定义文件的示例(并贡献您自己的), 请访问https://github.com/canonical/chisel-releases

路径类型

如上例所示,切片内容下列出的路径可以包含额外信息来标识预期的内容类型:

  • make:一个truefalse布尔值,用于指定是否必须创建该路径。 示例:/etc/mypkg.d/: {make: true}指示Chisel创建"/etc/mypkg.d/"目录(包括父目录)。 注意:为使make有效,提供的路径必须以"/"结尾。
  • mode:一个32位无符号整数,表示路径模式。 示例:/etc/dir/sub/: {make: true, mode: 01777}指示Chisel以"01777"模式创建"/etc/dir/sub/"目录。
  • copy:一个字符串,指向被复制内容的原始路径。 示例:/bin/moved: {copy: /bin/original}指示Chisel将包中的"/bin/original"文件复制到"/bin/moved"。
  • text:要写入提供的文件路径的字符序列。 示例:/tmp/file1: {text: data1}将指示Chisel将"data1"写入文件"/tmp/file1"。
  • symlink:一个字符串,指向被链接内容的原始路径(源)。 示例:/bin/linked: {symlink: /bin/mybin}将指示Chisel创建指向现有文件"/bin/mybin"的符号链接"/bin/linked"。
  • mutable:一个truefalse布尔值,用于指定内容是否可变,即从deb中提取后是否可以更改。 示例:/tmp/file1: {text: data1, mutable: true}指示Chisel用"data1"填充"/tmp/file1",同时让Chisel知道此文件的内容可以通过变异脚本进行修改。
  • until:接受mutate值,表示指定的内容将在执行变异脚本后被Chisel删除。 示例:/tmp/file1: {text: data1, until: mutate}指示Chisel在安装时用"data1"填充文件"/tmp/file1",但在执行切片的变异脚本后立即删除它。 注意:虽然此选项可以与通配符结合使用(例如/tmp/file*: {until: mutate}),但不能用于删除非空目录。
  • arch:接受已知架构列表,用于标识仅适用于某些架构的内容。 示例:/usr/bin/hello: {arch: amd64}将指示Chisel仅在制作amd64文件系统时提取并安装"/usr/bin/hello"文件。

待办事项

  • 尽可能保留所有权
  • 归档的GPG签名检查
  • 为归档测试使用模拟服务器
  • 功能测试

常见问题

我可以使用任意包名吗?

不可以,包名必须反映归档中的包名,以便有一个单一的命名空间来记住和遵守。

我尝试使用不同的Ubuntu版本,但失败了?

目前映射是手动的。请告诉我们,我们会修复它。

我可以在Chisel发布中使用多个仓库吗?

目前不行,但可能最终会支持。

我可以使用非Ubuntu仓库吗?

目前不行,但最终会支持。

多个切片可以引用相同的路径吗?

可以,但请参见下文。

多个切片可以_输出_相同的路径吗?

可以,只要这些切片属于同一个包,或者该路径根本不是从包中提取的(非复制),且显式内联定义完全匹配。

是否保留文件所有权?

目前不会,但将来会支持。

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多