资讯详情

pi-gen构建引擎揭秘:build.sh与prerun.sh的编排机制和5类控制文件执行规则

📅 2026/10/15 18:09:28 | 华诺云谱 👁 阅读
pi-gen构建引擎揭秘:build.sh与prerun.sh的编排机制和5类控制文件执行规则
【免费下载链接】pi-genTool used to create the raspberrypi.org Raspbian images项目地址https://gitcode.com/gh_mirrors/pig/pi-gen点击查看免费下载pi-gen 是树莓派官方用于批量构建 Raspberry Pi OSRaspbian系统镜像的自动化工具。它用一个build.sh主脚本按阶段stage流水线方式拼装系统每完成一个阶段就产出一份可用的 rootfs最终打包成 SD 卡镜像。对新手来说理解它的编排机制是定制自己专属 Pi 系统镜像的第一步。本文带你看懂三件事build.sh如何按顺序驱动各阶段prerun.sh在阶段之间干了什么子目录里的 5 类控制文件debconf、packages、packages-nr、patches、run 脚本分别如何被执行。一条流水线build.sh 的主循环整个构建流程可以从 build.sh 的run_stage/run_sub_stage两个函数概括为读取配置执行时 source 当前目录下的config文件也可以用-c myconfig指定核心变量是必填的IMG_NAME以及WORK_DIR、DEPLOY_DIR等按字母序遍历stage*目录默认是stage0 → stage1 → stage2 → stage3 → stage4 → stage5也可以用STAGE_LIST自定义顺序甚至插入自己的阶段目录跳过控制如果某阶段目录里存在SKIP文件整个阶段被跳过存在SKIP_IMAGES则不产出镜像执行prerun.sh如果存在且可执行负责准备本阶段的 rootfs按字母序执行每个子目录中的控制文件详见下文子目录名必须是两位数字开头如01-sys-tweaks子目录内的SKIP文件可单独跳过它导出镜像阶段目录里含EXPORT_IMAGE文件的构建结束后会依次运行 export-image/ 流水线生成.img镜像含EXPORT_NOOBS的还会额外跑 export-noobs/ 生成 NOOBS 安装包。每个阶段的官方定位来自 README.md 的 Stage Anatomy阶段职责stage0debootstrap 引导出最小文件系统配置 apt 源stage1写入 fstab、bootloader 等让系统能启动stage2生成Raspbian LiteEXPORT_IMAGE后缀-litestage3安装 X11 桌面、浏览器等成为完整桌面系统stage4面向 4GB 卡的完整镜像-full装 Scratch、Sonic Pi 等stage5官方桌面镜像追加 Mathematica、LibreOffice下面这张图就是 stage4 桌面镜像内置的 Raspbian 桌面首次启动时的欢迎幻灯片之一由export-noobs阶段的营销素材打包而来prerun.sh阶段之间的接力棒prerun.sh是每个阶段目录下的可选脚本在子目录执行之前运行典型作用是把上一阶段成果搬进本阶段。它只有两种常见写法引导阶段stage0rootfs 还不存在时用bootstrap创建例如 stage0/prerun.sh 调用 debootstrap 拉出 stretch 最小系统后续阶段stage1 及以后rootfs 不存在时调用copy_previous用 rsync 把上一阶段的 rootfs 完整复制到${ROOTFS_DIR}例如 stage3/prerun.sh。bootstrap与copy_previous这些公共函数都定义在 scripts/common 中build.sh启动时会将其 source 进来。copy_previous会排除 apt 缓存目录以节省空间同时保留了硬链接-aHAXx参数使各阶段共享未修改的文件这也是 pi-gen 能在有限磁盘上构建几十 GB 阶段副本的关键。配合SKIP机制官方推荐的开发流程是只改最后一个阶段用CLEAN1 ./build.sh单阶段重建避免从头跑完整条流水线。5类控制文件子目录里的执行规则build.sh对每个子目录会循环00到99逐位数字检查下列 5 类控制文件并执行同一编号内按此顺序debconf → packages-nr → packages → patches → run 脚本1.NN-debconf— 预配置 debconf文件内容直接管道给 chroot 内的debconf-set-selections用于静默预置区域、键盘布局等交互选项。实例stage1/01-locale/00-debconf。2.NN-packages— 常规安装包空格分隔的包名列表支持#注释在 chroot 内执行apt-get install -y。实例stage2/01-sys-tweaks/00-packages其中包含sudo、raspberrypi-sys-mods等基础组件。3.NN-packages-nr— 精简安装包与NN-packages相同但使用apt-get install --no-install-recommends -y只装必需依赖、不装推荐包用来控制镜像体积。4.NN-patches/— quilt 补丁目录目录内放.diff补丁和series清单构建时用 quilt 依次push到 rootfs 上修改文件如果目录里额外放了EDIT文件构建会中断进入交互式 bash 会话方便你现场创建/修订补丁。实例stage2/01-sys-tweaks/00-patches/series 中排布着01-useradd.diff、02-swap.diff等系统调优补丁。5.NN-run.sh/NN-run-chroot.sh— 自定义脚本NN-run.sh在宿主机侧执行的 shell 脚本必须赋予可执行权限-x检查典型用途是把files/下的配置安装进 rootfs例如 stage2/02-net-tweaks/01-run.sh 写入 WiFi 配置并响应WPA_ESSID等环境变量NN-run-chroot.sh内容直接作为 chroot 内的 shell 执行不需要可执行权限适合在目标系统内部跑命令例如 stage2.5/01-susi/01-run-chroot.sh。chroot 环境由 scripts/common 里的on_chroot函数负责搭建临时挂载 proc/dev/sys 后以capsh降权进入。导出阶段EXPORT_IMAGE 与 EXPORT_NOOBS阶段标记文件本身只是一小段 shell 片段被build.shsource 进来用来设置镜像后缀等元信息。例如 stage2/EXPORT_IMAGE 设置IMG_SUFFIX-litestage2/EXPORT_NOOBS 则声明 NOOBS 包名称为 Raspbian Lite。真正干活的是导出版本目录export-image/prerun.sh计算 boot/rootfs 大小 →truncate出镜像文件 →fdisk划分两个分区 → 挂载后把 rootfs 写进去export-image/01-set-sources/ 用 quilt 补丁替换镜像内的 apt 源04-finalise/做收尾export-noobs/00-release/00-run.sh把 rootfs 压成boot.tar.xz/root.tar.xz填入partitions.json的分区大小生成 NOOBS 可识别的 OS 包。下面这张 NOOBS Welcome to Raspberry Pi 安装等待画面正是export-noobs打包进镜像的启动幻灯片快速上手从 config 到 deploy 四步走安装依赖depends文件列出了所有工具例如apt-get install coreutils quilt parted qemu-user-static debootstrap ...完整列表见 depends创建配置echo IMG_NAMEMyPi config构建sudo ./build.sh或用 build-docker.sh 在容器里构建取镜像成果输出到deploy/目录可直接刷入 SD 卡。常用调试技巧某步失败后编辑对应脚本再用CONTINUE1docker 构建或CLEAN1 ./build.sh从断点阶段重建不必推倒重来。小结pi-gen 的设计精髓在于目录即代码、文件即指令build.sh只负责按字母序执行所有构建逻辑都沉淀在stage*/prerun.sh和子目录的 5 类控制文件中。想定制镜像时你只需新增一个两位数字开头的子目录、放入对应的00-packages或01-run.sh流水线就会自动把它编排进构建流程——这正是它被社区二次开发如本仓库的 stage2.4/stage2.5 SUSI 阶段所喜爱的原因。赞分享【免费下载链接】pi-genTool used to create the raspberrypi.org Raspbian images项目地址https://gitcode.com/gh_mirrors/pig/pi-gen点击查看免费下载相关推荐RulesEngine核心架构揭秘深入理解规则编译与执行机制RulesEngine核心架构揭秘深入理解规则编译与执行机制 RulesEngine是一个基于JSON的强大规则引擎通过动态表达式支持为开发者提供了灵活的规后端7个核心机制揭秘AWX如何让Ansible Playbook执行效率提升300%7个核心机制揭秘AWX如何让Ansible Playbook执行效率提升300% AWX是基于Ansible构建的开源自动化平台提供Web界面、REST A后端运维任务调度5分钟上手SenseNova-U1-8B-MoT-Infographic-V2免费在线体验与本地部署指南5分钟上手SenseNova U1 8B MoT Infographic V2免费在线体验与本地部署指南 SenseNova U1 8B MoT Inf人工智能大模型多模态基础模型媒体生成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑