本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 [署名 4.0 国际 (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/deed.zh) 本文作者: 苏洋 创建时间: 2021年10月23日 统计字数: 7225字 阅读时间: 15分钟阅读 本文链接: https://soulteary.com/2021/10/23/amd-5800u-notebook-toss-proxmox-ve-7-0-virtualization.html ----- # AMD 5800u 笔记本折腾 Proxmox VE 7.0 虚拟化 之前在[《廉价的家用工作站方案:前篇》](https://soulteary.com/2021/07/02/cheap-home-workstation-solution-part-one.html)一文中,我提到过使用两台笔记本设备作为轻量的家用工作站。 最近整理服务,把其中一台性能更强的 5800u 笔记本换上了 Proxmox。记录一下折腾过程。 ## 写在前面 为什么选择 Proxmox ,而不选择之前已经在 NUC 上验证过的 [ESXi](https://soulteary.com/2021/06/22/nuc-notes-install-esxi7.html)呢? 因为这次使用的设备 CPU 是 AMD 5800u,ESXi 虽然可以运行,但是官方明确提示这类 CPU 不在兼容列表里。考虑到运行稳定性,我选择使用和 Ubuntu 同源的、使用 Debian 做基础系统的 Proxmox (KVM / LXC)。 ![Proxmox VE 7.0](https://attachment.soulteary.com/2021/10/23/proxmox.jpg) ## 第一步:安装系统 折腾的基础,当然需要先安装系统,而安装系统的前提,需要下载到我们所需要的镜像:[https://www.proxmox.com/en/downloads](https://www.proxmox.com/en/downloads)。 ![下载 proxmox 安装镜像](https://attachment.soulteary.com/2021/10/23/proxmox-download.jpg) 我这里选择的是 Proxmox 7.0 的镜像,下载完毕,参考之前文章中的 [“制作 USB 启动盘”](https://soulteary.com/2021/07/04/install-ubuntu-20-04-on-amd-4750u-and-5800u-laptops.html#%E5%88%B6%E4%BD%9C-usb-%E5%90%AF%E5%8A%A8%E7%9B%98),烧录到 U 盘里,插到笔记本上,就能够执行系统安装了。 ![Proxmox 安装界面](https://attachment.soulteary.com/2021/10/23/proxmox-installer.jpg) "一路 Next" 就能完成安装了,这里提一个细节:网络配置。第一次配置的时候,网卡默认是静态配置,所以你需要根据你自己的网络环境进行配置,如果使用默认配置,可能会导致“无法上网”(进终端调整 DHCP 模式,重新获取网络地址即可)。 ![Proxmox 安装界面](https://attachment.soulteary.com/2021/10/23/proxmox-installer-network.jpg) 顺利的话,你将能够看到类似下面的界面。 ![Proxmox 安装就绪后的界面](https://attachment.soulteary.com/2021/10/23/proxmox-ready.jpg) 为了方便描述,下面使用 “PVE” 指代 “Proxmox”。 ### 调整系统软件源 PVE 系统默认软件源,采用的是 Debian 的官方源,在国内访问速度比较慢。所以,这里考虑替换为国内的镜像软件源,可以明显提升使用过程中的软件下载效率。 ```bash sed -i -e "s/http:\/\/ftp.debian.org/https:\/\/mirrors.tuna.tsinghua.edu.cn/" /etc/apt/sources.list sed -i -e "s/http:\/\/security.debian.org/https:\/\/mirrors.tuna.tsinghua.edu.cn\/debian-security/" /etc/apt/sources.list ``` 但是,只使用上面的命令将软件源替换为清华源后,使用 `apt update` 更新系统,还是会看的一个错误提示: ```bash Get:1 https://mirrors.tuna.tsinghua.edu.cn/debian bullseye InRelease [116 kB] Get:2 https://mirrors.tuna.tsinghua.edu.cn/debian bullseye-updates InRelease [39.4 kB] Get:3 https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security InRelease [44.1 kB] Get:4 https://mirrors.tuna.tsinghua.edu.cn/debian bullseye/main amd64 Packages [8,180 kB] Get:5 https://mirrors.tuna.tsinghua.edu.cn/debian bullseye/main Translation-en [6,241 kB] Get:6 https://mirrors.tuna.tsinghua.edu.cn/debian bullseye/contrib amd64 Packages [50.5 kB] Get:7 https://mirrors.tuna.tsinghua.edu.cn/debian bullseye/contrib Translation-en [46.9 kB] Get:8 https://mirrors.tuna.tsinghua.edu.cn/debian bullseye-updates/main amd64 Packages [2,300 B] Get:9 https://mirrors.tuna.tsinghua.edu.cn/debian bullseye-updates/main Translation-en [2,108 B] Get:10 https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security/main amd64 Packages [72.0 kB] Get:11 https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security/main Translation-en [45.9 kB] Err:12 https://enterprise.proxmox.com/debian/pve bullseye InRelease 401 Unauthorized [IP: 51.79.159.216 443] Reading package lists... Done E: Failed to fetch https://enterprise.proxmox.com/debian/pve/dists/bullseye/InRelease 401 Unauthorized [IP: 51.79.159.216 443] E: The repository 'https://enterprise.proxmox.com/debian/pve bullseye InRelease' is not signed. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details. ``` 作为免费的非订阅用户,为了解决这个错误提示,我们需要删除官方软件源文件。 ```bash rm /etc/apt/sources.list.d/pve-enterprise.list ``` 再次执行命令进行更新,就不会再出现错误提示啦。 ```bash apt update && apt upgrade -y ``` ## 第二步:使用无线网卡 我希望能做到管理网卡和日常使用网卡分离,所以这里我考虑将设备的无线网卡激活和无线网卡一起使用。 使用 `cat /etc/network/interfaces` 查看当前系统的网络接口,可以看到默认只有有线网卡在工作。 ```bash auto lo iface lo inet loopback iface enp4s0 inet manual auto vmbr0 iface vmbr0 inet static address 10.11.12.95/24 gateway 10.11.12.13 bridge-ports enp4s0 bridge-stp off bridge-fd 0 ``` 这是因为 PVE 系统中并不包含无线网卡驱动,所以和[《AMD 4750u 及 5800u 笔记本安装 Ubuntu 20.04》](https://soulteary.com/2021/07/04/install-ubuntu-20-04-on-amd-4750u-and-5800u-laptops.html#%E9%97%AE%E9%A2%98%E7%B3%BB%E7%BB%9F%E4%B8%8D%E8%83%BD%E4%BD%BF%E7%94%A8%E6%97%A0%E7%BA%BF%E7%BD%91%E5%8D%A1)里提到的一样,需要进行驱动编译。 ### 编译无线网卡 编译网卡驱动前,我们先确定网卡具体型号。通过 `lspci` 可以看到机器默认的有线和无线网卡都是 Realtek 的螃蟹卡: ```bash 04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15) 05:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device 8852 ``` 其中 “Realtek Semiconductor Co., Ltd. Device 8852” 指的就是无线网卡,先尝试使用之前文章中的方案执行编译: ```bash apt-get install -y make gcc build-essential git git clone https://github.com/lwfinger/rtw89.git -b v5 cd rtw89 make make install ``` 命令执行的过程中,会发现编译报错,提示缺少 `/lib/modules/5.11.22-4-pve` 这个目录: ```bash make make -C /lib/modules/5.11.22-4-pve/build M=/root/rtw89 modules make[1]: *** /lib/modules/5.11.22-4-pve/build: No such file or directory. Stop. make: *** [Makefile:52: all] Error 2 ``` 这是因为 PVE 内核是自己定制的,所以我们不能使用 `apt-get install linux-headers-$(uname -r)` 安装依赖(也会报错): ```bash apt-get install linux-headers-$(uname -r) Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package linux-headers-5.11.22-4-pve E: Couldn't find any package by glob 'linux-headers-5.11.22-4-pve' E: Couldn't find any package by regex 'linux-headers-5.11.22-4-pve' ``` 正确方法是,使用 PVE 官方提供的 **pve-headers** 软件包,为了下载速度快一些,我们可以使用华农的[开源镜像](https://mirrors.scau.edu.cn/proxmox/debian/dists/bullseye/pve-no-subscription/binary-amd64/): ```bash curl -O https://mirrors.scau.edu.cn/proxmox/debian/dists/bullseye/pve-no-subscription/binary-amd64/pve-headers-5.11.22-4-pve_5.11.22-9_amd64.deb ``` 下载之后,使用 `dpkg -i pve-headers-5.11.22-4-pve_5.11.22-9_amd64.deb` 安装软件: ```bash Selecting previously unselected package pve-headers-5.11.22-4-pve. (Reading database ... 49447 files and directories currently installed.) Preparing to unpack pve-headers-5.11.22-4-pve_5.11.22-9_amd64.deb ... Unpacking pve-headers-5.11.22-4-pve (5.11.22-9) ... Setting up pve-headers-5.11.22-4-pve (5.11.22-9) ... ``` 依赖安装完毕后,再次执行之前的命令,进行编译安装,一切顺利的话,将看到类似下面的日志: ```bash make && make install make -C /lib/modules/5.11.22-4-pve/build M=/root/rtw89 modules make[1]: Entering directory '/usr/src/linux-headers-5.11.22-4-pve' CC [M] /root/rtw89/core.o CC [M] /root/rtw89/debug.o CC [M] /root/rtw89/mac80211.o CC [M] /root/rtw89/mac.o CC [M] /root/rtw89/phy.o CC [M] /root/rtw89/fw.o CC [M] /root/rtw89/rtw8852a.o CC [M] /root/rtw89/rtw8852a_table.o CC [M] /root/rtw89/rtw8852a_rfk.o CC [M] /root/rtw89/rtw8852a_rfk_table.o CC [M] /root/rtw89/cam.o CC [M] /root/rtw89/efuse.o CC [M] /root/rtw89/regd.o CC [M] /root/rtw89/coex.o CC [M] /root/rtw89/ps.o CC [M] /root/rtw89/sar.o CC [M] /root/rtw89/ser.o CC [M] /root/rtw89/util.o LD [M] /root/rtw89/rtw89core.o CC [M] /root/rtw89/pci.o LD [M] /root/rtw89/rtw89pci.o MODPOST /root/rtw89/Module.symvers CC [M] /root/rtw89/rtw89core.mod.o LD [M] /root/rtw89/rtw89core.ko BTF [M] /root/rtw89/rtw89core.ko Skipping BTF generation for /root/rtw89/rtw89core.ko due to unavailability of vmlinux CC [M] /root/rtw89/rtw89pci.mod.o LD [M] /root/rtw89/rtw89pci.ko BTF [M] /root/rtw89/rtw89pci.ko Skipping BTF generation for /root/rtw89/rtw89pci.ko due to unavailability of vmlinux make[1]: Leaving directory '/usr/src/linux-headers-5.11.22-4-pve' make -C /lib/modules/5.11.22-4-pve/build M=/root/rtw89 modules make[1]: Entering directory '/usr/src/linux-headers-5.11.22-4-pve' make[1]: Leaving directory '/usr/src/linux-headers-5.11.22-4-pve' cp *.bin /lib/firmware/rtw89/. Install rtw89 SUCCESS ``` 再次使用 `lspci -vvv` 查看设备,可以看到设备已经挂上了我们编译好的驱动: ```bash lspci -vvv 05:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device 8852 Subsystem: Lenovo Device 4852 Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- /etc/wpa_supplicant/wpa_supplicant.conf ``` 接着,使用下面的命令,将无线网卡和刚刚生成的无线网络配置添加到当前的系统网络接口中: ```bash echo 'auto wlp5s0 iface wlp5s0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf' >> /etc/network/interfaces ``` 执行完毕后,使用下面的命令重启系统网络服务: ```sql service networking restart ``` 网络服务重启完毕之后,再次使用 `iwconfig` 命令查看网络接口,可以看到网卡已经在工作中了。 ```bash wlp5s0 IEEE 802.11 ESSID:"WIFI_NAME" Mode:Managed Frequency:5.18 GHz Access Point: 8C:XX:XX:XX:XX:XX Bit Rate=960.7 Mb/s Tx-Power=20 dBm Retry short limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:on Link Quality=70/70 Signal level=-27 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:11 Missed beacon:0 ``` 而使用 `ifconfig` ,则可以看到 PVE 的有线和无线网络都连上了网,并且都获取了网络地址。 ```bash vmbr0: flags=4163 mtu 1500 inet 10.11.12.95 netmask 255.255.255.0 broadcast 0.0.0.0 inet6 fe80::xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20 ether 7c:XX:XX:XX:XX:XX txqueuelen 1000 (Ethernet) RX packets 507 bytes 54603 (53.3 KiB) RX errors 0 dropped 40 overruns 0 frame 0 TX packets 359 bytes 109176 (106.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlp5s0: flags=4163 mtu 1500 inet 10.11.12.94 netmask 255.255.255.0 broadcast 10.11.12.255 inet6 fdb1:xxxx:xxxx:1:xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x0 inet6 fe80::xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20 ether 74:XX:XX:XX:XX:XX txqueuelen 1000 (Ethernet) RX packets 983 bytes 185637 (181.2 KiB) RX errors 0 dropped 149 overruns 0 frame 0 TX packets 41 bytes 5410 (5.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ``` 接下来就可以使用有线网络提供服务,使用无线网络来进行设备管理了。不过如果你想对这块网卡打“端口聚合”的主意,PVE 并不支持,在网页界面中可以看到这块无线网卡,还是挺特别的。 ![](https://attachment.soulteary.com/2021/10/23/proxmox-net-interfaces.jpg) ## 第三步:初始化新磁盘 安装完 PVE 之后,除了系统安装盘之外,不会挂载其他的磁盘。 ![默认设备只会挂载一块磁盘](https://attachment.soulteary.com/2021/10/23/proxmox-disk-1.jpg) 依次点击“擦除磁盘”、“使用 GPT 初始化磁盘” 后,可以看到磁盘状态有了变化。 ![转换磁盘为 GPT](https://attachment.soulteary.com/2021/10/23/proxmox-disk-2.jpg) 接下来,就能够将刚刚准备好的磁盘投入使用啦。将磁盘使用 LVM Group 的方式进行挂载。 ![创建并挂载磁盘](https://attachment.soulteary.com/2021/10/23/proxmox-disk-3.jpg) 再次查看磁盘状态,可以看到磁盘已经挂载就绪了。 ![磁盘挂载就绪的状态](https://attachment.soulteary.com/2021/10/23/proxmox-disk-4.jpg) ## 第四步:显示器自动休眠 使用笔记本当轻量服务器的好处是自带调试键鼠和显示器,但是 PVE 和之前使用的 Ubuntu 系统有一些不同,PVE 并不会让显示器休眠,长时间亮着一来费电,二来也烧屏。 作为一块成熟的屏幕,应该学会自己休眠了。参考 [https://askubuntu.com/questions/62858/turn-off-monitor-using-command-line/1076734#1076734](https://askubuntu.com/questions/62858/turn-off-monitor-using-command-line/1076734#1076734),我们修改 `/etc/default/grub` 的内容,将原本的: ```bash GRUB_CMDLINE_LINUX_DEFAULT="quiet" ``` 修改为: ```bash GRUB_CMDLINE_LINUX_DEFAULT="quiet consoleblank=15" ``` 然后执行 `update-grub`,重启设备后,显示器就会在 15 秒无操作时,自动休眠啦。 ## 彩蛋:去掉启动提示框 PVE 默认登陆后会弹一个提示框,虽然不碍事,但是确实比较烦。 ![PVE 默认提示框](https://attachment.soulteary.com/2021/10/23/proxmox-dialog.jpg) 这里提供一个简单的方案,来干掉这个麻烦的提醒。 ```bash sed -i -e "s/Proxmox.Utils.checked_command(Ext.emptyFn);//" /usr/share/pve-manager/js/pvemanagerlib.js ``` ## 最后 先写到这里,后续服务迁移的过程中,再分享如何调整网络,让这台设备可以“移动”起来。 --EOF