From 8cc9e22c913b7293ec3a7a2dd369db06b0811bde Mon Sep 17 00:00:00 2001 From: mofeng-git Date: Fri, 19 Sep 2025 15:52:30 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=20Onecloud=20Pro=20=E8=AE=BE?= =?UTF-8?q?=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build_img.yaml | 1 + build/build_img.sh | 19 ++++++++++++---- build/functions/devices.sh | 37 +++++++++++++++++++++++++++++--- build/functions/install.sh | 16 ++++++++++---- build/platform/onecloud-pro | 3 +++ configs/kvmd/atx.sh | 1 + 6 files changed, 66 insertions(+), 11 deletions(-) create mode 100644 build/platform/onecloud-pro diff --git a/.github/workflows/build_img.yaml b/.github/workflows/build_img.yaml index 97b25d46..91de3eec 100644 --- a/.github/workflows/build_img.yaml +++ b/.github/workflows/build_img.yaml @@ -9,6 +9,7 @@ on: type: choice options: - onecloud + - onecloud-pro - cumebox2 - chainedbox - vm diff --git a/build/build_img.sh b/build/build_img.sh index 6ef488ab..0ccd7442 100755 --- a/build/build_img.sh +++ b/build/build_img.sh @@ -59,7 +59,7 @@ build_target() { onecloud) onecloud_rootfs local arch="armhf" - local device_type="gpio" + local device_type="gpio-onecloud" local network_type="systemd-networkd" ;; cumebox2) @@ -97,6 +97,13 @@ build_target() { local network_type="" NEED_PREPARE_DNS=true ;; + onecloud-pro) + onecloud_pro_rootfs + local arch="aarch64" + local device_type="gpio-onecloud-pro video1" + local network_type="" + NEED_PREPARE_DNS=true + ;; *) echo "错误:未知或不支持的目标 '$target'" >&2 exit 1 @@ -124,12 +131,15 @@ build_target() { chainedbox) pack_img "Chainedbox" ;; - e900v22c) + e900v22c) pack_img "E900v22c" ;; - octopus-flanet) + octopus-flanet) pack_img "Octopus-Flanet" ;; + onecloud-pro) + pack_img "Onecloud-Pro" + ;; *) echo "错误:未知的打包类型 for '$target'" >&2 ;; @@ -148,7 +158,7 @@ build_target() { # 检查是否提供了目标参数 if [ -z "$1" ]; then echo "用法: $0 " - echo "可用目标: onecloud, cumebox2, chainedbox, vm, e900v22c, octopus-flanet" + echo "可用目标: onecloud, cumebox2, chainedbox, vm, e900v22c, octopus-flanet, onecloud-pro" exit 1 fi @@ -167,6 +177,7 @@ if [ "$1" = "all" ]; then build_target "vm" build_target "e900v22c" build_target "octopus-flanet" + build_target "onecloud-pro" echo "信息:所有目标构建完成。" else build_target "$1" diff --git a/build/functions/devices.sh b/build/functions/devices.sh index f2cc9750..041d1833 100755 --- a/build/functions/devices.sh +++ b/build/functions/devices.sh @@ -10,7 +10,7 @@ onecloud_rootfs() { local bootfs_sparse="$TMPDIR/6.boot.PARTITION.sparse" local rootfs_sparse="$TMPDIR/7.rootfs.PARTITION.sparse" local bootfs_loopdev="" # 存储 bootfs 使用的 loop 设备 - local add_size_mb=400 + local add_size_mb=600 echo "信息:准备 Onecloud Rootfs..." ensure_dir "$TMPDIR" @@ -159,7 +159,7 @@ e900v22c_rootfs() { local source_image="$SRCPATH/image/e900v22c/Armbian_23.08.0_amlogic_s905l3a_bookworm_5.15.123_server_2023.08.01.img" local target_image="$TMPDIR/rootfs.img" local offset=$((532480 * 512)) - local add_size_mb=400 + local add_size_mb=600 echo "信息:准备 E900V22C Rootfs..." ensure_dir "$TMPDIR" @@ -192,7 +192,7 @@ octopus_flanet_rootfs() { local target_image="$TMPDIR/rootfs.img" local boot_offset=$((8192 * 512)) local rootfs_offset=$((1056768 * 512)) - local add_size_mb=400 + local add_size_mb=600 local bootfs_loopdev="" echo "信息:准备 Octopus-Planet Rootfs..." @@ -231,6 +231,37 @@ octopus_flanet_rootfs() { echo "信息:Octopus-Planet Rootfs 准备完成,loop 设备 $LOOPDEV 已就绪。" } +onecloud_pro_rootfs() { + local source_image="$SRCPATH/image/onecloud-pro/Armbian-by-SilentWind_24.5.0_amlogic_Onecloud-Pro_jammy_6.6.28_server.img" + local target_image="$TMPDIR/rootfs.img" + local boot_offset=$((8192 * 512)) + local rootfs_offset=$((1056768 * 512)) + local add_size_mb=600 + local bootfs_loopdev="" + + 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 "信息:调整镜像分区大小 (分区 2)..." + sudo parted -s "$target_image" resizepart 2 100% || { echo "错误:使用 parted 调整分区 2 大小失败" >&2; exit 1; } + + echo "信息:设置 rootfs 分区的 loop 设备..." + find_loop_device # 找 loop 给 rootfs + echo "信息:将 $target_image (偏移 $rootfs_offset) 关联到 $LOOPDEV..." + sudo losetup --offset "$rootfs_offset" "$LOOPDEV" "$target_image" || { echo "错误:设置 rootfs 分区 loop 设备 $LOOPDEV 失败" >&2; exit 1; } + + echo "信息:检查并调整文件系统大小 (在 loop 设备上)..." + sudo e2fsck -f -y "$LOOPDEV" || { echo "警告:e2fsck 检查 $LOOPDEV 失败" >&2; exit 1; } + sudo resize2fs "$LOOPDEV" || { echo "错误:resize2fs 调整 $LOOPDEV 大小失败" >&2; exit 1; } + + echo "信息:Octopus-Planet Rootfs 准备完成,loop 设备 $LOOPDEV 已就绪。" +} + # --- 特定设备的文件配置函数 --- config_cumebox2_files() { diff --git a/build/functions/install.sh b/build/functions/install.sh index a8694507..f52329cc 100755 --- a/build/functions/install.sh +++ b/build/functions/install.sh @@ -10,7 +10,7 @@ prepare_dns_and_mirrors() { && printf '%s\\n' 'nameserver 1.1.1.1' 'nameserver 1.0.0.1' > /etc/resolv.conf \\ && echo '信息:尝试更换镜像源...' \\ && bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh) \\ - --source mirrors.tuna.tsinghua.edu.cn --upgrade-software false --web-protocol http || echo '警告:更换镜像源脚本执行失败,可能网络不通或脚本已更改' + --source mirrors.ustc.edu.cn --upgrade-software false --web-protocol http || echo '警告:更换镜像源脚本执行失败,可能网络不通或脚本已更改' " } @@ -246,7 +246,15 @@ apply_kvmd_tweaks() { # 根据 device_type 配置 ATX - if [ "$device_type" = "gpio" ]; then + if [[ "$device_type" == *"gpio-onecloud-pro"* ]]; then + echo "信息:电源控制设备类型为 gpio,设置 ATX 为 GPIO 并配置引脚..." + atx_setting="GPIO" + run_in_chroot " + sed -i 's/^ATX=.*/ATX=GPIO/' /etc/kvmd/atx.sh && \\ + sed -i 's/SHUTDOWNPIN/gpiochip0 7/g' /etc/kvmd/custom_atx/gpio.sh && \\ + sed -i 's/REBOOTPIN/gpiochip0 11/g' /etc/kvmd/custom_atx/gpio.sh + " + elif [[ "$device_type" == *"gpio-onecloud"* ]]; then echo "信息:电源控制设备类型为 gpio,设置 ATX 为 GPIO 并配置引脚..." atx_setting="GPIO" run_in_chroot " @@ -261,10 +269,10 @@ apply_kvmd_tweaks() { fi # 配置视频设备 - if [ "$device_type" = "video1" ]; then + if [[ "$device_type" == *"video1"* ]]; then echo "信息:视频设备类型为 video1,设置视频设备为 /dev/video1..." run_in_chroot "sed -i 's|/dev/video0|/dev/video1|g' /etc/kvmd/override.yaml" - elif [ "$device_type" = "kvmd-video" ]; then + elif [[ "$device_type" == *"video1"* ]]; then echo "信息:视频设备类型为 kvmd-video,设置视频设备为 /dev/kvmd-video..." run_in_chroot "sed -i 's|/dev/video0|/dev/kvmd-video|g' /etc/kvmd/override.yaml" else diff --git a/build/platform/onecloud-pro b/build/platform/onecloud-pro new file mode 100644 index 00000000..8c15cf37 --- /dev/null +++ b/build/platform/onecloud-pro @@ -0,0 +1,3 @@ +PIKVM_MODEL=v2_model +PIKVM_VIDEO=usb_video +PIKVM_BOARD=onecloud-pro diff --git a/configs/kvmd/atx.sh b/configs/kvmd/atx.sh index 19f1a8f5..98d461c5 100755 --- a/configs/kvmd/atx.sh +++ b/configs/kvmd/atx.sh @@ -20,6 +20,7 @@ # # # ========================================================================== # +ATX=USBRELAY_HID echo $ATX case $ATX in GPIO)