mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-03-15 15:36:44 +08:00
Compare commits
3 Commits
build-2509
...
build-2509
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7c891353b | ||
|
|
3f8a9e3b2c | ||
|
|
4d4f528178 |
2
.github/workflows/build_img.yaml
vendored
2
.github/workflows/build_img.yaml
vendored
@@ -15,6 +15,8 @@ on:
|
||||
- vm
|
||||
- e900v22c
|
||||
- octopus-flanet
|
||||
- orangepi-zero
|
||||
- oec-turbo
|
||||
- all
|
||||
create_release:
|
||||
description: 'Create GitHub Release'
|
||||
|
||||
@@ -104,6 +104,20 @@ build_target() {
|
||||
local network_type=""
|
||||
NEED_PREPARE_DNS=true
|
||||
;;
|
||||
orangepi-zero)
|
||||
orangepizero_rootfs
|
||||
local arch="armhf"
|
||||
local device_type=""
|
||||
local network_type=""
|
||||
NEED_PREPARE_DNS=true
|
||||
;;
|
||||
oec-turbo)
|
||||
oec_turbo_rootfs
|
||||
local arch="aarch64"
|
||||
local device_type="vpu"
|
||||
local network_type=""
|
||||
NEED_PREPARE_DNS=true
|
||||
;;
|
||||
*)
|
||||
echo "错误:未知或不支持的目标 '$target'" >&2
|
||||
exit 1
|
||||
@@ -140,6 +154,12 @@ build_target() {
|
||||
onecloud-pro)
|
||||
pack_img "Onecloud-Pro"
|
||||
;;
|
||||
orangepi-zero)
|
||||
pack_img "Orangepi-Zero"
|
||||
;;
|
||||
oec-turbo)
|
||||
pack_img "OEC-Turbo"
|
||||
;;
|
||||
*)
|
||||
echo "错误:未知的打包类型 for '$target'" >&2
|
||||
;;
|
||||
@@ -158,7 +178,7 @@ build_target() {
|
||||
# 检查是否提供了目标参数
|
||||
if [ -z "$1" ]; then
|
||||
echo "用法: $0 <target|all>"
|
||||
echo "可用目标: onecloud, cumebox2, chainedbox, vm, e900v22c, octopus-flanet, onecloud-pro"
|
||||
echo "可用目标: onecloud, cumebox2, chainedbox, vm, e900v22c, octopus-flanet, onecloud-pro, orangepi-zero, oec-turbo"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -178,6 +198,8 @@ if [ "$1" = "all" ]; then
|
||||
build_target "e900v22c"
|
||||
build_target "octopus-flanet"
|
||||
build_target "onecloud-pro"
|
||||
build_target "orangepi-zero"
|
||||
build_target "oec-turbo"
|
||||
echo "信息:所有目标构建完成。"
|
||||
else
|
||||
build_target "$1"
|
||||
|
||||
@@ -244,6 +244,37 @@ download_file_if_missing() {
|
||||
return 1
|
||||
}
|
||||
|
||||
# 下载 rc.local 文件
|
||||
download_rc_local() {
|
||||
local platform_id="$1"
|
||||
local rc_local_path="$SRCPATH/image/$platform_id/rc.local"
|
||||
local relative_path="image/$platform_id/rc.local"
|
||||
local remote_url="$REMOTE_PREFIX/$relative_path"
|
||||
|
||||
echo "信息:检查是否需要下载 rc.local 文件 ($platform_id)..."
|
||||
|
||||
# 如果本地文件不存在,尝试下载
|
||||
if [ ! -f "$rc_local_path" ]; then
|
||||
echo "信息:本地 rc.local 文件不存在,尝试从远程下载..."
|
||||
ensure_dir "$(dirname "$rc_local_path")"
|
||||
|
||||
if curl -sSL --fail "$remote_url" -o "$rc_local_path"; then
|
||||
echo "信息:成功下载 rc.local 文件:$remote_url"
|
||||
# 在 GitHub Actions 环境中记录下载的文件
|
||||
if is_github_actions; then
|
||||
echo "$rc_local_path" >> "$DOWNLOADED_FILES_LIST"
|
||||
fi
|
||||
return 0
|
||||
else
|
||||
echo "信息:远程 rc.local 文件不存在或下载失败:$remote_url"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo "信息:使用本地 rc.local 文件:$rc_local_path"
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
# 清理下载的文件(仅在 GitHub Actions 环境中)
|
||||
cleanup_downloaded_files() {
|
||||
if is_github_actions && [[ -f "$DOWNLOADED_FILES_LIST" ]]; then
|
||||
|
||||
@@ -266,6 +266,40 @@ onecloud_pro_rootfs() {
|
||||
echo "信息:Octopus-Planet Rootfs 准备完成,loop 设备 $LOOPDEV 已就绪。"
|
||||
}
|
||||
|
||||
orangepizero_rootfs() {
|
||||
local source_image="$SRCPATH/image/orangepi-zero/Armbian_community_25.11.0-trunk.208_Orangepizero_bookworm_current_6.12.47_minimal.img"
|
||||
local target_image="$TMPDIR/rootfs.img"
|
||||
local offset=$((8192 * 512))
|
||||
local add_size_mb=600
|
||||
|
||||
echo "信息:准备 Orange Pi Zero Rootfs..."
|
||||
ensure_dir "$TMPDIR"
|
||||
|
||||
echo "信息:下载或使用本地 Orange Pi Zero 原始镜像..."
|
||||
download_file_if_missing "$source_image" || { echo "错误:下载 Orange Pi Zero 原始镜像失败" >&2; exit 1; }
|
||||
|
||||
cp "$source_image" "$target_image" || { echo "错误:复制 Orange Pi Zero 原始镜像失败" >&2; exit 1; }
|
||||
|
||||
echo "信息:扩展镜像文件 (${add_size_mb}MB)..."
|
||||
sudo dd if=/dev/zero bs=1M count="$add_size_mb" >> "$target_image" || { echo "错误:扩展镜像文件失败" >&2; exit 1; }
|
||||
|
||||
echo "信息:调整镜像分区大小..."
|
||||
sudo parted -s "$target_image" resizepart 1 100% || { echo "错误:使用 parted 调整分区大小失败" >&2; exit 1; }
|
||||
|
||||
find_loop_device
|
||||
sudo losetup -P "$LOOPDEV" "$target_image" || { echo "错误:设置 loop 设备失败" >&2; exit 1; }
|
||||
|
||||
echo "信息:检查并调整文件系统大小..."
|
||||
sudo e2fsck -y -f "${LOOPDEV}p1" || { echo "错误:文件系统检查失败" >&2; exit 1; }
|
||||
sudo resize2fs "${LOOPDEV}p1" || { echo "错误:调整文件系统大小失败" >&2; exit 1; }
|
||||
|
||||
# 重新设置 LOOPDEV 为分区
|
||||
sudo losetup -d "$LOOPDEV"
|
||||
sudo losetup "$LOOPDEV" "$target_image" -o "$offset" || { echo "错误:重新设置 loop 设备失败" >&2; exit 1; }
|
||||
|
||||
echo "信息:Orange Pi Zero Rootfs 准备完成。"
|
||||
}
|
||||
|
||||
# --- 特定设备的文件配置函数 ---
|
||||
|
||||
config_cumebox2_files() {
|
||||
@@ -290,11 +324,91 @@ config_cumebox2_files() {
|
||||
|
||||
config_octopus_flanet_files() {
|
||||
echo "信息:为 Octopus-Planet 配置特定文件 (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 失败"
|
||||
}
|
||||
}
|
||||
|
||||
config_orangepi_zero_files() {
|
||||
echo "信息:配置 Orange Pi Zero 特定文件..."
|
||||
|
||||
# 清空 modules.conf 文件,避免加载不必要的模块
|
||||
run_in_chroot "echo 'libcomposite' > /etc/modules-load.d/modules.conf"
|
||||
|
||||
echo "信息:Orange Pi Zero 特定配置完成。"
|
||||
}
|
||||
|
||||
config_onecloud_pro_files() {
|
||||
echo "信息:配置 Onecloud Pro 特定文件..."
|
||||
echo "信息:Onecloud Pro 特定配置完成。"
|
||||
}
|
||||
|
||||
oec_turbo_rootfs() {
|
||||
local source_image="$SRCPATH/image/oec-turbo/Flash_Armbian_25.05.0_rockchip_efused-wxy-oec_bookworm_6.1.99_server_2025.03.20.img"
|
||||
local target_image="$TMPDIR/rootfs.img"
|
||||
local rootfs_offset=$((1409024 * 512)) # 根据分区7的起始扇区计算
|
||||
|
||||
echo "信息:准备 OEC-Turbo Rootfs (Debian 12)..."
|
||||
ensure_dir "$TMPDIR"
|
||||
|
||||
echo "信息:下载或使用本地 OEC-Turbo 原始镜像..."
|
||||
download_file_if_missing "$source_image" || { echo "错误:下载 OEC-Turbo 原始镜像失败" >&2; exit 1; }
|
||||
|
||||
cp "$source_image" "$target_image" || { echo "错误:复制 OEC-Turbo 原始镜像失败" >&2; exit 1; }
|
||||
|
||||
find_loop_device
|
||||
# 设置 loop 设备指向 rootfs 分区 (分区7)
|
||||
sudo losetup "$LOOPDEV" "$target_image" -o "$rootfs_offset" || { echo "错误:设置 loop 设备失败" >&2; exit 1; }
|
||||
|
||||
echo "信息:OEC-Turbo Rootfs 准备完成,loop 设备 $LOOPDEV 已就绪。"
|
||||
}
|
||||
|
||||
config_oec_turbo_files() {
|
||||
echo "信息:配置 OEC-Turbo 特定文件..."
|
||||
|
||||
# 替换 override.yaml 中的硬件编码配置,启用 RK MPP 硬件编码
|
||||
echo "信息:配置 VPU 硬件编码支持..."
|
||||
run_in_chroot "sed -i 's/--h264-hwenc=disabled/--h264-hwenc=rkmpp/g' /etc/kvmd/override.yaml"
|
||||
|
||||
# 替换 DTB 文件
|
||||
replace_oec_turbo_dtb
|
||||
|
||||
echo "信息:OEC-Turbo 特定配置完成。"
|
||||
}
|
||||
|
||||
replace_oec_turbo_dtb() {
|
||||
local dtb_source="$SRCPATH/image/oec-turbo/rk3566-onething-oec-box.dtb"
|
||||
local target_image="$TMPDIR/rootfs.img"
|
||||
local boot_offset=$((360448 * 512)) # boot 分区6的偏移
|
||||
local boot_mount="$TMPDIR/oec_boot_mount"
|
||||
local dtb_target_path="dtb/rockchip/rk3566-onething-oec-box.dtb"
|
||||
local boot_loopdev=""
|
||||
|
||||
echo "信息:替换 OEC-Turbo DTB 文件..."
|
||||
|
||||
if [ ! -f "$dtb_source" ]; then
|
||||
echo "信息:尝试下载 DTB 文件..."
|
||||
download_file_if_missing "$dtb_source"
|
||||
fi
|
||||
|
||||
echo "信息:为 boot 分区查找独立的 loop 设备..."
|
||||
# 查找一个新的loop设备用于boot分区
|
||||
boot_loopdev=$(losetup -f)
|
||||
ensure_dir "$boot_mount"
|
||||
|
||||
losetup -o "$boot_offset" "$boot_loopdev" "$target_image"
|
||||
mount "$boot_loopdev" "$boot_mount"
|
||||
|
||||
# 确保目标目录存在并复制 DTB 文件
|
||||
mkdir -p "$boot_mount/$(dirname "$dtb_target_path")"
|
||||
cp "$dtb_source" "$boot_mount/$dtb_target_path"
|
||||
echo "信息:DTB 文件替换成功: $dtb_target_path"
|
||||
|
||||
umount "$boot_mount"
|
||||
losetup -d "$boot_loopdev"
|
||||
rmdir "$boot_mount"
|
||||
}
|
||||
|
||||
@@ -77,6 +77,8 @@ config_base_files() {
|
||||
sudo cp scripts/kvmd-gencert scripts/kvmd-bootconfig scripts/kvmd-certbot scripts/kvmd-udev-hdmiusb-check scripts/kvmd-udev-restart-pass build/scripts/kvmd-firstrun.sh "$ROOTFS/usr/bin/"
|
||||
sudo chmod +x "$ROOTFS/usr/bin/kvmd-gencert" "$ROOTFS/usr/bin/kvmd-bootconfig" "$ROOTFS/usr/bin/kvmd-certbot" "$ROOTFS/usr/bin/kvmd-udev-hdmiusb-check" "$ROOTFS/usr/bin/kvmd-udev-restart-pass" "$ROOTFS/usr/bin/kvmd-firstrun.sh"
|
||||
|
||||
# 尝试下载或使用本地 rc.local 文件
|
||||
download_rc_local "$platform_id" || echo "信息:rc.local 文件不存在,跳过"
|
||||
if [ -f "$SRCPATH/image/$platform_id/rc.local" ]; then
|
||||
echo "信息:复制设备特定的 rc.local 文件..."
|
||||
sudo cp "$SRCPATH/image/$platform_id/rc.local" "$ROOTFS/etc/"
|
||||
@@ -302,9 +304,11 @@ install_and_configure_kvmd() {
|
||||
config_base_files "$TARGET_DEVICE_NAME" # 使用全局变量传递设备名
|
||||
|
||||
# 特定设备的额外文件配置 (如果存在)
|
||||
if declare -f "config_${TARGET_DEVICE_NAME}_files" > /dev/null; then
|
||||
echo "信息:执行特定设备的文件配置函数 config_${TARGET_DEVICE_NAME}_files ..."
|
||||
"config_${TARGET_DEVICE_NAME}_files"
|
||||
# 将设备名中的连字符转换为下划线以匹配函数名
|
||||
local device_func_name="${TARGET_DEVICE_NAME//-/_}"
|
||||
if declare -f "config_${device_func_name}_files" > /dev/null; then
|
||||
echo "信息:执行特定设备的文件配置函数 config_${device_func_name}_files ..."
|
||||
"config_${device_func_name}_files"
|
||||
fi
|
||||
|
||||
# 某些镜像可能需要准备DNS和换源
|
||||
|
||||
3
build/platform/oec-turbo
Normal file
3
build/platform/oec-turbo
Normal file
@@ -0,0 +1,3 @@
|
||||
PIKVM_MODEL=v2_model
|
||||
PIKVM_VIDEO=usb_video
|
||||
PIKVM_BOARD=oec-turbo
|
||||
3
build/platform/orangepi-zero
Normal file
3
build/platform/orangepi-zero
Normal file
@@ -0,0 +1,3 @@
|
||||
PIKVM_MODEL=v2_model
|
||||
PIKVM_VIDEO=usb_video
|
||||
PIKVM_BOARD=orangepi-zero
|
||||
Reference in New Issue
Block a user