From 8c61de199f21dff686116f83e5971ec365631fda Mon Sep 17 00:00:00 2001 From: mofeng-git Date: Sat, 14 Sep 2024 18:29:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20WEB=20=E7=BB=88=E7=AB=AF?= =?UTF-8?q?=E5=92=8C=E4=BB=A5=E4=B8=8B=20Docker=20=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=8F=98=E9=87=8F=20NOAUTH=20=E7=A6=81=E7=94=A8=E8=BA=AB?= =?UTF-8?q?=E4=BB=BD=E8=AE=A4=E8=AF=81=20NOWEBTERMWRITE=20=E7=A6=81?= =?UTF-8?q?=E7=94=A8=20WEB=20=E7=BB=88=E7=AB=AF=E8=BE=93=E5=85=A5=20NOWEBT?= =?UTF-8?q?ERM=20=E7=A6=81=E7=94=A8=20WEB=20=E7=BB=88=E7=AB=AF=20NOVNC=20?= =?UTF-8?q?=E7=A6=81=E7=94=A8=20VNC=20NOIPMI=20=E7=A6=81=E7=94=A8=20IPMI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/Dockerfile | 21 ++++---- build/v2-hdmiusb-rpi4.override.yaml | 3 ++ configs/kvmd/armbain-motd | 28 ++++++++++ configs/kvmd/init.sh | 76 ++++++++++++++++++++++++++++ configs/kvmd/supervisord.conf | 23 +-------- extras/webterm/manifest.yaml | 6 +++ extras/webterm/nginx.ctx-http.conf | 3 ++ extras/webterm/nginx.ctx-server.conf | 11 ++++ web/extras/webterm/terminal.svg | 74 +++++++++++++++++++++++++++ 9 files changed, 213 insertions(+), 32 deletions(-) create mode 100755 configs/kvmd/armbain-motd create mode 100644 extras/webterm/manifest.yaml create mode 100644 extras/webterm/nginx.ctx-http.conf create mode 100644 extras/webterm/nginx.ctx-server.conf create mode 100644 web/extras/webterm/terminal.svg diff --git a/build/Dockerfile b/build/Dockerfile index 8c9e8364..c9701a59 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -48,6 +48,7 @@ COPY --from=builder /tmp/ustreamer/ustreamer /tmp/ustreamer/ustreamer-dump /usr/ COPY --from=builder /tmp/wheel/*.whl /tmp/wheel/ COPY --from=builder /tmp/ustreamer/libjanus_ustreamer.so /usr/lib/ustreamer/janus/ +ARG TARGETARCH ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 @@ -59,10 +60,15 @@ RUN cp /tmp/lib/* /lib/*-linux-*/ \ RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list.d/debian.sources \ && apt-get update \ - && apt-get install -y --no-install-recommends libxkbcommon-x11-0 nginx tesseract-ocr tesseract-ocr-eng tesseract-ocr-chi-sim iptables sudo janus \ + && apt-get install -y --no-install-recommends libxkbcommon-x11-0 nginx tesseract-ocr tesseract-ocr-eng tesseract-ocr-chi-sim iptables sudo janus curl\ && rm -rf /var/lib/apt/lists/* -RUN mkdir -p \ +RUN if [ ${TARGETARCH} = arm ]; then ARCH=armhf; elif [ ${TARGETARCH} = arm64 ]; then ARCH=aarch64; elif [ ${TARGETARCH} = amd64 ]; then ARCH=x86_64; 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 \ + && adduser kvmd --gecos "" --disabled-password \ + && ln -sf /usr/share/tesseract-ocr/*/tessdata /usr/share/tessdata \ + && mkdir -p \ /etc/kvmd/nginx \ /etc/kvmd/vnc \ /etc/kvmd/override.d\ @@ -71,7 +77,9 @@ RUN mkdir -p \ /var/lib/kvmd/pst/data \ /opt/vc/bin \ /run/kvmd \ - /tmp/kvmd-nginx + /tmp/kvmd-nginx \ + && touch /run/kvmd/ustreamer.sock /etc/kvmd/.docker_flag + COPY testenv/fakes/vcgencmd /usr/bin/ COPY extras/ /usr/share/kvmd/extras/ @@ -87,11 +95,4 @@ COPY build/v2-hdmiusb-rpi4.override.yaml /etc/kvmd/override.yaml COPY configs/kvmd/main/v2-hdmiusb-rpi4.yaml /etc/kvmd/main.yaml COPY testenv/js/* /usr/share/janus/javascript/ -RUN touch /run/kvmd/ustreamer.sock /etc/kvmd/.docker_flag \ - && adduser kvmd --gecos "" --disabled-password \ - && ln -sf /usr/share/tesseract-ocr/*/tessdata /usr/share/tessdata - -#RUN bash /etc/kvmd/init.sh - -EXPOSE 4430 CMD ["/etc/kvmd/init.sh"] \ No newline at end of file diff --git a/build/v2-hdmiusb-rpi4.override.yaml b/build/v2-hdmiusb-rpi4.override.yaml index 25caf3ed..88058ed2 100644 --- a/build/v2-hdmiusb-rpi4.override.yaml +++ b/build/v2-hdmiusb-rpi4.override.yaml @@ -1,4 +1,7 @@ kvmd: + auth: + enabled: true + server: unix_mode: 0666 diff --git a/configs/kvmd/armbain-motd b/configs/kvmd/armbain-motd new file mode 100755 index 00000000..1d45b76b --- /dev/null +++ b/configs/kvmd/armbain-motd @@ -0,0 +1,28 @@ +#!/bin/bash + +if [ -e /etc/update-motd.d/10-armbian-header ]; then /etc/update-motd.d/10-armbian-header; fi +if [ -e /etc/update-motd.d/30-armbian-sysinfo ]; then /etc/update-motd.d/30-armbian-sysinfo; fi +if [ -e /etc/update-motd.d/41-armbian-config ]; then /etc/update-motd.d/41-armbian-config; fi + +printf " + + ██████╗ ███╗ ██╗███████╗ ██╗ ██╗██╗ ██╗███╗ ███╗ +██╔═══██╗████╗ ██║██╔════╝ ██║ ██╔╝██║ ██║████╗ ████║ +██║ ██║██╔██╗ ██║█████╗█████╗█████╔╝ ██║ ██║██╔████╔██║ +██║ ██║██║╚██╗██║██╔══╝╚════╝██╔═██╗ ╚██╗ ██╔╝██║╚██╔╝██║ +╚██████╔╝██║ ╚████║███████╗ ██║ ██╗ ╚████╔╝ ██║ ╚═╝ ██║ + ╚═════╝ ╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ + +____________________________________________________________________________ + +欢迎使用 One-KVM,基于开源程序 PiKVM 的 IP-KVM 应用 + +项目链接: + * One-KVM:https://github.com/mofeng-git/One-KVM + +文档链接: + * One-KVM:https://one-kvm.mofeng.run + +____________________________________________________________________________ + +" \ No newline at end of file diff --git a/configs/kvmd/init.sh b/configs/kvmd/init.sh index 81e12baf..172d82f9 100755 --- a/configs/kvmd/init.sh +++ b/configs/kvmd/init.sh @@ -10,15 +10,88 @@ echo -e "${GREEN}One-KVM pre-starting...${NC}" #仅首次运行,用于初始化配置文件 if [ ! -f /etc/kvmd/.init_flag ]; then + #生成 ssl 证书 和 vnc 证书 /usr/share/kvmd/kvmd-gencert --do-the-thing /usr/share/kvmd/kvmd-gencert --do-the-thing --vnc + #生成 nginx 配置文件 if [ "$NOSSL" = 1 ]; then + echo -e "${GREEN}One-KVM SSL is disabled.${NC}" python -m kvmd.apps.ngxmkconf /etc/kvmd/nginx/nginx.conf.mako /etc/kvmd/nginx/nginx.conf -o nginx/https/enabled=false else python -m kvmd.apps.ngxmkconf /etc/kvmd/nginx/nginx.conf.mako /etc/kvmd/nginx/nginx.conf fi + + #生成 supervisord 配置文件是否添加扩展服务 + + if [ "$NOAUTH" == "1" ]; then + sed -i "s/enabled: true/enabled: false/g" /etc/kvmd/override.yaml + fi + + if [ "$NOWEBTERMWRITE" == "1" ]; then + WEBTERMWRITE == "" + else + WEBTERMWRITE == "-W" + fi + + if [ "$NOWEBTERM" == "1" ]; then + echo -e "${GREEN}One-KVM webterm is disabled.${NC}" + rm -r /usr/share/kvmd/extras/webterm + else + cat >> /etc/kvmd/supervisord.conf << EOF + +[program:kvmd-webterm] +command=/usr/local/bin/ttyd --interface=/run/kvmd/ttyd.sock --port=0 $WEBTERMWRITE /bin/bash -c '/etc/kvmd/armbain-motd; bash' +directory=/ +autostart=true +autorestart=true +priority=14 +stopasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes = 0 +redirect_stderr=true +EOF + fi + + if [ "&NOVNC" == "1" ]; then + echo -e "${GREEN}One-KVM VNC is disabled.${NC}" + rm -r /usr/share/kvmd/extras/vnc + else + cat >> /etc/kvmd/supervisord.conf << EOF + +[program:kvmd-vnc] +command=python -m kvmd.apps.vnc --run +directory=/ +autostart=true +autorestart=true +priority=11 +stopasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes = 0 +redirect_stderr=true +EOF + fi + + if [ "$NOIPMI" == "1" ]; then + echo -e "${GREEN}One-KVM IPMI is disabled.${NC}" + rm -r /usr/share/kvmd/extras/ipmi + else + cat >> /etc/kvmd/supervisord.conf << EOF + +[program:kvmd-ipmi] +command=python -m kvmd.apps.ipmi --run +directory=/ +autostart=true +autorestart=true +priority=12 +stopasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes = 0 +redirect_stderr=true +EOF + fi + #OTG 初始化修改默认配置文件 if [ "$OTG" == "1" ]; then echo -e "${GREEN}One-KVM OTG is enabled.${NC}" @@ -38,11 +111,13 @@ stdout_logfile_maxbytes = 0 redirect_stderr=true EOF fi + #/dev/video0 设备优先级高于 /dev/kvmd-video if [ -f /dev/video0 ]; then echo -e "${GREEN}Found /dev/video0, use it as kvmd video device.${NC}" sed -i "s/\/dev\/kvmd-video/\/dev\/video0/g" /etc/kvmd/override.yaml fi + #设置用户账号密码 if [ ! -z "$USERNAME" ] && [ ! -z "$PASSWORD" ]; then python -m kvmd.apps.htpasswd del admin @@ -52,6 +127,7 @@ EOF else echo -e "${YELLOW} USERNAME and PASSWORD environment variables is not set, using defalut(admin/admin).${NC}" fi + #新建 flag 标记文件 touch /etc/kvmd/.init_flag fi diff --git a/configs/kvmd/supervisord.conf b/configs/kvmd/supervisord.conf index 747f4140..283509ad 100644 --- a/configs/kvmd/supervisord.conf +++ b/configs/kvmd/supervisord.conf @@ -25,28 +25,6 @@ stdout_logfile=/dev/stdout stdout_logfile_maxbytes = 0 redirect_stderr=true -[program:kvmd-vnc] -command=python -m kvmd.apps.vnc --run -directory=/ -autostart=true -autorestart=true -priority=11 -stopasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes = 0 -redirect_stderr=true - -[program:kvmd-ipmi] -command=python -m kvmd.apps.ipmi --run -directory=/ -autostart=true -autorestart=true -priority=12 -stopasgroup=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes = 0 -redirect_stderr=true - [program:kvmd-janus] command=python -m kvmd.apps.janus --run autostart=true @@ -61,6 +39,7 @@ redirect_stderr=true command=nginx -c /etc/kvmd/nginx/nginx.conf -g 'daemon off;user root; error_log stderr;' autostart=true autorestart=true +startsecs=10 priority=100 stopasgroup=true stdout_logfile=/dev/stdout diff --git a/extras/webterm/manifest.yaml b/extras/webterm/manifest.yaml new file mode 100644 index 00000000..7676679a --- /dev/null +++ b/extras/webterm/manifest.yaml @@ -0,0 +1,6 @@ +name: Terminal +description: Open terminal in a web browser +icon: extras/webterm/terminal.svg +path: extras/webterm/ttyd +daemon: kvmd-webterm +place: 10 diff --git a/extras/webterm/nginx.ctx-http.conf b/extras/webterm/nginx.ctx-http.conf new file mode 100644 index 00000000..103e288f --- /dev/null +++ b/extras/webterm/nginx.ctx-http.conf @@ -0,0 +1,3 @@ +upstream ttyd { + server unix:/run/kvmd/ttyd.sock fail_timeout=0s max_fails=0; +} diff --git a/extras/webterm/nginx.ctx-server.conf b/extras/webterm/nginx.ctx-server.conf new file mode 100644 index 00000000..876a7192 --- /dev/null +++ b/extras/webterm/nginx.ctx-server.conf @@ -0,0 +1,11 @@ +location /extras/webterm/ttyd { + rewrite ^([^.\?]*[^/(/ws)])$ $1/ permanent; + rewrite ^/extras/webterm/ttyd$ / break; + rewrite ^/extras/webterm/ttyd\?(.*)$ ?$1 break; + rewrite ^/extras/webterm/ttyd/(.*)$ /$1 break; + proxy_pass http://ttyd; + 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/extras/webterm/terminal.svg b/web/extras/webterm/terminal.svg new file mode 100644 index 00000000..9aeaec61 --- /dev/null +++ b/web/extras/webterm/terminal.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +