Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Unifi Controller в OS X как бесфейс-приложение, UniFi Network
 
Прочитав официальное закреплённое сообщение в верхней части этого форума про Java 8 и Unifi Controller, подскажите, можно ли запускать Controller как безголовое приложение/службу, если установить и JDK, и JRE на OS X? java -jar /Applications/UniFi.app/Contents/Resources/lib/ace.jar ui Что делает опция «ui» в конце? Я давно хотел создать Launchdaemon, чтобы контроллер запускался при загрузке машины без входа пользователя, с тех пор как Ubiquiti выпустили приложение для Mac, но всегда казалось, что это невозможно.
 
Ребята, этот туториал / статья заставили меня запуститься меньше чем за 2 минуты. Какая классная и аккуратная штука... https://akrabat.com/run-the-unifi-controller-headless-on-mac/

@UBNT-MikeD / @UBNT-cmb

Вам бы это в ВИКИ для других пользователей добавить.
 
Я просто ОБОЖАЮ скрипт Bottacco, использую его на всех машинах, с которыми работаю.

Этот баг скрипта на High Sierra уже подтверждён? Я пока останусь на Sierra ещё минимум на год, но если проблема действительно есть на High Sierra, было бы здорово как-нибудь её исправить.
 
После обновления до High Sierra по какой-то причине сервис не запускался при загрузке, поэтому я решил добавить Unifi.app в автозагрузку через настройки «Пользователи и группы» и поставил галочку «Скрыть».

Иконка в доке раздражала моего внутреннего перфекциониста, поэтому я поправил info.plist в пакете и добавил следующий ключ примерно в самом конце, перед </dict>:

<key>LSUIElement</key>
<true/>

Теперь иконка не показывается, только пару раз подпрыгивает после входа в систему и пропадает.

Надеюсь, это кому-то поможет, кто тоже мучается 😀
 
Привет, @Cheem, это типичная проблема, когда запускаешь Unifi Controller на macOS/OS X Server. Решение простое: зайди в /Users/yourusername/Library/Application Support/Unifi/data/, там найдёшь файл system.properties. Отредактируй его — в нём перечислены все порты, которые использует Unifi. Измени нужные порты на другие и перезагрузи компьютер (если не хочешь перезагружать всю систему, можно перезапустить Unifi Controller через терминал). Надеюсь, поможет. Удачи!
 
Привет, я пытался это запустить, но получил ошибку «Порт 8443 недоступен». Я запускаю контроллер Unifi на порту 8543, а порт 8443 используется для Calendar Services. Как сделать так, чтобы Unifi обращался к своему файлу system.properties и использовал правильный порт?
 
Пожалуйста, @ambroselittle, надеюсь, это будет полезно вам и многим другим. Это правильное решение для запуска контроллера в режиме безголового сервера, так как сервис может стартовать без входа пользователя и как только включается машина. Это работает, как в вашем случае, в домашних условиях, но и в корпоративной среде, поскольку многие владельцы больших установок не хотят запускать контроллер на Cloud Key — его может быть недостаточно для работы со всеми устройствами и/или для хранения информации о DPI и логах. В таких случаях люди предпочитают запускать контроллер на выделенной машине (Mac Mini с SSD отлично подходят, но подойдёт любой старый Mac, который может работать на 10.11.6, а это почти любой Mac с 2009 года и позже). Привет из Испании!
 
@CoolCrew, спасибо. Очень полезно. Хотелось бы добавить к обсуждению: у меня проблема была в том, что я запускал приложение на macOS (Sierra и High Sierra) без проблем и "прятал" его в панель инструментов. Но периодически контроллер останавливался и выдавал: Инициализация Unifi Controller — Сервер слишком долго запускается — Запуск не удался. Если я замечал это, просто убивал процесс и перезапускал — тогда всё работало. Понятно, что это не очень хорошее решение. Порывшись тут, я в конце концов попал сюда и думаю, что это лучшее решение. Было бы здорово, если бы Unifi сделали это в виде панели настроек или что-то в этом роде. Это для домашнего пользования, так что покупать Cloud Key мне не особо нужно...
 
Время прошло, а этот пост всё не меняется.

@UBNT-MikeD предложил возможное решение проблемы со сменой пути в встроенном Java runtime, но оно так и не было опубликовано или прокомментировано. После некоторых экспериментов на другом проекте, где требовался launchd plist с некоторыми подстановками, я нашёл окончательное решение для бесфамильного launchd агент plist файла, вне зависимости от того, что обновит Ubiquiti в версии контроллера для macOS.

Я использовал решение @chriswferris для своей домашней и офисной «всей» Unifi-установки, но меня всегда бесило, что каждый раз, когда Ubiquiti меняли версию встроенного Java runtime, мне приходилось вручную править plist и менять путь. Ещё хуже было, если нужно было настроить всё у родителей или у друзей — приходилось учитывать это при каждом обновлении.

Это заставило меня задуматься: должно же быть возможно автоматизировать процесс или использовать скрипт для автоматического обновления plist файла. В итоге оказалось всё гораздо проще.

Сначала я попробовал параметр EnableGlobbing в plist, чтобы заменить изменяющуюся часть пути (версию Java) на звездочку, и чтобы она подставлялась автоматически в актуальный путь. В man’е для launchd.plist этот механизм описан так: «EnableGlobbing <boolean> — флаг, который заставляет launchd использовать механизм glob(3) для обновления аргументов программы перед запуском».

Так что я заменил путь в plist на:

<string>/Applications/UniFi.app/Contents/PlugIns/jre*.jre/Contents/Home/jre/bin/java</string>

Но по какой-то непонятной причине, это не сработало. Я думаю, что должно, но не работает (если кто-то знает почему — делитесь в комментариях).

Тогда я перешёл ко второму методу, который нашёл, когда искал решение для другого plist файла. Он заключается в том, чтобы запускать shell и позволить ему сделать расширение подстановочных знаков используя «bash -c» в качестве аргумента программы (может, можно и просто sh).

Я добавил параметр EnableGlobbing и вызов shell, в результате полный plist файл получился таким:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
<plist version="1.0">  
<dict>  
       <key>EnvironmentVariables</key>  
       <dict>  
               <key>PATH</key>  
               <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/MacGPG2/bin:/usr/local/sbin</string>  
       </dict>  
       <key>KeepAlive</key>  
       <true/>  
       <key>Label</key>  
       <string>com.ubiquiti.unifi-app.plist</string>  
       <key>EnableGlobbing</key>  
       <true/>  
       <key>ProgramArguments</key>  
       <array>  
               <string>/bin/bash</string>  
               <string>-c</string>  
               <string>exec /Applications/UniFi.app/Contents/PlugIns/jre*.jre/Contents/Home/jre/bin/java -Djava.awt.headless=true -Xmx1024M -jar /Applications/UniFi.app/Contents/Resources/lib/ace.jar start</string>  
       </array>  
       <key>RunAtLoad</key>  
       <true/>  
       <key>WorkingDirectory</key>  
       <string>/Applications/UniFi.app/Contents/Resources/</string>  
</dict>  
</plist>  

С этим решением plist файл не нужно менять, и я могу создать стандартный установочный pkg-пакет, который можно развернуть удалённо, если понадобится установить на чьём-то компьютере, или автоматизировать развертывание с помощью DeployStudio, Vagrant, munki и подобных инструментов.

Надеюсь, это поможет, и мы наконец-то сможем запускать без присмотра headless macOS серверы с бесфамильным Unifi контроллером 😉

Удачи!
Страницы: 1
Читают тему (гостей: 1)