Installing Windows Insider beta Windows 11 ARM on a Macbook Pro M1 with UTM/QEMU

I downloaded the Windows Insider beta of Windows 11 for ARM, and took a look at what’s involved to get it installed and up and running under UTM?QEMU on a Macbook Pro with an M1 CPU (ARM).

First, since the download is a .vhdx disk, I used the import option in the UTM frontend to import from the downloaded file. I also checked the option for the Spice drivers:

After starting to boot, the installer requires a network connection and it appears to get stuck:

Articles such as this one recommend to press Shift-F10 to get to a command prompt, and then enter this command to continue with the install skipping the requirement for a network connection: oobe\bypassnro

At this point the installer reboots and restarts, and this time you get an additional option on this dialog allowing you to skip the network requirement during installation:

After a short setup of a couple of minutes, Windows 11 desktop!

Next, the resolution seems to be fixed at 800×600, so knowing I checked the box in UTM for the Sprice/virtio drivers, I noticed there was a CDROM iso mounted on drive D:

Running the installer, it started up, and keeping all the defaults for now, installed without any issue:

All in all, pretty easy, only about 20 mins setup and it seems pretty snappy so far!

XCode Command Line Tools no longer working after upgrade to MacOS Ventura (quick fix!)

This seems to be a recurring issue after every major OS update. You need to reinstall XCode and the Command Line Tools to get them working again.

Trying a ‘git status’ after upgrading to Ventura over the weekend, I get this error:

 > git status
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

To fix this you need to reinstall the XCode Command Line Tools (described here) with:

xcode-select --install

Press Install when prompted:

After the install completes, restart your Terminal and you should be good to go.

UTM frontend for QEMU on M1 MacBook Pro: Creating a VM and installing Windows 98 (part 1 – MSCDEX driver issues)

tldr; I couldn’t get the boot floppies to recognize the cdrom iso when using QEMU was configured with UTM, but runing QEMU from the shell with the same floppy and cdrom iso imaged worked completely fine. The following config steps maybe useful if you’re running into the same issues, but if you’ve managed to get a Windows 98 working under UTM leave a comment and let me know!

I previously played around with the UTM frontend for QEMU on my M1 MacBook Pro, and thought I’d give installing Windows 98 a go.

Using UTM 4.01 beta, from the first menu I selected the Windows option:

On the next page I configured the Windows 98 iso and disabled the UEFI boot option:

Next I configured the VM with i386 emulation, 256MB, and a 1GB disk::

Next I added a removable disk, type floppy, and attached a Windows 98 floppy disk boot image:

Booting. up, not matter what option I use, it wouldn’t boot from the floppy disk image:

I’m not sure if this is an issue with this 4.0.1 beta, but I tried multiple .img floppy images, and none of them would boot.

Next I tried 4.0.0 beta and had the same issue. A quick search on the UTM project’s github site didn’t find any similar issues. After testing different options, I found that the default option in the VM setup menus to add a boot iso apparently assumes that iso is actually bootable, and then if it’s not it doesn’t even seem to try booting from the floppy, and strangely reports the error “Boot failed: could not read the boot disk”

What I found did work was to avoid using the Windows option on the first page of dialogs, and use the Custom/Other option instead. On the next page you can again configure the boot iso, but since the Windows 98 iso I have is not bootable and we need to use a boot floppy, check the ‘Skip ISO boot’ option instead. We’ll add a floppy for the boot disk, a cdrom iso, and then we can correctly boot:

Now booting up we get the install menu from the boot floppy:

This disk image is currently unformatted, so we get the messages about formatting it with fdisk first before continuing:

From the fdisk menu select option 1 to create a DOS Primary partition:

Now we’re prompted to restart:

After rebooting, the VM attempts to boot from c: but it’s still blank at this point, this was the same issue during the Windows 95 install too. Press Esc when prompted to get the boot menu and select the floppy:

After rebooting now we’re got issues where it can’t see the cdrom dirive and the MSCDEX driver is unable to load a driver:

At this point, I obviously don’t have the right drivers to read from the cdrom iso image, but remembering it worked ok with the Windows 95 boot disk, I booted from that floppy images and selected the NEC driver which worked before:

… well that didn’t work either, it still can’t load the drivers for the cdrom iso. At this point I abandoned the boot floppy and cdrom iso and tried a bootable iso (the Second Edition OEM Full is a bootable cd, from https://winworldpc.com/product/windows-98/98-second-edition )

At the point where is tries to load MSCDEX, it also fails. At this point I’m thinking UTM is setting some option for the cdrom drive that is not supported by MSCDEX, which is weird because I know I’ve installed Windows 98 just using qemu-system-i386 before with these same boot disks and isos and it worked fine.

If anyone has exact steps and options to get the Windows 98 installer to see a cdrom iso with UTM, let me know, because at this point I cut my losses and went back to just using qemu from the cli instead.

MacOS curl error: “zsh: no matches found”

I’ve seen this error before with MacOS’s zsh and I can never remember what the issue is:

> curl https://localhost:8080/example?email=test
zsh: no matches found: https://localhost:8080/example?email=test

You can get this error with multiple different commands for the same reason. The ‘?’ in the param to curl is interpreted as a substitution wildcard character. To avoid the issue, either escape the ? as \? or just wrap the whole url in double quotes.