一、问题
在使用qemu构建arm64的虚拟机时,虚拟机没有网络,桥接方式相对麻烦,我只是需要联网更新即可。与宿主机的通信我使用共享文件夹即可满足要求。
使用指令启动虚拟机时,网络部分的参数为
-net user,hostfwd=tcp::10022-:22
其中 hostfwd 将宿主机的 10022 端口转发到虚拟机的 22 端口,可以通过 SSH 连接到虚拟机。运行时提示 user 不支持:
使用
qemu-system-aarch64 --help
发现Network options一栏,没有-netdev user 这一项:
切换为
qemu-system-arm --help
则有这一项:
二、解决过程
1、配置 --enable-user
由于编译源码时使用的 target-list="aarch64-softmmu",那么有可能就是没有开启user。
./configure --enable-kvm --enable-debug --enable-vnc --target-list="aarch64-softmmu"
百度查询该问题都没有提到,默认都是开启该功能。
于是在配置 configure 时添加 --enable-user 选项,重新编译源码:
./configure --enable-kvm --enable-debug --enable-vnc --enable-user --target-list="aarch64-softmmu"
make -j8
sudo make install
执行
qemu-system-aarch64 --help
仍然没有该选项,并且执行启动虚拟机指令依然提示没有 user选项。
2、配置 slirp
查看 configure 执行的结果,找到 Network 一栏,发现只有最后一项开启。
slirp 是一个用户空间的网络重定向器,它允许 qemu 的虚拟机通过宿主机的主机网络进行网络通信。当使用 user 网络模式时,qemu 会自动启用 slirp。也就是说,如果不开启 slirp,就无法使用 user。
更改 configure 命令:
./configure --enable-kvm --enable-debug --enable-vnc --enable-user --enable-slirp --target-list="aarch64-softmmu"
执行结果:
make
sudo make install
三、验证
执行
qemu-system-aarch64 --help
可能会提示没有 libslirp.so.0 库,安装即可:
sudo apt-get install libslirp0
再次执行,可以看到已经有 user 选项:
另外新的指令的网络设置部分为:
-netdev user,id=net0,hostfwd=tcp::10022-:22 \
-device virtio-net-pci,netdev=net0