备注
AI Translation Notice
This document was automatically translated by hunyuan-turbos-latest model, for reference only.
Source document: userland/rootfs/diskgen.md
Translation time: 2025-12-26 10:51:55
Translation model:
hunyuan-turbos-latest
Please report issues via Community Channel
From Software Packages to RootFS Image
After defining the software packages, no further modifications are needed. Simply nix run .#rootfs-${target} to build the RootFS.
Generating a Docker Image
We leverage the flattening and copying properties of pkgs.dockerTools.buildImage to copy the packages under user/apps and the configuration files in user/sysconfig into a single-layer overlayfs (following the Docker principle). The final output of buildImage is a tar.gz that can be used by docker import. See rootfs-tar.nix.
解压 Docker tar 并生成文件系统镜像
原理:解压 docker 镜像,拿出第一层中的 layer.tar,然后使用 guestfish 导入到虚拟镜像文件中。见 user/default.nix
Behind the Nix Script
When generating a Docker image, the Docker Image is cached as a binary artifact in /nix/store, so multiple builds may quickly consume disk space.
hint: To free up disk space, run nix store gc
However, the second step—extracting the Docker tar to a filesystem disk image file—is implemented by generating and running a shell script. The generated disk-image-${target}.img will only exist in the bin directory. Meanwhile, the rootfs.tar extracted from .tar.gz will also reside in the bin directory. You can inspect it yourself to see what’s inside.
TODO: Future scripts will allow a two-step process, with the option to inject custom files in between (in addition to direct injection via sysconfig).
If you want to see what this script looks like, you can run nix build .#rootfs-${target} -o bin/result in the project root directory. Nix will link the script’s corresponding derivation to the result directory. Simply cat bin/result/bin/build-rootfs-image to view all the commands.