J4125 All In One主机搭建pve,安装iKuai、OpenWRT、Adguard LXC、Debian12 LXC、Home Assistant OS。
本期开始是软路由安装与配置系列,一共计划三期,主要记录工控机安装虚拟化系统并搭建软路由、服务器、NAS、Docker等系统及其配置和使用过程。本文不作为教程,仅仅是up主初试All in One主机搭建的记录,仅供参考。
参考:
【软路由】J4125安装PVE7.3+iKuai+OpenWrt+NAS+Win10+Debian+CentOS_pve添加第二块硬盘_xuehu96的博客-CSDN博客
司波图文字:通用PVE AIO安装教程: 通用PVE集成软路由,KODI,基于LXC的Docker服务教程 (gitee.com)
AIO从入门到如土 篇一:一文为你揭开一台all in one家庭服务器的神秘面纱_服务器_什么值得买 (smzdm.com)
一、宿主机
选用倍控J4125 4*2.5G网口小主机,安装16GB内存、2T SATA固态硬盘和螃蟹8156b 2.5GUSB网卡(做管理口用,虽然这机器USB只能跑2.0速度)。
网口接线
参考:家用软路由、NAS、All in one网络拓扑方案 - 知乎 (zhihu.com)
网口定义:
宿主机外部名称 | 宿主机设备名 | 宿主机pcie地址 | 软路由内设备名 |
---|---|---|---|
ETH0 | enp1s0 | 01:00.0 | eth1 |
ETH1 | enp2s0 | 02:00.0 | eth2 |
ETH2 | eno1 | 03:00.0 | eth1 |
ETH3 | enp4s0 | 04:00.0 |
硬盘分配
500G mSATA做宿主机系统盘和虚拟机储存空间,2T SATA固态直接挂载给LXC容器做下载空间。
flowchart LR
subgraph sdb ["/dev/sdb 2TB"]
O["挂载 <br /> - Debian12 LXC /mnt/ext <br /> - qbittorrent LXC /mnt/ext"]
end
subgraph sda ["/dev/sda 500GB"]
subgraph 11[local 100G]
A["100G <br /> PVE/ESXi"]
end
subgraph 22[local-lvm 375G]
direction TB
B[10G <br /> iKuai]
C[2.5G <br /> OpenWRT]
F[32G <br /> HAOS]
G(10G <br /> qbittorrent LXC)
H(10G <br /> Nginx LXC)
I(20G <br /> AdGuard LXC)
D("100G <br /> Debian12 LXC")
end
end
内存分配
LXC不会占用全部内存,KVM虚拟机会分配全部内存。
graph LR
subgraph DRAM ["16GiB内存"]
A[iKuai 2G]
B[OpenWRT 4G]
D[HAOS 4G]
C[[Debian LXC 10G]]
E[[qbittorrent LXC 4G]]
F[[Nginx LXC 2G]]
G[[AdGuard LXC 1G]]
end
esxi or pve?
- esxi不能显示CPU温度?
- 容易核显直通
- esxi需封装i226、8156b驱动
- esxi直通核显需要预留内存
- esxi性能损失更小?但无法利用
p-state
,功耗更大?
网卡驱动:关于RTL8156 USB 2.5G网卡的安装说明 - 哔哩哔哩 (bilibili.com)
PVE7.3 与 ESXi7.0U3c 性能对比:https://kb.blockbridge.com/technote/proxmox-vs-vmware-nvmetcp/
PVE 8.0.3、ESXi 8.0U1、Unraid 6.12.4、Hyper-V和黑群晖 7.1.1虚拟性能的比较:https://youtu.be/hdDNNgnMPII?si=UzrYLOJv4TTvSxFt
结论:PVE在Geekbench跑分中落后ESXi 2到3个百分点,其余指标均低于ESXi百分之1以内。
二、PVE 8.0
2.1 开启IOMMU组
vim /etc/default/grub
在 GRUB_CMDLINE_LINUX_DEFAULT
中,添加intel_iommu=on
和 iommu=pt
2.2 虚拟机架构
graph TD
AIO[(AIO)] --> PVE(PVE) ==> A([100 debian12 LXC])
PVE --> B[101 OpenWRT]
PVE --> C[102 iKuai]
PVE --> D[103 HAOS]
PVE ==> E([104 qbittorrent])
PVE ==> F([105 Nginx])
PVE ==> G([106 AdGuard])
2.3 PVE宿主机配置
pve8.0 Debian12 换清华源
vim /etc/apt/sources.list
# 8.0清华源
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# security updates
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
vim /etc/apt/sources.list.d/pve-enterprise.list
# 8.0官方企业付费订购源
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription
修复:
#修复更新时源报401错
echo "deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription" > /etc/apt/sources.list.d/ceph.list
#下载官方授权加密秘钥证书
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
pve-tools
GitHub项目:ivanhao/pvetools: proxmox ve tools script
apt update && apt -y install git && git clone https://github.com/ivanhao/pvetools.git
cd pvetools
./pvetools.sh
用于显示CPU温度、调整CPU频率、快速PCI-E直通等。
2.4 PVE LXC容器
1)网络
- 100 Debian12 LXC 网卡
eno1
直通,且使用静态ip:
nano /etc/pve/lxc/100.conf
lxc.net.1.type: phys
lxc.net.1.link: eno1
lxc.net.1.name: eth1
lxc.net.1.ipv4.address: 192.168.31.101/24
lxc.net.1.ipv4.gateway: 192.168.31.1
lxc.net.1.flags: up
- 容器内静态IP
vim /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.2.10/24
gateway 192.168.2.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers xxx
dns-search your.search.domain.here
iface eth0 inet6 dhcp
firewall=1,gw=192.168.2.1, ,ip=192.168.2.10/24,ip6=dhcp
在PVE管理界面,容器的DNS设置中改为你想要的设置。
- 容器内网卡使用DHCP:为 LXC 配置网络 (lzz5235.github.io)
vim /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 auto
软路由处设置Debian12 LXC
静态DHCP并网关指向旁路由,查看网关是否切换成功:
# ip route show
default via 192.168.2.2 dev eth0
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.100
2)核显“直通”
核显“直通”做硬解(LXC容器与pve共同使用核显)
#lxc.apparmor.allow_nesting = 1
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.cgroup2.devices.allow: c 29:0 rwm
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file
lxc.apparmor.profile: unconfined
pve 查看核显:
# ls -l /dev/dri total 0 drwxr-xr-x 2 root root 80 Nov 23 21:39 by-path crw-rw---- 1 root video 226, 0 Nov 23 21:39 card0 crw-rw---- 1 root render 226, 128 Nov 23 21:39 renderD128
3)挂载硬盘
请采用by-id
或by-uuid
方式挂载分区
# by-id
pct set 100 -mp0 /dev/disk/by-id/ata-GSL-2TB_0013204001102-part1,mp=/mnt/ext
# by-uuid
pct set 104 -mp0 /dev/disk/by-uuid/f42bcf36-3fee-400f-a8cb-bfaf2697872,mp=/mnt/ext
直接直通:
brw-rw---- 1 root disk 8, 16 Nov 27 20:18 /dev/sdb brw-rw---- 1 root disk 8, 17 Nov 27 20:18 /dev/sdb1
#lxc.cgroup.devices.allow: b 8:16 rwm lxc.cgroup.devices.allow: b 8:17 rwm lxc.autodev: 1 lxc.hook.autodev: /var/lib/lxc/ID/mount-hook.sh lxc.mount.entry: /dev/sda1 /dev/sda1 bind,create=dir,optional 0 0
vim /var/lib/lxc/ID/mount-hook.sh
#!/bin/sh mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sda b 8 0 mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sda1 b 8 1
2.5 PVE KVM虚拟机
虚拟机 CPU选Host 最小性能损耗;选项开启 QEMU GuestAgent ,虚拟机内安装qemu-guest-agent
.
- RDM直通:
qm set 101 --scsi1 /dev/disk/by-id/ata-GSL-2TB_0013204001102
- 核显直通:
GRUB增加:
intel_iommu=on initcall_blacklist=sysfb_init
更新grub update-grub
编辑黑名单:/etc/modprobe.d/pve-blacklist.conf
blacklist i915
blacklist snd_hda_intel
options vfio_iommu_type1 allow_unsafe_interrupts=1
更新initramfs
update-initramfs -u -k all
重启pve
update-pciids
101.conf
args: -set device.hostpci1.x-igd-gms=1
hostpci1: 0000:00:02.0,legacy-igd=1,romfile=vbios.bin
vbios
判断是否需要romfile
cd /sys/bus/pci/devices/0000:00:02.0/ echo 1 > rom cat rom
三、ESXi 8.0U2
ESXi8.0U2 vCenter
- 封装i226-V、8156b驱动
- UHD600核显直通支持
- J4125
- vCenter
vcenter 封装驱动https://blog.csdn.net/myxsL/article/details/130989373
核显直通
开机释放核显权限:
esxcli system settings kernel set -s vga -v FALSE
修改虚拟机配置文件
vi /vmfs/volumes/datastore1/debian12_esxi_xfce/debian12_esxi_xfce.vmx
添加:
pciPassthru.use64bitMMIO="TRUE"
pciPassthru.64bitMMIOSizeGB=64
(然而对于我的镜像和核显,这并没用,可能驱动不支持,或为reset bug,所以放弃ESXi转而投入PVE怀抱)
四、主路由 iKuai
设置WAN口与LAN口,设置WAN口PPPoE拨号账号密码,设置LAN口ip。
设置开启IPv6与DHCPv6
设置DHCP,DNS使用公共DNS,普通用户使用网关指向iKuai(192.168.2.1
);固定需要走代理的设备设置固定DHCP,并将网关指向代理服务器,本例中即旁路由OpenWRT192.168.2.2
。
设置DNS服务器,可以与DHCP中设置相同,开启DNS加速。
五、旁路由 OpenWRT
iStoreOS PVE官方安装教程:X86 PVE 安装 | 易有云产品中心 (linkease.com)
pve下载工具
wget https://fw0.koolcenter.com/binary/other-tools/img2kvm
pve下载镜像:
wget https://fw0.koolcenter.com/iStoreOS/x86_64/istoreos-22.03.5-2023112413-x86-64-squashfs-combined.img.gz
虚拟机内安装Qemu-Guest-Agent
opkg update
opkg install qemu-ga
iStore扩展插件包: https://github.com/AUK9527/Are-u-ok/tree/main/x86
六、Home Assistant OS
一键创建HAOS虚拟机脚本:Proxmox/vm/haos-vm.sh at main · tteck/Proxmox (github.com)
默认配置 2核4G 32GB硬盘
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/vm/haos-vm.sh)"
安装插件与集成
- 安装ssh插件
使用第三方应用(如MobaXterm
)生成ssh密钥对(为了debian12以上考虑,最好生成非RSA的),并填写SSH addon配置
username: hassio
password: ""
authorized_keys:
- >-
ssh-ed25519
AAAAC3NzaC1lZDI1NTE5AAAAIO93BvbKjc//tyJ0HXTisr80F50cODQfJQcJscyTRz9V
ed25519-key-20231126
sftp: false
compatibility_mode: false
allow_agent_forwarding: false
allow_remote_port_forwarding: false
allow_tcp_forwarding: false
- 安装HACS
wget -O - https://get.hacs.xyz | bash -
通过HACS下载第三方集成需要网络代理,最好先配置好旁路由。
遇到PVE中显示内存占用高,但HomeAssistant中却显示内存占用很低,重启虚拟机即可。(与PVE的内存分配机制有关:HAOS/Proxmox ram jump usage after backup · Issue #847 · sabeechen/hassio-google-drive-backup (github.com))
Nginx反代信任
configuration.yaml
文件中添加以下配置,参考:HTTP - Home Assistant (home-assistant.io)
http:
use_x_forwarded_for: true
trusted_proxies:
- 192.168.100.27 #反代服务器
- 172.30.33.0/24 #本机反代ip段
七、TrueNAS(未安装)
- RDM直通:
qm set 104 --scsi1 /dev/disk/by-id/ata-GSL-2TB_0013204001102
qm set 105 --scsi1 /dev/disk/by-id/ata-GSL-2TB_0013204001102
TrueNAS Core基于FreeBSD,TrueNAS Scale基于Debian Linux。用TrueNAS为的是ZFS,但本机只有一块SATA硬盘,就直接挂在给Debian Server,不再考虑使用专用NAS系统。
八、Debian12 LXC
对于KVM虚拟机,需要关闭自动休眠。
关闭自动休眠 :
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
检查是否成功关闭 :
systemctl status sleep.target
返回信息出现
sleep.target inactive(dead)
即关闭成功
ssh密钥登陆
配置关闭密码访问,并生成ssh密钥对,以后客户端使用私钥登录。
编辑sshd_config
vim /etc/ssh/sshd_config
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
# 活跃时间
ClientAliveInterval 900
ClientAliveCountMax 3
重启sshd
systemctl restart sshd
debian 12 openssh 9以上默认不提供RSA支持,请申请更安全的非RSA密钥。
另一方面关于 SHA-1 哈希算法,此前该算法被发现构造前缀碰撞攻击成本已降至低于 5 万美元(实际为 4.5 万美元),因此开发团队决定禁用 ssh-rsa 公钥签名算法。
有一些更好的算法可以替代,包括 RFC8332 RSA SHA-2 签名算法 rsa-sha2-256/512、ssh-ed25519 签名算法与 RFC5656 ECDSA 算法。目前这些算法在 OpenSSH 中都已经支持。
完整的更新说明查看:http://www.openssh.com/txt/release-8.2
使用ed25519
算法生成密钥
ssh-keygen -t ed25519
公钥添加至授权名单
cd ~/.ssh #若使用普通用户登录,也需要相应拷贝
cat id_ed25519.pub > authorized_keys
将私钥id_ed25519
拷贝至客户端用于ssh登录.
本地化
- locale重设
dpkg-reconfigure locales
空格选中 en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
,defalut选择 en_US.UTF-8 UTF-8
- 时区重设
dpkg-reconfigure tzdata
选择Asia/Shanghai
- apt换源:与上文PVE换源相同
- 创建并使用普通账户
# 家目录/mnt/ext/gakki 创建账户
useradd -m -b /mnt/ext gakki
# 若已有目录可选择不创建家目录 使用-M
useradd -M -b /mnt/ext gakki
# 创建密码
passwd gakki
# 修改默认sh为zsh
chsh -s /bin/zsh gakki
Docker
安装docker
与docker-compose
apt update && apt install curl
#curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
apt install docker-compose
换国内镜像源
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}
安装Jellyfin、Nextcloud、qbittorrent等容器将在下下期展开。
Syncthing
使用普通用户启用,避免权限问题
apt install syncthing
临时启动服务
systemctl enable syncthing@gakki --now
vim ~/.config/syncthing/config.xml
找到127.0.0.1:8384
,改为0.0.0.0:8384
重新启用服务
systemctl restart syncthing@gakki
九、各应用LXC
qbittorrent
使用新建LXC搭建qbittorrent而非在Debian LXC中使用Docker安装qbittorrent,为的是获取完整的带宽与独立的IPv4与IPv6地址,从而更方便地设置不经过旁路由直连外网。
依旧使用Proxmox VE Helper脚本一键搭建:
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/qbittorrent.sh)"
默认配置2核2G,8GB存储。本例中qbittorrent LXC与旁路由共享eno1
网口,因此现在pve中设置桥接自eno1
的新Linux Bridge vmbr1
安装完成后挂载SATA硬盘作为下载存储,pve宿主机操作:
pct set 104 -mp0 /dev/disk/by-uuid/f42bcf36-3fee-400f-a8cb-bfaf2697872,mp=/mnt/ext
默认WebUI登录账户密码admin
changeme
为了pt下载可以在设置中更换掉默认监听端口,并且在主路由iKuai的ACL增加监听端口的传入规则(见下期)。
AdGuard LXC
PVE Helper一键脚本,默认单核512MiB内存,2G硬盘。为了后期系统更新着想,请使用Manual模式手动改大内存、硬盘容量。
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/adguard.sh)"
安装完可以把WebUI端口调为80
,方便HA使用。