0. 本文参考链接

https://www.bilibili.com/opus/750451200508297219

https://www.bilibili.com/video/BV1h84y1o7Zp/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click

https://docs.pikvm.org/wol/

https://docs.pikvm.org/faq/

https://github.com/pikvm/pikvm/blob/master/docs/wol.md

https://toolshu.com/docker-mirror


1. 制作PiKVM

1.1 物料和硬件

物品名称作用
orangePi-zeroPiKVM服务器本体。
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登录。

PiKVM_web.png

登陆后,显示了这个页面,选择中间的"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被控机为例,在设备管理器中找到网络适配器,找到网卡设备,右键选择属性。

设备管理器.png

在“高级”选项中,将“关机 网络唤醒”和“魔术封包唤醒”的值修改为“开启”。

高级.png

在“电源管理”选项中,勾选“允许此设备唤醒计算机”。

电源管理.png

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的方式实现,有兴趣可以自行研究)。

修改完成后,重启kvmdkvmd-nginx服务。

systemctl restart kvmd kvmd-nginx

在浏览器输入IP重新进入PiKVM控制页面,选择KVM,把右上角的“System”标签展开后可以看到新增了一项“Wake on Line Server”。

WOL.png

点击后,PiKVM就会广播发送魔术包,默认端口号是9,但只有MAC地址与配置文件中一致的设备(被控机)才会执行WOL,其他设备会把包丢弃。

WOL2.png

现在可以看到被控机完成了WOL,并且视频输出正常。

开机.png

开机2.png


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

标签: orangePi, PiKVM, docker, WOL

添加新评论