10 Commits

Author SHA1 Message Date
4a6a532f27 Update build.sh 2025-11-11 15:54:32 +08:00
c3a3434ba8 Update build.sh 2025-11-11 15:50:38 +08:00
e07883f397 Update build.sh 2025-11-11 15:48:26 +08:00
50548588fd Update build.sh 2025-11-11 15:27:32 +08:00
466ed7e68e Update build.sh 2025-11-11 15:25:53 +08:00
2b5e4bb622 Update build.sh 2025-11-11 15:23:36 +08:00
21d3646b44 Update build.sh 2025-11-11 15:08:03 +08:00
627536df85 Update 02-prepare_package.sh 2025-11-08 01:11:04 +08:00
1647ffad99 Update build.sh 2025-11-07 22:31:47 +08:00
e2b56a69bd Update install.sh 2025-11-07 20:41:49 +08:00
3 changed files with 316 additions and 71 deletions

356
build.sh
View File

@@ -93,9 +93,9 @@ validate_password() {
# 显示使用帮助
show_usage() {
clear
echo -e "${BOLD}${BLUE_COLOR}╔══════════════════════════════════════════════════════════════╗${RESET}"
echo -e "${BOLD}${BLUE_COLOR} 📚 使用帮助 📚${RESET}"
echo -e "${BOLD}${BLUE_COLOR}╚══════════════════════════════════════════════════════════════╝${RESET}"
echo -e "${BOLD}${BLUE_COLOR}============================================================${RESET}"
echo -e "${BOLD}${BLUE_COLOR} 📚 使用帮助 📚${RESET}"
echo -e "${BOLD}${BLUE_COLOR}============================================================${RESET}"
echo ""
echo -e "${BOLD}${CYAN_COLOR}📖 使用方法:${RESET}"
echo -e " ${BOLD}bash $0 <architecture> [build_mode]${RESET}"
@@ -156,34 +156,35 @@ case "$build_mode_input" in
;;
esac
# 打印
# 打印横幅
show_banner() {
clear
echo -e ""
echo -e "${BOLD}${BLUE_COLOR}╔══════════════════════════════════════════════════════════════════╗${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} ZeroWRT 自动化构建系统 ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}╠══════════════════════════════════════════════════════════════════╣${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET}${BOLD}${BLUE_COLOR} ██████╗███████╗██████╗ ██████╗ ██╗ ██╗██████╗ ████████╗ ${RESET}${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET}${BOLD}${CYAN_COLOR} ╚══███╔╝██╔════╝██╔══██╗██╔═══██╗██║ ██║██╔══██╗╚══██╔══╝ ${RESET}${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET}${BOLD}${CYAN_COLOR} ███╔╝ █████╗ ██████╔╝██║ ██║██║ █╗ ██║██████╔╝ ██║ ${RESET}${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET}${BOLD}${YELLOW_COLOR} ███╔╝ ██╔══╝ ██╔══██╗██║ ██║██║███╗██║██╔══██╗ ██║ ${RESET}${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET}${BOLD}${YELLOW_COLOR} ███████╗███████╗██║ ██║╚██████╔╝╚███╔███╔╝██║ ██║ ██║ ${RESET}${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET}${BOLD}${YELLOW_COLOR} ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ${RESET}${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET}${BOLD}${YELLOW_COLOR} Open Source · Tailored · High Performance ${RESET}${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}╠══════════════════════════════════════════════════════════════════╣${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} 🛠️ 开发者: $author ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} 🌐 博客: $blog ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} 💡 理念: 开源 · 定制化 · 高性能 ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} 📦 版本: $version ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}╠══════════════════════════════════════════════════════════════════╣${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} 🔧 构建开始: $(date '+%Y-%m-%d %H:%M:%S') ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} ⚡ 处理器核心: $cpu_cores${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} 🐧 系统用户: $(whoami) ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} 🔬 GCC 版本: $gcc ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}${RESET} 🚀 编译模式: $build_mode ${BOLD}${BLUE_COLOR}${RESET}"
echo -e "${BOLD}${BLUE_COLOR}╚══════════════════════════════════════════════════════════════════╝${RESET}"
echo -e "${BOLD}${BLUE_COLOR}==============================================================${RESET}"
echo -e "${BOLD}${BLUE_COLOR} ZeroWRT 自动化构建系统${RESET}"
echo -e "${BOLD}${BLUE_COLOR}==============================================================${RESET}"
echo -e ""
echo -e "${BOLD}${BLUE_COLOR} ██████╗███████╗██████╗ ██████╗ ██╗ ██╗██████╗ ████████╗${RESET}"
echo -e "${BOLD}${CYAN_COLOR} ╚══███╔╝██╔════╝██╔══██╗██╔═══██╗██║ ██║██╔══██╗╚══██╔══╝${RESET}"
echo -e "${BOLD}${CYAN_COLOR} ███╔╝ █████╗ ██████╔╝██║ ██║██║ █╗ ██║██████╔╝ ██║ ${RESET}"
echo -e "${BOLD}${YELLOW_COLOR} ███╔╝ ██╔══╝ ██╔══██╗██║ ██║██║███╗██║██╔══██╗ ██║ ${RESET}"
echo -e "${BOLD}${YELLOW_COLOR} ███████╗███████╗██║ ██║╚██████╔╝╚███╔███╔╝██║ ██║ ██║ ${RESET}"
echo -e "${BOLD}${YELLOW_COLOR} ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ${RESET}"
echo -e ""
echo -e "${BOLD}${YELLOW_COLOR} Open Source · Tailored · High Performance${RESET}"
echo -e ""
echo -e "${BOLD}${BLUE_COLOR}--------------------------------------------------------------${RESET}"
echo -e "${BOLD}${CYAN_COLOR}🛠️ 开发者: $author${RESET}"
echo -e "${BOLD}${CYAN_COLOR}🌐 博客: $blog${RESET}"
echo -e "${BOLD}${CYAN_COLOR}💡 理念: 开源 · 定制化 · 高性能${RESET}"
echo -e "${BOLD}${CYAN_COLOR}📦 版本: $version${RESET}"
echo -e "${BOLD}${BLUE_COLOR}--------------------------------------------------------------${RESET}"
echo -e "${BOLD}${GREEN_COLOR}🔧 构建开始: $(date '+%Y-%m-%d %H:%M:%S')${RESET}"
echo -e "${BOLD}${GREEN_COLOR}⚡ 处理器核心: $cpu_cores${RESET}"
echo -e "${BOLD}${GREEN_COLOR}🐧 系统用户: $(whoami)${RESET}"
echo -e "${BOLD}${GREEN_COLOR}🔬 GCC 版本: $gcc${RESET}"
echo -e "${BOLD}${GREEN_COLOR}🚀 编译模式: $build_mode${RESET}"
echo -e "${BOLD}${BLUE_COLOR}==============================================================${RESET}"
echo -e ""
}
@@ -237,8 +238,8 @@ prepare_source_code() {
# 显示克隆进度
echo -e " ${BOLD}${CYAN_COLOR}${RESET} ${BOLD}正在下载源代码,请稍候...${RESET}"
# 克隆源代码(隐藏所有错误输出)
if git -c advice.detachedHead=false clone --depth=1 --branch "v$tag_version" --single-branch --quiet "$git_url" && cd openwrt 2>/dev/null; then
# 克隆源代码
if git -c advice.detachedHead=false clone --depth=1 --branch "v$tag_version" --single-branch --no-tags --quiet "$git_url" && cd openwrt 2>/dev/null; then
echo -e " ${BOLD}${MAGENTA_COLOR}${RESET}"
echo -e " ${BOLD}${GREEN_COLOR}${RESET} ${BOLD}源代码克隆成功${RESET}"
echo -e " ${BOLD}${YELLOW_COLOR}${RESET} ${BOLD}存储位置: ${GREEN_COLOR}$(pwd)/openwrt${RESET}"
@@ -511,9 +512,18 @@ prepare_source_code() {
} >> .config
echo -e " ${BOLD}${MAGENTA_COLOR}├─ ${GREEN_COLOR}${RESET} ${BOLD}GCC ${gcc} 配置完成${RESET}"
# 配置 OTA 在线更新
echo -e " ${BOLD}${MAGENTA_COLOR}├─ 🌐 配置 OTA 在线更新...${RESET}"
{
echo -e "\n# OTA Online Update"
echo -e "CONFIG_PACKAGE_luci-app-ota=y\n"
} >> .config
echo -e " ${BOLD}${MAGENTA_COLOR}├─ ${GREEN_COLOR}${RESET} ${BOLD}OTA 在线更新配置完成${RESET}"
# 生成 defconfig
echo -e " ${BOLD}${MAGENTA_COLOR}├─ ⚙️ 生成 defconfig...${RESET}"
echo -e " ${BOLD}${MAGENTA_COLOR}├─ 🔄 生成 defconfig...${RESET}"
if make defconfig > /dev/null 2>&1; then
echo -e " ${BOLD}${MAGENTA_COLOR}├─ ${GREEN_COLOR}${RESET} ${BOLD}defconfig 生成成功${RESET}"
else
@@ -537,9 +547,9 @@ prepare_source_code() {
# 编译执行函数
compile_source_code() {
echo -e "${BOLD}${BLUE_COLOR}╔══════════════════════════════════════════════════════════════╗${RESET}"
echo -e "${BOLD}${BLUE_COLOR} 🚀 编译阶段开始 🚀${RESET}"
echo -e "${BOLD}${BLUE_COLOR}╚══════════════════════════════════════════════════════════════╝${RESET}"
echo -e "${BOLD}${BLUE_COLOR}============================================================${RESET}"
echo -e "${BOLD}${BLUE_COLOR} 🚀 编译阶段开始 🚀${RESET}"
echo -e "${BOLD}${BLUE_COLOR}============================================================${RESET}"
echo ""
# 显示编译配置信息
@@ -672,9 +682,9 @@ compile_source_code() {
esac
echo ""
echo -e "${BOLD}${BLUE_COLOR}╔══════════════════════════════════════════════════════════════╗${RESET}"
echo -e "${BOLD}${BLUE_COLOR} 🎉 编译阶段完成 🎉${RESET}"
echo -e "${BOLD}${BLUE_COLOR}╚══════════════════════════════════════════════════════════════╝${RESET}"
echo -e "${BOLD}${BLUE_COLOR}============================================================${RESET}"
echo -e "${BOLD}${BLUE_COLOR} 🎉 编译阶段完成 🎉${RESET}"
echo -e "${BOLD}${BLUE_COLOR}============================================================${RESET}"
echo ""
# 显示完成信息
@@ -689,10 +699,10 @@ compile_source_code() {
### 私有源打包 ###
private_source_packaging() {
echo -e "\n"
echo -e "${BOLD}${MAGENTA_COLOR}──────────────────────────────────────────────${RESET}"
echo -e "${BOLD}${MAGENTA_COLOR}${RESET} 📦 ${CYAN_COLOR}私有源打包阶段${RESET} ${BOLD}${MAGENTA_COLOR}${RESET}"
echo -e "${BOLD}${MAGENTA_COLOR}──────────────────────────────────────────────${RESET}"
echo
echo -e "${BOLD}${MAGENTA_COLOR}────────────────────────────────────────────────${RESET}"
echo -e "${BOLD}${MAGENTA_COLOR} 📦 ${CYAN_COLOR}私有源打包阶段${RESET}${BOLD}${MAGENTA_COLOR} ${RESET}"
echo -e "${BOLD}${MAGENTA_COLOR}────────────────────────────────────────────────${RESET}"
echo ""
echo -e "${YELLOW_COLOR}⟳ 正在获取内核版本信息...${RESET}"
get_kernel_version=$(cat include/kernel-6.12)
@@ -707,31 +717,268 @@ private_source_packaging() {
cp -a bin/targets/x86/*/packages "$kmodpkg_name"
rm -f "$kmodpkg_name"/Packages*
cp -a bin/packages/x86_64/base/rtl88*-firmware*.ipk "$kmodpkg_name"/ 2>/dev/null || true
echo
echo -e "${YELLOW_COLOR}🔏 正在执行签名操作...${RESET}"
chmod -R 777 kmod-ipk kmod-sign
bash kmod-sign "$kmodpkg_name"
echo -e "${YELLOW_COLOR}📦 正在打包文件...${RESET}"
tar zcf "x86_64-${kmodpkg_name}.tar.gz" "$kmodpkg_name"
rm -rf "$kmodpkg_name"
elif [ "$platform" = "rockchip" ]; then
echo -e "${BLUE_COLOR}→ 检测到平台rockchip${RESET}"
cp -a bin/targets/rockchip/armv8*/packages "$kmodpkg_name"
rm -f "$kmodpkg_name"/Packages*
cp -a bin/packages/aarch64_generic/base/rtl88*-firmware*.ipk "$kmodpkg_name"/ 2>/dev/null || true
echo
echo -e "${YELLOW_COLOR}🔏 正在执行签名操作...${RESET}"
chmod -R 777 kmod-ipk kmod-sign
bash kmod-sign "$kmodpkg_name"
echo -e "${YELLOW_COLOR}📦 正在打包文件...${RESET}"
tar zcf "aarch64-${kmodpkg_name}.tar.gz" "$kmodpkg_name"
rm -rf "$kmodpkg_name"
fi
}
echo
echo -e "${YELLOW_COLOR}🔏 正在执行签名操作...${RESET}"
bash kmod-sign "$kmodpkg_name"
echo -e "${YELLOW_COLOR}📦 正在打包文件...${RESET}"
tar zcf "aarch64-${kmodpkg_name}.tar.gz" "$kmodpkg_name"
rm -rf "$kmodpkg_name"
echo
echo -e "${GREEN_COLOR}🎉 打包完成!${RESET}"
echo -e "生成文件:${BOLD}${CYAN_COLOR}aarch64-${kmodpkg_name}.tar.gz${RESET}"
echo -e "${DIM}──────────────────────────────────────────────${RESET}\n"
### 生成 OTA 文件
generate_ota_file() {
echo -e "\n"
echo -e "${BOLD}${MAGENTA_COLOR}============================================================${RESET}"
echo -e "${BOLD}${MAGENTA_COLOR} 📱 生成 OTA 文件${RESET}"
echo -e "${BOLD}${MAGENTA_COLOR}============================================================${RESET}"
echo ""
if [ "$platform" = "x86_64" ]; then
echo -e " ${BOLD}${YELLOW_COLOR}${RESET} ${BOLD}平台: ${GREEN_COLOR}x86_64${RESET}"
mkdir -p ota
OTA_URL="https://github.com/QuickWrt/ZeroWrt/releases/download"
VERSION=$(sed 's/v//g' version.txt)
SHA256=$(sha256sum bin/targets/x86/64*/*-generic-squashfs-combined-efi.img.gz | awk '{print $1}')
echo -e " ${BOLD}${YELLOW_COLOR}${RESET} ${BOLD}生成固件信息...${RESET}"
cat > ota/x86_64.json <<EOF
{
"x86_64": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256",
"url": "$OTA_URL/v$VERSION/openwrt-$VERSION-x86-64-generic-squashfs-combined-efi.img.gz"
}
]
}
EOF
echo -e " ${BOLD}${GREEN_COLOR}${RESET} ${BOLD}x86_64 OTA 文件生成成功${RESET}"
echo -e " ${BOLD}${YELLOW_COLOR}${RESET} ${BOLD}文件位置: ${GREEN_COLOR}ota/fw.json${RESET}"
elif [ "$platform" = "rockchip" ]; then
echo -e " ${BOLD}${YELLOW_COLOR}${RESET} ${BOLD}平台: ${GREEN_COLOR}rockchip${RESET}"
mkdir -p ota
OTA_URL="https://github.com/QuickWrt/ZeroWrt/releases/download"
VERSION=$(sed 's/v//g' version.txt)
echo -e " ${BOLD}${YELLOW_COLOR}${RESET} ${BOLD}计算各设备固件哈希值...${RESET}"
SHA256_armsom_sige3=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-armsom_sige3-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_armsom_sige7=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-armsom_sige7-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_t4=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopc-t4-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_t6=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopc-t6-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r2c_plus=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r2c-plus-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r2c=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r2c-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r2s=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r2s-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r3s=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r3s-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r4s=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r4s-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r4se=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r4se-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r5c=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r5c-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r5s=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r5s-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r6c=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r6c-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r6s=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r6s-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r76s=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r76s-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_huake_guangmiao_g4c=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-huake_guangmiao-g4c-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r66s=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-lunzn_fastrhino-r66s-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_r68s=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-lunzn_fastrhino-r68s-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_radxa_rock_5a=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-radxa_rock-5a-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_radxa_rock_5b=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-radxa_rock-5b-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_xunlong_orangepi_5_plus=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-xunlong_orangepi-5-plus-squashfs-sysupgrade.img.gz | awk '{print $1}')
SHA256_xunlong_orangepi_5=$(sha256sum bin/targets/rockchip/armv8*/openwrt-$VERSION-rockchip-armv8-xunlong_orangepi-5-squashfs-sysupgrade.img.gz | awk '{print $1}')
echo -e " ${BOLD}${YELLOW_COLOR}${RESET} ${BOLD}生成 Rockchip 设备 OTA 配置文件...${RESET}"
cat > ota/rockchip.json <<EOF
{
"armsom,sige3": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_armsom_sige3",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-armsom_sige3-squashfs-sysupgrade.img.gz"
}
],
"armsom,sige7": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_armsom_sige7",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-armsom_sige7-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopc-t4": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_t4",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopc-t4-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopc-t6": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_t6",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopc-t6-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r2c-plus": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r2c_plus",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r2c-plus-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r2c": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r2c",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r2c-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r2s": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r2s",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r2s-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r3s": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r3s",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r3s-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r4s": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r4s",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r4s-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r4se": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r4se",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r4se-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r5c": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r5c",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r5c-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r5s": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r5s",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r5s-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r6c": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r6c",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r6c-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r6s": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r6s",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r6s-squashfs-sysupgrade.img.gz"
}
],
"friendlyarm,nanopi-r76s": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r76s",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-friendlyarm_nanopi-r76s-squashfs-sysupgrade.img.gz"
}
],
"huake,guangmiao-g4c": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_huake_guangmiao_g4c",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-huake_guangmiao-g4c-squashfs-sysupgrade.img.gz"
}
],
"lunzn,fastrhino-r66s": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r66s",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-lunzn_fastrhino-r66s-squashfs-sysupgrade.img.gz"
}
],
"lunzn,fastrhino-r68s": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_r68s",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-lunzn_fastrhino-r68s-squashfs-sysupgrade.img.gz"
}
],
"radxa,rock-5a": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_radxa_rock_5a",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-radxa_rock-5a-squashfs-sysupgrade.img.gz"
}
],
"radxa,rock-5b": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_radxa_rock_5b",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-radxa_rock-5b-squashfs-sysupgrade.img.gz"
}
],
"xunlong,orangepi-5-plus": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_xunlong_orangepi_5_plus",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-xunlong_orangepi-5-plus-squashfs-sysupgrade.img.gz"
}
],
"xunlong,orangepi-5": [
{
"build_date": "$CURRENT_DATE",
"sha256sum": "$SHA256_xunlong_orangepi_5",
"url": "$OTA_URL/OpenWrt-v$VERSION/openwrt-$VERSION-rockchip-armv8-xunlong_orangepi-5-squashfs-sysupgrade.img.gz"
}
]
}
EOF
echo -e " ${BOLD}${GREEN_COLOR}${RESET} ${BOLD}Rockchip OTA 文件生成成功${RESET}"
echo -e " ${BOLD}${YELLOW_COLOR}${RESET} ${BOLD}文件位置: ${GREEN_COLOR}ota/rockchip.json${RESET}"
echo -e " ${BOLD}${YELLOW_COLOR}${RESET} ${BOLD}支持设备数量: ${GREEN_COLOR}20 个${RESET}"
fi
echo ""
echo -e " ${BOLD}${GREEN_COLOR}🎉 OTA 文件生成完成!${RESET}"
echo ""
}
# 主执行逻辑
main() {
show_usage
validate_password
if [ "$(whoami)" != "runner" ]; then
validate_password
fi
show_banner
setup_build_environment
setup_curl_progress
@@ -739,6 +986,7 @@ main() {
compile_source_code
if [[ "$build_mode_input" != "toolchain-only" ]]; then
private_source_packaging
generate_ota_file
fi
}

View File

@@ -2,7 +2,7 @@
set -euo pipefail
# =============================================================================
# 颜色配置
# 🎨 颜色配置
# =============================================================================
RED='\033[1;31m'
GREEN='\033[1;32m'
@@ -12,21 +12,20 @@ CYAN='\033[1;36m'
RESET='\033[0m'
# =============================================================================
# 基本信息
# 📦 基本信息
# =============================================================================
VERSION="v24"
REPO="QuickWrt/QuickWrt"
ASSET="QuickWrt.tar.gz"
# =============================================================================
# 工具函数
# 🧰 工具函数
# =============================================================================
log() { echo -e "${BLUE} $*${RESET}"; }
ok() { echo -e "${GREEN}$*${RESET}"; }
err() { echo -e "${RED}$*${RESET}" && exit 1; }
# =============================================================================
# 获取最新 release tag
# 🔍 获取最新 release tag
# =============================================================================
get_latest_release() {
curl -s "https://api.github.com/repos/${REPO}/releases/latest" \
@@ -34,7 +33,7 @@ get_latest_release() {
}
# =============================================================================
# 菜单函数
# 🧭 菜单函数
# =============================================================================
show_menu() {
local title="$1"
@@ -53,7 +52,7 @@ show_menu() {
}
# =============================================================================
# 交互选择
# 💡 交互选择模式
# =============================================================================
interactive_mode() {
log "进入交互模式选择编译参数..."
@@ -71,7 +70,6 @@ interactive_mode() {
BUILD_MODE="${mode_options[$((mode_choice-1))]}"
echo -e "\n${GREEN}✅ 已选择:${RESET}"
echo -e " • 版本号 : ${CYAN}${VERSION}${RESET}"
echo -e " • 架构 : ${CYAN}${TARGET_ARCH}${RESET}"
echo -e " • 编译模式 : ${CYAN}${BUILD_MODE}${RESET}\n"
@@ -79,15 +77,15 @@ interactive_mode() {
}
# =============================================================================
# 执行 build.sh
# ⚙️ 执行 build.sh
# =============================================================================
run_build() {
log "执行: ./build.sh ${VERSION} ${TARGET_ARCH} ${BUILD_MODE}"
./build.sh "${VERSION}" "${TARGET_ARCH}" "${BUILD_MODE}"
log "执行: ./build.sh ${TARGET_ARCH} ${BUILD_MODE}"
bash ./build.sh "${TARGET_ARCH}" "${BUILD_MODE}"
}
# =============================================================================
# 主逻辑
# 🚀 主逻辑
# =============================================================================
main() {
log "检查系统依赖..."
@@ -107,15 +105,14 @@ main() {
mkdir QuickWrt
tar -xzf "${ASSET}" -C QuickWrt || err "解压失败"
# 进入构建目录
cd QuickWrt || err "进入 QuickWrt 失败"
# 如果解压后有一个顶层目录则进入该目录
# 如果解压后有一个顶层目录则进入
if [ $(ls -1 | wc -l) -eq 1 ] && [ -d "$(ls -1)" ]; then
log "检测到顶层目录,进入: $(ls -1)"
cd "$(ls -1)" || err "进入解压目录失败"
fi
# 检查必要文件
[ -f "./build.sh" ] || err "未找到构建脚本: build.sh"
[ -d "./scripts" ] || err "未找到 scripts 目录"
@@ -123,7 +120,7 @@ main() {
chmod +x ./build.sh
chmod +x ./scripts/*.sh 2>/dev/null || log "为 scripts 目录下的脚本设置执行权限"
# 交互模式选择
# 进入交互模式
interactive_mode
}

View File

@@ -120,7 +120,7 @@ git clone https://$github/UnblockNeteaseMusic/luci-app-unblockneteasemusic packa
sed -i 's/解除网易云音乐播放限制/网易云音乐解锁/g' package/new/luci-app-unblockneteasemusic/root/usr/share/luci/menu.d/luci-app-unblockneteasemusic.json
# Theme
git clone https://$github/sbwml/luci-theme-argon package/new/luci-theme-argon --depth=1
git clone https://$github/QuickWrt/luci-theme-argon package/new/luci-theme-argon --depth=1
curl -s $mirror/openwrt/img/bg.webp > package/new/luci-theme-argon/luci-theme-argon/htdocs/luci-static/argon/img/bg.webp
sed -i "s/#5e72e4/#31a1a1/g" package/new/luci-theme-argon/luci-app-argon-config/root/etc/config/argon
sed -i "s/#483d8b/#31a1a1/g" package/new/luci-theme-argon/luci-app-argon-config/root/etc/config/argon