Build Artifacts on macOS (x86 VM)#
This guide walks you through running the Phase 1 build on a macOS machine (any chip) using a Ubuntu 24.04 x86_64 virtual machine in UTM.
The build scripts require Linux. macOS is not directly supported. This guide uses UTM (free) with Ubuntu 24.04 Desktop x86_64 as the build environment.
Performance note: On Apple Silicon Macs, UTM runs x86_64 VMs via QEMU software emulation (TCG) — there is no KVM hardware acceleration for x86 on ARM hosts. The build will complete correctly but will be 3–5× slower than on native x86 hardware. On Intel Macs, QEMU can use HVF acceleration and runs at near-native speed.
Prerequisites#
What |
Where |
|---|---|
macBook (any chip — Apple Silicon or Intel) |
— |
macOS Ventura or later |
— |
UTM (free VM app) |
https://mac.getutm.app |
Ubuntu 24.04 Server amd64 ISO |
https://releases.ubuntu.com/24.04/ |
64 GB free disk space |
For VM + build output |
12 GB RAM free |
8 GB assigned to VM minimum |
Step 1 — Install UTM#
Go to https://mac.getutm.app and click Download.
Open the downloaded
.dmgand drag UTM to your Applications folder.Open UTM. If macOS blocks it: right-click → Open → Open again.
Step 2 — Download Ubuntu 24.04 Server amd64#
Download the Server amd64 ISO from the Ubuntu releases page:
https://releases.ubuntu.com/noble/ubuntu-24.04.4-live-server-amd64.iso
File: ubuntu-24.04.4-live-server-amd64.iso (3.2 GB)
Use the server ISO — the build runs entirely in a terminal inside Docker containers. No desktop environment is needed, and the server ISO is half the size and installs in roughly a third of the time.
Step 3 — Create the Ubuntu VM in UTM#
Open UTM → click Create a New Virtual Machine.
Select Emulate (not Virtualize — x86_64 emulation is required on Apple Silicon; on Intel Mac you may use Virtualize with HVF for better performance).
Select Linux.
Under Boot ISO Image → Browse → select the amd64 ISO you downloaded.
Set:
Architecture: x86_64
RAM: 8192 MB
CPU cores: 12
Storage: 64 GB
Click Save.
Step 4 — Install Ubuntu in the VM#
Click ▶ Play in UTM to start the VM.
Follow the text-based server installer — accept defaults for everything except:
Set a username and password you will remember.
On the storage screen confirm Use entire disk.
On the profile screen set your name, server name, username, and password.
When prompted, select Install OpenSSH server (optional but useful).
Let the install complete (~8–12 min under emulation) and reboot into the VM.
Log in with your username and password at the terminal prompt.
Step 5 — Install Prerequisites Inside the VM#
Open a terminal inside the Ubuntu VM.
Docker#
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# Allow your user to run docker without sudo
sudo usermod -aG docker $USER
newgrp docker
Verify:
docker run --rm hello-world
Make and Git#
sudo apt install -y make git
Step 6 — Clone the Repository#
git clone https://github.com/open-edge-platform/edge-node-infrastructure-blueprint.git
cd edge-node-infrastructure-blueprint
Step 7 — Configure Proxy (corporate networks only)#
If your network requires a proxy, edit proxy.env in the repo root:
nano proxy.env
Fill in:
HTTP_PROXY="http://proxy.mycompany.com:8080"
HTTPS_PROXY="http://proxy.mycompany.com:8080"
NO_PROXY="localhost,127.0.0.0/8"
http_proxy="http://proxy.mycompany.com:8080"
https_proxy="http://proxy.mycompany.com:8080"
no_proxy="localhost,127.0.0.0/8"
On a home or open network, leave all values empty — the build will prompt and you can confirm to proceed without a proxy.
Step 8 — Build the USB Artifacts#
Run from the repository root inside the VM:
make build
This is equivalent to make build MODE=standard-image. No extra flags are required —
the VM is native x86_64 so all Docker images build and run correctly without any
cross-compilation or QEMU user-static setup.
The first build downloads base images, installs packages, and assembles the USB artifacts. Expected duration:
Mac type |
Estimated build time |
|---|---|
Apple Silicon (QEMU TCG emulation) |
2–3 hours |
Intel Mac (HVF acceleration) |
15–30 minutes |
Total end-to-end time on Apple Silicon (UTM setup + Ubuntu install + build): approximately 2–3 hours for a first-time run after the VM is already set up, or 4–5 hours including VM creation and Ubuntu installation.
Build output appears at:
infrastructure/build-artifacts/out/usb-installation-files.tar.gz
Step 9 — Prepare the Bootable USB#
Plug your USB drive into the Mac. In UTM, pass it through to the VM:
With the VM running, click the USB icon in the UTM toolbar.
Select your USB drive from the list to pass it through to the VM.
Inside the VM, identify the USB device:
lsblk
Look for a device like /dev/sda or /dev/sdb with the USB’s capacity.
Extract the build output and run the USB preparation script:
cd infrastructure/build-artifacts/out
sudo tar -xzf usb-installation-files.tar.gz
# Replace /dev/sdX with your actual USB device from lsblk
sudo ./bootable-usb-prepare.sh /dev/sdX usb-bootable-files.tar.gz config-file
Double-check the device path — this will erase the target device.
After the script completes:
In UTM, click the USB icon and disconnect the drive from the VM.
Safely eject it from macOS.
Connect the USB to the target edge node.
Enter the BIOS/UEFI boot menu and boot from the USB.
Troubleshooting#
Symptom |
Cause |
Fix |
|---|---|---|
|
User not in |
|
|
Proxy not configured |
Fill in |
VM very slow / unresponsive |
QEMU TCG on Apple Silicon |
Reduce VM RAM to free host memory; close other apps; increase VM CPU cores |
UTM VM freezes during Docker build |
Insufficient disk |
Ensure VM disk is ≥ 64 GB; delete old Docker images with |
USB device not visible in VM |
Not passed through UTM |
Click USB icon in UTM toolbar → select the drive |
Build fails on Intel Mac with |
HVF not enabled |
In UTM VM settings → CPU → enable Force Multicore and set Architecture to x86_64 |