-
-
Notifications
You must be signed in to change notification settings - Fork 169
Open
Labels
Description
实现:
- 非特权下镜像构建
- 声明式的“发行版”构建
- 脚本内置实例化符号链接,代价是镜像大小来到 3.3G(可选)
- 对于需要改造的用户态软件,直接使用nix构建上下文进行修改,无需自己另开仓库、另写脚本
- 使用基于nix dockerTools的镜像构建方案,目录结构可维护性强
- 构建系统不再局限于 ubuntu
目前本方案的缺点:
- 重复构建时,如果实时修改用户态程序且多次构建,由于每次导入都会对整个rootfs构建一次镜像,容易快速消耗存储空间,需要定期执行
nix store gc(有改进方案)
- 由于同样的空间占用考虑,build-rootfs和start的产物为打包后经过链接的脚本(而非直接产物),执行脚本在同样的
bin目录下生成rootfs镜像。(一般直接nix run .#build-rootfs.x86_64再nix run .#start.x86_64即可)
用法:
- checkout
git checkout build/nix-qemu
- 安装nix并启用flake功能
- 还是需要使用 Makefile 来构建 kernel
如果你没有配置 Rust 环境,可以先使用nix的 Rust 环境:
nix develop ./tools/nix-dev-shell
然后做一些dirty的修复,因为非rustup安装的cargo不支持 +version 的语法
grep -rlZ '+nightly-2025-08-10' ./build-scripts | xargs -0 sed -i 's/+nightly-2025-08-10//g'
grep -rlZ '+nightly-2025-08-10' ./kernel | xargs -0 sed -i 's/+nightly-2025-08-10//g'
sed -i 's/CCPREFIX=x86_64-linux-gnu-/CCPREFIX=/g' kernel/env.mk最后就可以照常地
make kernel
- 构建rootfs
构建kernel的同时你也可以另开一个终端构建rootfs
nix run .#build-rootfs.x86_64- 运行系统
(依赖ubuntu qemu)不再依赖ubuntu
nix run .#start.x86_64- 如果磁盘占用很多,可以执行gc命令,回收 rootfs 构建时产生的镜像依赖
nix store gc
oeasy1412