Mac Intel to M1 migration
A while back I got a new Mac Studio and needed to migrate to it. So I figured the easiest approach would be to use a Time Machine backup from my Mac Pro, since everything was working there.
The only thing I hadn’t thought about was that the Studio was M1 and the Mac Pro was Intel based, so led to som interesting weirdness. The Mac Pro was also not capable of running Ventura (pet peeve, my two year old Mac Pro cylinder lists as being “late 2013” and can only update to Monterey)
The first thing that happened was some odd gotcha where I would log into the Studio and everything would work for a bit, then suddenly I’d lose network connectivity, or it would just freeze completely.
After a while I figured I’d reboot into safe mode and do a repair … That was my second gotcha.
On every Mac prior to this, you hold down some key combination to get recovery or safe mode. Took a bit of sleuthing to find the new method on Apple Silicon, which now involves how long you hold down the power button.
After getting through that, I did a recovery of the OS, thinking that would fix any random file issues. Sadly that did not fix it, so back to safe mode.
From there, I updated everything I could, and noticed that the Time Capsule restore hadn’t actually restored everything. So I went about installing missing software like Xcode, brew, etc.
Since it had missed brew, my shell had switch back to zsh, so a bit of work to change it to use the bash from brew. But once I did that I saw this weird error on launching a terminal:
panic: load embedded ruleguard rules: rules/rules.go:13: can't load fmt goroutine 1 [running]: github.com/go-critic/go-critic/checkers.init.9() github.com/go-critic/go-critic@v0.6.1/checkers/checkers.go:58 +0x4b4 Error: golangci-lint exit with code 2
No idea why that would happen, just loading bash, right ? Turns out I had installed golangci-lin
t at some point, so this error was actually from that. This took even longer to figure out, but it turns out to be a weird change that homebrew made for arm64 machines: They moved everything from /usr/local
to /opt/homebrew
– so some packages will not run properly unless you tell them to install as arm64.
A bunch more digging and I reinstalled the package with the arch --arm64 brew golangci-lint
which put it in the right place.
Ran into a couple more taps that didn’t use the brew home default, so after some digging I came up with a function
for brew to add to my .bashrc
function brew() { arch --arm64 /opt/homebrew/bin/brew $@; }
Basically that acts like an alias, so that when I type brew
the bash shell runs the longer command with the arguments passed in.
About this time I realized that I’d be running brew install
for months as I had no idea what packages I’d installed over the years on my Mac Pro. Luckily brew has a nifty command to save off your installed software to a file, and install them all at once.
Brew Bundle to the rescue
The process is pretty simple:
- Run
brew bundle dump
on the source machine (Mac Pro in my case) - Copy the file to the new machine (Mac Studio)
- Run
brew bundle install --file Brewfile
on the new machine (Mac Studio) - Get coffee.
Since I had added the shell function to prepend the arch --arm64
all of the packages that were installed went to the /opt/homebrew
location as intended, and no weird panics to deal with.
Git permissions
Opening Sourcetree (my GUI for Git), I got a weird error about permissions. Poking around a bit, I saw that my Projects folder was mostly owned by root after the restore. Fix for that is relatively simple
sudo chown -R <user>:staff ~/Projects/
One last gotcha
I use my Apple Watch to unlock my machines, and for some reason when I tried to turn that on for the Mac Studio, it kept flipping back off.
Spent some time with Apple support, and the watch wasn’t showing up in my supported devices, so we at least got that sorted. Noticed that the Apple Care I thought I had bought for it wasn’t showing up either (pet peeve number two: just past the 60 days from purchase, so Apple won’t sell me the Apple Care+ – why do they not want some additional revuenue?)
Tried quite a few troubleshooting things, then thought, maybe it was because the unlock was still on for the Mac Pro. Turned it off there, rebooted the Mac Studio, turned it on, and everything was happy.
Weirdly I was able to run it back on on the Mac Pro after that, so mystery there.
Conclusion
Migration with Time Machine backup mostly works, there were a few gotchas, to watch for, so hopefully this will save somebody else the weeks of headaches I went through.