本仓库包含用于构建/打包环境的辅助脚本,旨在通过 chroot 或 docker 环境运行 make 构建流程从而避免直接在宿主上污染环境。
chroot_make.sh— 使用 chroot 环境运行构建流程的脚本。docker_make.sh— 使用 docker 容器运行构建流程的脚本。
- 在运行这些脚本前,请先阅读脚本 --help,确认脚本中的默认参数符合你的环境。
- 运行 chroot 或 docker 相关脚本可能需要 root 权限,请小心运行并在受信任的环境中执行。
以下为两个脚本的常见用法、可配置项示例与排错建议。请在运行前先打开对应脚本查看 --help(脚本可能有额外参数或环境变量)。
-
目的:在一个隔离的 chroot 根文件系统内运行
make(或其他构建命令),用于生成构建产物。 -
可用选项:
--pkgs PACKAGE(s):在 chroot 内安装额外包,支持逗号或空格分隔,并可重复指定(默认:build-essential)。--strip:在构建后对生成的.ko模块执行strip(默认:false)。-h, --help:显示帮助并退出。
-
环境变量:
TRIM_OVERLAYFS:overlayfs 根路径,脚本默认使用/opt/trim_overlayfs, 但会在运行时检查该变量并拒绝使用根路径/。必须可写并存在或脚本会尝试创建所需目录。
-
行为要点:
- 若未通过
-C指定内核构建目录,脚本会根据宿主内核版本尝试定位/lib/modules/$(uname -r)/build或/usr/src/linux-headers-$(uname -r)。 - 若未指定
M=,脚本会使用当前工作目录作为工程路径。
- 若未通过
-
示例:
# 使用默认 overlay 路径并运行 make ./chroot_make.sh -- make -C /lib/modules/$(uname -r)/build M=$(pwd) modules # 指定额外包并启用 strip,同时指定根路径 sudo TRIM_OVERLAYFS=/var/chroot ./chroot_make.sh --pkgs build-essential bc --strip -- make -C /lib/modules/$(uname -r)/build M=$(pwd) CONFIG_NTFS3_FS=m modules
-
目的:在一个隔离的 docker 容器内运行
make(或其他构建命令),用于生成构建产物。 -
可用选项:
--image IMAGE:指定要使用的 Docker 镜像;若不指定,脚本会基于宿主/etc/os-release自动选择(例如debian:<codename>或ubuntu:22.04)。--pkgs PACKAGE(s):在容器内安装额外包,支持逗号或空格分隔(默认:build-essential)。--strip:构建完成后在容器内对.ko文件执行strip。-h, --help:显示帮助并退出。
-
行为要点:
- 若未通过
-C指定内核构建目录,脚本会尝试定位宿主的内核头目录(/lib/modules/$(uname -r)/build或/usr/src/linux-headers-$(uname -r))。 - 脚本会将宿主的
/usr(只读)、BUILD(只读)和SPACE(读写)挂载到容器,以便复用宿主的库和头文件。 - 若本地不存在指定镜像,脚本会尝试
docker pull并在退出时视情况清理拉取的镜像。
- 若未通过
-
示例:
# 使用默认镜像并运行 make ./docker_make.sh -- make -C /lib/modules/$(uname -r)/build M=$(pwd) modules # 指定镜像与额外包,并启用 strip,同时指定要使用的 Docker 镜像 ./docker_make.sh --image ubuntu:22.04 --pkgs build-essential bc --strip -- make -C /lib/modules/$(uname -r)/build M=$(pwd) CONFIG_NTFS3_FS=m modules
本仓库使用仓库根目录下的 LICENSE 文件中所述的许可协议。