Some of the recent work done by the core OpenBSD developers is really incredible. Specifically, the work that has been done for EFI booting of more “modern” hardware has started to open up a whole new vista of machines that we can run our favourite operating system on.
I normally rock the Lenovo Thinkpad x220 and find it to be an outstanding machine for both general purpose computing and software development. However, I have a Macbook Pro 11,1 (Haswell Retina laptop manufactured in late 2013) that I have tried (and failed) in the past to put OpenBSD on. The challenge came from the fact that this particular laptop has USB 3 but not USB 2. The symptom of this is that you are able to use the builtin keyboard when you hit the initial “boot” prompt, but after loading the installer, the keyboard is non-responsive. Using an external USB keyboard didn’t help because the problem is in how the operating system talks to the USB 3 controller.
I started seeing traffic on the misc@ mailing list about people having success with Macbook Air models and the new 12″ Macbook (all very recent vintage machines), so I thought I’d give it a try again. In the end I was able to get everything working really well with a Gnome desktop that did the right thing for the HiDPI retina screen and everything (well, almost everything, I did have to use a USB dongle for WiFi because the builtin one wasn’t recognized).
So given that I had a functional, nearly modern laptop what else should I do but reformat the hard drive and start over! I figured that it would be a nice thing to do for the community to start this bad boy from scratch and document all of the steps along the way. Therefore I turned it off, held down on Command+R and powered it up. For the non cultists reading this, that puts the laptop in “Internet Recovery” mode where you can attach to a WiFi network and it will give you all of the tools to repartition the drive and install the operating system over the Internet. Slooooowwwwwwlllllyyyyyy…..
Once I had the operating system reinstalled and verified that a reboot worked, I figured I was at a clean starting point. Since I want to make my life hard, I thought it would be fun to preserve Mac OS X on this machine and dual boot. To make that happen, I need to shrink the partition and create a new one in the free space created. Unfortunately I could not get that to work to save my life – it always would try to boot the Boot Camp partition as bios and not as EFI which, on my laptop would hang trying to configure a mystery second processor (cpu1) in the system.
Given that, I decided to make my life simple and go back to a single-boot system (which I really wanted anyhow). I leveraged the howto was written by Jasper Lievisse Adriaanse to get the EFI bits on the disk. I’ll detail it step by step here.
First, I created a thumb drive with the latest install58.fs snapshot on it from my favorite Canadian mirror. I then rebooted the laptop with the “Option” key held down and picked the “EFI Boot” partition off of the thumb drive. You’ll be astonished how small the text is so break out those reading glasses if you are over 40 like me!
Once I hit the first prompt from the installer, I jumped to the shell and ran this:
# fdisk -i -b 960 sd0 Do you wish to write new MBR and partition table? [n] y
Now I like to run an encrypted boot drive, so from my favorite tutorial from the bsdnow.tv site, I did the following:
# disklabel -E sd0 > a b offset:  size: [xxxxx] 32g FS type: [swap] > a a offset: [xxxxx] size: [xxxxx] * FS type: [4.2BSD] RAID > w > q # bioctl -c C -l /dev/sd0a softraid0
Make sure you pick a good passphrase that you can remember but would be hard to guess or brute force. Make a note of what your CRYPTO volume is attached as. In my case that is sd2 – this is the “drive” I will be installing to.
Now, run the “install” script and install as you normally would. Make sure you install to the crypto drive that you just created. I normally put 100g in place for just /usr (I don’t break it down) so I can install source and ports and have room to build and then use the remainder of the drive for /home.
Once the install has finished DO NOT REBOOT YET because there is some additional work to do from the EFI tutorial I referenced above.
# /mnt/sbin/newfs_msdos sd0i # mount /dev/sd0i /mnt2 # mkdir -p /mnt2/efi/boot # cp /mnt/usr/mdec/BOOTX64.EFI /mnt2/efi/boot
Now you should be free and clear to reboot the laptop. If all goes well, you should be presented with the passphrase prompt to decrypt your boot partition. Be patient, it took nearly 30 seconds for it to come up on my system. Reminds me of when you don’t have a default boot volume selected on OS X. Oh well, a mystery for another day.
After the reboot and logging in as my root user, I modified /etc/fstab to add “,softdep,noatime” to all of my read/write partitions and also a line for /dev/sd0b as my swap partition.
Now that I have this done, since there isn’t a functional WiFi device (yet) on this platform, I plugged in my handy-dandy little ASUS USB-N10 USB adapter, installed the firmware from http://firmware.openbsd.org (it’s the rsu one) into the /etc/firmware directory using a thu, rebooted and configured my network:
# ifconfig rsu0 nwid MYNETWORK wpakey MYKEY # ifconfig rsu0 up # dhclient rsu0
Now I need to add my PKG_PATH to be able to install binary packages. I added the following to my .profile file:
export PKG_PATH=http://openbsd.cs.toronto.edu/pub/OpenBSD/snapshots/packages/`machine -a`/
After logging out and back in, I then installed my desktop of choice, Gnome as follows based on this undeadly.org post:
# pkg_add gnome# echo 'multicast_host=YES' >> /etc/rc.conf.local # echo 'pkg_scripts="messagebus avahi_daemon gdm" >> /etc/rc.conf.local
A quick reboot then shows me I can log into Gnome. What’s astonishing is that the HiDPI stuff in Gnome seems to be working perfectly out of the box!