ProxmoxVE教程
本文最后更新于:2023年12月20日 上午
ProxmoxVE
使用虚拟机安装Openwrt
正常创建Linux虚拟机,硬盘可以不用进行设置,最终虚拟机设置如下:
上传Openwrt的img镜像,复制镜像地址。
虚拟机导入镜像磁盘文件
1
qm importdisk 101 /var/lib/vz/template/iso/openwrt-x86-64-generic-ext4-combined-efi.img local-lvm
设置硬盘
调整引导顺序
启动虚拟机
使用LXC容器安装Openwrt
要点、必须是-rootfs.img
、-rootfs.img.gz
或者-rootfs.tar.gz
的文件
-rootfs.img
、-rootfs.img.gz
需要解包后打包
-rootfs.tar.gz
可以直接使用,如果使用img
镜像文件,则需要进行转换。
img镜像文件转tar.gz操作步骤
安装解包软件
1
apt install squashfs-tools
解压
1
gzip -d openwrt-x86-64-generic-squashfs-rootfs.img.gz
解包
img
文件1
unsquashfs openwrt-x86-64-generic-squashfs-rootfs.img
进入目录,重新打包为PVE的CT模板,即
tar.gz
文件1
2cd squashfs-root/
tar -czf ../openwrt-x86-64-generic-rootfs.tar.gz *上传或复制到PVE对应目录,一般为/var/lib/vz/template/cache
安装OpenWrt
在pve节点处,选择local(pve)的存储桶,选择CT模板,上传
*rootfs.tar.gz
系统镜像。使用命令行创建一个id为200,名称为
OpenWrt
的LXC容器1
pct create 200 local:vztmpl/openwrt-x86-64-generic-rootfs.tar.gz --rootfs local:1 --ostype unmanaged --hostname OpenWrt --arch amd64 --cores 6 --memory 1024 --swap 0 --onboot yes -net0 bridge=vmbr1,name=eth0
参数说明:
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
29local:vztmpl/openwrt-x86-64-generic-rootfs.tar.gz
容器模板, local:vztmpl/ 指向 /var/lib/vz/template/cache/目录,是pve的默认模板存放目录,webUI上传的模板就存在该位置,可根据需要改为其他目录,
--rootfs local-lvm:1
根磁盘位置,local-lvm可以根据实际情况修改为其他存储位置,1表示空间大小为1G。
--ostype unmanaged
系统类型,之后可在设置文件中修改。
--hostname OpenWrt
容器名称,之后可在设置文件中修改
--arch amd64
系统架构,amd64 | arm64 | armhf | i386
--cores 6
分配给容器的核心数
--memory 1024
分配给容器的内存大小
--swap 0
分配给容器的交换区大小
--onboot yes
开机自启动虚拟机
-net0 bridge=vmbr0,name=eth0
容器网络设置,这里设置网络0为容器中增加网卡eth0,桥接到主机的vmbr0接口修改OpenWrt的LXC配置文件
1
cat /etc/pve/lxc/200.conf
在其中添加以下数据。
1
2
3# openwrt.common.conf是PVE自带的openwrt配置文件示例,内含一些基本设置
lxc.include: /usr/share/lxc/config/openwrt.common.conf
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file启动OpenWrt即可
可能的问题
uhttp未启动无法访问OpenWrt主页
有些时候可能会遇到uhttpd未启动的情况,使用netstat -nap
查看没有80端口开放,可以使用下面命令手动启动服务。
1 |
|
dnsmasq未启动导致DHCP服务失败
OpenWrt里由于dnsmasq-full用了procd jail,和linux容器冲突导致dnsmasq启动不了,需要手动改一下把procd jail禁用。使用netstat -nap
查看有没有53端口开放,修改/etc/init.d/dnsmasq
,注释掉下面的部分,执行命令/etc/init.d/dnsmasq restart
启动即可。
ProxmoxVE的Openwrt组网方案
由于ProxmoxVE
网络并没有DHCP服务,因此这里使用Openwrt辅助组网,最终实现目标为PVE 主机搭建192.168.121.1/24
网桥,Openwrt充当DHCP服务器,同时Openwrt充当旁路由设备,最终都通过PVE网桥实现网络通信。
在pve主机上创建网桥
vmbr1
,本机ip设置为192.168.121.1
,用于pve虚拟机组网,配置文件如下1
2
3
4
5
6
7
8
9auto vmbr1
iface vmbr1 inet static
address 192.168.121.1/24
ovs_type OVSBridge
post-up echo 1 > /proc/sys/net/ipv4/ip_forward #打开IP转发
post-up echo 1 > /proc/sys/net/ipv4/conf/eno1/proxy_arp #代理 ARP 允许一个主机在一个子网上代表另一个主机响应 ARP 请求,ARP 是一种用于将 IP 地址解析为 MAC(Media Access Control)地址的协议
#转发IPv4流量到虚拟机,使虚拟机与外网联通。
#SNAT 内网转外网,当内部虚拟器需要访问外网时走这条规则
post-up iptables -t nat -A POSTROUTING -s '192.168.121.1/24' -o vmbr0 -j MASQUERADE # -A添加规则将Openwrt连接指该网桥ip设置为
192.168.121.2
,做旁旁路由,与传统旁路有不同的是,pve的网桥并没有dhcp服务,因此我们直接使用旁路用Openwrt分配ip信息。登录Openwrt管理界面,直接修改LAN接口配置,同时需要开启DHCP服务,如下所示:
ProxmoxVE配置iscsi服务
ProxmoxVe配置iscsi服务首先需要安装
targetcli-fb
1
apt -y install targetcli-fb
iscsi需要预先创建一块固定大小硬盘,这里必须要预先分配,因为iscsi是通过文件大小进行识别的,必须首先填充到指定大小才能正确识别到磁盘大小,使用
qemu-img
或者dd
创建一个即可,下面展示qemu-img
创建命令。1
qemu-img create -f qcow2 -o preallocation=falloc ./iscsi-storage-1.qcow2 100G
使用root权限执行
targetcli
,这里介绍一下,其下目录用途1
2
3
4
5
6
7
8
9
10
11
12
13/backstores:后端存储,提供iSCSI底层实际的物理存储设备
/backstores/block:用于存放iSCSI服务端配置共享设备
/backstores/fileio:用于测试目的的镜像文件
/backstores/pscsi:对底层为
/backstores/block
/iscsi
/iscsi/iqn.../tpg1:通过在/iscsi目录执行create命令生成iSCSI target名称时自动生成的与iSCSI target名称同名的目录的子目录
/iscsi/iqn.../tpg1/acls:用于存放该存储资源的验证信息
/iscsi/iqn.../tpg1/luns:用于存放可访问的可共享硬盘设备
/iscsi/iqn.../tpg1/portalsL:用于存放iscsi服务端的ip地址
/loopback
/vhost
/xen-pvscsi创建共享设备,命名为
iscsi-1
。1
/backstores/fileio create name=iscsi-1 file_or_dev=/mnt/badwolf/iscsi/iscsi-storage-1.qcow2
进入
/iscsi
目录创建target名称,将会在iscsi
目录下自动生成一个iqn开头的target。1
/iscsi create
将iSCSI共享资源池中的设备(即之前创建的共享设备)添加到该target。
1
/iscsi/iqn......./tpg1/luns create /backstores/fileio/iscsi-1
创建用于验证访问iSCSI服务端共享存储资源的信息,后面的iqn信息可在iscsi客户端查看。
1
/iscsi/iqn......./tpg1/acls create iqn.1991-05.com.microsoft:desktop-*****
设置登录用户名和密码,可选
1
2/iscsi/iqn......./tpg1/acls/iqn.1991-05.com.microsoft:desktop-*****/set auth userid=****
/iscsi/iqn......./tpg1/acls/iqn.1991-05.com.microsoft:desktop-*****/set auth password=****设置iSCSI服务端的监听IP地址,默认IP地址是
0.0.0.0
,系统会自动开启3260端口向外提供iSCSI服务。1
/iscsi/iqn......./tpg1/portals create 192.168.10.10
保存配置
1
saveconfig
重启
targetd
服务1
systemctl restart targetd
Proxmox VE安装Jellyfin
这里直接使用LXC容器安装Jellyfin:
创建debian或者ubuntu的LXC容器,使用无特权容器,虽然官方建议使用特权容器,但是有方法可以使得无特权容器成功开启硬件直通。
挂载存储设备
打开LXC配置文件
1
2vim /etc/pve/lxc/108.conf
# 108是LXC容器的id,修改为自己的映射存储设备
1
2
3mp0: /mnt/pve/media,mp=/mnt/media
#mp0 是第一个挂载点,如果需要挂载多个的话,按照顺序就是 mp1,mp2,mp3
#/mnt/pve/media 就是宿主机上的存储路径,mp=/mnt/media 就是映射到 LXC 里的路径,后续 JellyFin 就是从这个路径去读文件了。
共享核显开启硬件加速
首先在LXC里查看video 和 render 组 id
1
2
3# egrep 'video|render' /etc/group
video:x:44:
render:x:106:在pve主机上查看video 和 render 组 id
1
2
3# egrep 'video|render' /etc/group
video:x:44:
render:x:105:需要配置好 idmap
idmap是一种权限映射机制,它可以将LXC内的uid映射到宿主机上,例如
u 0 100000 1005
是说把 LXC 容器里的 uid 0-1004 这 1005 个 uids 映射到 host 上的 100000-101004,格式也就是LXC起始uid host起始uid 数量
。因此,我们需要将LXC主机的44映射到主机44,LXC主机的106映射到宿主机105,最终要覆盖0-65535,因此在
/etc/pve/lxc/108.conf
文件内写入以下内容,1
2
3
4
5
6
7
8
9
10
11
12
13
14lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
# 226:0和226:128是通过ls -al /dev/dri 获取到的card0和renderD128设备号,一般不会有变化
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
lxc.idmap: u 0 100000 1000
lxc.idmap: u 1000 1000 1
lxc.idmap: u 1001 101001 64535
lxc.idmap: g 0 100000 44
lxc.idmap: g 44 44 1
lxc.idmap: g 45 100045 60
lxc.idmap: g 105 103 1
lxc.idmap: g 106 100106 894
lxc.idmap: g 1000 1000 1
lxc.idmap: g 1001 101001 64535在pve主机上配置subuid和subgid
1
2
3
4
5
6echo 'root:1000:1' >> /etc/subuid
cat >> /etc/subgid <<EOF
root:44:1
root:105:1
root:1000:1
EOF
如果没问题的话,启动容器,
ls -al /dev/dri
看到的对应组就正确了,而且是 0660 权限!官网安装jellyfin
1
curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash
开启硬件加速
硬件加速选择QSV或者VAAPI都可以,下面全开。
常见问题
硬件解码,图像发灰
硬件解码发灰是因为在不支持HDR的显示器播放HDR视频不会出现画面发灰的情况,此时可以开启jellyfin色彩映射功能。
如果开启后,报播放器错误,那是因为缺少驱动程序,可使用
apt-get install intel-opencl-icd
进行安装
Proxmox VE安装黑群晖
PVE正常创建虚拟机
- 操作系统选择不适用任何介质
- 系统默认
- 磁盘总线选择SATA
- CPU默认
- 内存默认
- 网络模型选择Intel E1000
上传黑群晖引导磁盘img,并将其转换为转化为pve支持格式qcow2
转换磁盘格式为qcow2格式
1
qemu-img convert -p -O qcow2 DS918_7.21-69057.img DS918_7.21-69058.qcow2
虚拟机导入磁盘,注意将虚拟机id修改为自己的id,我这里id是108
1
2
3
4qm importdisk 108 DS918_7.21-69057.img HDD
# 这里直接导入img格式,经测试也是可以的
# 108表示DSM虚拟机在pve上的id编号
# HDD表示存储位置为HDD,请修改为自己的
修改引导顺序为导入的磁盘,启动,会跑一些代码,等待结束后,去路由器找到虚拟机的ip地址,直接访问。
上传官方镜像,安装即可
参考链接
小技巧
Proxmox VE 6.3 / 6.4 / 7.0 / 7.1 / 7.2 / 7.3 / 7.4 / 8.0 去掉未订阅的提示
1 |
|
确认无误后,重启服务器
1 |
|
Proxmox开启独显直通
修改/etc/default/grub文件,并在里面找到GRUB_CMDLINE_LINUX_DEFAULT=”quiet” 这一行 将这一行替代成下面,目的是开启底层的硬件直通功能。
1 |
|
然后找到配置文件/etc/modules 在结尾添加内容,打开pci硬件的直通
1 |
|
Proxmo挂载NTFS格式硬盘
编辑 /etc/fstab 文件,添加如下行:
其中 UUID=**** 是指定卷(分区)的 UUID,可以使用 blkid 命令查看 UUID 。
1 |
|
Debian取消休眠
1 |
|
Proxmox权限管理
由于Proxmox默认是系统root用户登录,可能会存在某些安全隐患,因此这里可以设置普通用户身份。
创建用户组,在数据中心–权限–群组,可以创建用户组
给用户组分配权限,在数据中心–权限,可以添加用户组权限,路由选择
/
,角色选择Administrator
。在数据中心–权限–用户可以添加新用户,其中领域
Proxmox VE authentication server
表示使用Porxmox
内置用户管理,与Linux登录用户不是同一类型用户,可以重命;Linux PAM standard authentication
表示使用LInux内置用户管理,实际上与Linux登录系统使用的同一套,此处用户即为LInux系统用户,root用户就是此种类型。群组选择上面创建好的群组创建好用户后,在数据中心–权限–用户–root,禁用root用户,把已启用的复选框去掉即可。
有些选项可能必须使用root用户才能更改,因此我们可以使用
sudo pveum usermod root@pam -enable 1
启用root用户,密码即为Linux系统root密码,记得用完再将root用户禁用回去。