feat: 完善 GitHub Actions 工作流和构建系统

- 添加自动下载缺失文件功能,支持 .xz 压缩格式
- 优化构建流程,增加文件清理和压缩功能
- 修复发布资产上传步骤,确保预发布标记正确设置
- 调整发布标签格式,包含版本号、设备目标和运行 ID
- 升级 Actions 版本,使用 softprops/action-gh-release@v1
- 移除 NFS 挂载依赖,简化部署流程
- 增强错误处理和日志输出
This commit is contained in:
mofeng-git 2025-08-20 16:12:40 +08:00
parent 6002dfd9c7
commit c8d1dcca30
8 changed files with 373 additions and 25 deletions

View File

@ -26,11 +26,10 @@ jobs:
TZ: Asia/Shanghai
volumes:
- /dev:/dev
- /mnt/nfs/lfs/:/mnt/nfs/lfs/
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Install dependencies
run: |
@ -38,7 +37,7 @@ jobs:
export DEBIAN_FRONTEND=noninteractive
apt-get install -y --no-install-recommends \
sudo tzdata docker.io qemu-utils qemu-user-static binfmt-support parted e2fsprogs \
curl tar python3 python3-pip rsync git android-sdk-libsparse-utils coreutils zerofree
curl tar python3 python3-pip rsync git android-sdk-libsparse-utils coreutils zerofree wget
apt-get clean
rm -rf /var/lib/apt/lists/*
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
@ -59,16 +58,16 @@ jobs:
echo "Build script finished."
env:
CI_PROJECT_DIR: ${{ github.workspace }}
GITHUB_ACTIONS: true
OUTPUTDIR: ${{ github.workspace }}/output
- name: Upload artifact
uses: actions/upload-artifact@v3
- name: Create GitHub Release
id: release
uses: softprops/action-gh-release@v1
with:
name: onekvm-image-${{ github.event.inputs.device_target }}-${{ env.BUILD_DATE }}
path: |
${{ github.workspace }}/output/*.img
${{ github.workspace }}/output/*.vmdk
${{ github.workspace }}/output/*.vdi
${{ github.workspace }}/output/*.burn.img
if-no-files-found: ignore
tag_name: v${{ env.BUILD_DATE }}-${{ github.event.inputs.device_target }}-${{ github.run_id }}
name: CI Build ${{ github.event.inputs.device_target }} ${{ env.BUILD_DATE }}
files: ${{ github.workspace }}/output/*.xz
prerelease: true
env:
CI_PROJECT_DIR: ${{ github.workspace }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

137
AUTO_DOWNLOAD.md Normal file
View File

@ -0,0 +1,137 @@
# 自动下载功能说明
## 概述
构建脚本现在支持自动下载缺失的文件。当构建过程中发现所需的镜像文件、DTB文件、配置文件或工具不存在时系统会自动尝试从远程服务器下载。
## 功能特性
### 1. 智能下载策略
- **首先尝试直接下载**:使用原始文件名从远程服务器下载
- **失败后尝试压缩版本**:如果直接下载失败,自动尝试添加 `.xz` 后缀下载压缩版本
- **自动解压**:如果下载的是 `.xz` 压缩文件,会自动解压
### 2. 支持的文件类型
- **镜像文件**:各种设备的 Armbian 镜像
- **DTB 文件**:设备树二进制文件
- **配置文件**JSON、CONF 等配置文件
- **工具文件**:如 AmlImg 工具
### 3. 错误处理
- 文件已存在时跳过下载
- 下载失败时提供详细的错误信息
- 解压失败时自动清理临时文件
## 配置
### 环境变量
```bash
# 远程文件服务器前缀(默认值)
REMOTE_PREFIX="https://files.mofeng.run"
# 本地源码路径(默认值)
SRCPATH="/mnt/src"
```
### 文件路径映射
本地文件路径:`$SRCPATH/image/device/filename`
远程下载URL`$REMOTE_PREFIX/image/device/filename`
## 使用示例
### 1. 构建特定设备
```bash
# 构建 Cumebox2会自动下载所需文件
./build/build_img.sh cumebox2
```
### 2. 构建所有设备
```bash
# 构建所有设备(会自动下载所有所需文件)
./build/build_img.sh all
```
### 3. 自定义远程服务器
```bash
# 使用自定义的远程服务器
REMOTE_PREFIX="https://your-server.com/files" ./build/build_img.sh cumebox2
```
## 支持的文件列表
### Onecloud 设备
- `image/onecloud/AmlImg_v0.3.1_linux_amd64` - AmlImg 工具
- `image/onecloud/Armbian_by-SilentWind_24.5.0-trunk_Onecloud_bookworm_legacy_5.9.0-rc7_minimal_support-dvd-emulation.burn.img` - 源镜像
- `image/onecloud/meson8b-onecloud-fix.dtb` - DTB 文件
### Cumebox2 设备
- `image/cumebox2/Armbian_25.2.2_Khadas-vim1_bookworm_current_6.12.17_minimal.img` - 源镜像
- `image/cumebox2/v-fix.dtb` - DTB 文件
- `image/cumebox2/ssd` - SSD 脚本
- `image/cumebox2/config.json` - OLED 配置文件
### Chainedbox 设备
- `image/chainedbox/Armbian_24.11.0_rockchip_chainedbox_bookworm_6.1.112_server_2024.10.02_add800m.img` - 源镜像
- `image/chainedbox/rk3328-l1pro-1296mhz-fix.dtb` - DTB 文件
### VM 设备
- `image/vm/Armbian_25.2.1_Uefi-x86_bookworm_current_6.12.13_minimal.img` - 源镜像
### E900V22C 设备
- `image/e900v22c/Armbian_23.08.0_amlogic_s905l3a_bookworm_5.15.123_server_2023.08.01.img` - 源镜像
### Octopus-Planet 设备
- `image/octopus-flanet/Armbian_24.11.0_amlogic_s912_bookworm_6.1.114_server_2024.11.01.img` - 源镜像
- `image/octopus-flanet/model_database.conf` - 配置文件
## 技术实现
### 核心函数
```bash
download_file_if_missing(file_path)
```
### 工作流程
1. 检查文件是否已存在
2. 计算相对于 SRCPATH 的路径
3. 确保目标目录存在
4. 尝试直接下载
5. 如果失败,尝试下载 .xz 版本
6. 如果是 .xz 文件,自动解压
7. 返回成功或失败状态
### 依赖工具
- `curl` - 用于下载文件
- `xz` - 用于解压 .xz 文件
- `mkdir` - 用于创建目录
## 注意事项
1. **网络连接**:确保构建环境能够访问远程服务器
2. **磁盘空间**:下载的文件可能很大,确保有足够的磁盘空间
3. **权限**:确保脚本有权限创建目录和文件
4. **防火墙**:确保防火墙允许 HTTP/HTTPS 连接
## 故障排除
### 常见问题
1. **下载失败**
- 检查网络连接
- 验证 REMOTE_PREFIX 是否正确
- 确认远程文件是否存在
2. **解压失败**
- 检查 xz 工具是否安装
- 验证下载的文件是否完整
3. **权限错误**
- 确保脚本有足够的权限
- 检查目标目录的权限设置
### 调试模式
可以通过设置环境变量来启用更详细的输出:
```bash
export DEBUG=1
./build/build_img.sh cumebox2
```

View File

@ -2,12 +2,15 @@
# --- 配置 ---
# 允许通过环境变量覆盖默认路径
SRCPATH="${SRCPATH:-/mnt/nfs/lfs/src}"
SRCPATH="${SRCPATH:-/mnt/src}"
BOOTFS="${BOOTFS:-/tmp/bootfs}"
ROOTFS="${ROOTFS:-/tmp/rootfs}"
OUTPUTDIR="${OUTPUTDIR:-/mnt/nfs/lfs/src/output}"
OUTPUTDIR="${OUTPUTDIR:-/mnt/output}"
TMPDIR="${TMPDIR:-$SRCPATH/tmp}"
# 远程文件下载配置
REMOTE_PREFIX="${REMOTE_PREFIX:-https://files.mofeng.run/src}"
export LC_ALL=C
# 全局变量
@ -132,6 +135,9 @@ build_target() {
;;
esac
# 在 GitHub Actions 环境中清理下载的文件
cleanup_downloaded_files
echo "=================================================="
echo "信息:目标 $target 构建完成!"
echo "=================================================="

View File

@ -172,9 +172,96 @@ write_meta() {
run_in_chroot "sed -i 's/localhost.localdomain/$hostname/g' /etc/kvmd/meta.yaml"
}
# 检测是否在 GitHub Actions 环境中
is_github_actions() {
[[ -n "$GITHUB_ACTIONS" ]]
}
# 记录下载的文件列表(仅在 GitHub Actions 环境中)
DOWNLOADED_FILES_LIST="/tmp/downloaded_files.txt"
# 自动下载文件函数
download_file_if_missing() {
local file_path="$1"
local relative_path=""
# 如果文件已存在,直接返回
if [[ -f "$file_path" ]]; then
echo "信息:文件已存在: $file_path"
return 0
fi
# 计算相对于 SRCPATH 的路径
if [[ "$file_path" == "$SRCPATH"/* ]]; then
relative_path="${file_path#$SRCPATH/}"
else
echo "错误:文件路径 $file_path 不在 SRCPATH ($SRCPATH) 下" >&2
return 1
fi
echo "信息:文件不存在,尝试下载: $file_path"
echo "信息:相对路径: $relative_path"
# 确保目标目录存在
local target_dir="$(dirname "$file_path")"
ensure_dir "$target_dir"
# 首先尝试直接下载
local remote_url="${REMOTE_PREFIX}/${relative_path}"
echo "信息:尝试下载: $remote_url"
if curl -f -L -o "$file_path" "$remote_url" 2>/dev/null; then
echo "信息:下载成功: $file_path"
# 在 GitHub Actions 环境中记录下载的文件
if is_github_actions; then
echo "$file_path" >> "$DOWNLOADED_FILES_LIST"
fi
return 0
fi
# 如果直接下载失败,尝试添加 .xz 后缀
echo "信息:直接下载失败,尝试 .xz 压缩版本..."
local xz_url="${remote_url}.xz"
local xz_file="${file_path}.xz"
if curl -f -L -o "$xz_file" "$xz_url" 2>/dev/null; then
echo "信息:下载 .xz 文件成功,正在解压..."
if xz -d "$xz_file"; then
echo "信息:解压成功: $file_path"
# 在 GitHub Actions 环境中记录下载的文件
if is_github_actions; then
echo "$file_path" >> "$DOWNLOADED_FILES_LIST"
fi
return 0
else
echo "错误:解压 .xz 文件失败" >&2
rm -f "$xz_file"
return 1
fi
fi
echo "错误:无法下载文件 $file_path (尝试了原始版本和 .xz 版本)" >&2
return 1
}
# 清理下载的文件(仅在 GitHub Actions 环境中)
cleanup_downloaded_files() {
if is_github_actions && [[ -f "$DOWNLOADED_FILES_LIST" ]]; then
echo "信息:清理 GitHub Actions 环境中下载的文件..."
while IFS= read -r file_path; do
if [[ -f "$file_path" ]]; then
echo "信息:删除下载的文件: $file_path"
rm -f "$file_path"
fi
done < "$DOWNLOADED_FILES_LIST"
rm -f "$DOWNLOADED_FILES_LIST"
echo "信息:下载文件清理完成"
fi
}
# 检查必要的外部工具
check_required_tools() {
local required_tools="sudo docker losetup mount umount parted e2fsck resize2fs qemu-img curl tar python3 pip3 rsync git simg2img img2simg dd cat rm mkdir mv cp sed chmod chown ln grep printf id"
local required_tools="sudo docker losetup mount umount parted e2fsck resize2fs qemu-img curl tar python3 pip3 rsync git simg2img img2simg dd cat rm mkdir mv cp sed chmod chown ln grep printf id xz"
for cmd in $required_tools; do
if ! command -v "$cmd" &> /dev/null; then

View File

@ -4,7 +4,7 @@
onecloud_rootfs() {
local unpacker="$SRCPATH/image/onecloud/AmlImg_v0.3.1_linux_amd64"
local source_image="$SRCPATH/image/onecloud/Armbian_by-SilentWind_24.5.0-trunk_Onecloud_bookworm_legacy_5.9.0-rc7_minimal.burn.img"
local source_image="$SRCPATH/image/onecloud/Armbian_by-SilentWind_24.5.0-trunk_Onecloud_bookworm_legacy_5.9.0-rc7_minimal_support-dvd-emulation.burn.img"
local bootfs_img="$TMPDIR/bootfs.img"
local rootfs_img="$TMPDIR/rootfs.img"
local bootfs_sparse="$TMPDIR/6.boot.PARTITION.sparse"
@ -16,6 +16,13 @@ onecloud_rootfs() {
ensure_dir "$TMPDIR"
ensure_dir "$BOOTFS"
# 自动下载 AmlImg 工具(如果不存在)
download_file_if_missing "$unpacker" || { echo "错误:下载 AmlImg 工具失败" >&2; exit 1; }
sudo chmod +x "$unpacker" || { echo "错误:设置 AmlImg 工具执行权限失败" >&2; exit 1; }
# 自动下载源镜像文件(如果不存在)
download_file_if_missing "$source_image" || { echo "错误:下载 Onecloud 原始镜像失败" >&2; exit 1; }
echo "信息:解包 Onecloud burn 镜像..."
sudo "$unpacker" unpack "$source_image" "$TMPDIR" || { echo "错误:解包失败" >&2; exit 1; }
@ -30,7 +37,12 @@ onecloud_rootfs() {
sudo losetup "$bootfs_loopdev" "$bootfs_img" || { echo "错误:关联 bootfs 镜像到 $bootfs_loopdev 失败" >&2; exit 1; }
sudo mount "$bootfs_loopdev" "$BOOTFS" || { echo "错误:挂载 bootfs ($bootfs_loopdev) 失败" >&2; exit 1; }
BOOTFS_MOUNTED=1
sudo cp "$SRCPATH/image/onecloud/meson8b-onecloud-fix.dtb" "$BOOTFS/dtb/meson8b-onecloud.dtb" || { echo "错误:复制修复后的 DTB 文件失败" >&2; exit 1; }
# 自动下载 DTB 文件(如果不存在)
local dtb_file="$SRCPATH/image/onecloud/meson8b-onecloud-fix.dtb"
download_file_if_missing "$dtb_file" || { echo "错误:下载 Onecloud DTB 文件失败" >&2; exit 1; }
sudo cp "$dtb_file" "$BOOTFS/dtb/meson8b-onecloud.dtb" || { echo "错误:复制修复后的 DTB 文件失败" >&2; exit 1; }
sudo umount "$BOOTFS" || { echo "警告:卸载 bootfs ($BOOTFS) 失败" >&2; BOOTFS_MOUNTED=0; } # 卸载失败不应中断流程
BOOTFS_MOUNTED=0
echo "信息:分离 bootfs loop 设备 $bootfs_loopdev..."
@ -60,6 +72,10 @@ cumebox2_rootfs() {
echo "信息:准备 Cumebox2 Rootfs..."
ensure_dir "$TMPDIR"
# 自动下载源镜像文件(如果不存在)
download_file_if_missing "$source_image" || { echo "错误:下载 Cumebox2 原始镜像失败" >&2; exit 1; }
cp "$source_image" "$target_image" || { echo "错误:复制 Cumebox2 原始镜像失败" >&2; exit 1; }
echo "信息:调整镜像分区大小..."
@ -86,6 +102,10 @@ chainedbox_rootfs_and_fix_dtb() {
echo "信息:准备 Chainedbox Rootfs 并修复 DTB..."
ensure_dir "$TMPDIR"; ensure_dir "$BOOTFS"
# 自动下载源镜像文件(如果不存在)
download_file_if_missing "$source_image" || { echo "错误:下载 Chainedbox 原始镜像失败" >&2; exit 1; }
cp "$source_image" "$target_image" || { echo "错误:复制 Chainedbox 原始镜像失败" >&2; exit 1; }
echo "信息:挂载 boot 分区并修复 DTB..."
@ -95,7 +115,12 @@ chainedbox_rootfs_and_fix_dtb() {
sudo losetup --offset "$boot_offset" "$bootfs_loopdev" "$target_image" || { echo "错误:设置 boot 分区 loop 设备 $bootfs_loopdev 失败" >&2; exit 1; }
sudo mount "$bootfs_loopdev" "$BOOTFS" || { echo "错误:挂载 boot 分区 ($bootfs_loopdev) 失败" >&2; exit 1; }
BOOTFS_MOUNTED=1
sudo cp "$SRCPATH/image/chainedbox/rk3328-l1pro-1296mhz-fix.dtb" "$BOOTFS/dtb/rockchip/rk3328-l1pro-1296mhz.dtb" || { echo "错误:复制修复后的 DTB 文件失败" >&2; exit 1; }
# 自动下载 DTB 文件(如果不存在)
local dtb_file="$SRCPATH/image/chainedbox/rk3328-l1pro-1296mhz-fix.dtb"
download_file_if_missing "$dtb_file" || { echo "错误:下载 Chainedbox DTB 文件失败" >&2; exit 1; }
sudo cp "$dtb_file" "$BOOTFS/dtb/rockchip/rk3328-l1pro-1296mhz.dtb" || { echo "错误:复制修复后的 DTB 文件失败" >&2; exit 1; }
sudo umount "$BOOTFS" || { echo "警告:卸载 boot 分区 ($BOOTFS) 失败" >&2; BOOTFS_MOUNTED=0; }
BOOTFS_MOUNTED=0
echo "信息:分离 boot loop 设备 $bootfs_loopdev..."
@ -116,6 +141,10 @@ vm_rootfs() {
echo "信息:准备 Vm Rootfs..."
ensure_dir "$TMPDIR"
# 自动下载源镜像文件(如果不存在)
download_file_if_missing "$source_image" || { echo "错误:下载 Vm 原始镜像失败" >&2; exit 1; }
cp "$source_image" "$target_image" || { echo "错误:复制 Vm 原始镜像失败" >&2; exit 1; }
echo "信息:设置带偏移量的 loop 设备..."
@ -134,6 +163,10 @@ e900v22c_rootfs() {
echo "信息:准备 E900V22C Rootfs..."
ensure_dir "$TMPDIR"
# 自动下载源镜像文件(如果不存在)
download_file_if_missing "$source_image" || { echo "错误:下载 E900V22C 原始镜像失败" >&2; exit 1; }
cp "$source_image" "$target_image" || { echo "错误:复制 E900V22C 原始镜像失败" >&2; exit 1; }
echo "信息:扩展镜像文件 (${add_size_mb}MB)..."
@ -164,6 +197,10 @@ octopus_flanet_rootfs() {
echo "信息:准备 Octopus-Planet Rootfs..."
ensure_dir "$TMPDIR"; ensure_dir "$BOOTFS"
# 自动下载源镜像文件(如果不存在)
download_file_if_missing "$source_image" || { echo "错误:下载 Octopus-Planet 原始镜像失败" >&2; exit 1; }
cp "$source_image" "$target_image" || { echo "错误:复制 Octopus-Planet 原始镜像失败" >&2; exit 1; }
echo "信息:挂载 boot 分区并修改 uEnv.txt (使用 VIM2 DTB)..."
@ -199,14 +236,30 @@ octopus_flanet_rootfs() {
config_cumebox2_files() {
echo "信息:为 Cumebox2 配置特定文件 (OLED, DTB)..."
ensure_dir "$ROOTFS/etc/oled"
# 自动下载 Cumebox2 相关文件(如果不存在)
local dtb_file="$SRCPATH/image/cumebox2/v-fix.dtb"
local ssd_file="$SRCPATH/image/cumebox2/ssd"
local config_file="$SRCPATH/image/cumebox2/config.json"
download_file_if_missing "$dtb_file" || echo "警告:下载 Cumebox2 DTB 失败"
download_file_if_missing "$ssd_file" || echo "警告:下载 Cumebox2 ssd 脚本失败"
download_file_if_missing "$config_file" || echo "警告:下载 Cumebox2 配置文件失败"
# 注意 DTB 路径可能需要根据实际 Armbian 版本调整
sudo cp "$SRCPATH/image/cumebox2/v-fix.dtb" "$ROOTFS/boot/dtb/amlogic/meson-gxl-s905x-khadas-vim.dtb" || echo "警告:复制 Cumebox2 DTB 失败"
sudo cp "$SRCPATH/image/cumebox2/ssd" "$ROOTFS/usr/bin/" || echo "警告:复制 Cumebox2 ssd 脚本失败"
sudo cp "$dtb_file" "$ROOTFS/boot/dtb/amlogic/meson-gxl-s905x-khadas-vim.dtb" || echo "警告:复制 Cumebox2 DTB 失败"
sudo cp "$ssd_file" "$ROOTFS/usr/bin/" || echo "警告:复制 Cumebox2 ssd 脚本失败"
sudo chmod +x "$ROOTFS/usr/bin/ssd" || echo "警告:设置 ssd 脚本执行权限失败"
sudo cp "$SRCPATH/image/cumebox2/config.json" "$ROOTFS/etc/oled/config.json" || echo "警告:复制 OLED 配置文件失败"
sudo cp "$config_file" "$ROOTFS/etc/oled/config.json" || echo "警告:复制 OLED 配置文件失败"
}
config_octopus_flanet_files() {
echo "信息:为 Octopus-Planet 配置特定文件 (model_database.conf)..."
sudo cp "$SRCPATH/image/octopus-flanet/model_database.conf" "$ROOTFS/etc/model_database.conf" || echo "警告:复制 model_database.conf 失败"
# 自动下载 Octopus-Planet 相关文件(如果不存在)
local config_file="$SRCPATH/image/octopus-flanet/model_database.conf"
download_file_if_missing "$config_file" || echo "警告:下载 Octopus-Planet 配置文件失败"
sudo cp "$config_file" "$ROOTFS/etc/model_database.conf" || echo "警告:复制 model_database.conf 失败"
}

View File

@ -21,7 +21,12 @@ delete_armbian_verify(){
prepare_external_binaries() {
local platform="$1" # linux/armhf or linux/amd64 or linux/aarch64
local docker_image="registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd-stage-0"
# 如果在 GitHub Actions 环境下,使用 silentwind0/kvmd-stage-0否则用阿里云镜像
if is_github_actions; then
local docker_image="silentwind0/kvmd-stage-0"
else
local docker_image="registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd-stage-0"
fi
echo "信息:准备外部预编译二进制文件 (平台: $platform)..."
ensure_dir "$PREBUILT_DIR"

View File

@ -1,5 +1,21 @@
#!/bin/bash
# --- 压缩函数 ---
# 压缩镜像文件(仅在 GitHub Actions 环境中)
compress_image_file() {
local file_path="$1"
if is_github_actions && [[ -f "$file_path" ]]; then
echo "信息:压缩镜像文件: $file_path"
if xz -9 -vv "$file_path"; then
echo "信息:压缩完成: ${file_path}.xz"
else
echo "警告:压缩文件 $file_path 失败"
fi
fi
}
# --- 打包函数 ---
pack_img() {
@ -29,7 +45,22 @@ pack_img() {
sudo qemu-img convert -f raw -O vmdk "$raw_img" "$vmdk_img" || echo "警告:转换为 VMDK 失败"
echo "信息:转换为 VDI..."
sudo qemu-img convert -f raw -O vdi "$raw_img" "$vdi_img" || echo "警告:转换为 VDI 失败"
# 在 GitHub Actions 环境中压缩 VM 镜像文件
if is_github_actions; then
echo "信息:在 GitHub Actions 环境中压缩 VM 镜像文件..."
compress_image_file "$raw_img"
compress_image_file "$vmdk_img"
compress_image_file "$vdi_img"
fi
else
# 在 GitHub Actions 环境中压缩镜像文件
if is_github_actions; then
echo "信息:在 GitHub Actions 环境中压缩镜像文件..."
compress_image_file "$OUTPUTDIR/$target_img_name"
fi
fi
echo "信息:镜像打包完成: $OUTPUTDIR/$target_img_name"
}
@ -48,6 +79,10 @@ pack_img_onecloud() {
unmount_all
fi
# 自动下载 AmlImg 工具(如果不存在)
download_file_if_missing "$aml_packer" || { echo "错误:下载 AmlImg 工具失败" >&2; exit 1; }
sudo chmod +x "$aml_packer" || { echo "错误:设置 AmlImg 工具执行权限失败" >&2; exit 1; }
echo "信息:将 raw rootfs 转换为 sparse image..."
# 先删除可能存在的旧 sparse 文件
sudo rm -f "$rootfs_sparse_img"
@ -55,11 +90,16 @@ pack_img_onecloud() {
sudo rm "$rootfs_raw_img" # 删除 raw 文件,因为它已被转换
echo "信息:使用 AmlImg 工具打包..."
sudo chmod +x "$aml_packer"
sudo "$aml_packer" pack "$OUTPUTDIR/$target_img_name" "$TMPDIR/" || { echo "错误AmlImg 打包失败" >&2; exit 1; }
echo "信息:清理 Onecloud 临时文件..."
sudo rm -f "$TMPDIR/6.boot.PARTITION.sparse" "$TMPDIR/7.rootfs.PARTITION.sparse" "$TMPDIR/dts.img"
# 在 GitHub Actions 环境中压缩 Onecloud 镜像文件
if is_github_actions; then
echo "信息:在 GitHub Actions 环境中压缩 Onecloud 镜像文件..."
compress_image_file "$OUTPUTDIR/$target_img_name"
fi
echo "信息Onecloud burn 镜像打包完成: $OUTPUTDIR/$target_img_name"
}

21
build/record.txt Normal file
View File

@ -0,0 +1,21 @@
wget https://github.com/hzyitc/AmlImg/releases/download/v0.3.1/AmlImg_v0.3.1_linux_amd64 -O /mnt/src/image/onecloud/AmlImg_v0.3.1_linux_amd64
chmod +x /mnt/src/image/onecloud/AmlImg_v0.3.1_linux_amd64
#!/bin/bash
# 文件映射脚本
# 本地目录前缀:/mnt
# 远程URL前缀https://files.mofeng.run
LOCAL_PREFIX="/mnt"
REMOTE_PREFIX="https://files.mofeng.run"
# 文件相对路径
REL_PATH="src/image/onecloud/Armbian_by-SilentWind_24.5.0-trunk_Onecloud_bookworm_legacy_5.9.0-rc7_minimal_support-dvd-emulation.burn.img"
LOCAL_FILE="$LOCAL_PREFIX/$REL_PATH"
REMOTE_URL="$REMOTE_PREFIX/$REL_PATH"
echo "下载 $REMOTE_URL 到 $LOCAL_FILE"
mkdir -p "$(dirname "$LOCAL_FILE")"
wget -O "$LOCAL_FILE" "$REMOTE_URL"