NetInstall Service Transfer


With Mac OS X Server Apple introduced NetBoot which allows potentially diskless Mac’s to load their operating system ranging from Mac OS 8.6 all the way to macOS Mojave 10.14.6 . As the service evolved options for easy creation of Mac OS X installers (NetInstall) became available and these could be created with System Image Utility. Another option is NetRestore where an administrator created custom images preinstalled with applications, and with customised settings including connection to a directory service like Open Directory. Apple announced that NetInstall would be discontinued from macOS Server after macOS High Sierra, however the System Image Utility was still present in macOS Mojave and was removed from macOS Catalina. Apple advised users to switch from macOS Server to macOS to run NetInstall services and produced a service migration guide which didn’t entirely cover a successful migration: https://developer.apple.com/support/downloads/macOS-Server-Service-Migration-Guide.pdf

If you’ve been running one of those migrated NetInstall services you may have discovered that a recent macOS Sonoma update has broken it; this is due to a change in tftp launch parameters : End of NetInstall on macOS Sonoma 14.4 . Whilst you might be able to fight macOS Sonoma to provide the service for a little longer there are only another couple of options including not updating your macOS Sonoma installation which I don’t recommend; it is March 2023 at the time of writing and macOS Ventura (the previous major macOS release) will likely be receiving security updates most of the way through 2025, so this is a much better option than refusing to keep macOS Sonoma up to date. At the end of security update availability the machine can be disconnected from the internet and serve your local network only. You can also consider hosting NetInstall services with Linux hosted options, however if serving multiple images this is not as ideal as using macOS as there are certain limitations like being unable to select an individual NetInstall image from a clients System Preferences; you need to reboot and hold down the option key to and select the image from there.

Preparations – The Current Server

Stop all NetBoot related services on the current NetBoot server, even if it’s a broken Sonoma one. Leave all files in place for now and enable Remote Login (ssh) if it isn’t on already. Make sure you take a note of the servers IP address. Please note that I’m writing all this from memory so if any of the following commands don’t work please leave me a comment and I’ll make the required correction(‘s).

Stop Services:
  • sudo launchctl unload -w /System/Library/LaunchDaemons/bootps.plist
  • sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist
  • sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.nfsd.plist
  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

Preparations – The New Old Server

I recommend the use of a virtual machine for ease of maintenance and portability. I use Parallels Desktop Pro on Apple Silicon. When using a virtual machine be sure to bridge the Network to an Ethernet connection; NetBoot has never supported AirPort although it will likely work slowly. Please also use a macOS version older than 14.4 as this will not work; macOS Ventura is an ideal choice for a new old server.

Create Folders

sudo mkdir -p /private/tftpboot/NetBoot /Library/NetBoot /Library/WebServer/Documents/NetBoot

Copy Files & Configuration from Old Server
  • cd /Library/NetBoot
  • sudo scp -r username@ipaddressofoldserver:/Library/NetBoot/NetBootSP0 ./
  • sudo scp -r username@ipaddressofoldserver:/Library/NetBoot/NetBootClients0 ./
  • sudo cd /etc
  • sudo scp -r username@ipaddressofoldserver:/etc/bootpd.plist ./
  • sudo scp -r username@ipaddressofoldserver:/etc/exports ./
Optional Step

If you want to preserve individual client Mac boot image selections you can copy the /var/db/bsdpd_clients from the old server to the corresponding location on the replacement server.

Create the Required Symlink’s
  • sudo ln -s /Library/NetBoot/NetBootSP0 /private/tftpboot/NetBoot/NetBootSP0
  • sudo ln -s /Library/NetBoot/NetBootSP0 /Library/WebServer/Documents/NetBoot/NetBootSP0
  • sudo ln -s /Library/NetBoot/NetBootSP0 /Library/NetBoot/.sharepoint
  • sudo ln -s /Library/NetBoot/NetBootClients0 /Library/NetBoot/.clients
Start The Services
  • sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.nfsd.plist
  • sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist
  • sudo launchctl load -w /System/Library/LaunchDaemons/bootps.plist

Job Done!

Your service should now be running from the new old server in the way it did with the previous. At this point I recommend starting up some old Mac’s and seeing if you can get a NetInstall image to boot. If you have problems then the following link has lots of helpful troubleshooting advice, although I’ve noticed that my macOS Ventura server doesn’t seem to offer bootpd activity in /var/log/system.log which makes things more difficult to diagnose.

Maybe Coming Soon?

I am thinking of trying to reenable my Mac OS 9 NetBoot image which needs to be served over AFP which is not part of macOS these days. I have a theory that I could install Netatalk from MacPorts and create the NetBootSP0 and NetBootClients0 guest accessible shares and maybe get my old NetBoot1 enabled PowerMacG4to boot from it. That’s for another day.

Happy NetInstall’ing!