mirror of
https://github.com/foxlet/macOS-Simple-KVM.git
synced 2024-11-23 11:39:42 +01:00
Put user made data in data/
This commit is contained in:
parent
1cac6ff35d
commit
49e8254c77
3 changed files with 36 additions and 20 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -3,4 +3,5 @@ BaseSystem.img
|
||||||
BaseSystem.dmg
|
BaseSystem.dmg
|
||||||
BaseSystem.chunklist
|
BaseSystem.chunklist
|
||||||
template.xml
|
template.xml
|
||||||
version
|
version
|
||||||
|
data/
|
37
README.md
37
README.md
|
@ -1,4 +1,5 @@
|
||||||
# macOS-Simple-KVM
|
# macOS-Simple-KVM
|
||||||
|
|
||||||
Documentation to set up a simple macOS VM in QEMU, accelerated by KVM.
|
Documentation to set up a simple macOS VM in QEMU, accelerated by KVM.
|
||||||
|
|
||||||
By [@FoxletFox](https://twitter.com/foxletfox), and the help of many others. Find this useful? You can donate [on Coinbase](https://commerce.coinbase.com/checkout/96dc5777-0abf-437d-a9b5-a78ae2c4c227) or [Paypal!](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=QFXXKKAB2B9MA&item_name=macOS-Simple-KVM).
|
By [@FoxletFox](https://twitter.com/foxletfox), and the help of many others. Find this useful? You can donate [on Coinbase](https://commerce.coinbase.com/checkout/96dc5777-0abf-437d-a9b5-a78ae2c4c227) or [Paypal!](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=QFXXKKAB2B9MA&item_name=macOS-Simple-KVM).
|
||||||
|
@ -6,9 +7,10 @@ By [@FoxletFox](https://twitter.com/foxletfox), and the help of many others. Fin
|
||||||
New to macOS and KVM? Check [the FAQs.](docs/FAQs.md)
|
New to macOS and KVM? Check [the FAQs.](docs/FAQs.md)
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
You'll need a Linux system with `qemu` (3.1 or later), `python3`, `pip` and the KVM modules enabled. A Mac is **not** required. Some examples for different distributions:
|
You'll need a Linux system with `qemu` (3.1 or later), `python3`, `pip` and the KVM modules enabled. A Mac is **not** required. Some examples for different distributions:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
sudo apt-get install qemu-system qemu-utils python3 python3-pip # for Ubuntu, Debian, Mint, and PopOS.
|
sudo apt-get install qemu-system qemu-utils python3 python3-pip # for Ubuntu, Debian, Mint, and PopOS.
|
||||||
sudo pacman -S qemu python python-pip # for Arch.
|
sudo pacman -S qemu python python-pip # for Arch.
|
||||||
sudo xbps-install -Su qemu python3 python3-pip # for Void Linux.
|
sudo xbps-install -Su qemu python3 python3-pip # for Void Linux.
|
||||||
|
@ -17,39 +19,50 @@ sudo dnf install qemu qemu-img python3 python3-pip # for Fedora
|
||||||
```
|
```
|
||||||
|
|
||||||
## Step 1
|
## Step 1
|
||||||
|
|
||||||
Run `jumpstart.sh` to download installation media for macOS (internet required). The default installation uses Catalina, but you can choose which version to get by adding either `--high-sierra`, `--mojave`, or `--catalina`. For example:
|
Run `jumpstart.sh` to download installation media for macOS (internet required). The default installation uses Catalina, but you can choose which version to get by adding either `--high-sierra`, `--mojave`, or `--catalina`. For example:
|
||||||
```
|
|
||||||
|
```bash
|
||||||
./jumpstart.sh --mojave
|
./jumpstart.sh --mojave
|
||||||
```
|
```
|
||||||
|
|
||||||
> Note: You can skip this if you already have `BaseSystem.img` downloaded. If you have `BaseSystem.dmg`, you will need to convert it with the `dmg2img` tool.
|
> Note: You can skip this if you already have `BaseSystem.img` downloaded. If you have `BaseSystem.dmg`, you will need to convert it with the `dmg2img` tool.
|
||||||
|
|
||||||
## Step 2
|
## Step 2a
|
||||||
|
|
||||||
Create an empty hard disk using `qemu-img`, changing the name and size to preference:
|
Create an empty hard disk using `qemu-img`, changing the name and size to preference:
|
||||||
```
|
|
||||||
|
```bash
|
||||||
qemu-img create -f qcow2 MyDisk.qcow2 64G
|
qemu-img create -f qcow2 MyDisk.qcow2 64G
|
||||||
```
|
```
|
||||||
|
|
||||||
and add it to the end of `basic.sh`:
|
and add it to the end of `basic.sh`:
|
||||||
```
|
|
||||||
|
```bash
|
||||||
-drive id=SystemDisk,if=none,file=MyDisk.qcow2 \
|
-drive id=SystemDisk,if=none,file=MyDisk.qcow2 \
|
||||||
-device ide-hd,bus=sata.4,drive=SystemDisk \
|
-device ide-hd,bus=sata.4,drive=SystemDisk \
|
||||||
```
|
```
|
||||||
> Note: If you're running on a headless system (such as on Cloud providers), you will need `-nographic` and `-vnc :0 -k en-us` for VNC support.
|
|
||||||
|
> **Note**: If you're running on a headless system (such as on Cloud providers), you will need `-nographic` and `-vnc :0 -k en-us` for VNC support.
|
||||||
|
|
||||||
Then run `basic.sh` to start the machine and install macOS. Remember to partition in Disk Utility first!
|
Then run `basic.sh` to start the machine and install macOS. Remember to partition in Disk Utility first!
|
||||||
|
|
||||||
## Step 2a (Virtual Machine Manager)
|
## Step 2b (GNOME Boxes and Virtual Machine Manager)
|
||||||
1. If instead of QEMU, you'd like to import the setup into Virt-Manager for further configuration, just run `sudo ./make.sh --add`.
|
|
||||||
2. After running the above command, add `MyDisk.qcow2` as storage in the properties of the newly added entry for VM.
|
If instead of QEMU, you'd like to import the setup into GNOME Boxes or Virt-Manager for convenience or for further configuration, just run `./make.sh --install` or the shorter `./make.sh -i`.
|
||||||
|
|
||||||
|
No root is needed because images will be installed in your home, with any other your Boxes virtual machine.
|
||||||
|
|
||||||
|
## Step 2c (Headless Systems)
|
||||||
|
|
||||||
## Step 2b (Headless Systems)
|
|
||||||
If you're using a cloud-based/headless system, you can use `headless.sh` to set up a quick VNC instance. Settings are defined through variables as seen in the following example. VNC will start on port `5900` by default.
|
If you're using a cloud-based/headless system, you can use `headless.sh` to set up a quick VNC instance. Settings are defined through variables as seen in the following example. VNC will start on port `5900` by default.
|
||||||
```
|
|
||||||
|
```bash
|
||||||
HEADLESS=1 MEM=1G CPUS=2 SYSTEM_DISK=MyDisk.qcow2 ./headless.sh
|
HEADLESS=1 MEM=1G CPUS=2 SYSTEM_DISK=MyDisk.qcow2 ./headless.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## Step 3
|
## Step 3
|
||||||
|
|
||||||
You're done!
|
**You're done!**
|
||||||
|
|
||||||
To fine-tune the system and improve performance, look in the `docs` folder for more information on [adding memory](docs/guide-performance.md), setting up [bridged networking](docs/guide-networking.md), adding [passthrough hardware (for GPUs)](docs/guide-passthrough.md), tweaking [screen resolution](docs/guide-screen-resolution.md), and enabling sound features.
|
To fine-tune the system and improve performance, look in the `docs` folder for more information on [adding memory](docs/guide-performance.md), setting up [bridged networking](docs/guide-networking.md), adding [passthrough hardware (for GPUs)](docs/guide-passthrough.md), tweaking [screen resolution](docs/guide-screen-resolution.md), and enabling sound features.
|
||||||
|
|
16
make.sh
16
make.sh
|
@ -7,7 +7,9 @@ VMDIR=$PWD
|
||||||
QEMU_HOME="$HOME/.config/libvirt/qemu"
|
QEMU_HOME="$HOME/.config/libvirt/qemu"
|
||||||
BOXES_HOME="$HOME/.local/share/gnome-boxes/images"
|
BOXES_HOME="$HOME/.local/share/gnome-boxes/images"
|
||||||
MACHINE="$(qemu-system-x86_64 --machine help | grep q35 | cut -d" " -f1 | grep -Eoe ".*-[0-9.]+" | sort -rV | head -1)"
|
MACHINE="$(qemu-system-x86_64 --machine help | grep q35 | cut -d" " -f1 | grep -Eoe ".*-[0-9.]+" | sort -rV | head -1)"
|
||||||
|
DATA="data"
|
||||||
OUT="template.xml"
|
OUT="template.xml"
|
||||||
|
DOMAIN_NAME=macOS-Simple-KVM
|
||||||
DEFAULT_STORAGE=60G
|
DEFAULT_STORAGE=60G
|
||||||
DEFAULT_MEMORY=2
|
DEFAULT_MEMORY=2
|
||||||
MEMORY_MULTIPLIER=1048576
|
MEMORY_MULTIPLIER=1048576
|
||||||
|
@ -36,12 +38,12 @@ generate(){
|
||||||
|
|
||||||
## TODO do some input validation
|
## TODO do some input validation
|
||||||
|
|
||||||
if [[ -e version ]]; then
|
if [[ -e $DATA/version ]]; then
|
||||||
NAME="$NAME $(cat version)"
|
NAME="$NAME $(cat $DATA/version)"
|
||||||
fi
|
fi
|
||||||
UUID=$( cat /proc/sys/kernel/random/uuid )
|
UUID=$( cat /proc/sys/kernel/random/uuid )
|
||||||
sed -e "s|BOXESHOME|$BOXES_HOME|g" -e "s|MACOSNAME|$NAME|g" -e "s|BOXESHOME|$BOXES_HOME|g" -e "s|QEMUHOME|$QEMU_HOME|g" -e "s|UUID|$UUID|g" -e "s|MACHINE|$MACHINE|g" -e "s|MACHINE|$MACHINE|g" tools/template.xml.in > $OUT
|
sed -e "s|BOXESHOME|$BOXES_HOME|g" -e "s|MACOSNAME|$NAME|g" -e "s|BOXESHOME|$BOXES_HOME|g" -e "s|QEMUHOME|$QEMU_HOME|g" -e "s|UUID|$UUID|g" -e "s|MACHINE|$MACHINE|g" -e "s|MACHINE|$MACHINE|g" tools/template.xml.in > $DATA/$OUT
|
||||||
echo "$OUT has been generated in $VMDIR"
|
echo "$OUT has been generated in $VMDIR$/$DATA"
|
||||||
}
|
}
|
||||||
|
|
||||||
install(){
|
install(){
|
||||||
|
@ -64,9 +66,9 @@ install(){
|
||||||
cp -Zfu firmware/OVMF_CODE.fd $QEMU_HOME/firmware/
|
cp -Zfu firmware/OVMF_CODE.fd $QEMU_HOME/firmware/
|
||||||
echo Coping OVMF_CODE.fd in $QEMU_HOME/nvram/
|
echo Coping OVMF_CODE.fd in $QEMU_HOME/nvram/
|
||||||
cp -Zfu firmware/OVMF_VARS-1024x768.fd $QEMU_HOME/nvram/
|
cp -Zfu firmware/OVMF_VARS-1024x768.fd $QEMU_HOME/nvram/
|
||||||
echo Copy template.xml to $QEMU_HOME
|
echo Copy $OUT to $QEMU_HOME
|
||||||
cp -Zfu template.xml $QEMU_HOME/macOS-Simple-KVM.xml
|
cp -Zfu $DATA/$OUT $QEMU_HOME/$DOMAIN_NAME.xml
|
||||||
virsh -c qemu:///session define $QEMU_HOME/macOS-Simple-KVM.xml
|
virsh -c qemu:///session define $QEMU_HOME/$DOMAIN_NAME.xml
|
||||||
}
|
}
|
||||||
|
|
||||||
generate
|
generate
|
||||||
|
|
Loading…
Reference in a new issue