As a reminder to myself more than anything: when trying to run the Ubiquiti UniFi controller software on FreeBSD, say in a FreeNAS jail like I do, remember that the provided snappy library that the controller software uses for on-the-wire compression between itself and your access points doesn’t work (at least at the time of writing).

Instead, you need to link in the version provided by the OpenJDK 8 distribution you use to run the controller.

Broadly speaking (and this applies to the modern 5.5 controller branch that I lost 4 hours to while diagnosing this, so your mileage may vary on older or newer versions):

service unifi stop # or whatever you use to stop the controller
cd <path to your UniFi install>/lib
mv snappy-java- snappy-java-
ln -s /usr/local/share/java/classes/snappy-java.jar snappy-java-
service unifi start

The symptom that you’re looking for is that your APs don’t adopt and just sit there in an adoption loop. If you SSH into one of your APs and type info, you’ll get a Status: Server Reject (<your inform URI>) error. If the server is rejecting the AP and won’t adopt it, yet all other signs are pointing to the controller and APs being able to communicate, then I bet the controller and AP can’t communicate properly due to snappy.

So remember to override the provided snappy with the FreeBSD version if you’re provisioning your controller on a FreeBSD system like I am. The general advice likely applies to Linux as well (Raspberry Pis are popular as UniFi controllers).