Tired of consumer level wifi? Don’t want to afford Ruckus or Aerohive ?
UniFi isn’t a bad compromise. Features like multiple SSID, VLANs.
UniFi doesn’t offer a package or installer for FreeBSD. They do have a zip file. There are certain dependencies that should be installed before firing it up.
FreeBSD install
Standard install . Nothing fancy.
Packages to install
Things you need to have installed
1archivers/snappy
2archivers/snappy-java
3audio/alsa-lib
4databases/mongodb
5devel/libpthread-stubs
6devel/pcre
7graphics/giflib
8java/java-zoneinfo
9java/javavmwrapper
10java/openjdk8
11java/openjdk8-jre
12lang/python2
13lang/python27
14lang/v8
15print/freetype2
16x11-fonts/dejavu
17x11-fonts/fontconfig
18x11-fonts/libfontenc
19x11-fonts/mkfontdir
20x11-fonts/mkfontscale
21x11-toolkits/libXt
22x11/dmxproto
23x11/fixesproto
24x11/inputproto
25x11/kbproto
26x11/libICE
27x11/libSM
28x11/libX11
29x11/libXau
30x11/libXdmcp
31x11/libXext
32x11/libXfixes
33x11/libXi
34x11/libXinerama
35x11/libXrender
36x11/libXtst
37x11/libxcb
38x11/recordproto
39x11/renderproto
40x11/xextproto
41x11/xproto
pkg install ${pkg}
Don’t forget to read the readme.txt in case things have changed.
UniFi install script
1#!/bin/sh
2
3# pkg found at https://www.ubnt.com/downloads/unifi/5.2.9/UniFi.unix.zip
4set -e
5
6PATH="/bin:/usr/bin:/usr/local/bin"
7
8while getopts "v:t" COMMAND_LINE_ARGUMENT ; do
9 case "${COMMAND_LINE_ARGUMENT}" in
10 v) version=${OPTARG}
11 ;;
12 t) test_mode="YES"
13 ;;
14 \?) echo "-v <version> is required, -t is optional"
15 exit 1
16 ;;
17 esac
18done
19
20cmd_pfx=""
21if [ "${test_mode}" = "YES" ]; then
22 echo "Test Mode"
23 cmd_pfx="echo Would issue"
24fi
25rm=`which rm`
26mv=`which mv`
27ln=`which ln`
28tar=`which tar`
29fetch=`which fetch`
30unzip=`which unzip`
31mongod=`which mongod`
32
33base_dir=`/usr/local`
34
35echo "creating data tarball"
36cd ${base_dir}/UniFi
37${cmd_pfx} ${tar} -cf ../data.tgz data
38cd ${base_dir}
39echo "deleting snappy"
40${cmd_pfx} ${rm} -f UniFi/lib/snappy-java-1.0.5.jar
41echo "deleting unifi"
42${cmd_pfx} ${rm} -rf UniFi
43echo "fetching new unifi"
44${cmd_pfx} ${fetch} https://www.ubnt.com/downloads/unifi/${version}/UniFi.unix.zip
45echo "renaming unifi to include version"
46${cmd_pfx} ${mv} UniFi.unix.zip UniFi-${version}.unix.zip
47echo "unzipping"
48${cmd_pfx} ${unzip} UniFi-${version}.unix.zip
49echo "deleting any pre-existing directory of the same name"
50${cmd_pfx} ${rm} -rf UniFi-${version}
51echo "moving unifi to unifi-${version}"
52${cmd_pfx} ${mv} UniFi UniFi-${version}
53echo "linking to unifi"
54${cmd_pfx} ${ln} -s UniFi-${version} UniFi
55echo "linking mongod"
56cd ${base_dir}/UniFi/bin
57${cmd_pfx} ${ln} -sf ${mongod} mongod
58echo "linking snappy"
59cd ${base_dir}/UniFi/lib
60snappy=`ls snappy-java*.jar`
61echo ${snappy}
62${cmd_pfx} ${ln} -sf /usr/local/share/java/classes/snappy-java.jar ${snappy}
63echo "extracting data tarball"
64cd ${base_dir}/UniFi
65tar -xf ../data.tgz
66echo "done"
67# EoF
UniFi rc script
Enable unifi in rc.conf
1sysrc unifi_enable=YES
Copy this to /usr/local/etc/rc.d/ and make it executable
1#!/bin/sh
2
3# REQUIRE: FILESYSTEMS
4# REQUIRE: NETWORKING
5# PROVIDE: unifi
6
7. /etc/rc.subr
8
9name="unifi"
10rcvar="unifi_enable"
11start_cmd="unifi_start"
12stop_cmd="unifi_stop"
13
14pidfile="/var/run/${name}.pid"
15
16load_rc_config ${name}
17
18unifi_start() {
19 if checkyesno ${rcvar}; then
20 echo "Starting UniFi controller. "
21
22 # Open up netcat to listen on port 8080, and then close the connection immediately, then quit.
23 # This works around the long startup delay. Thanks to gcohen55.
24 echo "" | nc -l 127.0.0.1 8080 >/dev/null &
25
26 # The process will run until it is terminated and does not fork on its own.
27 # So we start it in the background and stash the pid:
28 /usr/local/bin/java -jar /usr/local/UniFi/lib/ace.jar start &
29 echo $! > $pidfile
30
31 fi
32}
33
34unifi_stop() {
35
36 if [ -f $pidfile ]; then
37 echo -n "Signaling the UniFi controller to stop..."
38
39 # This process does take a while, but the stop command finishes before
40 # the service is actually stopped. So we start it in the background:
41 /usr/local/bin/java -jar /usr/local/UniFi/lib/ace.jar stop &
42
43 # Get the pid of the stopper:
44 stopper=$!
45
46 # Wait until the stopper finishes:
47 while [ `pgrep $stopper` ]; do
48 echo -n "."
49 sleep 5
50 done
51
52 echo " acknowledged."
53 echo -n "Waiting for the UniFi controller to stop (this can take a long time)..."
54
55 # ...then we wait until the service identified by the pid file goes away:
56 while [ `pgrep -F $pidfile` ]; do
57 echo -n "."
58 sleep 5
59 done
60
61 # Remove the pid file:
62 rm $pidfile
63
64 echo " stopped.";
65 else
66 echo "There is no pid file. The controller may not be running."
67 fi
68}
69
70run_rc_command "$1"
Results
Comments