PI-KVM让普通家用PC也有能够像数据中心机房里面的IP-KVM一样的功能。
详细信息参考官网:PiKVM HandbookOpen and cheap DIY IP-KVM on Raspberry Pihttps://docs.pikvm.org/
nullOpen and inexpensive DIY IP-KVM based on Raspberry Pi - GitHub - pikvm/pikvm: Open and inexpensive DIY IP-KVM based on Raspberry Pihttps://github.com/pikvm/pikvm除了买作者提供的套件外,也可以自己根据原理用树莓派DIY,可惜现在的树莓派已经炒成理财产品了,但各种其他派非常便宜,尤其是基于全志和rockchip的板子,有机会做做简单的移植。先学习下官网的系统资料。另外,查阅资料的时候发现B站也发文章有移植的,不过基本上还是跟着作者的系统做了重新打包,不具备通用性。
Pikvm系统
Flashing the OS image - PiKVM HandbookOpen and cheap DIY IP-KVM on Raspberry Pihttps://docs.pikvm.org/flashing_os/官网这里提供的下载其实有限,如果自己DIY的没有预编译好的系统,需要自己编译,作者非常良心
Building PiKVM OS - PiKVM HandbookOpen and cheap DIY IP-KVM on Raspberry Pihttps://docs.pikvm.org/building_os/基本框架是机遇docker的环境来从头编译一个系统,不过这不是要编译所有的二进制包,而是只用bootstrap环境上打包基于archlinux的系统就行,都是二进制的基本不用编译。
打包系统的2个仓库
GitHub - pikvm/os: OS for PiKVM based on Arch Linux ARMOS for PiKVM based on Arch Linux ARM. Contribute to pikvm/os development by creating an account on GitHub.https://github.com/pikvm/os这个里面包含了pikvm相关的配置和docker打包文件。通过查看仓库的Makefile文件,主要打包的部分如下:
os: $(_BUILDER_DIR)
rm -rf $(_BUILDER_DIR)/stages/{pikvm,pikvm-otg-console}
cp -a pikvm pikvm-otg-console $(_BUILDER_DIR)/stages
cp -a disk-$(if $(findstring v2,$(PLATFORM))$(findstring v3,$(PLATFORM))$(findstring v4,$(PLATFORM)),v2,v0).conf $(_BUILDER_DIR)/disk.conf
$(MAKE) -C $(_BUILDER_DIR) os \
NC=$(NC) \
BUILD_OPTS=' $(BUILD_OPTS) \
--build-arg PLATFORM=$(PLATFORM) \
--build-arg VERSIONS=$(call fv,ustreamer)/$(call fv,kvmd)/$(call fv,kvmd-webterm)/$(call fv,kvmd-oled)/$(call fv,kvmd-fan) \
--build-arg OLED=$(call optbool,$(OLED)) \
--build-arg FAN=$(call optbool,$(FAN)) \
--build-arg ROOT_PASSWD=$(ROOT_PASSWD) \
--build-arg WEBUI_ADMIN_PASSWD=$(WEBUI_ADMIN_PASSWD) \
--build-arg IPMI_ADMIN_PASSWD=$(IPMI_ADMIN_PASSWD) \
' \
PROJECT=pikvm-os-$(PLATFORM)$(SUFFIX) \
BOARD=$(BOARD) \
STAGES='$(STAGES)' \
HOSTNAME=$(HOSTNAME) \
LOCALE=$(LOCALE) \
TIMEZONE=$(TIMEZONE) \
REPO_URL=$(REPO_URL)
$(_BUILDER_DIR):
mkdir -p `dirname $(_BUILDER_DIR)`
git clone --depth=1 https://github.com/mdevaev/pi-builder $(_BUILDER_DIR)
可以发现他其实是先下载了
GitHub - pikvm/pi-builder: Extensible tool to build Arch Linux ARM for Raspberry Pi on x86_64 host using DockerExtensible tool to build Arch Linux ARM for Raspberry Pi on x86_64 host using Docker - GitHub - pikvm/pi-builder: Extensible tool to build Arch Linux ARM for Raspberry Pi on x86_64 host using Dockerhttps://github.com/mdevaev/pi-builder
这个仓库,然后把github.com/pikvm/os里面的配置拷贝到这个仓库,最终其实是Make带了一些配置的参数,make的这个仓库的Makefile
GitHub - pikvm/pi-builder: Extensible tool to build Arch Linux ARM for Raspberry Pi on x86_64 host using DockerExtensible tool to build Arch Linux ARM for Raspberry Pi on x86_64 host using Docker - GitHub - pikvm/pi-builder: Extensible tool to build Arch Linux ARM for Raspberry Pi on x86_64 host using Dockerhttps://github.com/pikvm/pi-builder这个仓库也是Pikvm作者的仓库,用来打包基于archlinx的树莓派系统,主要的配置在stages目录(前面那个仓库的配置也是靠拷贝到stages里的)。看仓库地址和readme,作者是位毛子哥。
软件包
通过查看dockerfile.part文件,可以发现,除了基础操作系统以外,整个PIKVM主要靠
- kvmd-platform-$PLATFORM-$BOARD
- kvmd-webterm
- kvmd-oled
- kvmd-fan
这几个软件包运行,其余都是系统内自带的包。作者编译好的软件包仓库地址如下:
Index of /repos/arch/https://files.pikvm.org/repos/arch/打包的PKGBUILD文件在下面这个仓库
GitHub - pikvm/packages: PiKVM PackagesPiKVM Packages. Contribute to pikvm/packages development by creating an account on GitHub.https://github.com/pikvm/packages
其中最主要的就是kvmd-platform-$PLATFORM-$BOARD 这个包。
GitHub - pikvm/kvmd: The main PiKVM daemonThe main PiKVM daemon. Contribute to pikvm/kvmd development by creating an account on GitHub.https://github.com/pikvm/kvmd分析这个包的打包过程,可以发现,他主要依赖
- ustreamer
- janus-gateway-pikvm 其实就是janus-gateway特定版本加了个js文件
这两个包,其中ustreamer也是作者写的,是一个MJPEG-HTTP流服务器,然后janus是一个WEBRTC服务器。要正常运行,还得将ustreamer编译的时候加上janus插件参数,编译后拷贝so到janus的插件目录。
janus ustreamer的启动以及配置都在kvmd这个包内,janus ustreamer两个软件包只需要编译安装即可。
主要配置文件在/etc/kvmd/main.yaml,目前还没看源码以及找到参考的参数说明,不过部分参数可以参考官网的文档修改。其他的比如内核模块,系统服务,内核参数,sudo配置,都在kvmd仓库的configs/os下。
对非archlinux运行kvmd,需要三步:
- 直接修改kvmd仓库的PKGBUILD文件然后运行,基本上都是shell,这个部分主要是打包。
- kvmd仓库内的kvmd.install文件,这个主要是安装脚本。
- github.com/pikvm/os这个仓库pikvm内的Dockerfile,里面主要是安装后的服务开启等。
搞完这三步后,就可以用web浏览器访问IPKVM了。同时journalctl -f 查看kvmd相关的后台日志,大部分报错都是缺包导致,可以按照PKGBUILD Dockerfile内的软件包名进行补充。
kvmd的几个主要功能:
- 视频传输,这个是主要功能,靠ustreamer和janus完成,kvmd提供了web前端页面访问入口以及nginx配置文件。
- 鼠标键盘模拟,默认是软件合成的鼠标键盘,通过板子的USB OTG功能,虚拟出鼠标键盘,让远端服务器识别到鼠标键盘,对某些情况下如连了硬件kvm的情况下 ,可能需要atmega32u4这种芯片来提供鼠标键盘。(目前还没测试成功)。
- 虚拟磁盘模拟,同样是usb otg功能,提供虚拟光驱和flash 。按照默认配置的话,注意tf卡分区的时候单独分个区mount,当然也可以nfs或者bind mount 本地某个目录(目前还没测试成功)。
- GPIO,控制继电器对设备做reset和开关机的了。
- oled fan webterm,还没测试过。
目前看,如果PIKVM 使用HDMI转USB结合HDMI以及USB切换芯片,可以DIY出简单的IP-KVM来,而不止控制单台机器。
未完待续~~~