关于绿联DX4600 Pro使用虚拟机的探索
本次探索源于上次发现可以使用Docker来管理群晖虚拟机,而绿联本身是自带kvm内核模块的,但是要等到绿联官方支持虚拟机,又不知道会等到猴年马月。所以我有一个大胆的想法,能否使用Docker搭建一个可以自由管理虚拟机的程序,最起码可以安装一个windows替换掉绿联内置的有着各种限制的迅雷
注意:非专业人士请勿模仿,除非你知道什么是KVM,在此期间所造成的系统风险请自行承担
虚拟机管理
选择了我之前使用过的 retspen/webvirtcloud 来管理 KVM,说实话,这个管理程序比起威联通群晖这些官方自带确实不太好用,但用于测试还是足够了,如果有更好更方便的推荐请在评论区留言
retspen/webvirtcloud 没有官方的Docker镜像,只能自己编译,虽然它本身带有一个Dockerfile,但如果自己构建会遇到各种各样的问题,下面是我遇到的部分问题
ubuntu版本
retspen/webvirtcloud 默认是基于一个ubuntu22.04的镜像构建,但是,如果自行构建会发现旧版本的Docker和ubuntu22.04根本不兼容,要么报错
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 871920D1991BC93C
要么报错
/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg are ignored as the file is not readable by user '_apt' executing apt-key.
第一个报错搜索了一下,说是可以使用 apt-key 命令添加公钥解决,实际上
第二个报错可以通过删除gpg文件忽略,但实际上没什么用。真正的解决方式是升级自身的Docker版本,最小要到20.0 以上,因为我使用的Mac,最新版本的Docker也不过是 19.03.13,所以没办法使用升级Docker的方式解决,只能降级ubuntu的版本
一开始我直接把版本降到最熟悉的18.04,但在安装Python库发现部分库的指定版本要求Python3.8,否则找不到指定版本
如果使用 apt 直接安装 Python3.8,会发现有两个问题:
1. 其中一个依赖 python3-lxml 没有3.8的版本,直接安装会同时安装 Python3.6
2. venv无法使用
后面甚至想要忽略Python版本强行安装
pip3 install -r conf/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --ignore-requires-python
但仍然是一堆报错
所以再次测试升级到20.04的版本,还好20.04安装的Python3正是Python3.8,故此正常
libvirt安装
由于 retspen/webvirtcloud 是依赖libvirt对虚拟机进行管理的,而绿联使用的系统本身没有libvirt进程,所以我将在Docker内部安装,在此期间也遇到了部分问题,下面对部分依赖包统一说明一下
1. libvirt-daemon: libvirtd的进程包
2. libvirt-daemon-system:libvirtd的默认配置包,如果不安装需要手动编写配置
3. iptables: libvirtd的依赖,不安装启动libvirtd时会报错
4. dnsmasq: libvirtd的依赖,不安装kvm的默认网络无法启动,导致后续建立的虚拟机无法联网
5. qemu-kvm: 不安装导致后续新建虚拟机时可选的架构和芯片组为空
6. qemu-utils: 不安装导致虚拟机无法使用qcow2,只能使用raw格式
7. virt-manager(可选): 通过命令行管理虚拟机
构建Docker
修改完ubuntu版本和添加kvm所需依赖后,就能成功构建Docker。注意: 构建好的Docker镜像还是挺大的,总共6.43G
导入镜像
1. 首先先导出镜像
docker save -o webvirtcloud.tar webvirtcloud:test-2
2. 上传到绿联Nas,可以同时上传后面创建虚拟机所用的iso文件
3. 打开绿联Docker,在镜像管理里选择从设备导入镜像
ssh登录
老传统了,这里就不再过多叙述,具体可看
运行Docker
docker run --rm -p 8088:80 -p 6080:6080 --device=/dev/kvm --privileged webvirtcloud:test-2
8088是 retspen/webvirtcloud 界面端口,启动后可以通过 NasIP:8088 访问,6080 是vnc端口,启动虚拟机后可以直接使用浏览器访问
启动libvirtd
由于我只修改了Dockerfile里的依赖,所以libvirtd只能手动启动,如果想要自动启动的可以添加启动脚本到 /etc/service 目录
1. 进入Docker内部: docker exec -it {镜像名} bash
2. 修改配置文件: 使用 vi 打开 /etc/libvirt/libvirtd.conf,找到 unix_sock_group = "libvirt",把它改成 unix_sock_group = "www-data"
3. 启动libvirtd: 使用 libvirtd -d 启动进程
4. 启动virtlogd:使用 virtlogd -d启动进程
webvirtcloud管理界面
通过 NasIP:8088 访问管理界面,默认用户名和密码都是 admin
登录成功后,点击计算节点 -> 本地
然后添加一个本地节点
添加后正常情况就会显示已连接
接着继续点击右边的眼睛图案 -> 选择存储 -> 右上角的+号,添加两个存储
1. test -> /var/lib/libvirt/images:存放虚拟机文件
2. iso -> /var/lib/libvirt/iso:存放iso镜像文件
然后返回绿联Nas的ssh界面,复制iso文件到Docker内部
创建虚拟机
一切准备就绪,现在我们就能创建虚拟机了。
选择实例 -> 创建
点击下一个,注意:webvirtcloud这里的操作有些反人类,最好选择规格 -> 应用,不要使用自定义和模版,否则无法挂载cd-rom。我这里选择30G的mini,存储一定要改成test,然后创建
点击创建后会到实例页面,先不要启动,到设置 -> 磁盘 挂载想要安装的系统iso文件,然后在旁边的启动顺序里确认启动第一项是iso所在的磁盘
接着就可以开机了,开机后可以点击访问 -> 控制台 使用VNC打开系统安装界面,安装完成后记得重新调整启动顺序以及卸载iso镜像
至此,使用第三方Docker搭建的绿联Nas虚拟机管理也就完成了,如果急需使用虚拟机功能,又想保留绿联Nas的系统,随绿联一起“成长”的用户可以利用此功能创建虚拟机,如果不着急的可以等官方的实现
其它
这几个报错
1. 没有修改libvirtd里的unix_sock_group配置为www-data
2. Docker内部(不是绿联系统)执行chmod 666 /dev/kvm
3. 未安装dnsmasq,如果手动安装,使用virsh net-start default 手动启动
4. 未安装qemu-utils
注意:文章中并未修改绿联Nas本身的系统,所有的安装包和修改文件配置都是在Docker内部进行
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
WilsonLi
校验提示文案
AI小值-电脑数码
校验提示文案
林宝宝汤圆
校验提示文案
喵你个咪
校验提示文案
值友9804471294
校验提示文案
值友9804471294
校验提示文案
喵你个咪
校验提示文案
林宝宝汤圆
校验提示文案
WilsonLi
校验提示文案
AI小值-电脑数码
校验提示文案