From 2b19d7adcfb349fea9eb03f8ab3bdf1fbd538ce8 Mon Sep 17 00:00:00 2001 From: OPPEN321 Date: Thu, 23 Oct 2025 20:19:15 +0800 Subject: [PATCH] Update build.sh --- build.sh | 397 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 397 insertions(+) diff --git a/build.sh b/build.sh index 369fac2..bd00783 100644 --- a/build.sh +++ b/build.sh @@ -510,6 +510,398 @@ compile_openwrt() { echo -e "${BLUE_COLOR}└─ 编译耗时: $(( SEC / 3600 ))h,$(( (SEC % 3600) / 60 ))m,$(( (SEC % 3600) % 60 ))s${RESET}" } +# 编译 OpenWRT +compile_openwrt() { + print_info "开始编译 OpenWRT..." + local starttime=$(date +'%Y-%m-%d %H:%M:%S') + + echo -e "${BLUE_COLOR}├─ 更新 os-release 构建日期...${RESET}" + sed -i "/BUILD_DATE/d" package/base-files/files/usr/lib/os-release + sed -i "/BUILD_ID/aBUILD_DATE=\"$CURRENT_DATE\"" package/base-files/files/usr/lib/os-release + + echo -e "${BLUE_COLOR}├─ 执行 make 编译...${RESET}" + if make -j"$CPU_CORES" IGNORE_ERRORS="n m"; then + echo -e "${GREEN_COLOR}│ ✓ 编译过程完成${RESET}" + else + error_exit "OpenWrt 编译失败" + fi + + # 计算编译时间 + local endtime=$(date +'%Y-%m-%d %H:%M:%S') + local start_seconds=$(date --date="$starttime" +%s) + local end_seconds=$(date --date="$endtime" +%s) + local SEC=$((end_seconds-start_seconds)) + + echo -e "${BLUE_COLOR}├─ 检查编译结果...${RESET}" + if [ -f bin/targets/*/*/sha256sums ]; then + echo -e "${GREEN_COLOR}│ ✓ Build success! ${RESET}" + else + echo -e "${RED_COLOR}│ ✗ Build error... ${RESET}" + echo -e "${BLUE_COLOR}└─ 编译耗时: $(( SEC / 3600 ))h,$(( (SEC % 3600) / 60 ))m,$(( (SEC % 3600) % 60 ))s${RESET}" + exit 1 + fi + + echo -e "${BLUE_COLOR}└─ 编译耗时: $(( SEC / 3600 ))h,$(( (SEC % 3600) / 60 ))m,$(( (SEC % 3600) % 60 ))s${RESET}" +} + +# 获取内核版本并设置 kmod 包名 +setup_kmod_package_name() { + print_info "设置 KMOD 包名..." + + # 检查本地内核版本文件是否存在 + if [ ! -f "/include/kernel-6.6" ]; then + error_exit "内核版本文件 /include/kernel-6.6 不存在" + fi + + echo -e "${BLUE_COLOR}├─ 读取内核版本信息...${RESET}" + get_kernel_version=$(cat /include/kernel-6.6) + + if [ -z "$get_kernel_version" ]; then + error_exit "无法读取内核版本信息" + fi + + echo -e "${BLUE_COLOR}├─ 计算 KMOD 哈希值...${RESET}" + kmod_hash=$(echo -e "$get_kernel_version" | awk -F'HASH-' '{print $2}' | awk '{print $1}' | tail -1 | md5sum | awk '{print $1}') + + if [ -z "$kmod_hash" ]; then + error_exit "KMOD 哈希值计算失败" + fi + + kmodpkg_name=$(echo $(echo -e "$get_kernel_version" | awk -F'HASH-' '{print $2}' | awk '{print $1}')~$(echo $kmod_hash)-r1) + + if [ -z "$kmodpkg_name" ]; then + error_exit "KMOD 包名生成失败" + fi + + echo -e "${GREEN_COLOR}└─ ✓ KMOD 包名设置为: $kmodpkg_name${RESET}" + print_success "KMOD 包配置完成" +} + +# 打包和生成OTA文件 +package_and_generate_ota() { + print_info "开始打包和生成OTA文件..." + + if [ "$ARCHITECTURE" = "x86_64" ]; then + process_x86_64 "$VERSION" + elif [ "$ARCHITECTURE" = "rockchip" ]; then + process_rockchip "$VERSION" + else + print_warning "未知架构: $ARCHITECTURE,跳过打包和OTA生成" + fi + + print_success "打包和OTA生成完成" +} + +# 处理 x86_64 架构 +process_x86_64() { + local version="$1" + + print_info "处理 x86_64 架构的打包..." + + # KMOD 包处理 + echo -e "${BLUE_COLOR}├─ 准备 KMOD 包...${RESET}" + if cp -a bin/targets/x86/*/packages $kmodpkg_name/ && \ + rm -f $kmodpkg_name/Packages* && \ + cp -a bin/packages/x86_64/base/rtl88*a-firmware*.ipk $kmodpkg_name/ && \ + cp -a bin/packages/x86_64/base/natflow*.ipk $kmodpkg_name/; then + echo -e "${GREEN_COLOR}│ ✓ KMOD 文件复制完成${RESET}" + else + print_warning "KMOD 文件复制过程中出现警告" + fi + + echo -e "${BLUE_COLOR}├─ 签名 KMOD 包...${RESET}" + if [ -f "kmod-sign" ] && bash kmod-sign $kmodpkg_name; then + echo -e "${GREEN_COLOR}│ ✓ KMOD 包签名完成${RESET}" + else + print_warning "跳过 KMOD 签名(未找到 kmod-sign 脚本)" + fi + + echo -e "${BLUE_COLOR}├─ 打包 KMOD...${RESET}" + if tar zcf x86_64-$kmodpkg_name.tar.gz $kmodpkg_name; then + echo -e "${GREEN_COLOR}│ ✓ KMOD 打包完成${RESET}" + else + error_exit "KMOD 打包失败" + fi + + echo -e "${BLUE_COLOR}├─ 清理临时文件...${RESET}" + rm -rf $kmodpkg_name + echo -e "${GREEN_COLOR}└─ ✓ 临时文件清理完成${RESET}" + + # 生成 OTA JSON + generate_x86_64_ota_json "$version" +} + +# 生成 x86_64 OTA JSON +generate_x86_64_ota_json() { + local version="$1" + + print_info "生成 x86_64 OTA JSON 文件..." + + echo -e "${BLUE_COLOR}├─ 创建 OTA 目录...${RESET}" + mkdir -p ota + + echo -e "${BLUE_COLOR}├─ 计算 SHA256 校验和...${RESET}" + local OTA_URL="https://github.com/QuickWrt/ZeroWrt/releases/download" + local VERSION_NUMBER=$(echo "$VERSION" | sed 's/v//g') + local SHA256=$(sha256sum bin/targets/x86/64*/*-generic-squashfs-combined-efi.img.gz | awk '{print $1}') + + echo -e "${BLUE_COLOR}├─ 生成 JSON 文件...${RESET}" + cat > ota/x86_64.json < ota/rockchip.json <