mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-14 18:20:30 +08:00
添加玩客云直刷镜像制作脚本
This commit is contained in:
parent
0f39312eac
commit
df6da8e3d7
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"cmake.ignoreCMakeListsMissing": true
|
"cmake.ignoreCMakeListsMissing": true,
|
||||||
|
"makefile.configureOnOpen": false
|
||||||
}
|
}
|
||||||
@ -38,7 +38,8 @@ RUN if [ ${TARGETARCH} = arm ]; then ARCH=armhf; elif [ ${TARGETARCH} = arm64 ];
|
|||||||
COPY testenv/fakes/vcgencmd /usr/bin/
|
COPY testenv/fakes/vcgencmd /usr/bin/
|
||||||
COPY extras/ /usr/share/kvmd/extras/
|
COPY extras/ /usr/share/kvmd/extras/
|
||||||
COPY web/ /usr/share/kvmd/web/
|
COPY web/ /usr/share/kvmd/web/
|
||||||
COPY build/platform scripts/kvmd-gencert /usr/share/kvmd/
|
COPY scripts/kvmd-gencert /usr/share/kvmd/
|
||||||
|
COPY build/platform/docker /usr/share/kvmd/platform
|
||||||
COPY contrib/keymaps /usr/share/kvmd/keymaps
|
COPY contrib/keymaps /usr/share/kvmd/keymaps
|
||||||
COPY kvmd/ build/init.sh /kvmd/
|
COPY kvmd/ build/init.sh /kvmd/
|
||||||
COPY configs/kvmd/ /etc/kvmd_backup/
|
COPY configs/kvmd/ /etc/kvmd_backup/
|
||||||
|
|||||||
126
build/build_img.sh
Normal file
126
build/build_img.sh
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#File List
|
||||||
|
#src
|
||||||
|
#└── image
|
||||||
|
# ├── cumebox2
|
||||||
|
# │ └── Armbian_24.8.1_Khadas-vim1_bookworm_current_6.6.47_minimal.img
|
||||||
|
# └── onecloud
|
||||||
|
# ├── AmlImg_v0.3.1_linux_amd64
|
||||||
|
# ├── Armbian_by-SilentWind_24.5.0-trunk_Onecloud_bookworm_legacy_5.9.0-rc7_minimal.burn.img
|
||||||
|
# └── rc.local
|
||||||
|
|
||||||
|
#预处理镜像文件
|
||||||
|
SRCPATH=../src
|
||||||
|
ROOTFS=/tmp/rootfs
|
||||||
|
$SRCPATH/image/onecloud/AmlImg_v0.3.1_linux_amd64 unpack $SRCPATH/image/onecloud/Armbian_by-SilentWind_24.5.0-trunk_Onecloud_bookworm_legacy_5.9.0-rc7_minimal.burn.img $SRCPATH/tmp
|
||||||
|
simg2img $SRCPATH/tmp/7.rootfs.PARTITION.sparse $SRCPATH/tmp/rootfs.img
|
||||||
|
dd if=/dev/zero of=/tmp/add.img bs=1M count=1024 && cat /tmp/add.img >> $SRCPATH/tmp/rootfs.img && rm /tmp/add.img
|
||||||
|
e2fsck -f $SRCPATH/tmp/rootfs.img && resize2fs $SRCPATH/tmp/rootfs.img
|
||||||
|
|
||||||
|
#挂载镜像文件
|
||||||
|
mkdir $ROOTFS
|
||||||
|
sudo mount $SRCPATH/tmp/rootfs.img $ROOTFS || exit -1
|
||||||
|
sudo mount -t proc proc $ROOTFS/proc || exit -1
|
||||||
|
sudo mount -t sysfs sys $ROOTFS/sys || exit -1
|
||||||
|
sudo mount -o bind /dev $ROOTFS/dev || exit -1
|
||||||
|
|
||||||
|
#准备文件
|
||||||
|
sudo mkdir -p $ROOTFS/etc/kvmd/override.d $ROOTFS/etc/kvmd/vnc $ROOTFS/var/lib/kvmd/msd $ROOTFS/opt/vc/bin $ROOTFS/usr/share/kvmd \
|
||||||
|
$ROOTFS/usr/share/janus/javascript $ROOTFS/usr/lib/ustreamer/janus $ROOTFS/run/kvmd
|
||||||
|
sudo cp -r ../One-KVM $ROOTFS/
|
||||||
|
sudo cp $SRCPATH/image/onecloud/rc.local $ROOTFS/etc/
|
||||||
|
sudo cp -r $ROOTFS/One-KVM/configs/kvmd/* $ROOTFS/One-KVM/configs/nginx $ROOTFS/One-KVM/configs/janus \
|
||||||
|
$ROOTFS/etc/kvmd
|
||||||
|
sudo cp -r $ROOTFS/One-KVM/web $ROOTFS/One-KVM/extras $ROOTFS/One-KVM/contrib/keymaps $ROOTFS/usr/share/kvmd
|
||||||
|
sudo cp $ROOTFS/One-KVM/build/platform/onecloud $ROOTFS/usr/share/kvmd/platform
|
||||||
|
sudo cp $ROOTFS/One-KVM/testenv/fakes/vcgencmd $ROOTFS/usr/bin/
|
||||||
|
sudo cp -r $ROOTFS/One-KVM/testenv/js/* $ROOTFS/usr/share/janus/javascript/
|
||||||
|
|
||||||
|
#安装依赖
|
||||||
|
sudo chroot --userspec "root:root" $ROOTFS bash -c " \
|
||||||
|
apt update \
|
||||||
|
&& apt install -y python3-aiofiles python3-aiohttp python3-appdirs python3-asn1crypto python3-async-timeout \
|
||||||
|
python3-bottle python3-cffi python3-chardet python3-click python3-colorama python3-cryptography python3-dateutil \
|
||||||
|
python3-dbus python3-dev python3-hidapi python3-idna python3-libgpiod python3-mako python3-marshmallow python3-more-itertools \
|
||||||
|
python3-multidict python3-netifaces python3-packaging python3-passlib python3-pillow python3-ply python3-psutil \
|
||||||
|
python3-pycparser python3-pyelftools python3-pyghmi python3-pygments python3-pyparsing python3-requests \
|
||||||
|
python3-semantic-version python3-setproctitle python3-setuptools python3-six python3-spidev python3-systemd \
|
||||||
|
python3-tabulate python3-urllib3 python3-wrapt python3-xlib python3-yaml python3-yarl python3-pyotp python3-qrcode \
|
||||||
|
python3-serial python3-zstandard python3-dbus-next \
|
||||||
|
&& apt install -y nginx python3-pip python3-dev python3-build net-tools tesseract-ocr tesseract-ocr-eng tesseract-ocr-chi-sim \
|
||||||
|
git gpiod libxkbcommon0 build-essential janus-dev libssl-dev libffi-dev libevent-dev libjpeg-dev libbsd-dev libudev-dev \
|
||||||
|
pkg-config libx264-dev libyuv-dev libasound2-dev libsndfile-dev libspeexdsp-dev cpufrequtils iptables\
|
||||||
|
&& apt clean "
|
||||||
|
|
||||||
|
sudo chroot --userspec "root:root" $ROOTFS bash -c " \
|
||||||
|
pip3 config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple \
|
||||||
|
&& pip3 install --target=/usr/lib/python3/dist-packages --break-system-packages async-lru gpiod \
|
||||||
|
&& pip3 cache purge "
|
||||||
|
|
||||||
|
sudo chroot --userspec "root:root" $ROOTFS sed --in-place --expression 's|^#include "refcount.h"$|#include "../refcount.h"|g' /usr/include/janus/plugins/plugin.h
|
||||||
|
|
||||||
|
sudo chroot --userspec "root:root" $ROOTFS bash -c " \
|
||||||
|
git clone --depth=1 https://github.com/mofeng-git/ustreamer /tmp/ustreamer \
|
||||||
|
&& make -j WITH_PYTHON=1 WITH_JANUS=1 WITH_LIBX264=1 -C /tmp/ustreamer \
|
||||||
|
&& mv /tmp/ustreamer/src/ustreamer.bin /usr/bin/ustreamer \
|
||||||
|
&& mv /tmp/ustreamer/src/ustreamer-dump.bin /usr/bin/ustreamer-dump \
|
||||||
|
&& chmod +x /usr/bin/ustreamer /usr/bin/ustreamer-dump \
|
||||||
|
&& mv /tmp/ustreamer/janus/libjanus_ustreamer.so /usr/lib/ustreamer/janus \
|
||||||
|
&& pip3 install --target=/usr/lib/python3/dist-packages --break-system-packages /tmp/ustreamer/python/dist/*.whl "
|
||||||
|
|
||||||
|
#安装 kvmd 主程序
|
||||||
|
sudo chroot --userspec "root:root" $ROOTFS bash -c " \
|
||||||
|
cd /One-KVM \
|
||||||
|
&& python3 setup.py install \
|
||||||
|
&& bash scripts/kvmd-gencert --do-the-thing \
|
||||||
|
&& bash scripts/kvmd-gencert --do-the-thing --vnc \
|
||||||
|
&& kvmd-nginx-mkconf /etc/kvmd/nginx/nginx.conf.mako /etc/kvmd/nginx/nginx.conf \
|
||||||
|
&& kvmd -m "
|
||||||
|
|
||||||
|
sudo chroot --userspec "root:root" $ROOTFS bash -c " \
|
||||||
|
curl https://github.com/tsl0922/ttyd/releases/download/1.7.7/ttyd.armhf -L -o /usr/bin/ttyd \
|
||||||
|
&& chmod +x /usr/bin/ttyd \
|
||||||
|
&& systemd-sysusers /One-KVM/configs/os/kvmd-webterm.conf \
|
||||||
|
&& mkdir -p /home/kvmd-webterm \
|
||||||
|
&& chown kvmd-webterm /home/kvmd-webterm "
|
||||||
|
|
||||||
|
|
||||||
|
#服务自启
|
||||||
|
sudo chroot --userspec "root:root" $ROOTFS bash -c " \
|
||||||
|
cat /One-KVM/configs/os/sudoers/v2-hdmiusb >> /etc/sudoers \
|
||||||
|
&& echo 'libcomposite' >> /etc/modules \
|
||||||
|
&& mv /usr/local/bin/kvmd* /usr/bin \
|
||||||
|
&& cp /One-KVM/configs/os/services/* /etc/systemd/system/ \
|
||||||
|
&& cp /One-KVM/configs/os/tmpfiles.conf /usr/lib/tmpfiles.d/ \
|
||||||
|
&& chmod +x /etc/update-motd.d/* \
|
||||||
|
&& echo 'kvmd ALL=\(ALL\) NOPASSWD: /etc/kvmd/custom_atx/gpio.sh' >> /etc/sudoers \
|
||||||
|
&& echo 'kvmd ALL=\(ALL\) NOPASSWD: /etc/kvmd/custom_atx/usbrelay_hid.sh' >> /etc/sudoers \
|
||||||
|
&& systemd-sysusers /One-KVM/configs/os/sysusers.conf \
|
||||||
|
&& ln -sf /usr/share/tesseract-ocr/*/tessdata /usr/share/tessdata \
|
||||||
|
&& sed -i 's/ch9329/otg/g' /etc/kvmd/override.yaml \
|
||||||
|
&& sed -i 's/device: \/dev\/ttyUSB0//g' /etc/kvmd/override.yaml \
|
||||||
|
&& sed -i 's/8080/80/g' /etc/kvmd/override.yaml \
|
||||||
|
&& sed -i 's/4430/443/g' /etc/kvmd/override.yaml \
|
||||||
|
&& sed -i 's/localhost.localdomain/onecloud/g' /etc/kvmd/meta.yaml \
|
||||||
|
&& systemctl enable kvmd kvmd-otg kvmd-nginx kvmd-vnc kvmd-ipmi kvmd-webterm kvmd-janus \
|
||||||
|
&& systemctl disable nginx janus \
|
||||||
|
&& rm -r /One-KVM "
|
||||||
|
|
||||||
|
|
||||||
|
sudo chroot --userspec "root:root" $ROOTFS bash -c " \
|
||||||
|
sed -i '2c ATX=GPIO' /etc/kvmd/atx.sh \
|
||||||
|
&& sed -i 's/SHUTDOWNPIN/gpiochip1 7/g' /etc/kvmd/custom_atx/gpio.sh \
|
||||||
|
&& sed -i 's/REBOOTPIN/gpiochip0 11/g' /etc/kvmd/custom_atx/gpio.sh "
|
||||||
|
|
||||||
|
#卸载镜像
|
||||||
|
sudo umount $ROOTFS/sys
|
||||||
|
sudo umount $ROOTFS/dev
|
||||||
|
sudo umount $ROOTFS/proc
|
||||||
|
sudo umount $ROOTFS
|
||||||
|
|
||||||
|
#打包镜像
|
||||||
|
sudo rm $SRCPATH/tmp/7.rootfs.PARTITION.sparse
|
||||||
|
sudo img2simg $SRCPATH/tmp/rootfs.img $SRCPATH/tmp/7.rootfs.PARTITION.sparse
|
||||||
|
sudo $SRCPATH/image/onecloud/AmlImg_v0.3.1_linux_amd64 pack $SRCPATH/output/One-KVM_by-SilentWind_Onecloud_241004.burn.img $SRCPATH/tmp/
|
||||||
|
sudo rm $SRCPATH/tmp/*
|
||||||
@ -11,8 +11,9 @@ echo -e "${GREEN}One-KVM pre-starting...${NC}"
|
|||||||
if [ ! -f /etc/kvmd/.init_flag ]; then
|
if [ ! -f /etc/kvmd/.init_flag ]; then
|
||||||
echo -e "${GREEN}One-KVM is initializing first...${NC}" \
|
echo -e "${GREEN}One-KVM is initializing first...${NC}" \
|
||||||
&& mkdir -p /etc/kvmd/ \
|
&& mkdir -p /etc/kvmd/ \
|
||||||
&& mv /etc/kvmd_backup/* /etc/kvmd/ \
|
&& mv /etc/kvmd_backup/* /etc/kvmd/ \
|
||||||
&& touch /etc/kvmd/.docker_flag \
|
&& touch /etc/kvmd/.docker_flag \
|
||||||
|
&& sed -i 's/localhost.localdomain/docker/g' /etc/kvmd/meta.yaml \
|
||||||
&& /usr/share/kvmd/kvmd-gencert --do-the-thing \
|
&& /usr/share/kvmd/kvmd-gencert --do-the-thing \
|
||||||
&& /usr/share/kvmd/kvmd-gencert --do-the-thing --vnc \
|
&& /usr/share/kvmd/kvmd-gencert --do-the-thing --vnc \
|
||||||
|| echo -e "${RED}One-KVM config moving and self-signed SSL certificates init failed.${NC}"
|
|| echo -e "${RED}One-KVM config moving and self-signed SSL certificates init failed.${NC}"
|
||||||
|
|||||||
3
build/platform/onecloud
Normal file
3
build/platform/onecloud
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
PIKVM_MODEL=v2_model
|
||||||
|
PIKVM_VIDEO=usb_video
|
||||||
|
PIKVM_BOARD=onecloud
|
||||||
@ -3,15 +3,12 @@
|
|||||||
echo $ATX
|
echo $ATX
|
||||||
case $ATX in
|
case $ATX in
|
||||||
GPIO)
|
GPIO)
|
||||||
CUSTOMATX=gpio
|
sudo /etc/kvmd/custom_atx/gpio.sh $1
|
||||||
;;
|
;;
|
||||||
USBRELAY_HID)
|
USBRELAY_HID)
|
||||||
CUSTOMATX=usbrelay_hid
|
sudo /etc/kvmd/custom_atx/usbrelay_hid.sh $1
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "No thing."
|
echo "No thing."
|
||||||
exit -1
|
exit -1
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#$1 option: short long reset
|
|
||||||
exec /etc/kvmd/custom_atx/$CUSTOMATX.sh $1
|
|
||||||
6
configs/os/kvmd-webterm.conf
Normal file
6
configs/os/kvmd-webterm.conf
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
g kvmd-webterm - -
|
||||||
|
|
||||||
|
u kvmd-webterm - "Pi-KVM - Web terminal" /home/kvmd-webterm
|
||||||
|
|
||||||
|
m kvmd-webterm kvmd
|
||||||
|
m kvmd-nginx kvmd-webterm
|
||||||
@ -1,5 +1,5 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=PiKVM - IPMI to KVMD proxy
|
Description=One-KVM - IPMI to KVMD proxy
|
||||||
After=kvmd.service
|
After=kvmd.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=PiKVM - Janus WebRTC Gateway
|
Description=One-KVM - Janus WebRTC Gateway
|
||||||
After=network.target network-online.target nss-lookup.target kvmd.service
|
After=network.target network-online.target nss-lookup.target kvmd.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=PiKVM - HTTP entrypoint
|
Description=One-KVM - HTTP entrypoint
|
||||||
After=network.target network-online.target nss-lookup.target kvmd.service
|
After=network.target network-online.target nss-lookup.target kvmd.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=PiKVM - OTG setup
|
Description=One-KVM- OTG setup
|
||||||
After=systemd-modules-load.service
|
After=systemd-modules-load.service
|
||||||
Before=kvmd.service
|
Before=kvmd.service
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=PiKVM - VNC to KVMD/Streamer proxy
|
Description=One-KVM - VNC to KVMD/Streamer proxy
|
||||||
After=kvmd.service
|
After=kvmd.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
|||||||
24
configs/os/services/kvmd-webterm.service
Normal file
24
configs/os/services/kvmd-webterm.service
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=One-KVM - Web terminal (ttyd)
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=kvmd-webterm
|
||||||
|
Group=kvmd-webterm
|
||||||
|
WorkingDirectory=/home/kvmd-webterm
|
||||||
|
Restart=always
|
||||||
|
RestartSec=1
|
||||||
|
|
||||||
|
# Crutch for UNIX socket perms
|
||||||
|
UMask=0117
|
||||||
|
|
||||||
|
EnvironmentFile=-/etc/conf.d/kvmd-webterm
|
||||||
|
ExecStart=/usr/bin/ttyd \
|
||||||
|
-W \
|
||||||
|
--interface=/run/kvmd/ttyd.sock \
|
||||||
|
--port=0 \
|
||||||
|
$KVMD_WEBTERM_ARGS \
|
||||||
|
/bin/bash -c 'echo -ne "\033]0;One-KVM Terminal: `hostname -f` (ttyd)\007"; bash /etc/kvmd/armbain-motd; export TERM=linux; umask 0022; bash'
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
@ -1,5 +1,5 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=PiKVM - The main daemon
|
Description=One-KVM - The main daemon
|
||||||
After=network.target network-online.target nss-lookup.target
|
After=network.target network-online.target nss-lookup.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
|
|||||||
@ -116,7 +116,7 @@ class HwInfoSubmanager(BaseInfoSubmanager):
|
|||||||
try:
|
try:
|
||||||
self.__dt_cache[name] = (await aiotools.read_file(path)).strip(" \t\r\n\0")
|
self.__dt_cache[name] = (await aiotools.read_file(path)).strip(" \t\r\n\0")
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
get_logger(0).warn("Can't read DT %s from %s: %s", name, path, err)
|
#get_logger(0).warn("Can't read DT %s from %s: %s", name, path, err)
|
||||||
return None
|
return None
|
||||||
return self.__dt_cache[name]
|
return self.__dt_cache[name]
|
||||||
|
|
||||||
|
|||||||
@ -27,10 +27,11 @@ import time
|
|||||||
|
|
||||||
from typing import AsyncGenerator
|
from typing import AsyncGenerator
|
||||||
from xmlrpc.client import ServerProxy
|
from xmlrpc.client import ServerProxy
|
||||||
from supervisor.xmlrpc import SupervisorTransport
|
|
||||||
|
|
||||||
from ...logging import get_logger
|
from ...logging import get_logger
|
||||||
|
|
||||||
|
us_systemd_journal = True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
module_name = "systemd.journal"
|
module_name = "systemd.journal"
|
||||||
module = __import__(module_name)
|
module = __import__(module_name)
|
||||||
@ -38,6 +39,12 @@ except ImportError:
|
|||||||
us_systemd_journal = False
|
us_systemd_journal = False
|
||||||
get_logger(0).error("Failed to import module: %s", module_name)
|
get_logger(0).error("Failed to import module: %s", module_name)
|
||||||
|
|
||||||
|
try:
|
||||||
|
module_name = "supervisor.xmlrpc"
|
||||||
|
module = __import__(module_name)
|
||||||
|
except ImportError:
|
||||||
|
us_systemd_journal = True
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
class LogReader:
|
class LogReader:
|
||||||
async def poll_log(self, seek: int, follow: bool) -> AsyncGenerator[dict, None]:
|
async def poll_log(self, seek: int, follow: bool) -> AsyncGenerator[dict, None]:
|
||||||
@ -68,7 +75,7 @@ class LogReader:
|
|||||||
else:
|
else:
|
||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
else:
|
else:
|
||||||
server = ServerProxy('http://127.0.0.1',transport=SupervisorTransport(None, None, serverurl='unix:///tmp/supervisor.sock'))
|
server = ServerProxy('http://127.0.0.1',transport=supervisor.xmlrpc.SupervisorTransport(None, None, serverurl='unix:///tmp/supervisor.sock'))
|
||||||
log_entries = server.supervisor.readLog(0,0)
|
log_entries = server.supervisor.readLog(0,0)
|
||||||
yield log_entries
|
yield log_entries
|
||||||
|
|
||||||
|
|||||||
3
setup.py
3
setup.py
@ -24,7 +24,7 @@
|
|||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
import setuptools.command.easy_install
|
import setuptools.command.easy_install
|
||||||
from setuptools import setup
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
@ -108,6 +108,7 @@ def main() -> None:
|
|||||||
|
|
||||||
package_data={
|
package_data={
|
||||||
"kvmd.apps.vnc": ["fonts/*.ttf"],
|
"kvmd.apps.vnc": ["fonts/*.ttf"],
|
||||||
|
"kvmd": ["i18n/zh/LC_MESSAGES/*.mo"],
|
||||||
},
|
},
|
||||||
|
|
||||||
entry_points={
|
entry_points={
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user