1

概述

主力电脑使用Mac的情况下,有的项目会需要Linux环境来编译项目。这个时候有很多选择,比如docker容器(docker mac desktop 今年开始对200人以上团队的公司收费了)、服务器开发机等等。

当然还有就是安装Linux虚拟机(virtual machine),成熟的商业版虚拟机环境提供商VirtualBox, Parallell等等。本文介绍了在mac osx x86版本上使用Linux常用的虚拟机qemu和和管理工具libvirt搭建Linux虚拟机。

qemulibvirt是啥关系?

qemu是实际的虚拟机,而用来配置qemu的参数有很多。libvirt可以理解为是用来配置管理参数的。

本文接下来记录了安装Ubuntu 20.0.4 LTS服务器版本的流程。

安装virshqemu

首先使用Homebrew安装virshqemu

brew install libvirt qemu

另一个,从Github拉取qemu的源代码后再进行build安装qemu的方法是

git clone https://github.com/qemu/qemu.git
cd qemu
mkdir build
cd build
../configure
make

从源码安装qemu可以参考qemu wiki

准备Ubuntu的镜像文件和virsh的配置文件

Ubuntu镜像文件

准备Ubuntu的镜像安装文件,从发行版的官网选择镜像文件,这里使用的是Ubuntu 20.0.4 LTS服务器的版本。

这里假设我们存放镜像文件的的路径是

~/Downloads/ubuntu-20.04.4-live-server-amd64.iso

virsh配置文件

准备一个文件夹vm_ubuntu存放配置文件和虚拟机qcow2文件。

mkdir vm_ubuntu
cd vm_ubuntu

这里假设vm_ubuntu文件夹的路径是

~/Documents/vm_ubuntu/

这里我们需要创建一个qcow2的文件作为虚机的镜像和硬盘,使用到了qemu-img的命令。

qemu-img create -f qcow2 ubuntu.qcow2 50g

准备工作完成了一半,接下来是最重要的virsh配置文件的准备。

文件名 ubuntu_server.xml,文件内容如下。

<domain type='qemu' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
    <name>ubuntu_server</name>
    <uuid>9ba74175-00e8-4837-a0ff-00ac74b732cb</uuid>
    <memory unit='GB'>2</memory>
    <cpu mode='custom'>
        <model>Westmere</model>
    </cpu>
    <vcpu>2</vcpu>
    <features>
        <acpi/>
        <apic/>
    </features>
    <os>
        <type arch='x86_64' machine='q35'>hvm</type>
        <bootmenu enable='yes'/>
    </os>
    <clock offset='localtime'/>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash>
    <pm>
        <suspend-to-mem enabled='no'/>
        <suspend-to-disk enabled='no'/>
    </pm>
    <devices>
        <emulator>/usr/local/bin/qemu-system-x86_64</emulator>
        <controller type='usb' model='ehci'/>
        <disk type='file' device='disk'>
            <driver name='qemu' type='qcow2'/>
            <source file='~/Documents/vm_ubuntu/ubuntu.qcow2'/>
            <target dev='vda' bus='virtio'/>
        </disk>
        <disk type='file' device='cdrom'>
            <source file='~/Downloads/ubuntu-20.04.4-live-server-amd64.iso'/>
            <target dev='sdb' bus='sata'/>
        </disk>
        <console type='pty'>
            <target type='serial'/>
        </console>
        <input type='tablet' bus='usb'/>
        <input type='keyboard' bus='usb'/>
        <graphics type='vnc' port='5900' listen='127.0.0.1'/>
        <video>
            <model type='virtio' vram='16384'/>
        </video>
    </devices>
    <seclabel type='none'/>
    <qemu:commandline>
        <qemu:arg value='-machine'/>
        <qemu:arg value='type=q35,accel=hvf'/>
        <qemu:arg value='-netdev'/>
        <qemu:arg value='user,id=n1,hostfwd=tcp::2000-:22'/>
        <qemu:arg value='-device'/>
        <qemu:arg value='virtio-net-pci,netdev=n1,bus=pcie.0,addr=0x19'/>
    </qemu:commandline>
</domain>

Build和运行虚机

按照顺序调用命令来构建虚机

virsh define ubuntu_server.xml

运行虚机

virsh start ubuntu_server

这个时候,我们需要VNC来访问虚机的可交互界面,这里使用TigerVNC

按照上述的配置,访问地址和端口为

127.0.0.1:5900

在一次启动虚机的时候需要按ctrl+shift+delet,之后按esc,剩下的就是标准的Ubuntu安装流程,这里不做叙述。

关闭虚机的命令

virsh shutdown ubuntu_server

或者删除虚机(注意备份)

virsh destroy ubuntu_server

更多关于virsh配置文件需要注意的地方

因为参数过多,就不一一解释,这里来说说CPU的架构,经测试目前mac上面只能构建SandyBridge之前的x86_64架构的虚拟机,这里我们定义是Westmere架构的cpu。

如果想多了解你安装的qemu支持的虚拟机型号和cpu型号可以调用下面的命令。

qemu-system-x86_64 -machine help

q35型号机器对应的cpu型号列表。

qemu-system-x86_64 -machine q35 -cpu help

另外提醒这里

...
<source file='~/Documents/vm_ubuntu/ubuntu.qcow2'/>
...
<emulator>/usr/local/bin/qemu-system-x86_64</emulator>
...
<source file='~/Downloads/ubuntu-20.04.4-live-server-amd64.iso'/>
...

需要完整的路径比如

/usr/data/vm_ubuntu/ubuntu.qcow2

此外,qemu-system-x86_64还需要定义可执行文件的存放路径,查找路径可以使用命令。

which qemu-system-x86_64

SantaHenry
9 声望0 粉丝