Nas服务器没有IPMI也没有intel的vPro-AMT功能,有时候NAS出问题或者需要重新安装系统什么的非常麻烦。幸运的时有开源的PiKVm项目,大概原理时使用HDMI capture和外置一个KVM来接收HDMI capture的流媒体再加上一个USB 来实现远程机器画面、声音、鼠标键盘的捕捉(个人理解,可能有误)
OrangePiZero是一个廉价的类树莓派设备,咸鱼50RMB左右。
https://www.bilibili.com/opus/750451200508297219 进行配置可以在orangepi zero上使用pikvm,但是我在使用时有些缺点:
每次启动系统后,第一次使用必须在pikvm的webui上 reset stream重置流,才能看到画面。
有时候不知什么缘故启动失败,这在偶尔使用一次时非常恼火
基于以上原因决定自行构建PiKVM
准备工作
依据之前的https://www.bilibili.com/opus/750451200508297219,需要准备:
一个 Orangepi Zero。
一个 HDMI to USB 的采集卡。
一个16GB 的 TF 卡 及 读卡器。
【可选】一根网线。(仅需要百兆,四芯线即可) (可以使用WIFI,orangepi-zero自带wifi)
两根 USB-A to micro-USB 数据线。 (或一根 USB-A to micro-USB 或一根 其他 to USB-A)*若主板支持USB关机供电可以直接使用一根USB-A to micro-USB 数据线
一根电烙铁,部分松香及焊锡(如果有的话)
如果被控机没有HDMI接口请自备一个转HDMI的转换器
【可选】USB TTL 用于方便的设置系统,也可通过网络
选择
PiKVM镜像 选择使用 https://github.com/srepac/kvmd-armbian
系统内核 选择使用Armbian自行构建内核。也可以使用orangepi-zero官方的内核(版本有些老旧,安装PiKVM时需要升级Python)
步骤
编译内核
#使用debian12\Ubuntu22.04+系统进行编译,
#1. 安装编译工具和依赖
sudo apt update
sudo apt install -y git build-essential gcc make bc bison flex libssl-dev \
device-tree-compiler libncurses-dev libc6-i386 lib32stdc++6 \
python3-dev python3-distutils u-boot-tools debootstrap debian-archive-keyring \
qemu-user-static rsync
#2. 设置代理
export http_proxy=http://192.168.28.97:10809
export https_proxy=http://192.168.28.97:10809
git config --global http.proxy http://192.168.28.97:10809
git config --global https.proxy http://192.168.28.97:10809
#3.下载源码
git clone https://github.com/armbian/build
cd build
git checkout v24.5.1 # 替换为最新稳定版本号
#4.设置编译分区,添加lib.config文件这样会生成uboot分区、armbian分区和一个空闲分区
root@debian-pass-vm:/home/armbian-build/build# vim userpatches/lib.config
IMAGE_MAX_SIZE=8192 # 8 GB
# U-Boot 分区
BOOTFS_TYPE="fat"
BOOTFS_START=1
BOOTFS_END=262144 # 128 MB
# Armbian 系统分区
ROOTFS_TYPE="ext4"
ROOTFS_START=262145
ROOTFS_END=8650752 # 4 GB
# 存储分区
STORAGE_TYPE="ext4"
STORAGE_START=8650753
STORAGE_END=-1 # 占用剩余所有空间
#5. 进行编译
su admin #不能使用root用户进行编译
PREFER_DOCKER=no ./compile.sh build BOARD=orangepizero BRANCH=current BUILD_DESKTOP=no BUILD_MINIMAL=yes KERNEL_CONFIGURE=yes RELEASE=bookworm
或者:
./compile.sh #会弹出选择以上的板子和内核版本等,上面的命令会跳过这些选择步骤,加快流程
#6.设置内核配置:开启OTG(必须)
在弹出的menuconfig或提前修改.config,检查一下项目是否启用 【*为编译到内核中 M为模块。 空格进行切换】
Device Drivers
→ USB support
→ DesignWare USB2 DRD Core Support
→ [*] Enable DWC2 OTG mode (DRD) # 必须启用
→ (otg) DR mode (Dual Role mode) # 选择 "otg"
→ [*] Support for external VBUS detection # 如果使用外部供电检测
→ [*] Support for HNP and SRP protocols # 根据需求启用(OTG协议协商)
→ [*] Enable debugging output # 调试用(可选)
Device Drivers
→ USB support
→ USB Gadget Support
→ <*/M> USB Gadget Driver # 启用基础框架
→ [*] USB functions configurable through configfs # 必须启用(动态配置Gadget)
→ <*/M> Mass Storage Gadget # U盘模式
→ <*/M> Ethernet Gadget (CDC ECM/EEM) # USB网卡模式
→ <*/M> Serial Gadget (CDC ACM) # 串口模式
→ <*/M> HID Gadget # 键盘/鼠标模式
→ <*/M> FunctionFS Gadget # 用户自定义模式(高级)
Device Drivers
→ USB support
→ [*] USB Physical Layer drivers
→ <*/M> NOP USB Transceiver Driver # 通用PHY驱动(全志芯片可能需要)
Device Drivers
→ USB support
→ <*> Support for Host-side USB # 必须启用(即使作为设备也需要)
→ <*> USB Modem (CDC ACM) support # 串口调试可能需要
→ <*> USB Serial Converter support # 其他USB串口设备支持
General setup
→ [*] Configure standard kernel features (expert users)
→ [*] Enable loadable module support # 确保模块加载支持已启用
Kernel Features
→ [*] Use the ARM EABI to compile the kernel # ARM架构必须启用
Device Drivers
→ USB support
→ USB Gadget Support
→ <*> Dummy HCD (HCD for testing Gadget) # 测试用(可选)
#5.写入sd卡
cd output/images/Armbian_*.img
sudo dd if=Armbian_*.img of=/dev/sdX bs=4M status=progress注意: 经过测试这样生成的镜像始终无法开启OTG,经过折腾发现时DTB的问题,从官方的镜像中提取:sun8i-h2-plus-orangepi-zero.dtb替换/boot/dtb中的。
设置系统
替换源 【可选】
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo nano /etc/apt/sources.list # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware # deb-src https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware # deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware # deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware deb https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware # deb-src https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware sudo apt update && sudo apt upgrade -y/etc/apt/sources.list.d/目录下还有armbian的源,应该时从github.com访问如不能访问github建议挂梯子
设置WIFI 【可选】
如果不使用网线,或者不方便可以使用WIFI来连接OrangePi , armbian自带wap_supplicant没有nmcli# sudo nano /etc/wpa_supplicant/wpa_supplicant.conf ctrl_interface=/var/run/wpa_supplicant update_config=1 # 连接开放网络(无密码) network={ ssid="你的WiFi名称" key_mgmt=NONE } # 连接 WPA/WPA2-PSK 加密网络 network={ ssid="你的WiFi名称" psk="你的WiFi密码" key_mgmt=WPA-PSK } # 连接隐藏网络 network={ ssid="你的WiFi名称" psk="你的WiFi密码" scan_ssid=1 # 启用扫描隐藏网络 } sudo nano /etc/network/interfaces # 或手动指定静态 IP auto wlan0 iface wlan0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf systemctl restart NetworkManager设置有线固定IP
说明:方便安装好后pikvm使用有线#确认有线网络接口名称 ip link show | grep "eth" # 通常为 eth0、enp1s0 等 #备份原网络配置文件 sudo cp /etc/network/interfaces /etc/network/interfaces.bak #编辑网络接口配置 sudo nano /etc/network/interfaces # 默认环回接口 auto lo iface lo inet loopback # 配置 eth0 为静态 IP auto eth0 iface eth0 inet static address 192.168.28.180 # 你的固定 IP netmask 255.255.255.0 # 子网掩码 gateway 192.168.28.1 # 网关(路由器 IP) dns-nameservers 192.168.28.1 223.5.5.5 # DNS 服务器(可指定多个) #修改dns sudo nano /etc/resolv.conf nameserver 192.168.28.1 nameserver 223.5.5.5
安装PiKVM
按照https://github.com/srepac/kvmd-armbian 步骤安装,注意:
github无法访问时设置代理:
git config --global http.proxy http://192.168.28.97:10809 git config --global https.proxy http://192.168.28.97:10809
设置PiKVM
设置web登录密码
#默认账号密码:admin admin kvmd-htpasswd set adminmsd虚拟光驱
说明:PiKVM默认没有开启这个功能。需要手动开启:#设置pikvm配置文件,注释这两行 nano /etc/kvmd/override.yaml # msd: # type: disabled #设置挂载分区,光驱镜像放在这个分区 nano /etc/fstab /dev/mmcblk0p3 /var/lib/kvmd/msd exfat auto,nofail,rw,X-kvmd.otgmsd-root=/var/lib/kvmd/msd,umask=0000 0 0 #ex格式使用这个 #/dev/sda1 /var/lib/kvmd/msd ext4 nodev,nosuid,noexec,ro,errors=remount-ro,data=journal,X-kvmd.otgmsd-root=/var/lib/kvmd/msd,X-kvmd.otgmsd-user=kvmd 0 0 #重启服务 systemctl restart kvmd kvmd-otg #查看日志是否报错 journactl -u kvmd-otg -f
备注:https://docs.pikvm.org/msd/ 官方说明。 如果是exfat,fat32等必须用这个。 必须添加,X-kvmd.otgmsd-root=/var/lib/kvmd/msd 不然会报错,目前官方文档没有描述当当前版本必须添加这个
注意这里exfat需要根据挂载的/dev/sda3分区类型修改,建议exfat。【因为ext在win下无法读写,fat32不支持4GB以上文件】
如果又报错,需要解决。如果正常打开pikvm web页面会出现一个drive
制作image镜像
参考:制作image镜像
评论区