使用orangePi-zero制作PiKVM服务器
0. 本文参考链接
https://www.bilibili.com/opus/750451200508297219
https://github.com/pikvm/pikvm/blob/master/docs/wol.md
https://toolshu.com/docker-mirror
1. 制作PiKVM
1.1 物料和硬件
物品名称 | 作用 |
---|---|
orangePi-zero | PiKVM服务器本体。 |
Micro SD卡 | 作为PiKVM服务器的硬盘。(>=8G) |
采集卡 | 被控机的HDMI输出作为输入数据(HDMI输入),同时转发给显示器(HDMI输出)和PiKVM服务器(Micro-USB输出)。 |
网线 | 将PiKVM服务器接入网络。 |
USB-typeA to Micro-USB数据线 | PiKVM模拟键鼠信号,通过USB发送给被控机。 |
- orangePi-zero只有一个
USB-typeA
和一个Micro-USB
接口(它同时也是电源输入接口)。 - 采集卡的
Micro-USB
连接至orangePi-zero的USB接口传输数据,同时它也给采集卡供电。 - orangePi-zero需要使用一个USB接口连接至被控机,发送模拟键鼠信号。
考虑到接口数量限制,系统的供电方案分为以下三种:
被控机是否支持关机USB供电 | 有无USB-HUB | 供电方案 |
---|---|---|
√ | - | 采集卡的Micro-USB 连接至orangePi-zero的USB-typeA ,orangePi-zero的Micro-USB 连接至被控机的USB-typeA |
× | √ | orangePi-zero的Micro-USB 连接至5V电源,orangePi-zero的USB-typeA 连接至USB-HUB,USB-HUB连接至采集卡的Micro-USB 和被控机的USB-typeA |
× | × | 采集卡的Micro-USB 连接至orangePi-zero的USB-typeA ,使用特制的线缆将orangePi-zero的Micro-USB 连接至被控机的USB-typeA ,同时连接至5V电源 |
方案三和它使用的特质线缆制作方法参考这篇B站文章。
1.2 下载和烧录镜像
在这里下载名称为"v2-hdmiusb-generic-arm-orangepi-zero.img.bz2"的镜像文件,将镜像文件烧录到Micro SD卡中,然后插入到orangePi-zero中,上电开机,等几秒钟后主板上的绿灯亮起,就可以了。
2. 配置用户
在路由器后台找到orangePi-zero的IP地址,直接在浏览器中访问,使用默认用户名admin
和默认密码admin
登录。
登陆后,显示了这个页面,选择中间的"Terminal"进入终端。
_____ _ _ ____ ____ __
| __ (_) | |/ /\ \ / / \/ |
| |__) | __ | ' / \ \ / /| \ / |
| ___/ | (__) | < \ \/ / | |\/| |
| | | | | . \ \ / | | | |
|_| |_| |_|\_\ \/ |_| |_|
Welcome to Pi-KVM - Open Source IP-KVM based on Raspberry Pi
____________________________________________________________________________
The root filesystem of Pi-KVM is mounted in read-only mode by default.
Use command "rw" to remount it in the RW-mode and "ro" to switch it back.
To prevent kernel messages from printing to the terminal use "dmesg -n 1".
To change KVM password use command "kvmd-htpasswd set admin".
Useful links:
* https://pikvm.org
* https://wiki.archlinux.org/index.php/Network_configuration
首先修改root用户密码,默认密码是root
。执行下面的命令。
# login root
su
# enter read-write mode
rw
# edit root password
passwd
然后删除掉web管理界面的默认用户admin
,创建你自己的用户,并设置密码。
# delete user "admin"
kvmd-htpasswd del admin
# create your user for web-control
kvmd-htpasswd set YourUserName
# restart service
systemctl restart kvmd kvmd-nginx
3. 配置WOL (Wake On Line)
3.1 被控机
以Windows被控机为例,在设备管理器中找到网络适配器,找到网卡设备,右键选择属性。
在“高级”选项中,将“关机 网络唤醒”和“魔术封包唤醒”的值修改为“开启”。
在“电源管理”选项中,勾选“允许此设备唤醒计算机”。
3.2 PiKVM
打开文件/etc/kvmd/override.yaml
,使用以下内容覆盖该文件。
kvmd:
wol:
mac: 38:60:77:cc:ed:b7
其中mac
填写你的被控机对应网卡的MAC地址,注意,这里使用的是官方文档给出的单被控机用法,只支持一台被控机WOL(由于系统镜像的原因,ugpio库缺少wol插件,所以目前无法通过官方给出的gpio的方式WOL多台被控机,或许可以使用exec脚本而非gpio的方式实现,有兴趣可以自行研究)。
修改完成后,重启kvmd
和kvmd-nginx
服务。
systemctl restart kvmd kvmd-nginx
在浏览器输入IP重新进入PiKVM控制页面,选择KVM,把右上角的“System”标签展开后可以看到新增了一项“Wake on Line Server”。
点击后,PiKVM就会广播发送魔术包,默认端口号是9,但只有MAC地址与配置文件中一致的设备(被控机)才会执行WOL,其他设备会把包丢弃。
现在可以看到被控机完成了WOL,并且视频输出正常。
4. 在docker部署zerotier(可选)
4.1 安装docker
直接使用可执行文件二进制包,在docker官网找到armhf版本(我们使用的PiKVM镜像OS运行在armv7l架构,32位arm),下载下来。将解压后的可执行文件复制到/usr/local/bin
目录中即可使用。
4.2 更换国内可访问的docker镜像源
在配置文件/etc/docker/daemon.json
写入以下内容
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.ixdev.cn",
"http://docker.m.daocloud.io",
"https://dockerproxy.net",
"https://xdark.top"
]
}
重启docker,因为我们是直接使用docker二进制文件,所以只需要将守护进程dockerd
杀死,重新执行。
# kill
ps | grep dockerd | awk '{print $1;}' | xargs kill -9
# restart
dockerd &
4.3 部署
为了方便维护,建议在宿主机创建一个配置文件目录(例如/path/to/config
),映射到容器中。执行下面的命令创建并运行zerotier容器。
docker run -d \
--name 容器名称 \
--restart=always \
--device=/dev/net/tun \
--cap-add=NET_ADMIN \
--network=host \
-v /path/to/config:/var/lib/zerotier-one \
zerotier/zerotier:latest \
你的网络hash
其中,--cap-add=NET_ADMIN
给容器控制网络的权限,--network=host
让容器使用宿主机的网络命名空间,最后将容器的CMD设置为你的网络hash,这样容器一启动就自动加入网络。
创建好容器后,进入容器的bash,使用下面的命令追踪你自己的私有moon节点。
# enter container
docker exec -it 容器名称或hash bash
# orbit
zerotier-cli orbit 你的moon节点hash 你的moon节点hash