Тестировалось на версиях UniFi v3.5.7 и v4.2.0.
Комплекс включает в себя Wi-Fi точки доступа UniFi и программный контроллер, который устанавливается на любой компьютер с операционной системой Windows, Mac OS или Linux. Программный контроллер является бесплатным, поэтому стоимость системы UniFi значительно ниже, чем аппаратные контроллеры других производителей. Это позволяет существенно снизить затраты на построение беспроводной сети.
Скачиваем образ RASPBIAN по ссылке downloads.raspberrypi.org/raspbian_latest
Записываем образ на SD карточку с помощью Win32DiskImager или imageUSB
Подключеаем Rasberry PI
Устанавливаем подключение SSH
Логин pi
Пароль raspberry
Далее обновляем репозитарий и систему
sudo apt-get update && sudo apt-get install raspberrypi* raspi-config
sudo raspi-config
reboot
Добавляем пользователя
sudo adduser unifi
Устанавливаем MC коммандер
sudo apt-get install mc
Устанавливаем Oracle Java 7 JDK
sudo apt-get install oracle-java7-jdk
Устанавливаем Mongodb
sudo mkdir /opt/mongodb
cd /opt/mongodb
sudo wget https://github.com/brice-morin/ArduPi/blob/master/mongodb-rpi/mongo/bin/bsondump?raw=true -O bsondump
sudo wget https://github.com/brice-morin/ArduPi/blob/master/mongodb-rpi/mongo/bin/mongo?raw=true -O mongo
sudo wget https://github.com/brice-morin/ArduPi/blob/master/mongodb-rpi/mongo/bin/mongod?raw=true -O mongod
sudo wget https://github.com/brice-morin/ArduPi/blob/master/mongodb-rpi/mongo/bin/mongodump?raw=true -O mongodump
sudo chmod +x *
Скачиваем UniFi
cd /home/pi/
sudo wget http://www.ubnt.com/downloads/unifi/3.2.7/UniFi.unix.zip
или
sudo wget http://www.ubnt.com/downloads/unifi/4.2.0/UniFi.unix.zip
Устанавливаем контроллер UniFi
sudo unzip UniFi.unix.zip
sudo mv UniFi /opt/UniFi
cd /opt/UniFi/bin
sudo ln -fs /opt/mongodb/mongod mongod
Создаем файл /etc/init.d/unifi
для версии 4.2.0
#!/bin/sh
### BEGIN INIT INFO
# Provides: unifi
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts the UniFi admin interface
# Description: Starts the UniFi admin interface.
### END INIT INFO
DAEMON=/usr/bin/java
DAEMON_ARGS="-jar /opt/UniFi/lib/ace.jar start"
start() {
echo "Starting unifi"
start-stop-daemon -b -o -c unifi -S -u unifi -x $DAEMON -- $DAEMON_ARGS
}
stop() {
dbpid=`pgrep -fu unifi $DAEMON`
if [ ! -z "$dbpid" ]; then
echo "Stopping unifi"
start-stop-daemon -o -c unifi -K -u unifi -x $DAEMON -- $DAEMON_ARGS
fi
}
status() {
dbpid=`pgrep -fu unifi $DAEMON`
if [ -z "$dbpid" ]; then
echo "unifi: not running."
else
echo "unifi: running (pid $dbpid)"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
stop
start
;;
status)
status
;;
*)
echo "Usage: /etc/init.d/unifi {start|stop|reload|force-reload|restart|status}"
exit 1
esac
exit 0
для версии 3.5.7
#!/bin/bash
# chkconfig: 2345 95 20
# description: UniFi system
# processname: UniFi
ctrl_start()
{
sudo java -jar /opt/UniFi/lib/ace.jar start &
}
ctrl_stop()
{
sudo java -jar /opt/UniFi/lib/ace.jar stop &
}
ctrl_restart()
{
ctrl_stop
sleep 1
ctrl_start
}
case "$1" in
start)
echo -n "starting UniFi system"
ctrl_start
echo " service started"
;;
stop)
echo -n "stopping UniFi system"
ctrl_stop
echo " service stopped"
;;
restart)
echo -n "restarting UniFi system"
ctrl_restart
echo "service restarted"
;;
*)
echo "usage: service UniFi {start|stop|restart}"
;;
esac
exit 0
Копируем для автоматической загрузки
sudo cp unifi /etc/init.d
sudo chmod +x /etc/init.d/unifi
Устанавливаем права
cd /opt/UniFi
sudo mkdir work && sudo mkdir data && sudo mkdir logs
sudo chown -R unifi work data logs
Создаем еще один файл /etc/logrotate.d/unifi
/opt/UniFi/logs/*.log {
rotate 7
daily
missingok
notifempty
delaycompress
compress
copytruncate
}
Вписаваем его в систему
sudo cp unifi /etc/logrotate.d
sudo chmod +x /etc/logrotate.d/unifi
Добавляем в загрузку
sudo update-rc.d unifi defaults
Запускаем
sudo java -jar /opt/UniFi/lib/ace.jar start &
sudo java -jar /opt/UniFi/lib/ace.jar stop &
Основные комманды
sudo service unifi start
sudo service unifi stop
Смотрим как работает
top
Перезагружаем
reboot
Дополнительно
EIRP = (transmit power + antenna gain — cable loss) There isn't a cable loss in the UAP or UAP-LR as they're internal cards, same with all but the UAP-Outdoor, UAP-Outdoor5, or UAP-Outdoor+ because you can use different cables to connect to the antenna.
Examples:
UAP-LR — (27dBm + 3dBi) = 30dBm EIRP
UAP — (20dBm + 3dBi) = 23dBm EIRP
По умолчанию контроллер UniFi использует следующие порты:
unifi.shutdown.port=8081 (для управления)
unifi.http.port=8080 (порт для UAP для информирования контроллера)
unifi.https.port=8443 (порт для GUI / API контроллера, как в браузере)
portal.http.port=8880 (порт для HTTP перенаправления)
portal.https.port=8843 (порт для HTTPS перенаправления)
unifi.db.port=27117 (локальный порт для сервера БД)
Так как база бастро распухает есть решение
purgebd.js
// keep N-day worth of data
days=30;
dryrun=true;
use ace;
collectionNames = db.getCollectionNames();
for (i=0; i < collectionNames.length; i++) {
name = collectionNames[i];
query = null;
if (name.indexOf('stat')==0 || name.indexOf('event')==0 || name.indexOf('alarm')==0) {
query = {time: {$lt:new Date().getTime()-days*86400*1000}};
}
if (name.indexOf('session')==0) {
query = {assoc_time: {$lt:new Date().getTime()/1000-days*86400}};
}
if (name.indexOf('user')==0) {
query = {last_seen: {$lt:new Date().getTime()/1000-days*86400}};
}
if (query) {
count = db.getCollection(name).find(query).count();
print((dryrun ? "[dryrun] " : "") + "pruning " + count + " entries from " + name + "... ");
if (!dryrun)
db.getCollection(name).remove(query);
}
}
if (!dryrun) db.repairDatabase();
Убедитесь, что скрипт верный перед тем, как выполнить следующую команду:
sudo /opt/mongodb/mongo --port=27117 < purgebd.js
По умолчанию, MongoDB находится в режиме 'dryrun' и сообщит о том, что сделала.