mirror of
https://github.com/tailscale/tailscale.git
synced 2024-12-02 06:25:37 +00:00
8fad8c4b9b
updates tailcale/corp#22371 Adds custom macOS vm tooling. See the README for the general gist, but this will spin up VMs with unixgram capable network interfaces listening to a named socket, and with a virtio socket device for host-guest communication. We can add other devices like consoles, serial, etc as needed. The whole things is buildable with a single make command, and everything is controllable via the command line using the TailMac utility. This should all be generally functional but takes a few shortcuts with error handling and the like. The virtio socket device support has not been tested and may require some refinement. Signed-off-by: Jonathan Nobels <jonathan@tailscale.com>
85 lines
2.3 KiB
Markdown
85 lines
2.3 KiB
Markdown
# macOS VM's for tstest and natlab
|
|
|
|
## Building
|
|
|
|
```
|
|
%make all
|
|
```
|
|
|
|
Will build both the TailMac and the VMHost app. You will need a developer account. The default bundle identifiers
|
|
default to tailscale owned ids, so if you don't have (or aren't using) a tailscale dev account, you will need to change this.
|
|
This should build automatically as long as you have a valid developer cert. Signing is automatic. The binaries both
|
|
require proper entitlements, so they do need to be signed.
|
|
|
|
There are separate recipes in the makefile to rebuild the individual components if needed.
|
|
|
|
All binaries are copied to the bin directory.
|
|
|
|
You can generally do all interactions via the TailMac command line util.
|
|
|
|
## Locations
|
|
|
|
Everything is persisted at ~/VM.bundle
|
|
|
|
Each vm gets it's own directory under there.
|
|
|
|
RestoreImage.ipsw is used to build new VMs. You may replace this manually if you wish.
|
|
|
|
Individual parameters for each instance are saved in a json config file (config.json)
|
|
|
|
## Installing
|
|
|
|
### Default a parameters
|
|
|
|
The default virtio socket device port is 51009
|
|
The default server socket for the virtual network device is /tmp/qemu.sock
|
|
The default memory size is 4Gb
|
|
The default mac address for the socket based network is 5a:94:ef:e4:0c:ee
|
|
The defualt mac address for normal ethernet is 5a:94:ef:e4:0c:ef
|
|
|
|
All of these parameters are configurable.
|
|
|
|
### Creating and managing VMs
|
|
|
|
To create a new VM (this will grab a restore image if needed). Restore images are large. Installation takes a minute
|
|
```
|
|
TailMac create --id my_vm_id
|
|
```
|
|
|
|
To delete a new VM
|
|
```
|
|
TailMac delete --id my_vm_id
|
|
```
|
|
|
|
To refresh an existing restore image:
|
|
```
|
|
TailMac refresh
|
|
```
|
|
|
|
To clone an existing vm (this will clone the mac and port as well)
|
|
```
|
|
TailMac clone --id old_vm_id --target-id new_vm_id
|
|
```
|
|
|
|
To reconfigure a vm with a specific mac and a virtio socket device port:
|
|
```
|
|
TailMac configure --id vm_id --mac 11:22:33:44:55:66 --port 12345 --ethermac 22:33:44:55:66:77 --mem 4000000000 --sock "/var/netdevice.sock"
|
|
```
|
|
|
|
## Running a VM
|
|
|
|
MacHost is an app bundle, but the main binary behaves as a command line util. You can invoke it
|
|
thusly:
|
|
|
|
```
|
|
TailMac --id machine_1
|
|
```
|
|
|
|
You may invoke multiple vms, but the limit on the number of concurrent instances is on the order of 2.
|
|
|
|
To stop a running VM (this is a fire and forget thing):
|
|
|
|
```
|
|
TailMac stop --id machine_1
|
|
```
|