Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Проблема с директорией Java Home на Ubuntu — РЕШЕНО, UniFi Network
 
Проблема с Java Home Directory на Ubuntu — ИСПРАВЛЕНО

Для тех, кто собирает Ubuntu с нуля, после установки UniFi Controller может появиться сообщение *Setting Java Home....fail*.  
Если это произошло, возможно, дело в том, что в новой версии Ubuntu имя директории Java изменилось в зависимости от архитектуры процессора, а UniFi по какой-то причине использует жестко заданную переменную с путём к Java в скрипте запуска. Вам нужно изменить эту директорию, отредактировав init-скрипт. (Подробно о том, что такое init, говорить не будем.)

1. Откройте init-скрипт командой:  
  sudo nano /etc/init.d/unifi  
2. Пролистайте вниз клавишей стрелки и найдите переменную:  
  JAVA_HOME=/usr/lib/jvm/java-6-openjdk  
3. Добавьте к этой строке архитектуру вашей системы.  
  Например, у меня amd64, поэтому строка должна выглядеть так:  
  JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64  
  НИЧЕГО БОЛЬШЕ НЕ ТРОГАЙТЕ.  
4. После правки нажмите Ctrl-X, вас спросят, сохранить изменения или нет. Конечно, сохраняем — нажмите Y, затем ENTER, чтобы сохранить под тем же именем. Редактор nano закрывается.  
5. Перезапустите UniFi Controller командой:  
  sudo service unifi restart  
6. Вы добились успеха, если увидите сообщение:  
  * Starting Ubiquiti UniFi Controller unifi                          [ OK ]

P.S. По умолчанию UniFi Controller ставит Java версии 7, так что, если нужно использовать новую версию, поменяйте в init-файле цифру 6 на 7.  
Пример:  
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

Также вам может пригодиться:  
- Adopting your Existing APs to set-inform to L3 Controller Address (No Factory Reset - SSH)  
- UniFi Controller on Different Regions - Layer 3 Amazon AWS  
- Upgrading or Building Your Own UniFi Controller 3.1.1 in Layer 3 Amazon AWS

С уважением,  
JAP
 
Удивительно, что Network Application требует такие древние версии MongoDB и Java, не планируется ли их обновление?
 
То же самое. Абсурд, что UniFi до сих пор не исправили эту проблему. А ещё весь этот замороченный вопрос с версией MongoDB просто бесит. Не понимаю, почему установка UniFi Controller — такой геморрой.
 
Только что установил чистый образ AWS с Ubuntu 20 LTS, последний комментарий здесь сработал отлично, спасибо.
 
Просто установив OpenJDK 8, мне удалось запустить Unifi Controller. sudo apt install openjdk-8-jre-headless
 
Тогда позвольте пожаловаться: когда устанавливаешь UniFi, строго следуя инструкции, он ставит JRE 9 и работает неправильно. Я занимаюсь разработкой на Java уже 16 лет, и если кто-то из Ubiquiti захочет расширить доступ, я сам исправлю эти проблемы. Это глупо.
 
Привет, @exospec, контроллер UniFi Network поддерживает только MongoDB версии до 3.4 и JAVA 8. С уважением, Гленн Р.
 
Пришлось сделать это с последней установкой UniFi на свежем Proxmox CT с Ubuntu 16.04, потому что не удалось найти достаточно простого способа установки с MongoDB на 18.10, а документация ведет к устаревшим инструкциям по установке MongoDB.
 
Проверено на Ubuntu 16.04: создайте файл /etc/default/unifi со следующим содержимым:  
JAVA_HOME="$(readlink -f "$(which java)" | sed "s:bin/.*$::")"  
Надеюсь, с этим мне больше не придется возиться.
 
При обновлении с версии 5.2.9 до 5.4.9 мне всё равно пришлось заменить JAVA_HOME=/usr/lib/jvm/java-7-openjdk-${arch} на JAVA_HOME="$( readlink -f "$( which java )" | sed "s:bin/.*$::" )"
 
Если кому-то интересно, я работаю над тем, чтобы старый Ansible playbook для развертывания сервиса UniFi стал совместим с Debian, Ubuntu и, возможно, даже с другими дистрибутивами. Как только всё заработает, он будет доступен на Ansible Galaxy. Смотрите https://github.com/ansiblers/ansiblers.unifi/issues/1 — любая помощь будет невероятно полезна, особенно в виде pull requests 😀
 
Исправить скрипт обнаружения, чтобы он распознавал другие версии Java — включая Oracle — не должно составить проблем? @UBNT-MikeD
 
Очевидно, что проблема ДО СИХ ПОР НЕ ИСПРАВЛЕНА СПУСТЯ БОЛЕЕ 3 ЛЕТ!!! Приходится вручную корректировать путь или менять /etc/default/unifi — это лишь временное решение, баг явно не поправлен. Когда JAVA_HOME не задан или работает некорректно, правильный способ его определить такой:  
export JAVA_HOME=`type -p javac|xargs readlink -f|xargs dirname|xargs dirname`  
Пожалуйста, исправьте скрипт инициализации!
 
Поскольку в скрипте этот путь всё ещё захардкожен, самым простым решением будет создать символическую ссылку.  
Код: ln -s /usr/lib/jvm/<ваша папка с java>/ /usr/lib/jvm/java-6-openjdk  
Пример: ln -s /usr/lib/jvm/java-8-oracle/ /usr/lib/jvm/java-6-openjdk  
И после обновлений вам не нужно будет волноваться о сбросах настроек 😉
 
Этот OP сегодня меня выручил, работает как часы, благодарю!
 
Привет, Джонни! Я новенький в SSH и понимаю, что моя проблема связана с настройками Java на моём экземпляре Ubuntu. Не мог бы ты «расписать» свою конфигурацию ниже? Вот моя версия Java:  
java -version  
java version "1.7.0_79"  
OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-0ubuntu0.14.04.2)  
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)  

Вот мой скрипт unifi:  
#!/bin/bash  
## /etc/init.d/UniFi -- скрипт запуска Ubiquiti UniFi  

##### BEGIN INIT INFO  
# Provides:          unifi  
# Required-Start:    $local_fs $remote_fs $network  
# Required-Stop:     $local_fs $remote_fs $network  
# Default-Start:     2 3 4 5  
# Default-Stop:      0 1 6  
# Short-Description: Ubiquiti UniFi  
# Description:       Ubiquiti UniFi Controller  
### END INIT INFO  

NAME="unifi"  
DESC="Ubiquiti UniFi Controller"  

BASEDIR="/usr/lib/unifi"  
MAINCLASS="com.ubnt.ace.Launcher"  
PIDFILE="/var/run/${NAME}/${NAME}.pid"  
PATH=/bin:/usr/bin:/sbin:/usr/sbin  
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64  

# JSVC - для запуска java-приложений как сервисов  
JSVC=`which jsvc`  
#JSVC_OPTS="-debug"  
JSVC_OPTS="${JSVC_OPTS} \  
-home ${JAVA_HOME} \  
-cp /usr/share/java/commons-daemon.jar:${BASEDIR}/lib/ace.jar \  
-pidfile ${PIDFILE} \  
-procname ${NAME} \  
-outfile SYSLOG \  
-errfile SYSLOG \  
-Djava.awt.headless=true -Xmx1024M"  

[ -f /etc/default/rcS ] && . /etc/default/rcS
. /lib/lsb/init-functions  
[ -d /var/run/${NAME} ] || mkdir -p /var/run/${NAME}
cd ${BASEDIR}  

is_not_running() {  
   start-stop-daemon --test --start --pidfile "${PIDFILE}" \  
   --startas "${JAVA_HOME}/bin/java" >/dev/null  
   RC=$?  
   return ${RC}  
}  

case "$1" in  
   start)  
       log_daemon_msg "Запуск ${DESC}" "${NAME}"  
       if is_not_running; then  
           ${JSVC} ${JSVC_OPTS} ${MAINCLASS} start  
           sleep 1  
           if is_not_running; then  
               log_end_msg 1  
           else  
               log_end_msg 0  
           fi  
       else  
           log_progress_msg "(уже запущено)"  
           log_end_msg 1  
       fi  
       ;;  
   stop)  
       log_daemon_msg "Остановка ${DESC}" "${NAME}"  
       if is_not_running; then  
           log_progress_msg "(не запущено)"  
       else  
           ${JSVC} ${JSVC_OPTS} -stop ${MAINCLASS} stop  
       fi  
       log_end_msg 0  
       ;;  
   status)  
       status_of_proc -p ${PIDFILE} unifi unifi && exit 0 || exit $?  
       ;;  
   restart|reload|force-reload)  
       if ! is_not_running ; then  
           if which invoke-rc.d >/dev/null 2>&1; then  
               invoke-rc.d ${NAME} stop  
           else  
               /etc/init.d/${NAME} stop  
           fi  
       fi  
       if which invoke-rc.d >/dev/null 2>&1; then  
           invoke-rc.d ${NAME} start  
       else  
           /etc/init.d/${NAME} start  
       fi  
       ;;  
   *)  
       log_success_msg "Использование: $0 {start|stop|restart|reload|force-reload}"  
       exit 1  
       ;;  
esac  
exit 0
 
Спасибо, Джонни... Ты решил все мои проблемы! Дэн
 
Это решение будет вызывать проблемы при обновлении до последней версии Java. Как вы и сказали, удалите файл "java-6" и замените его, но используйте настройку ниже.  
#JAVA_HOME=/usr/lib/jvm/java-6-openjdk  
JAVA_HOME="$( readlink -f "$( which java )" | sed "s:bin/.*$::" )"  
Johnny
 
Вам всё равно нужно сделать это на последней бета-версии. На самом деле, обновление беты сломает уже работающую установку.
Страницы: 1
Читают тему (гостей: 1)