virt-manager(Virtual Machine Manager)是一个图形用户界面应用程序,通过libvirt管理虚拟机(即作为libvirt的图形前端)
因为要在Linux arm环境做测试,记录下virt-manager配置arm虚拟机的过程
先在VMWare中安装一个Ubuntu 18 x86_64虚拟机
VMWare设置虚拟化:
启动x86_64 Ubuntu虚拟机,部分操作可能需要超级管理权限,设置下root密码:
bash
sudo passwd root
检测下当前环境是否支持虚拟化:
bash
# 参考:https://linux.cn/article-9516-1.html
# 检查是否支持虚拟化
# 1.使用 egrep 命令查明你的CPU是否支持,输出要大于0
egrep -c 'vmx|svm' /proc/cpuinfo
# 2.使用 cpu-checker 工具检测
sudo apt install cpu-checker
kvm-ok
没问题后开始安装virt-manager相关的环境:
bash
# 参考:https://blog.csdn.net/networken/article/details/136747410
sudo apt update -y
# qemu+kvm
sudo apt install -y qemu-kvm
# libvirt
sudo apt install -y virt-manager libvirt-daemon-system libvirt-clients virtinst
# bridge tool
sudo apt install -y bridge-utils
qemu-kvm - 为 KVM 管理程序提供硬件模拟的软件程序
virt-manager - 图形化的虚拟机管理工具,用于管理KVM、QEMU等虚拟机
libvirt-daemon-system - 将 libvirt 守护程序作为系统服务运行的配置文件
libvirt-clients - 用来管理虚拟化平台的软件
virtinst - 用来创建虚拟机的命令行工具
bridge-utils - 用来配置网络桥接的命令行工具
安装时如果遇到lvm2报错,执行:
bash
# 参考:https://blog.csdn.net/watt1208/article/details/138967796
# 可能需要进入su执行
systemctl unmask lvm2-lvmetad.socket
systemctl restart lvm2-lvmetad.socket
systemctl unmask lvm2-lvmpolld.socket
systemctl restart lvm2-lvmpolld.socket
dpkg --configure lvm2
默认只有管理权限才能访问kvm,普通用户添加访问权限:
bash
sudo adduser <username> libvirt
sudo adduser <username> kvm
virt-manager装好后,去下载我们的Linux arm镜像,我用的Ubuntu-18.04.6-server-arm64.iso:
https://cdimage.ubuntu.com/ubuntu/releases/
解锁virt-manager的架构设置选项:
bash
# 参考:https://www.cnblogs.com/ishmaelwanglin/p/17821825.html
sudo apt install -y qemu-system-arm ovmf qemu-efi
终端命令或程序列表里打开virt-manager:
bash
virt-manager
新建虚拟机:
参考:https://blog.csdn.net/luyixiaoqingge/article/details/136364652
点左上角开始安装后,一路默认安装
Disk设置选Yes:
因为配置较差,安装了几十分钟
这里选的SSH,又安装了几十分钟
装好后,关闭虚拟机,设置共享文件夹挂载路径:
重新开机后,设置 root 密码,在 root 权限下操作:
bash
apt update -y
# 挂载前先安装 nfs-common 或者 nfs-utils
apt install -y nfs-common
# 然后将之前设置的 shared 标记挂载到虚拟机指定目录
# 参考:https://blog.csdn.net/ww7109/article/details/133129777
mount -t 9p -o trans=virtio shared /demo
遇到文件或者文件夹权限问题(Permission denied),无脑chmod 777 加权限,外部内部都加上
有时挂载遇到报错(一般启动有ERROR信息就会遇到),重启下虚拟机
虚拟机是64位的,安装运行32位需要的库:
bash
# 启用 32 位架构支持
dpkg --add-architecture armhf
apt update -y
# 安装此架构 C/C++ 标准库
apt install -y libc6:armhf libstdc++6:armhf
# 装完标准库后可能还不能运行带 so 动态库的程序,安装 multilib
# multilib 支持系统上同时编译和运行 32 位和 64 位程序
apt install -y gcc-multilib g++-multilib
用 ldd 查看 32 位程序提示 not a dynamic executable:
先找到 ldd 和 ld-linux 位置:
修改ldd的RTLDLISTL路径,或者复制一份ldd命名为ldd32,编辑ldd32文件把32位的ld-linux路径替换上去:
bash
# cp /usr/bin/ldd /usr/bin/ldd32
# 原值 RTLDLIST=/lib/ld-linux-aarch64.so.1
RTLDLIST=/lib/ld-linux.so.3
# 或者修改原来的ldd,加引号,空格隔开
RTLDLIST="/lib/ld-linux-aarch64.so.1 /lib/ld-linux.so.3"
可以用vi编辑ldd文件,输入i进入编辑模式,编辑完ESC退出编辑,再输入:wq或者:wq!保存退出
执行ldd32:
挂载USB设备直接在virt-manager里设置,这里以一个USB硬盘为例:
会在设备列表里多一个设备信息:
在虚拟机里执行lsusb查看设备: