diff --git a/build/Dockerfile b/build/Dockerfile index b07dcce0..81b28a9b 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -87,6 +87,18 @@ RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.lis fi \ && curl https://github.com/tsl0922/ttyd/releases/download/1.7.7/ttyd.$ARCH -L -o /usr/local/bin/ttyd \ && chmod +x /usr/local/bin/ttyd \ + && mkdir -p /tmp/gostc && cd /tmp/gostc \ + && case ${TARGETARCH} in \ + amd64) GOSTC_ARCH=amd64_v1 ;; \ + arm) GOSTC_ARCH=arm_7 ;; \ + arm64) GOSTC_ARCH=arm64_v8.0 ;; \ + *) echo "Unsupported architecture for gostc: ${TARGETARCH}" && exit 1 ;; \ + esac \ + && curl -L https://github.com/mofeng-git/gostc-open/releases/download/v2.0.8-beta.2/gostc_linux_${GOSTC_ARCH}.tar.gz -o gostc.tar.gz \ + && tar -xzf gostc.tar.gz \ + && mv gostc /usr/bin/ \ + && chmod +x /usr/bin/gostc \ + && cd / && rm -rf /tmp/gostc \ && adduser kvmd --gecos "" --disabled-password \ && ln -sf /usr/share/tesseract-ocr/*/tessdata /usr/share/tessdata \ && mkdir -p /etc/kvmd_backup/override.d \ diff --git a/build/Dockerfile-stage-0 b/build/Dockerfile-stage-0 index 14c84e5f..969922db 100644 --- a/build/Dockerfile-stage-0 +++ b/build/Dockerfile-stage-0 @@ -162,9 +162,9 @@ RUN if [ ${TARGETARCH} = arm64 ]; then \ RUN sed --in-place --expression 's|^#include "refcount.h"$|#include "../refcount.h"|g' /usr/include/janus/plugins/plugin.h \ && git clone --depth=1 https://github.com/mofeng-git/ustreamer /tmp/ustreamer \ && if [ ${TARGETARCH} = arm64 ]; then \ - make -j$(nproc) WITH_PYTHON=1 WITH_JANUS=1 WITH_FFMPEG=1 WITH_MPP=1 -C /tmp/ustreamer; \ + make -j$(nproc) WITH_PYTHON=1 WITH_JANUS=1 WITH_FFMPEG=1 WITH_MPP=1 WITH_DRM=1 -C /tmp/ustreamer; \ else \ - make -j$(nproc) WITH_PYTHON=1 WITH_JANUS=1 WITH_FFMPEG=1 -C /tmp/ustreamer; \ + make -j$(nproc) WITH_PYTHON=1 WITH_JANUS=1 WITH_FFMPEG=1 WITH_DRM=1 -C /tmp/ustreamer; \ fi \ && /tmp/ustreamer/ustreamer -v \ && /tmp/ustreamer/ustreamer-dump -v \ diff --git a/build/functions/devices.sh b/build/functions/devices.sh index 3804f3e4..c7652f0c 100755 --- a/build/functions/devices.sh +++ b/build/functions/devices.sh @@ -347,6 +347,16 @@ config_onecloud_pro_files() { echo "信息:Onecloud Pro 特定配置完成。" } +config_onecloud_files() { + echo "信息:配置 Onecloud 特定文件..." + + # 在 ustreamer 命令中添加 DRM 设备配置 + echo "信息:为 Onecloud 添加 DRM 设备支持..." + run_in_chroot "sed -i \"/--device=\\/dev\\/video0/a\\ - \\\"--drm-device /dev/dri/card1\\\"\" /etc/kvmd/override.yaml" + + echo "信息:Onecloud 特定配置完成。" +} + 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" diff --git a/build/functions/install.sh b/build/functions/install.sh index 70dab173..2263ce06 100755 --- a/build/functions/install.sh +++ b/build/functions/install.sh @@ -110,7 +110,7 @@ install_base_packages() { iptables network-manager curl kmod libmicrohttpd12 libjansson4 libssl3 \\ libsofia-sip-ua0 libglib2.0-0 libopus0 libogg0 libcurl4 libconfig9 \\ python3-pip net-tools libavcodec59 libavformat59 libavutil57 libswscale6 \\ - libavfilter8 libavdevice59 v4l-utils libv4l-0 nano unzip dnsmasq && \\ + libavfilter8 libavdevice59 v4l-utils libv4l-0 nano unzip dnsmasq python3-systemd && \\ apt clean && \\ rm -rf /var/lib/apt/lists/* " @@ -194,7 +194,7 @@ configure_system() { sed -i 's/8080/80/g' /etc/kvmd/override.yaml && \\ sed -i 's/4430/443/g' /etc/kvmd/override.yaml && \\ chown kvmd -R /var/lib/kvmd/msd/ && \\ - systemctl enable dnsmasq kvmd kvmd-otg kvmd-nginx kvmd-vnc kvmd-ipmi kvmd-webterm kvmd-janus kvmd-media && \\ + systemctl enable dnsmasq kvmd kvmd-otg kvmd-nginx kvmd-vnc kvmd-ipmi kvmd-webterm kvmd-janus kvmd-media kvmd-gostc && \\ systemctl disable nginx systemd-resolved && \\ rm -rf /One-KVM " @@ -221,6 +221,54 @@ install_webterm() { " } +install_gostc() { + local arch="$1" # armhf, aarch64, x86_64 + local gostc_arch="$arch" + local gostc_version="v2.0.8-beta.2" + + # 根据架构映射下载文件名 + case "$arch" in + armhf) gostc_arch="arm_7" ;; + aarch64) gostc_arch="arm64_v8.0" ;; + x86_64|amd64) gostc_arch="amd64_v1" ;; + *) echo "错误:不支持的架构 $arch"; exit 1 ;; + esac + + echo "信息:在 chroot 环境中下载并安装 gostc ($gostc_arch)..." + run_in_chroot " + mkdir -p /tmp/gostc && cd /tmp/gostc && \\ + curl -L https://github.com/mofeng-git/gostc-open/releases/download/${gostc_version}/gostc_linux_${gostc_arch}.tar.gz -o gostc.tar.gz && \\ + tar -xzf gostc.tar.gz && \\ + mv gostc /usr/bin/ && \\ + chmod +x /usr/bin/gostc && \\ + cd / && rm -rf /tmp/gostc + " + + echo "信息:创建 gostc systemd 服务文件..." + run_in_chroot " + cat > /etc/systemd/system/kvmd-gostc.service << 'EOF' +[Unit] +Description=基于FRP开发的内网穿透 客户端/节点 +ConditionFileIsExecutable=/usr/bin/gostc +After=network.target + +[Service] +StartLimitInterval=5 +StartLimitBurst=10 +ExecStart=/usr/bin/gostc \"-web-addr\" \"0.0.0.0:18080\" +WorkingDirectory=/usr/bin +Restart=always +RestartSec=10 +EnvironmentFile=-/etc/sysconfig/gostc + +[Install] +WantedBy=multi-user.target +EOF + " + + echo "信息:gostc 安装和配置完成" +} + apply_kvmd_tweaks() { local arch="$1" # armhf, aarch64, x86_64 local device_type="$2" # "gpio" or "video1" or other @@ -324,6 +372,7 @@ install_and_configure_kvmd() { configure_network "$network_type" install_python_deps configure_kvmd_core + install_gostc "$arch" # 安装 gostc configure_system install_webterm "$arch" # 传递原始架构名给ttyd下载 apply_kvmd_tweaks "$arch" "$device_type" diff --git a/configs/kvmd/supervisord.conf b/configs/kvmd/supervisord.conf index 1d420cc1..43ae714f 100644 --- a/configs/kvmd/supervisord.conf +++ b/configs/kvmd/supervisord.conf @@ -53,6 +53,17 @@ stdout_logfile=/dev/stdout stdout_logfile_maxbytes = 0 redirect_stderr=true +[program:kvmd-gostc] +command=/usr/bin/gostc -web-addr 0.0.0.0:18080 +autostart=true +autorestart=true +startsecs=5 +priority=300 +stopasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes = 0 +redirect_stderr=true + [program:clean_when_exit] command=/etc/kvmd/clean_when_exit.sh autostart=true diff --git a/extras/gostc/manifest.yaml b/extras/gostc/manifest.yaml new file mode 100644 index 00000000..acdc7288 --- /dev/null +++ b/extras/gostc/manifest.yaml @@ -0,0 +1,6 @@ +name: GOSTC +description: GOSTC Server +icon: share/svg/gostc.svg +path: extras/gostc +daemon: kvmd-gostc +place: 11 diff --git a/extras/gostc/nginx.ctx-server.conf b/extras/gostc/nginx.ctx-server.conf new file mode 100644 index 00000000..84a74c87 --- /dev/null +++ b/extras/gostc/nginx.ctx-server.conf @@ -0,0 +1,7 @@ +location /extras/gostc { + proxy_pass http://127.0.0.1:18080; + include /etc/kvmd/nginx/loc-proxy.conf; + include /etc/kvmd/nginx/loc-websocket.conf; + include /etc/kvmd/nginx/loc-login.conf; + include /etc/kvmd/nginx/loc-nocache.conf; +} diff --git a/web/share/svg/gostc.svg b/web/share/svg/gostc.svg new file mode 100644 index 00000000..237a2fa9 --- /dev/null +++ b/web/share/svg/gostc.svg @@ -0,0 +1 @@ +