Собственный пакет Sonarqube 5.1.2 на RHEL6 не запускается без рута

Недавно я установил собственный RPM-пакет Sonarqube 5.1.2 на свой сервер RHEL 6.6. Я использую 64-битный OpenJDK 1.8.0_51 и MySQL в качестве БД. Sonarqube отлично запускается с правами root, используя сценарий sonar.sh в /bin в папке установки (в моем случае это /opt/sonar), но он не работает со сценарием запуска, созданным пакетом в /etc/init. д.

Вот экспорт журнала:

Running SonarQube...
wrapper  | --> Wrapper Started as Console
wrapper  | Using tick timer.
wrapperp | server listening on port 32000.
wrapper  | Command[0] : /etc/alternatives/java_sdk/bin/java
wrapper  | Command[1] : -Djava.awt.headless=true
wrapper  | Command[2] : -Xms3m
wrapper  | Command[3] : -Xmx32m
wrapper  | Command[4] : -Djava.library.path=./lib
wrapper  | Command[5] : -classpath
wrapper  | Command[6] : ../../lib/jsw/wrapper-3.2.3.jar:../../lib/sonar-application-5.1.2.jar
wrapper  | Command[7] : -Dwrapper.key=sdELP0aWwf4S5hdM
wrapper  | Command[8] : -Dwrapper.port=32000
wrapper  | Command[9] : -Dwrapper.jvm.port.min=31000
wrapper  | Command[10] : -Dwrapper.jvm.port.max=31999
wrapper  | Command[11] : -Dwrapper.debug=TRUE
wrapper  | Command[12] : -Dwrapper.pid=23176
wrapper  | Command[13] : -Dwrapper.version=3.2.3
wrapper  | Command[14] : -Dwrapper.native_library=wrapper
wrapper  | Command[15] : -Dwrapper.cpu.timeout=10
wrapper  | Command[16] : -Dwrapper.jvmid=1
wrapper  | Command[17] : org.tanukisoftware.wrapper.WrapperSimpleApp
wrapper  | Command[18] : org.sonar.application.App
wrapper  | Launching a JVM...
jvm 1    | WrapperManager class initialized by thread: main  Using classloader: sun.misc.Launcher$AppClassLoader@4e25154f
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | Wrapper Manager: JVM #1
jvm 1    | Running a 64-bit JVM.
jvm 1    | Wrapper Manager: Registering shutdown hook
jvm 1    | Wrapper Manager: Using wrapper
jvm 1    | Load native library.  One or more attempts may fail if platform specific libraries do not exist.
jvm 1    | Loading native library failed: libwrapper-linux-x86-64.so  Cause: java.lang.UnsatisfiedLinkError: no wrapper-linux-x86-64 in java.library.path
jvm 1    | Loaded native library: libwrapper.so
jvm 1    | Calling native initialization method.
jvm 1    | Inside native WrapperManager initialization method
jvm 1    | Java Version   : 1.8.0_51-b16 OpenJDK 64-Bit Server VM
jvm 1    | Java VM Vendor : Oracle Corporation
jvm 1    |
jvm 1    | Startup runner thread started.
jvm 1    | Control event monitor thread started.
jvm 1    | WrapperManager.start(org.tanukisoftware.wrapper.WrapperSimpleApp@4a574795, args[]) called by thread: main
jvm 1    | Communications runner thread started.
jvm 1    | Open socket to wrapper...Wrapper-Connection
jvm 1    | Failed attempt to bind using local port 31000
jvm 1    | Opened Socket from 31001 to 32000
jvm 1    | Send a packet KEY : sdELP0aWwf4S5hdM
jvm 1    | handleSocket(Socket[addr=/127.0.0.1,port=32000,localport=31001])
wrapperp | accepted a socket from 127.0.0.1 on port 31001
wrapperp | read a packet KEY : sdELP0aWwf4S5hdM
wrapper  | Got key from JVM: sdELP0aWwf4S5hdM
wrapperp | send a packet LOW_LOG_LEVEL : 1
wrapperp | send a packet PING_TIMEOUT : 0
wrapperp | send a packet PROPERTIES : (Property Values)
wrapper  | Start Application.
wrapperp | send a packet START : start
jvm 1    | Received a packet LOW_LOG_LEVEL : 1
jvm 1    | Wrapper Manager: LowLogLevel from Wrapper is 1
jvm 1    | Received a packet PING_TIMEOUT : 0
jvm 1    | PingTimeout from Wrapper is 0
jvm 1    | Received a packet PROPERTIES : (Property Values)
jvm 1    | Received a packet START : start
jvm 1    | calling WrapperListener.start()
jvm 1    | Waiting for WrapperListener.start runner thread to complete.
jvm 1    | WrapperListener.start runner thread started.
jvm 1    | WrapperSimpleApp: start(args) Will wait up to 2 seconds for the main method to complete.
jvm 1    | WrapperSimpleApp: invoking main method
jvm 1    | Wrapper Manager: ShutdownHook started
jvm 1    | WrapperManager.stop(0) called by thread: Wrapper-Shutdown-Hook
jvm 1    | Send a packet STOP : 0
jvm 1    | Startup runner thread stopped.
wrapperp | read a packet STOP : 0
wrapper  | JVM requested a shutdown. (0)
wrapper  | wrapperStopProcess(0) called.
wrapper  | Sending stop signal to JVM
wrapperp | send a packet STOP : NULL
jvm 1    | Send a packet START_PENDING : 5000
wrapperp | read a packet START_PENDING : 5000
wrapper  | JVM signalled a start pending with waitHint of 5000 millis.
jvm 1    | Thread, Wrapper-Shutdown-Hook, handling the shutdown process.
jvm 1    | shutdownJVM(0) Thread:Wrapper-Shutdown-Hook
jvm 1    | Send a packet STOPPED : 0
wrapperp | read a packet STOPPED : 0
wrapper  | JVM signalled that it was stopped.
jvm 1    | Closing socket.
wrapperp | socket read no code (closed?).
wrapperp | server listening on port 32001.
jvm 1    | Wrapper Manager: ShutdownHook complete
wrapper  | JVM exited normally.
wrapper  | Signal trapped.  Details:
wrapper  |   signal number=17 (SIGCHLD), source="unknown"
wrapper  | Received SIGCHLD, checking JVM process status.
wrapper  | JVM process exited with a code of 0, leaving the wrapper exit code set to 0.
wrapper  | <-- Wrapper Stopped

Я знаю, что это должно быть что-то с разрешениями для пользователя «сонара», который также был создан установочным пакетом, и я уже убедился, что папка /opt/sonar принадлежит пользователю сонара, но все же эти журналы не могут сказать мне чего не хватает. Я также сравнил приведенный выше лог с логом, когда я запускаю скрипт под пользователем root, и смог указать по крайней мере на некоторые отличия.

С root после вызова основного метода фактический процесс Java запускается правильно:

.
.
jvm 1    | WrapperSimpleApp: invoking main method
jvm 1    | INFO  app[o.s.p.m.JavaProcessLauncher] Launch process[search]: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.el6_7.x86_64/jre/bin/java -Djava.awt.headless=true -Xmx1G -Xms256m -Xss256k -Djava.net.preferIPv4Stack=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -Djava.io.tmpdir=/opt/sonar/temp -cp ./lib/common/*:./lib/search/* org.sonar.search.SearchServer /tmp/sq-process3395120832375267732properties

С пользователем сонара он не запускается, и JVM (или оболочка) просто инициирует отключение:

.
.
jvm 1    | WrapperSimpleApp: invoking main method
jvm 1    | Wrapper Manager: ShutdownHook started
jvm 1    | WrapperManager.stop(0) called by thread: Wrapper-Shutdown-Hook

К сожалению, я понятия не имею, что может отсутствовать у пользователя сонара, потому что, согласно описанию пакета RPM, сценарий запуска должен работать без привилегий root.

Может ли кто-нибудь помочь мне или указать мне правильное направление? Я действительно не хочу запускать Sonarqube от имени пользователя root, если в этом нет необходимости.

Спасибо за помощь заранее!


person Dzsoda    schedule 10.09.2015    source источник


Ответы (1)


Вы изначально запускали сонар, используя учетную запись root (через sonar.sh)? Если да, указали ли вы каталог -r /opt/sonar для пользователя сонара?

person hgomez    schedule 10.09.2015
comment
Кроме того, вы можете проверить журналы в /opt/sonar/logs, чтобы узнать, что происходит с SonarQube при запуске скрипта из /etc/init.d. - person Godin; 10.09.2015
comment
@hgomez: Да, я изначально начал его с /opt/sonar/bin/linux-x86-64/sonar.sh, и да, все файлы и папки в /opt/sonar принадлежат пользователю сонара (это было сделано автоматически после yum закончил с установкой, но я все равно проверил, и они правильно установлены), - person Dzsoda; 11.09.2015
comment
@Godin: журналы, которые вы видите выше, экспортируются из /opt/sonar/logs, и причина, по которой я открыл этот вопрос, заключается в том, что эти журналы не дают мне никаких указаний относительно реальной проблемы. - person Dzsoda; 11.09.2015
comment
@Dzoda, не могли бы вы попробовать переключиться на пользователя сонара с помощью su, а затем выполнить java -jar /opt/sonar/lib/sonar-application-5.1.2.jar -Dsonar.log.console=true? - person Godin; 12.09.2015
comment
@Godin: я сделал то, что вы просили, но, похоже, ничего не происходит, когда я выполняю команду. Должен ли я видеть что-то в других журналах или в оболочке? - person Dzsoda; 14.09.2015
comment
@Dzoda Вы должны увидеть запуск SonarQube с входом в консоль. - person Godin; 19.09.2015