文章目录
- 安装qemu
- CentOS宿主机系统网络配置
- 将网桥连接到网卡
- 创建TAP设备
- 第一次安装ubuntu镜像安装
- 第二次启动ubuntu arm64
- efi界面设置
- 手动配置网络
- 通过ssh使用windows连接centos 上的qemu ubuntu arm64虚拟机
windows下vmware 桥接模式 (一定要桥接)创建宿主机centos,然后在centos上安装qemu,使用qemu创建ubuntu arm64虚拟机。
没错,就是双层套娃,性能还不错,不算卡。
安装qemu
感谢这位老大,让我对大致流程有个了解:
安装的脚本:
#!/bin/bash
# install repo
yum -y install epel-release
# install dep
sudo yum -y install bridge-utils
sudo yum -y install net-tools
sudo yum -y install zlib-devel
sudo yum -y install glib2-devel
sudo yum -y install pixman-devel
sudo yum -y install gcc
sudo yum -y install gcc-c++
sudo yum -y install flex bison
# 替换为解压后的qemu包路径
# 下载路径为 https://download.qemu.org
cd $YOUR_QEME_PATH
./configure --target-list=aarch64-softmmu
sudo make
sudo make install
CentOS宿主机系统网络配置
其实大概的网络拓扑可以这么理解:
只有3个网桥和ubuntu的网卡是有ip地址的,CentOS(有windows 10 vmware桥接模式创建的虚拟机)不需要有ip地址,因为它是桥接到有ip的网桥上,由网桥通过物理网卡发送包到外网。因为所有设备都是网桥,网桥是二层设备,因此所有的主机都在同一个二层局域网内,可以相互通信。
另外tap模式除了需要在宿主机创建网络接口缺点外,优点是:不禁ping(默认SLIRP模式是禁止ping的).
(实际上不是这么回事啊,因为TAP设备具体我也不太懂,反正用户空间的程序比如qemu进程或者更确切的来说,ubuntu客户机系统可以把tap0当作网卡用,tap0作为网络接口插入到网桥br0上)
将网桥连接到网卡
ip link add br0 type bridge
ip link set dev eth0 master br0
ip address delete $PREFIX dev eth0 # e.g. 192.168.10.8/24 原网卡地址
ip route add default via $ROUTE dev br0 # $ROUTE windows gateway ip
创建TAP设备
将tap0
创建出来,它将作为虚拟机(ubuntu arm64)的网卡。
ip tuntap add dev tap0 mode tap
ip link set dev tap0 master br0
ip link set dev br0 up
设置qemu启动网卡脚本:
$ vim /etc/qemu-ifup
#! /bin/sh
switch=br0
ifconfig $1 up
#ip link set $1 up
brctl addif ${switch} $1
设置qemu停止网卡脚本:
$ vim /etc/qemu-ifdown
#! /bin/sh
switch=br0
brctl delif ${switch} $1
增加脚本执行权限:
chmod +x /etc/qemu-ifup
chmod +x /etc/qemu-ifdown
都弄好之后ip a
是这样的:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:0c:29:72:85:8e brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:fe72:858e/64 scope link
valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:72:85:8e brd ff:ff:ff:ff:ff:ff
inet 192.168.199.199/24 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe72:858e/64 scope link
valid_lft forever preferred_lft forever
4: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br0 state DOWN group default qlen 1000
link/ether 72:6d:0b:70:ca:f4 brd ff:ff:ff:ff:ff:ff
参考连接:
- Documentation/Networking
- Use qemu to build a virtual machine test environment based on aarch64 on the x86_64 platform
第一次安装ubuntu镜像安装
# create raw img
qemu-img create ubuntu16.04-arm64.img 16G
# install from iso
qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=ubuntu-16.04.3-server-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=ubuntu16.04-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0
这个过程还是挺长的,需要做很多系统安装设置。
相关资源:
下载unbuntu 16.04 arm64
下载QEMU_EFI.fd
第二次启动ubuntu arm64
第二次启动需要舍弃-drive if=none,file=ubuntu-16.04.3-server-arm64.iso,id=cdrom,media=cdrom
和-device scsi-cd,drive=cdrom
,因为不需要再安装系统。
-netdev type=tap,id=net0
指明使用tap0
设备:
qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -device virtio-scsi-device -drive if=none,file=ubuntu16.04-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0 -netdev type=tap,id=net0 -device virtio-net-device,netdev=net0
efi界面设置
途中你会遇到一个问题,就是会进入到efi启动界面(高级版BIOS):
按exit退出到这个图形界面:不要慌,一路回车Boot Maintenance Manager -> Boot From file -> No VOLUME LABEL xxx -> EFI -> ubuntu -> grubaa64.efi
, 就可以顺利启动系统。
原因是什么呢?EFI启动没有默认的启动选项,加个启动选项就可以了
- Boot Manger
选择Add Option,里面选择Boot from file(就是把上面选择efi的那个选项加上去),给这个选项价格名字defaultroot
,把这个defaultroot
选项调上去(按shift 和 +),保存并退出:
刚才的选项会变成continue
, 按enter,选择ubuntu
,进入ubuntu引导程序,可以看到如下输出。
手动配置网络
# 配置网络
ip address add $PREFIX dev eth0
# 重启网卡
ifconfig eth0 up
# 桥接模式下,windows主机的网关
ip route add default via 192.168.199.1 dev eth0
添加DNS, 手动修改/etc/resolv.conf
nameserver 8.8.8.8
然后ping百度就可以了。
通过ssh使用windows连接centos 上的qemu ubuntu arm64虚拟机
apt-get install openssh-server
systemctl restart sshd && systemctl enable ssh
然后可以通过连接eth0 ip地址即可。