# rootfs_build_scripts **Repository Path**: zzuos/rootfs_build_scripts ## Basic Information - **Project Name**: rootfs_build_scripts - **Description**: 放置构建ssp-r58x根文件系统的代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-30 - **Last Updated**: 2026-03-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智能安全预警系统 (CVAI) 镜像构建工具 本项目提供针对 **智能安全预警系统(`cvai`)** 的自动化镜像构建脚本集。可以在不同的硬件平台(如 `ssp-r58a`, `ssp-r58b`, `ssp-r58c`)上,一键构建出完整的 `rootfs` 宿主机系统镜像或者基于 `Docker` 镜像运行的预制环境。 ## 1. 目录结构说明 ```shell . ├── build.sh # 主存镜像构建入口脚本 ├── fix.sh # 异常退出后的挂载点清理脚本 ├── cvai/ # CVAI系统相关文件的暂存及配置目录 ├── sourceCode/ # 存放各个版本的源码/配置,含 cvai1, cvai2, base ├── docker_build/ # 存放构建Docker镜像所需文件 (Dockerfile, supervisord 等) ├── IMAGES/ # 构建完成的主机镜像输出目录 (.img) └── scripts/ # 子脚本目录,存放构建过程所需的所有拆分脚本 ├── in_chroot/ # 在chroot环境下执行的系统配置脚本 │ ├── baseaiproject-config.sh # 基础AI服务系统设置 │ ├── clean-rootfs.sh # 清理构建残留文件 │ ├── docker-config.sh # 配置Docker环境 │ ├── gstreamer-config.sh # 硬件编解码gstreamer配置 │ ├── hostname-config.sh # 镜像Hostname配置 │ ├── network-config.sh # 网络设置 │ ├── resize-rootfs.sh # 开机扩容自适应脚本 │ ├── ssh-login-config.sh # 设置SSH与默认用户权限 │ ├── versioninfo-config.sh # 记录构建版本信息 │ ├── watchdog-config.sh # 看门狗配置 │ └── wifi-config.sh # WiFi与无线网络配置 └── out_chroot/ # 在构建环境中(主系统)执行的辅助脚本 ├── external-files-downloader.sh # 下载大文件、Ubuntu base、软件包 ├── lunch.sh # 交互式选择菜单(获取软硬件类型及构建方式) └── rootfs-image-manager.sh # 镜像的创建、按挂载点挂载(mount)和卸载(umount)等操作管理 ``` ### 核心功能模块划分 - **`build.sh`**:核心流程控制器。会调用 `lunch.sh` 等提供交互,通过 `external-files-downloader.sh` 同步及下载依赖。如果选择构建主机镜像,会调用 `rootfs-image-manager.sh` 创建挂载点,并将 `in_chroot` 中的脚本放入目标挂载目录的 `chroot` 环境下顺序执行。相反,如果选择构建 Docker,则直接读取 `docker_build/` 的 `Dockerfile` 进行一键构建。 - **`lunch.sh`**:预编译配置交互界面负责引导用户选择所需打包的平台、镜像形态等参数,并将 `sourceCode/` 下的源文件同步到临时目录 `cvai/` 供后续写入镜像。 - **`fix.sh`**:在使用宿主机的方式制卡时,经常由于打包终端挂掉导致目标 `rootfs` 分区死锁/挂载点未释放。此脚本会自动遍历并快速通过 `umount` 卸载残余的 `/dev`, `/sys`, `/proc`, `/run` 及根系统目录。 ## 2. 环境搭建 强烈建议在本地通过 `VMware` 搭建 **Ubuntu 22.04** 虚拟机。**(请不要在未适配的环境如云服务器进行尝试,请使用 sudo 执行构建系统操作!)** **执行宿主机模式前需要确保自行获取基础 `base_image.img` 镜像,并且要在实验室内网下构建,否则无法拉取外部资源。** ## 3. 使用教程 ### 开始构建并交互配置 在项目根目录下**必须以管理员权限**执行主构建脚本: ```shell sudo ./build.sh ``` 按照终端的提示,输入对应序号依次进行如下配置: 1. **选择目标平台**:选择硬件平台 `ssp-r58a`, `ssp-r58b` 或 `ssp-r58c`。 2. **选择要构建的系统**: - `cvai1` - `cvai2` - `base` (cvai的base版本) 3. **选择镜像构建方式**: - **[1] 宿主机镜像 (HOST)**: 需要提供基础镜像(`base_image`)路径以制作底层固件,后续会要求您手动输入 `base_image` 的绝对路径。 - **[2] Docker 镜像 (DOCKER)**: 调用 `docker_build/Dockerfile` 生成基于微核心底座的容器化服务镜像集群。 构建脚本会自动拉取 `out_chroot/` 与 `in_chroot/` 等配套执行权限进行操作,并将应用目录、看门狗、基础服务全自动封装。 ### 产物输出 镜像构建成功后: - 对于**宿主机 (`HOST`)**: 结果将输出在 `IMAGES` 文件夹下,包含 `rootfs` 与生成时带有的时间戳。 格式示例:`IMAGES/{IMAGE_TYPE}-{IMAGE_VERSION}-rootfs_{YYYYMMDDHHmm}.img` (如 `R58A-U1001-rootfs_202512311600.img`) - 对于**Docker 容器 (`DOCKER`)**: 容器镜像将直接输出至当前机器 Docker 空间中,格式如 `nvr-manager_{VERSION}:{YYYYMMDDHHmm}`,并且生成`tar`文件到`output/docker_images/`下 - 如果要在当前docker空间启动镜像,使用以下命令: ```shell docker run -d \ --hostname ssp-r58a-docker \ --name nvr-manager-docker \ --restart=always \ --network=host \ --privileged \ --ipc=host \ -v /dev:/dev \ -v /proc/device-tree:/proc/device-tree \ -v /sys/kernel/debug:/sys/kernel/debug \ -v /run/dbus:/run/dbus \ -v /run/systemd:/run/systemd \ -v /etc/NetworkManager:/etc/NetworkManager \ nvr-manager_{VERSION}:{YYYYMMDDHHmm} ``` - 如果要将当前docker迁移到其他机器,使用以下命令导出和导入: ```shell # 在目标机器上导入镜像 docker load -i nvr-manager_{VERSION}_{YYYYMMDDHHmm}.tar # 在目标机器上运行镜像的命令同上述docker run命令 ``` ## 4. 常见问题及注意事项 1. **构建过程意外中断或挂载点无法编辑**: 如果因为使用 `Ctrl+C` 断开或发生错误崩溃,导致重新运行时提示挂靠或者目录占用。请**立即运行自带清理工具卸载虚拟文件系统**: ```shell sudo ./fix.sh ``` 2. **镜像命名与时间准确性**: 生成的 .img 名称依赖当前编译宿主系统的时间戳。如果打包出来的文件名时间奇特,请使用 `date -s "YYYY-MM-DD HH-MM-SS"` 同步系统时间后再进行打包操作。 3. **默认系统登录密码说明 (仅宿主机模式)**: 烧录完成的根分区环境由于设定过 `ssh-login-config.sh`,默认设备开机后不支持直接远程 root 登录,以免遭受入侵影响正常运行: - SSH 默认普通用户名为:`lemon` - SSH 默认密码为:`linux007!` 登录后可用 `sudo su` (输入相同密码) 提权为 root。提权后可正常执行内置在环境变量内的 `conda` 以及各种需要特权的操作指令。