mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-13 01:30:31 +08:00
MSD 支持运行目录存放镜像
This commit is contained in:
parent
eca4167789
commit
507c46b986
@ -31,7 +31,7 @@ RUN if [ ${TARGETARCH} = arm ]; then ARCH=armhf; elif [ ${TARGETARCH} = arm64 ];
|
|||||||
&& chmod +x /usr/local/bin/ttyd \
|
&& chmod +x /usr/local/bin/ttyd \
|
||||||
&& adduser kvmd --gecos "" --disabled-password \
|
&& adduser kvmd --gecos "" --disabled-password \
|
||||||
&& ln -sf /usr/share/tesseract-ocr/*/tessdata /usr/share/tessdata \
|
&& ln -sf /usr/share/tesseract-ocr/*/tessdata /usr/share/tessdata \
|
||||||
&& mkdir -p /etc/kvmd_backup/override.d /var/lib/kvmd/msd /var/lib/kvmd/pst/data /opt/vc/bin /run/kvmd /tmp/kvmd-nginx \
|
&& mkdir -p /etc/kvmd_backup/override.d /var/lib/kvmd/msd/images /var/lib/kvmd/msd/meta /var/lib/kvmd/pst/data /opt/vc/bin /run/kvmd /tmp/kvmd-nginx \
|
||||||
&& touch /run/kvmd/ustreamer.sock
|
&& touch /run/kvmd/ustreamer.sock
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,7 @@ SRCPATH=../src
|
|||||||
ROOTFS=/tmp/rootfs
|
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
|
$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
|
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
|
dd if=/dev/zero of=/tmp/add.img bs=1M count=800 && cat /tmp/add.img >> $SRCPATH/tmp/rootfs.img && rm /tmp/add.img
|
||||||
e2fsck -f $SRCPATH/tmp/rootfs.img && resize2fs $SRCPATH/tmp/rootfs.img
|
e2fsck -f $SRCPATH/tmp/rootfs.img && resize2fs $SRCPATH/tmp/rootfs.img
|
||||||
|
|
||||||
#挂载镜像文件
|
#挂载镜像文件
|
||||||
@ -27,7 +27,7 @@ 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 \
|
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
|
$ROOTFS/usr/share/janus/javascript $ROOTFS/usr/lib/ustreamer/janus $ROOTFS/run/kvmd $ROOTFS/var/lib/kvmd/msd/images $ROOTFS/var/lib/kvmd/msd/meta
|
||||||
sudo cp -r ../One-KVM $ROOTFS/
|
sudo cp -r ../One-KVM $ROOTFS/
|
||||||
sudo cp $SRCPATH/image/onecloud/rc.local $ROOTFS/etc/
|
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 \
|
sudo cp -r $ROOTFS/One-KVM/configs/kvmd/* $ROOTFS/One-KVM/configs/nginx $ROOTFS/One-KVM/configs/janus \
|
||||||
@ -103,6 +103,8 @@ sudo chroot --userspec "root:root" $ROOTFS bash -c " \
|
|||||||
&& sed -i 's/device: \/dev\/ttyUSB0//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/8080/80/g' /etc/kvmd/override.yaml \
|
||||||
&& sed -i 's/4430/443/g' /etc/kvmd/override.yaml \
|
&& sed -i 's/4430/443/g' /etc/kvmd/override.yaml \
|
||||||
|
&& sed -i 's/#type: otg/type: otg/g' /etc/kvmd/override.yaml \
|
||||||
|
&& chown kvmd -R /var/lib/kvmd/msd/ \
|
||||||
&& sed -i 's/localhost.localdomain/onecloud/g' /etc/kvmd/meta.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 enable kvmd kvmd-otg kvmd-nginx kvmd-vnc kvmd-ipmi kvmd-webterm kvmd-janus \
|
||||||
&& systemctl disable nginx janus \
|
&& systemctl disable nginx janus \
|
||||||
|
|||||||
@ -19,7 +19,7 @@ if [ ! -f /etc/kvmd/.init_flag ]; then
|
|||||||
&& /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}"
|
||||||
|
|
||||||
if [ "$NOSSL" = 1 ]; then
|
if [ "$NOSSL" == 1 ]; then
|
||||||
echo -e "${GREEN}One-KVM self-signed SSL is disabled.${NC}" \
|
echo -e "${GREEN}One-KVM self-signed 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 \
|
&& python -m kvmd.apps.ngxmkconf /etc/kvmd/nginx/nginx.conf.mako /etc/kvmd/nginx/nginx.conf -o nginx/https/enabled=false \
|
||||||
|| echo -e "${RED}One-KVM nginx config init failed.${NC}"
|
|| echo -e "${RED}One-KVM nginx config init failed.${NC}"
|
||||||
@ -28,7 +28,6 @@ if [ ! -f /etc/kvmd/.init_flag ]; then
|
|||||||
|| echo -e "${RED}One-KVM nginx config init failed.${NC}"
|
|| echo -e "${RED}One-KVM nginx config init failed.${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ "$NOAUTH" == "1" ]; then
|
if [ "$NOAUTH" == "1" ]; then
|
||||||
sed -i "s/enabled: true/enabled: false/g" /etc/kvmd/override.yaml \
|
sed -i "s/enabled: true/enabled: false/g" /etc/kvmd/override.yaml \
|
||||||
&& echo -e "${GREEN}One-KVM auth is disabled.${NC}"
|
&& echo -e "${GREEN}One-KVM auth is disabled.${NC}"
|
||||||
@ -121,6 +120,12 @@ EOF
|
|||||||
echo -e "${YELLOW} USERNAME and PASSWORD environment variables is not set, using defalut(admin/admin).${NC}"
|
echo -e "${YELLOW} USERNAME and PASSWORD environment variables is not set, using defalut(admin/admin).${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$NOMSD" == 1 ]; then
|
||||||
|
echo -e "${GREEN}One-KVM MSD is disabled.${NC}"
|
||||||
|
else
|
||||||
|
sed -i "s/#type: otg/type: otg/g" /etc/kvmd/override.yaml
|
||||||
|
fi
|
||||||
|
|
||||||
touch /etc/kvmd/.init_flag
|
touch /etc/kvmd/.init_flag
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@ kvmd:
|
|||||||
type: gpio
|
type: gpio
|
||||||
|
|
||||||
msd:
|
msd:
|
||||||
type: otg
|
type: disabled
|
||||||
|
|
||||||
streamer:
|
streamer:
|
||||||
quality: 0
|
quality: 0
|
||||||
|
|||||||
@ -21,7 +21,8 @@ kvmd:
|
|||||||
device: /dev/kvmd-hid-mouse-alt
|
device: /dev/kvmd-hid-mouse-alt
|
||||||
|
|
||||||
msd:
|
msd:
|
||||||
type: disabled
|
#type: otg
|
||||||
|
remount_cmd: /bin/true
|
||||||
|
|
||||||
ocr:
|
ocr:
|
||||||
langs:
|
langs:
|
||||||
|
|||||||
@ -52,8 +52,12 @@ def _mkdir(path: str) -> None:
|
|||||||
os.mkdir(path)
|
os.mkdir(path)
|
||||||
|
|
||||||
|
|
||||||
def _chown(path: str, user: str) -> None:
|
def _chown(path: str, user: str, optional: bool=False) -> None:
|
||||||
get_logger().info("CHOWN --- %s - %s", user, path)
|
logger = get_logger()
|
||||||
|
if optional and not os.access(path, os.F_OK):
|
||||||
|
logger.info("CHOWN --- %s - [SKIPPED] %s", user, path)
|
||||||
|
return
|
||||||
|
logger.info("CHOWN --- %s - %s", user, path)
|
||||||
shutil.chown(path, user)
|
shutil.chown(path, user)
|
||||||
|
|
||||||
|
|
||||||
@ -187,7 +191,7 @@ class _GadgetConfig:
|
|||||||
_chown(join(func_path, "lun.0/cdrom"), user)
|
_chown(join(func_path, "lun.0/cdrom"), user)
|
||||||
_chown(join(func_path, "lun.0/ro"), user)
|
_chown(join(func_path, "lun.0/ro"), user)
|
||||||
_chown(join(func_path, "lun.0/file"), user)
|
_chown(join(func_path, "lun.0/file"), user)
|
||||||
_chown(join(func_path, "lun.0/forced_eject"), user)
|
_chown(join(func_path, "lun.0/forced_eject"), user, optional=True)
|
||||||
if start:
|
if start:
|
||||||
_symlink(func_path, join(self.__profile_path, func))
|
_symlink(func_path, join(self.__profile_path, func))
|
||||||
name = ("Mass Storage Drive" if self.__msd_instance == 0 else f"Extra Drive #{self.__msd_instance}")
|
name = ("Mass Storage Drive" if self.__msd_instance == 0 else f"Extra Drive #{self.__msd_instance}")
|
||||||
|
|||||||
@ -34,6 +34,9 @@ from .. import init
|
|||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
|
def _has_param(gadget: str, instance: int, param: str) -> bool:
|
||||||
|
return os.access(_get_param_path(gadget, instance, param), os.F_OK)
|
||||||
|
|
||||||
def _get_param_path(gadget: str, instance: int, param: str) -> str:
|
def _get_param_path(gadget: str, instance: int, param: str) -> str:
|
||||||
return usb.get_gadget_path(gadget, usb.G_FUNCTIONS, f"mass_storage.usb{instance}/lun.0", param)
|
return usb.get_gadget_path(gadget, usb.G_FUNCTIONS, f"mass_storage.usb{instance}/lun.0", param)
|
||||||
|
|
||||||
@ -83,12 +86,15 @@ def main(argv: (list[str] | None)=None) -> None:
|
|||||||
if config.kvmd.msd.type != "otg":
|
if config.kvmd.msd.type != "otg":
|
||||||
raise SystemExit(f"Error: KVMD MSD not using 'otg'"
|
raise SystemExit(f"Error: KVMD MSD not using 'otg'"
|
||||||
f" (now configured {config.kvmd.msd.type!r})")
|
f" (now configured {config.kvmd.msd.type!r})")
|
||||||
|
has_param = (lambda param: _has_param(config.otg.gadget, options.instance, param))
|
||||||
set_param = (lambda param, value: _set_param(config.otg.gadget, options.instance, param, value))
|
set_param = (lambda param, value: _set_param(config.otg.gadget, options.instance, param, value))
|
||||||
get_param = (lambda param: _get_param(config.otg.gadget, options.instance, param))
|
get_param = (lambda param: _get_param(config.otg.gadget, options.instance, param))
|
||||||
|
|
||||||
if options.eject:
|
if options.eject:
|
||||||
set_param("forced_eject", "")
|
if has_param("forced_eject"):
|
||||||
|
set_param("forced_eject", "")
|
||||||
|
else:
|
||||||
|
set_param("file", "")
|
||||||
|
|
||||||
if options.set_cdrom is not None:
|
if options.set_cdrom is not None:
|
||||||
set_param("cdrom", str(int(options.set_cdrom)))
|
set_param("cdrom", str(int(options.set_cdrom)))
|
||||||
|
|||||||
@ -48,7 +48,11 @@ def find_pst() -> Partition:
|
|||||||
def _find_single(part_type: str) -> Partition:
|
def _find_single(part_type: str) -> Partition:
|
||||||
parts = _find_partitions(part_type, True)
|
parts = _find_partitions(part_type, True)
|
||||||
if len(parts) == 0:
|
if len(parts) == 0:
|
||||||
raise RuntimeError(f"Can't find {part_type!r} mountpoint")
|
if os.path.exists('/var/lib/kvmd/msd'):
|
||||||
|
#set default value
|
||||||
|
parts = [Partition(mount_path='/var/lib/kvmd/msd', root_path='/var/lib/kvmd/msd', user='kvmd')]
|
||||||
|
else:
|
||||||
|
raise RuntimeError(f"Can't find {part_type!r} mountpoint")
|
||||||
return parts[0]
|
return parts[0]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -53,7 +53,7 @@ class Drive:
|
|||||||
# =====
|
# =====
|
||||||
|
|
||||||
def set_image_path(self, path: str) -> None:
|
def set_image_path(self, path: str) -> None:
|
||||||
if path:
|
if path or not self.__has_param("forced_eject"):
|
||||||
self.__set_param("file", path)
|
self.__set_param("file", path)
|
||||||
else:
|
else:
|
||||||
self.__set_param("forced_eject", "")
|
self.__set_param("forced_eject", "")
|
||||||
@ -75,6 +75,8 @@ class Drive:
|
|||||||
return (not int(self.__get_param("ro")))
|
return (not int(self.__get_param("ro")))
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
|
def __has_param(self, param: str) -> bool:
|
||||||
|
return os.access(os.path.join(self.__lun_path, param), os.F_OK)
|
||||||
|
|
||||||
def __get_param(self, param: str) -> str:
|
def __get_param(self, param: str) -> str:
|
||||||
with open(os.path.join(self.__lun_path, param)) as file:
|
with open(os.path.join(self.__lun_path, param)) as file:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user