概述
主力电脑使用Mac的情况下,有的项目会需要Linux环境来编译项目。这个时候有很多选择,比如docker
容器(docker mac desktop 今年开始对200人以上团队的公司收费了)、服务器开发机等等。
当然还有就是安装Linux虚拟机(virtual machine),成熟的商业版虚拟机环境提供商VirtualBox, Parallell等等。本文介绍了在mac osx x86版本上使用Linux常用的虚拟机qemu
和和管理工具libvirt
搭建Linux虚拟机。
qemu
和libvirt
是啥关系?
qemu
是实际的虚拟机,而用来配置qemu
的参数有很多。libvirt
可以理解为是用来配置管理参数的。
本文接下来记录了安装Ubuntu 20.0.4 LTS服务器版本的流程。
安装virsh
和qemu
首先使用Homebrew
安装virsh
和qemu
。
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。