因为服务器扔老家了,需要使用IP-KVM设备来管理服务器。

由于缺东西,只好写一半扔在一边了等快递中。。。。

而市面上的现成的IP-KVM设备是真的贵,而面向消费级市场的控控也得600元,并且还得用它的APP,并不好用。
国外已经有用树莓派DIY IPMI/IP-KVM的方案了,请注意只有树莓派4B/树莓派ZERO(W)的USB接口支持OTG模式。

https://github.com/Fmstrat/diy-ipmi
https://github.com/pikvm/pikvm
https://github.com/mtlynch/tinypilot
https://github.com/catid/kvm

我准备按照:https://github.com/pikvm/pikvm来部署一个,因为YouTube有人上传了一个详细的视频教程
而如果我买了一个树莓派4B,我就用https://github.com/mtlynch/tinypilot,因为他对HDMI-USB采集卡这个做了专门的优化
而我是自己用,也不商业化,因此我就拿树莓派做一个简易的IP-KVM即可。
之前原准备是自己做个项目的,突然发现了别人造的轮子,那当然要拿来用啊。
之所以需要用树莓派4B或者树莓派ZERO(W),是因为只有树莓派4B与树莓派ZERO(W)的USB才有OTG模式,也就是有从属模式。
选择树莓派4B,是因为只有4B有足够多的接口来供采集卡使用,树莓派zero模拟接口后就不能用USB采集卡了,别人已经测试过。点击查看

准备硬件

树莓派zerow(裸板)闲鱼50元

如果你有两个树莓派zero,可以用这个方法,只不过感觉多此一举吧
HDMI转CSI-2 135元顺丰包邮

内存卡 16G 之前存货算20元。

树莓派ZERO W USB转接板 + 亚克力外壳 18元

合计:223元

如果你用树莓派4B可以用这个:
HDMI-USB采集卡 30元

HDMI-USB采集卡是最近突然出现的Macrosilicon 2109芯片方案的采集卡,这个芯片在Windows、linux上免驱,而且1688上批发20元包邮,超级划算。

采集卡照片

准备镜像

虽然作者提供了下载站:https://pikvm.org/download.html有已编译好的镜像,但这个镜像语言是英文的,因此不太适合我用,我决定自己编译镜像。
以下步骤使用的是树莓派zerow
教程链接:https://github.com/pikvm/pikvm/blob/master/pages/building_os.md
视频链接:https://youtu.be/xCL5AS0t5Is

准备

必须准备一个最新版的archlinux系统,需要:

kernel >= 5.8
glibc >= 2.33
docker >= 19.03.13

目前只能用arch了,Ubuntu/centos编译会报错,而且超难解决

我使用的安装教程是:https://www.linuxprobe.com/vm-install-archlinux.html
汉化教程是:

https://blog.csdn.net/holdsky/article/details/8515143
https://wiki.archlinux.org/index.php/Locale_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

我是第一次用,就不写教程了。
有以下几个要注意的地方:
1.无法输入大写符号,你可以使用TAB键提示后,按上下左右键选择提示的内容,然后按回车即可。或者干脆输入全命令。
2.教程中有个命令错了,少了一个“-”,应该是: pacman -S --noconfirm
3.安装桌面时自动安装了输入法,不用再安装输入法了。
4.建议执行locale-gen后,在桌面设置处修改语言。
5.我没安装VMtools,这个我安装失败了。

安装环境

安装docker

pacman -S  docker 

让docker开机自启:

systemctl start docker
systemctl enable docker

安装其他软件

pacman -S git make curl binutils sudo nano wget

github加速

要么用我的GitHub加速脚本,要么挂代理吧,后面要从GITHUB下载一堆东西。

获得编译文件

git clone https://github.com/pikvm/os
cd os

编译

准备编译

os文件夹内创建文件config.mk,输入以下内容:

BOARD = zerow
PLATFORM = v2-hdmi
HOSTNAME = pikvm
LOCALE = zh_CN
TIMEZONE =  Asia/Shanghai
ROOT_PASSWD = 12345678
WEBUI_ADMIN_PASSWD = 12345678
IPMI_ADMIN_PASSWD = 12345678
CARD = /dev/mmcblk0

WIFI_ESSID = redmi-cold
WIFI_PASSWD = 12345678

记得修改密码

config.mk解释

BOARD = zerow

选择使用的主板,BOARD=rpi4 是 Raspberry Pi 4 | BOARD=zerow, BOARD=rpi2,BOARD=rpi3 分别代指其他主板.

PLATFORM = v2-hdmi

PLATFORM=v2-hdmi for RPi4 or ZeroW with HDMI-CSI 模块.
PLATFORM=v0-hdmi for RPi 2 or 3 with HDMI-CSI 模块 and Arduino HID.
PLATFORM=v2-hdmiusb for RPi4 with HDMI-USB 采集卡.
PLATFORM=v0-hdmiusb for RPi 2 or 3 with HDMI-USB 采集卡 and Arduino HID.
其他选项就是自定义输入模式了,不用管。

HOSTNAME = pikvm

主机名

LOCALE = zh_CN

语言

TIMEZONE = Asia/Shanghai

时区

ROOT_PASSWD = 12345678

root密码

WEBUI_ADMIN_PASSWD = 12345678

WEB网页密码

IPMI_ADMIN_PASSWD = 12345678

IPMI进入密码

CARD = /dev/mmcblk0

SD card 设备

WIFI_ESSID = redmi-cold
WIFI_PASSWD = 12345678

WIFI名称以及密码,供连接WiFi使用

编译

os文件夹使用

make os

开始编译,会花费很长很长时间建议睡觉前编译,4800U基本上要一晚上,期间会自动创建docker容器,并利用docker容器来编译
提示:

===== Build complete =====
make[1]: 离开目录“/root/os/.pi-builder”

即编译完成

编译完成提示中会提示你之前设置的账号密码,请注意保密

创建镜像

然后使用

make image

创建镜像
提示:

===== Format complete =====
===== Installing to /dev/loop0 =====
docker run --rm --tty --privileged --volume /root/os/.pi-builder/./.tmp:/root/./.tmp --workdir /root/./.tmp/.. pi-builder-arm-toolbox bash -c " \
    mkdir -p mnt/boot mnt/rootfs \
    && mount /dev/loop0p1 mnt/boot \
    && mount /dev/loop0p2 mnt/rootfs \
    && rsync -a --info=progress2 ./.tmp/result-rootfs/boot/* mnt/boot \
    && rsync -a --info=progress2 ./.tmp/result-rootfs/* mnt/rootfs --exclude boot \
    && mkdir mnt/rootfs/boot \
    && umount mnt/boot mnt/rootfs \
"
     40,963,434 100%  289.19MB/s    0:00:00 (xfr#253, to-chk=0/254)  
  1,772,129,328  99%   42.04MB/s    0:00:40 (xfr#63560, to-chk=0/77674)    
===== Installation complete =====
make[1]: 离开目录“/root/os/.pi-builder”
+ losetup -d /dev/loop0
bzip2 -f images/v2-hdmi-zerow-20210221.img
sha1sum images/v2-hdmi-zerow-20210221.img.bz2 | awk '{print $1}' > images/v2-hdmi-zerow-20210221.img.bz2.sha1
cd images && ln -sf v2-hdmi-zerow-20210221.img.bz2 v2-hdmi-zerow-latest.img.bz2
cd images && ln -sf v2-hdmi-zerow-20210221.img.bz2.sha1 v2-hdmi-zerow-latest.img.bz2.sha1

即创建完成
你可能会提示:

[root@archlinux os]# make image
mkdir -p images
sudo bash -x -c ' \
    dd if=/dev/zero of=images/v2-hdmi-zerow-20210221.img bs=512 count=12582912 \
    && device=`losetup --find --show images/v2-hdmi-zerow-20210221.img` \
    && make install CARD=$device \
    && losetup -d $device \
'
bash:行1: sudo:未找到命令
make: *** [Makefile:111:image] 错误 127

这是因为没有安装sudo,使用pacman -S sudo安装即可

查看

cd images/
ls -l

显示:

[root@archlinux images]# ls -l
总用量 637676
-rw-r--r-- 1 root root 652975019  2月 21 11:18 v2-hdmi-zerow-20210221.img.bz2
-rw-r--r-- 1 root root        41  2月 21 11:22 v2-hdmi-zerow-20210221.img.bz2.sha1
lrwxrwxrwx 1 root root        30  2月 21 11:22 v2-hdmi-zerow-latest.img.bz2 -> v2-hdmi-zerow-20210221.img.bz2
lrwxrwxrwx 1 root root        35  2月 21 11:22 v2-hdmi-zerow-latest.img.bz2.sha1 -> v2-hdmi-zerow-20210221.img.bz2.sha1

写入

校验sha1:
pikvm img sha1
其中v2-hdmi-zerow-20210221.img.bz2v2-hdmi-zerow-latest.img.bz2其实是“一个”文件,将这个文件转移到Windows,解压得到v2-hdmi-zerow-latest.img再用Raspberry Pi Imager写入即可。
这个镜像有6G,因此最好用16G的TF卡。
pikvm写入镜像

制作硬件

连接硬件

如图所示,将几个硬件连接好

使用

一定不要更新系统

开机

开机的时候会自动生成证书、连接wifi、DHCP获取IP、扩展分区,因此第一次开机的时候会需要很长时间才能正常工作,请耐心等待。
第一次开机是不能连接的,过很长时间后断电重启,就可以连接了。

连接

通过路由器后台或者手机共享wifi获取当前IP,然后在局域网内使用https://pikvm/或者https://<ip-address>访问,
WEB账号均是admin,密码是你之前设置的密码。ROOT密码也是你之前设置的密码。
证书是使用的自签证书,可以忽略浏览器的警告。

其他

配置

修改WIFI

虽然在之前配置过WIFI,你依然可以在存储卡内的第一个分区内打开pikvm.txt,那里编辑文件。不要删除本来的FIRSTBOOT=1,只需添加您的wifi设置,如下所示:

FIRSTBOOT=1
WIFI_ESSID="mynet"
WIFI_PASSWD="p@s$$w0rd"

记得不要忘记带引号,还有第一次启动后这个文件会消失,属于正常现象。

frpc

为了让别人可以远程访问,我还需要配置frpc,来让用户可以远程访问我的ipkvm

扩展

1.如果为了让树莓派更像IPKVM,你可以增加以下组件:
2.SPI-RJ45:让树莓派zerow支持有线上网,速度大概200KB/S。
3.树莓派Zero W USB转接板:减少需要带的线。
3g/4g/5g上网-这个还没搜到不占用USB接口的方案。
4.3g/4g/5g上网:直接有3G转RJ45的转换模块,淘宝搜:3g rj45即可,再转一次就行啦。
3G-4G TO RJ45
在折腾这个的时候发现了一个其他的有趣的项目,通过树莓派搭建蓝牙键鼠套装,还可以多设备切换。

https://github.com/BLeeEZ/rpi-kvm

参考:
Raspberry Pi 3 - USB OTG HOST
树莓派设置分辨率(命令与图形)
Macrosilicon 2109: Cheap USB HDMI A/V capture
Flashing the OS image

最后修改:2021 年 02 月 24 日 11 : 34 PM