How to run MAC OS VM under KVM /qemu
//DRAFT We will show how to runMAC OS Virtual Machine under KVM /native qemu / This is only in educational purposes.
We are using Cenots 8 OS . BUt this should also work for Cnetos7 (even easier as you can easily download dmg2img rpm for centos7 /rhel7 but at this moment you may only build it from sources for centos 8) For ubuntu there will be some differences but the overall process is similar.
First of all you need to build your qemu from sources. Even if you have qemu/libvirt already installed our custom build should not conflict with it.
Check qemu module:
lsmod | grep kvm
if not listed add:
modprobe kvm
If you installing on environment that already using qemu/libvirt yo uneed to know where is qemu located in order to do not affect it:
whereis qemu qemu: /usr/share/qemu
OK go to /opt and download qemu sources:
git clone git://git.qemu-project.org/qemu.git cd qemu git submodule init git submodule update --recursive git submodule status --recursive git checkout stable-4.2 #or check what stable version exist at this time
Make sure you enabled APPLESMC in Makefile. Add if not exists the next records in Makefile :
# Makefile for QEMU. CONFIG_NE2000_ISA=y CONFIG_HPET=y CONFIG_APPLESMC=y
You may also check all APPLE related settings like with search:
grep "APPLE" -r .
Install gcc if not exists:
yum install gcc
..And dev tools if not installed:
yum groupinstall "Development Tools"
Add depencies:
yum install glib2-devel glibc-utils zlib zlib-devel pixman-devel
OK next configure to build qemu to custom binary
./configure --prefix=/usr/bin/qemundi
# no need: Not sure it need but I've created the target build dir: # mkdir /usr/bin/qemundi make
Next make install:
make install
OK your custom qemu build shoiuld be located at /usr/bin/qemundi/.. Check version:
/usr/bin/qemundi/bin/qemu-system-x86_64 --version QEMU emulator version 4.2.50 (v4.2.0-2711-g29e0855c5a-dirty) Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers
Next we will prepare MAC OS.
cd /opt git clone https://github.com/kholia/OSX-KVM.git cd OSX-KVM
Refer to the git README for actual steps https://github.com/kholia/OSX-KVM However we will show our way here.
fetch installer:
./fetch-macOS.py #if you got error like /usr/bin/env no such file or directory most likely you have only python3 installed then try: # python3 fetch-macOS.py # or install python2
Select the MACOS version desired:
# ProductID Version Build Post Date Title 1 061-26578 10.14.5 18F2059 2019-10-14 macOS Mojave 2 061-26589 10.14.6 18G103 2019-10-14 macOS Mojave 3 041-91758 10.13.6 17G66 2019-10-19 macOS High Sierra 4 041-88800 10.14.4 18E2034 2019-10-23 macOS Mojave 5 041-90855 10.13.5 17F66a 2019-10-23 Install macOS High Sierra Beta 6 061-86291 10.15.3 19D2064 2020-03-23 macOS Catalina 7 001-04366 10.15.4 19E2269 2020-05-04 macOS Catalina 8 001-15219 10.15.5 19F2200 2020-06-15 macOS Catalina 9 061-94403 10.15.6 19G73 2020-07-15 macOS Catalina 10 001-36735 10.15.6 19G2006 2020-08-06 macOS Catalina 11 001-36801 10.15.6 19G2021 2020-08-12 macOS Catalina Choose a product to download (1-11):
Choose 11 for example and it will download neccesary binaries.
Next you need to convert dmg to img with dmg2img tool which currently have no rpm/binaries for centos 8 so we will git clone it from sources and build. BUT you may give a try to use qemu-img utility if your qemu version is higher than 4.11:
qemu-img convert BaseSystem.dmg -O raw BaseSystem.img
In case of no luck try to use dmg2img Install depencies:
yum install bzip2-devel openssl-devel
cd /opt git clone https://github.com/Lekensteyn/dmg2img.git cd dmg2img make make install dmg2img -v dmg2img v1.6.5 (c) vu1tur (to@vu1tur.eu.org)
Go to OSX-KVM dir and convert dmg to img:
cd /opt/OSX-KVM dmg2img BaseSystem.dmg BaseSystem.img
Create a virtual HDD image where macOS will be installed. If you change the name of the disk image from mac_hdd.img to something else, the boot scripts will need updating to point to the new image name.
qemu-img create -f qcow2 mac_hdd_ng.img 128G
Check if libvirtd service is run and usual qemu from repositiries is installed:
systemctl enable libvirtd systemctl start libvirtd systemctl status libvirtd
Setup quick networking by running the following commands.
#you may add these lined into your /etc/rc.local to apply this net after reboot. sudo ip tuntap add dev tap0 mode tap sudo ip link set tap0 up promisc on sudo ip link set dev virbr0 up sudo ip link set dev tap0 master virbr0
Note: If virbr0 network interface is not present on your system try enabling it by using the following commands,
virsh net-start default virsh net-autostart default #If virsh is not installed - install it as well as qemu/libvirt from repositories. Our qemu build should not conflict with any existing as we build it into separate custom named folder.
Now you can install MACOS. Run the boot-macOS-Catalina.sh script to start the installation process.
./boot-macOS-Catalina.sh
If you are running on some dedicated server without GUI you need to edit this script and add vnc option. Edit the boot-macOS-Catalina lines near to the end:
-monitor stdio \ -vga std \ -vnc <your_public_server_ip>:<desired>,password \ -k en-us
Remember to allow the port on firewall OK run now:
./boot-macOS-Catalina.sh
You will got into qemu console. SO you may run also this script under screen and detach later.
- mkdir build
- cd build
- ../configure
- make