0%

100元的ARM虚拟化平台

前情提要

之前体验过几次DNS污染被恶心到了(github被指向127.0.0.1),因此我下定决心要解决这个问题。

最开始的时候,是在服务器上部署虚拟机,在虚拟机内使用mosdns来获得相对干净的DNS解析。

但是服务器总是会有关机重启的时候(时不时就忍不住更新一下固件),这种时候自动切换使用默认的运营商DNS,可能还会返回污染的IP。

后来一段时间尝试在一个闲置的路由器上部署,但是感觉虚拟机管理起来更方便,而且路由器如果要跑点”科学“相关的东西,性能就不太够了。

因此我总结了一下:

  • 需要用虚拟化方案部署
  • 不能部署在主服务器上,否则ALL IN BOOM

所以我决定再搞一个服务器,最好能省电、省钱同时性能比路由器高。

硬件选型

要省电,最简单就是选择ARM的板子了,比如树莓派、Rockpi之类的。

但是这种开发板随随便便都要几百块钱了,感觉没必要单纯为了个“科学”和DNS解析花这么多钱。

然后机缘巧合之下,我看到了一个矿渣盒子,型号叫Panther X2,CPU是四核心的RK3566,内存4G,内置32G的EMMC,有千兆网口,USB2.0,同时可以通过sdcard扩展内存。

我看了下RK3566,是4核A55架构,个人觉得性能够用,而且全小核心,虚拟化的时候不用担心CPU的一致性。

于是在淘宝找了一家,花了115购入。

其实这玩意最初可能只要50元左右,后来被人发现利用价值就涨起来了,我综合对比了一下当前能捡的垃圾,觉得目前这个价格还能接受…

开始折腾

首先必须要注意的一点是,这个机器不带HDMI接口,所以如果配置过程中,网络相关配置错了,很可能就导致无法连接到机器,只能重装系统,或者拆机用TTL通讯了。

因此我个人强烈建议:先配置网络功能后,再执行后续操作

当然第一步还是得装系统,从网上来看,似乎只有bookworm版本的armbian可以安装PVE,一定要注意自己下载的版本,固件下载地址

下载好固件之后,就需要将固件刷入系统,我个人不太信任在sdcard上装系统,因为之前玩树莓派的时候,因为意外断电,导致系统起不来。

所以我决定使用内置的emmc装系统。但还是需要注意的是,因为这个机器本来是挖矿用的,可能对机器本身emmc有比较大的消耗,所以这个机器内置的emmc也不一定稳定,只能说需要

如果要刷emmc的话,还必须准备双头USB TYPE-A的数据线。

刷机教程这里就不写了,可以参考网上的博客,可以参考这两篇Panther X2折腾记录PantherX2(黑豹X2)刷机

刷机后连接网线和电源,起来后会自动获取IP地址,应该可以在路由器的IP地址列表里看到新的设备IP,尝试SSH连接上去走完剩余的初始配置步骤。

当安装完成后,将 Armbian 设备接入路由器,设备开机2分钟后,到路由器里查看设备名称为 Armbian 的 IP,使用 SSH 工具连接进行管理设置。默认用户名为 root,默认密码为 1234,默认端口为 22

配置网络

如上文所述,如果网络没配置好,可能导致无法连接到机器,所以一定要细心配置好!
配置前可以先安装vim

1
sudo apt-get install vim

然后我们打开编辑这个文件/etc/network/interfaces,修改成如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
address 192.168.4.12/24
gateway 192.168.4.1
bridge-ports eth0
bridge-stp off
bridge-fd 0

我家局域网网关是192.168.4.1,子网是192.168.4.0/24,我给这个设备分配的地址是192.168.4.12

配置完成后,使用命令重启网络

1
sudo systemctl restart networking

重启的时候可能会断联一小段时间,后续应该能正常ping通。

检查KVM虚拟化支持情况

为了确保系统支持虚拟化,我还是做了一下检查,先安装cpu-checker

1
2
apt install cpu-checker

然后用kvm-ok命令检查KVM加速是否可用。

1
2
3
root@armbian:~# kvm-ok 
INFO: /dev/kvm exists
KVM acceleration can be used

检查内核配置也确认支持KVM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@armbian:~# zcat /proc/config.gz | grep KVM -Ei
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_IRQFD=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_MMIO=y
CONFIG_HAVE_KVM_MSI=y
CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
CONFIG_KVM_VFIO=y
CONFIG_HAVE_KVM_ARCH_TLB_FLUSH_ALL=y
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
CONFIG_HAVE_KVM_IRQ_BYPASS=y
CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE=y
CONFIG_KVM_XFER_TO_GUEST_WORK=y
CONFIG_KVM=y

安装PVE

运行armbian-software命令,自动更新后应该会出现这个界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
root@armbian:~# armbian-software 
[ STEPS ] Start selecting software [ Current system: debian/bookworm ]...
───────────────────────────────────────────────────────────────────
ID NAME STATE MANAGE
───────────────────────────────────────────────────────────────────
101 Docker not-installed install
102 Portainer not-installed install
103 Yacht not-installed install
104 Transmission not-installed install
105 qBittorrent not-installed install
106 NextCloud not-installed install
107 Jellyfin not-installed install
108 HomeAssistant not-installed install
109 Kodbox not-installed install
110 CouchPotato not-installed install
111 Sonarr not-installed install
112 Radarr not-installed install
113 Syncthing not-installed install
114 FileBrowser not-installed install
115 Heimdall not-installed install
116 Node-RED not-installed install
117 Mosquitto not-installed install
118 OpenWrt not-installed install
119 Netdata not-installed install
120 XunLei not-installed install
121 Docker-Headless not-installed install
122 Navidrome not-installed install
123 Alist not-installed install
124 QingLong not-installed install
125 ChatGPT-Next-Web not-installed install
───────────────────────────────────────────────────────────────────
ID NAME STATE MANAGE
───────────────────────────────────────────────────────────────────
201 Desktop not-installed install
202 Firefox not-installed install
203 VLC not-installed install
204 MPV not-installed install
205 GIMP not-installed install
206 Krita not-installed install
207 LibreOffice not-installed install
208 Shotcut not-installed install
209 Kdenlive not-installed install
210 Thunderbird not-installed install
211 Evolution not-installed install
212 Gwenview not-installed install
213 Eog not-installed install
214 VisualStudioCode not-installed install
215 Gedit not-installed install
216 Flameshot not-installed install
───────────────────────────────────────────────────────────────────
ID NAME STATE MANAGE
───────────────────────────────────────────────────────────────────
301 Frps not-installed install
302 Frpc not-installed install
303 NPS not-installed install
304 NPC not-installed install
305 Plex not-installed install
306 Emby-Server not-installed install
307 KVM not-installed install
308 PVE installed update/remove
309 CasaOS not-installed install
───────────────────────────────────────────────────────────────────
[ OPTIONS ] Please Input Software ID:

这里输入308就可以安装PVE了

配置OVMF

Proxmox-Port仓库提示Rockchip芯片不支持主线的OVMF,因此我们需要使用特殊的rockchip固件。

如果PVE版本低于8.1,执行这个命令

1
2
apt download pve-edk2-firmware=3.20220526-1
dpkg -i pve-edk2-firmware_3.20220526-1_all.deb

如果版本号大于等于8.1,则执行这个命令

1
2
apt download pve-edk2-firmware-aarch64=3.20220526-rockchip
dpkg -i pve-edk2-firmware-aarch64_3.20220526-rockchip_all.deb

解决可能出现的小问题

如果访问PVE页面死活打不开,然后systemctl检查pveproxy一直退出的话,可能是因为证书有问题所以无法正常启动,可以用下面的命令重新生成证书

先删掉原先的

1
rm -f /etc/pve/pve-root-ca.pem /etc/pve/priv/pve-root-ca.* /etc/pve/local/pve-ssl.*;

重新生成

1
pvecm updatecerts

后记

经过上面的步骤之后,应该就可以访问PVE的管理页面了(https://IP地址:8006)

目前我在这个PVE服务器上跑了两个虚拟机,一个debian系统用于“科学”,一个OpenWrt系统用来跑mosdns。

即便跑了两个系统,“科学”的性能也比以前用的MTK7981B芯片的路由器更强。