I’ve got a couple of Mac Pro 4,1 cheese graters from 2009. For fun, I wanted to install Ubuntu on it. The server and desktop ISOs have too much cruft that I don’t need. I wanted the smallest installation possible. Luckily, Ubuntu has a 20.04 mini.iso that is 74MB. You can grab it from the Ubuntu archive.

Since I couldn’t find any decent resources telling me what did and didn’t work on a Mac Pro 4,1 when installing Ubuntu, I decided to wing it and see what would break.

After burning the mini.iso into a USB flash drive, I restarted the Mac Pro with it. Installation was fine, except it didn’t detect any network adapters.

Turns out the Mac Pro needed the Intel e1000e drivers. After downloading the drivers and unzipping the download, I noticed it was only the source code, no pre-built packages like debs or rpms. To compile it needed GCC, Make, and net-tools. So I’d need to somehow compile the packages on a different Ubuntu box and copy over the files to the Mac Pro and do a ‘make install.’ That’s problematic. There is no way to know how the systems might be different and the drivers may not end up working.

A second option was to grab all the necessary packages, install them on the Mac Pro, then compile and install the e100e drivers on the Mac Pro as well. I decided to fire up a VM using the same mini.iso and downloaded the packages. But how do I grab the packages only and all their dependcies, and their dependencies, and on and on? Googling, I found a few options but none of them worked, except this one from StackOverflow:

apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks 

This dumped out all the necessary packages. I grabbed the packages and put them on a USB stick and copied them over to the Mac Pro. Then I basically followed the instructions on the Intel page above. First, I installed all the deb packages. Then did a ‘make install’ in the src directory of downloaded drivers. To load the drivers, I ran ‘modprobe e1000e.’ To make sure the drivers load after reboot, I did a ‘updated-initramfs -u.’

Verified that the ethernet adapters were showing up by doing an ‘ip addr.’ Now, the system might recognize the device but not enable it. To do so, I ran:

sudo ifconfig enp0s31f6 up # or whatever the name of the ethernet device is

Since networking wasn’t available at installation, there was no configuration for the network adapters. It didn’t know if it should get an IP address from a DHCP server or if it’s already got a static IP, etc. Ubuntu uses Netplan for configuration. There are plenty of examples of what the configuration files should look like at netplan.io.

After setting up netplan, the ethernet drivers were completely functional.