Update: 11/11/19 – Brandon contributed a super handy function you can add to your .bashrc file to automate the entire process below.
I recently completed a deployment of several Ubiquiti UniFi UAP-AC-PRO access points and so far I’ve been very impressed with their performance.
One of the best things about Ubuqiti is that the UniFi controller software is completely free.
Ubiquiti provides a Linux package for Debian /Ubuntu but in order to install UniFi on Centos or any other non Debian based distro you must use their Linux DIY package.
The DIY version of the software isn’t very well documented and has a couple of caveats.
- The auto update feature of the UniFi controller software does not work.
- The configuration backup and restore feature does not work.
Since Ubiquiti bundles new versions of the access point firmware with the UniFi controller software it is necessary to upgrade UniFi in order to deploy new AP firmware versions.
This creates a slightly annoying issue since the UniFi software can’t be automatically upgraded.
Furthering frustrations the Linux DIY package doesn’t really provide any useful instructions on the proper way to perform this upgrade.
I decided to share the procedure I’ve been using to upgrade the software to help out the other Centos Linux users out there.
These steps have been tested on Centos 7.0 but they should work for most other distros too. If you have UniFi installed somewhere besides /opt then you will need to change the paths in the commands below.
Step 1: Stop the UniFi service
The UniFi service must be stopped before you can proceed with the upgrade.
service unifi stop
Step 2: Backup the current configuration
tar -C /opt/UniFi -zcpvf /root/backup.tar.gz data
You may see a message that one of the journal files changed while being read, this is normal and can be ignored.
Step 3: Download the new UniFi package
The current release version of the UniFi DIY package is 5.4.11.
Ubiquiti recently dropped support of the DIY packages. They have stopped posting the download links but the files are still present. To find the links to the new versions of the DIY packages you need to register for access to the beta forums. The new release posts contain the download links for the DIY packages.
wget https://www.ubnt.com/downloads/unifi/5.4.11-6cbeae59e7/UniFi.unix.zip /root/UniFi.unix.zip
Take a look at the Ubiquiti forums for more information about the lack of support for DIY packages. Also, please vote for the feature request to provide officially supported RPM packages for the UniFi software.
Step 4: Unzip the new version and fix the ownership
unzip -qo /root/UniFi.unix.zip -d /opt
chown -R ubnt:ubnt /opt/UniFi
Step 5: Restore the configuration backup
tar -C /opt/UniFi -xzpvf backup.tar.gz
Step 6: Start the UniFi service
service unifi start
Verifying the Upgrade
To verify the new version was properly installed log into the UniFi web interface and go to the Settings \ Maintenance menu. The version is indicated under the server information section of the maintenance page.
Nize. Was just looking for something like this to update my cloud controller.
Now I just need to find a way to setup Remote user VPN authentication on that same cloud controller to have a single point of managing user access. Any thoughts?
Hi Sam. I just used your instructions to upgrade to UniFi Controller version 5.0.6 on a Centos 7 box. It worked flawlessly. Thanks.
Glad to hear, thank you for the feedback!
Hi Sam,
Great instructions. Did not work the first time. There already was a UniFi.unix.zip file so the new downloaded had a different name. After that, all good…
Thanks for the note on this. I’ve updated the wget command to resolve this issue in the future.
This is AWESOME. Thank you!
Thanks. I have been looking for more documentation on upgrading my centos7 unifi controller. I found the documentation to standing it underwhelming. So it is nice to find this simple upgrading KB.
This was a super helpful step-by-step. However, I found some inefficiencies I’d like to offer a suggestion to improve. After going through these steps, you’ll end up with the backup restored to “/opt/UniFi/data/opt/UniFi/data” instead of “/opt/UniFi/data”. This makes each subsequent backup even larger because each time you untar it, it will nest the restore inside of “/opt/UniFi/data” in a folder called “opt/UniFi/data”…and the process gets to be pretty slow. In order to speed it up, the initial tar to backup the configuration could be modified to look like this:
tar -C /opt/UniFi -zcpvf /root/backup.tar.gz data
This will change the directory to “/opt/UniFi” and then tar up the data directory. The addition of the “p” simply preserves the permissions. Then, when it comes time to restore the backup, use this slightly modified untar command (again the “p” preserves the permissions, this time from within the tar as they were when the backup was taken):
tar -C /opt/UniFi -xzpvf backup.tar.gz
To make this process even easier for others, I wrote a small function you can place in your “/root/.bashrc” file (copy from the line just below the “—–” until the “—–” at the bottom):
——————————————
# Upgrade Unifi Controller (requires version)
upgradeUnifi () {
if [ $# -eq 0 ]; then
echo “Must specify upgrade version number. Ex: 5.10.20″
return
fi
datestamp=$(date +”%Y%m%d_%H%M%S”)
echo -n “Downloading UniFi $1…”
wget -O /root/UniFi_$1.unix.zip http://dl.ubnt.com/unifi/$1/UniFi.unix.zip
echo “done”
echo -n “Stopping UniFi service…”
systemctl stop unifi
echo “done”
echo “Backing up /opt/UniFi/data to /root/unifi_backup_$datestamp.tar.gz…”
tar -C /opt/UniFi -zcpvf /root/unifi_backup_$datestamp.tar.gz data
echo “…done”
echo -n “Unzipping UniFi $1…”
unzip -qo /root/UniFi_$1.unix.zip -d /opt
echo “done”
echo -n “Removing new data directory…”
rm -rf /opt/UniFi/data
echo “done”
echo -n “Fixing permissions…”
chown -R ubnt:ubnt /opt/UniFi
echo “done”
echo “Restoring data directory from backup…”
tar -xzvpf /root/unifi_backup_$datestamp.tar.gz -C /opt/UniFi/
echo “…done”
echo -n “Starting UniFi service…”
systemctl start unifi
echo “done”
echo -n “Removing /root/UniFi_$1.unix.zip…”
rm -rf /root/UniFi_$1.unix.zip
echo “done”
}
——————————————
After saving the changes to “/root/.bashrc”, reload the profile by running this:
source /root/.bashrc
…then type “upgradeUnifi “. This requires you to know which version you want to upgrade to. When you log into the controller’s web interface, if a new version is available, it will pop up and tell you which new version is available. Something like “5.11.36”. So, to upgrade to that version, simply type:
upgradeUnifi 5.11.36
The process will download the 5.11.36 version to “/root/UniFi_5.11.36.unix.zip”, stop the UniFi service, backup the “/opt/UniFi/data” directory as a tarball in “/root/unifi_backup_.tar.gz”, unzip the new version, set the permissions on the new version, restore the data directory to “/opt/UniFi”, start the new UniFi service and remove the downloaded “UniFi_5.11.36.unix.zip” upgrade file.
Hope this helps make it much faster to upgrade!
@Sam Kear: Not trying to be presumptions, but feel free to post any of this up higher on your page so others can see it. You have my full permission to do so (since it’s on your blog post anyway 😉 ). Just trying to help.