UniFi Controller на Rasberry PI

Тема в разделе "Глядите, что я сделал", создана пользователем Prochor, 22 апр 2015.

  1. Prochor

    Prochor Нерд

    Скачиваем образ RASPBIAN по ссылке http://downloads.raspberrypi.org/raspbian_latest
    Записываем образ на SD карточку с помощью Win32DiskImager или imageUSB

    [​IMG]

    Подключеаем Rasberry PI

    Устанавливаем подключение SSH
    Логин pi
    Пароль raspberry

    Далее обновляем репозитарий и систему
    sudo apt-get update && sudo apt-get install raspberrypi* raspi-config

    sudo raspi-config
    Expand Filesystem
    Advanced Options > Memory split As we're running headless, 4MB

    ssh-keygen (I hit enter for all three options to accept defaults and no passphrase)
    sudo service ssh start (to start sshd)
    sudo update-rc.d ssh defaults (to run the ssh server on startup by default)

    reboot

    [​IMG]



    Добавляем пользователя
    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 &

    [​IMG]

    Основные комманды
    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;
    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' и сообщит о том, что сделала.
     
  2. ИгорьК

    ИгорьК Гуру

    Вау! Довольно точно переписано: http://habrahabr.ru/sandbox/88903/ от 31 октября 2014 в 17:19.
    А что такое UniFi Controller, кстати? Ну чтобы польза была, может что добавите?
     
    Последнее редактирование: 22 апр 2015
  3. Prochor

    Prochor Нерд

    Так это и есть мой пост
    еще на сайте http://www.prochor.ru/content/nashi-stati/raspberry-pi/content8/unifi-controller-na-rasberry-pi.html

    Ubiquiti UniFi AP это готовое решение для создание обширной офисной сети, зоны покрытия Wi-Fi сигналом территории торгово-развлекаетльного центра или аэровокзала. Система на базе Ubiquiti UniFi AP поддерживает внутрисетевой роуминг — бесшовный переход клиентского устройства от одной «базовой станции» к другой.
    НО БЕЗ КОНТРОЛЛЕРА ЭТО НЕ РАБОТАЕТ...
     
  4. ИгорьК

    ИгорьК Гуру

    Ну, то есть открытая реклама?
     
  5. ИгорьК

    ИгорьК Гуру

    "[​IMG]
    Prochor
    Ну во первых , хаять вы все мастера.
    Во вторых. Если это мои пере посты , то где реклама.
    в первом посте нет ни ссылок на мой сайт, ни где купить.
    Исключительно как установить.
    И исключительно после ваших реплик, они появились как доказательство моего участия.
    Так что я просто требую публичных извинений..
    "

    Публично приношу извинения за то, что сходу увидел, что это перепост и не секунду не усомнился в этом.
    Приношу благодарность за то, что моя (не указанная здесь, но видимо потенциальная) способность хаять была высоко оценена.

    UPD. Отдельно доставило "вы все мастера." Неужели я не один?