由于 Elasticsearch 无法以 root 身份运行导致 Sonar Server 无法运行

Posted

技术标签:

【中文标题】由于 Elasticsearch 无法以 root 身份运行导致 Sonar Server 无法运行【英文标题】:Can't run Sonar Server caused by Elasticsearch cannot running as root 【发布时间】:2018-05-23 16:30:28 【问题描述】:

我正在尝试安装 SonarQube:我已按照这些步骤操作:

Setting up SOnarQube Tuto : here

总结一下:

下载声纳并将其移至/opt/sonar

将这些配置步骤添加到/opt/sonar/conf/sonar.properties

sonar.jdbc.username=声纳 sonar.jdbc.password=声纳

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

sonar.web.host=127.0.0.1
sonar.web.context=/sonar
sonar.web.port=9000
声纳 实现为服务:

sudo cp /opt/sonar/bin/linux-x86-64/sonar.sh /etc/init.d/sonar

sudo gedit /etc/init.d/sonar

插入两个新行:

SONAR_HOME=/opt/sonar
PLATFORM=linux-x86-64
Modify the following lines:

WRAPPER_CMD="$SONAR_HOME/bin/$PLATFORM/wrapper"
WRAPPER_CONF="$SONAR_HOME/conf/wrapper.conf"

...

PIDDIR="/var/run"
Register as a Linux service:

sudo update-rc.d -f sonar remove
sudo chmod 755 /etc/init.d/sonar
sudo update-rc.d sonar defaults

在这些步骤之后:我尝试从 localhost:9000/sonar 运行声纳并在执行后:sudo /etc/init.d/sonar start ` 奇怪的是,它没有运行。

所以当我运行 `sudo /etc/init.d/sonar status 时,我发现它会在几秒钟后执行步骤,并在日志文件中抛出一些错误,如下所示:

es.log:

2017.12.09 18:05:14 ERROR es[][o.e.b.Bootstrap] Exception
java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) [elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) [elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) [elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70) [elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) [elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) [elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) [elasticsearch-5.6.3.jar:5.6.3]
2017.12.09 18:05:14 WARN  es[][o.e.b.ElasticsearchUncaughtExceptionHandler] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.6.3.jar:5.6.3]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-5.6.3.jar:5.6.3]
    ... 6 more

有什么建议吗??

【问题讨论】:

我不知道Sonar如何启动elasticsearch,但可以肯定elasticsearch不能以root身份运行。 【参考方案1】:

SonarSource 已升级作为最新 SonarQube LTS 版本一部分的 Elasticsearch 工具。因此,SonarQube 无法以 root 身份运行。请参阅this 博客和SonarQube 6.6 升级说明和this SO 问题。

【讨论】:

这个答案突然不再被接受的任何原因?【参考方案2】:

更改对声纳文件的根访问权限。尝试在普通用户访问下运行。

chown <another user>:<user group> sonar.sh

【讨论】:

除非设置了 setuid,否则更改文件的所有权不会影响它在运行时拥有的权限。【参考方案3】:

我也遇到了同样的问题,花了很多时间才找到解决方案。

错误是一样的

2017.12.09 18:05:14 ERROR es[][o.e.b.Bootstrap] Exception
java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.3.jar:5.6.3]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.3.jar:5.6.3]

解决方案 使用 adduser 命令创建一个“sonar”用户 //我使用的是 linux 系统 chown -R sonar 声纳安装文件夹/ 在启动脚本中编辑 sonar.sh 文件 sonar-install-folder/bin/linux-x86-6 并将 #RUN_AS_USER 更改为 RUN_AS_USER=sonar

然后使用下面的命令

./sonar.sh stop

优雅地停止 SonarQube... SonarQube 没有运行。

./sonar.sh start

正在启动 SonarQube... 启动 SonarQube。

./sonar.sh status

SonarQube 正在运行 (22100)。

所以,基本上弹性搜索不需要由 root 用户运行。默认情况下,RUN_AS_USER 在启动脚本中进行了注释,该脚本正在选择我当前的 root 用户,然后由于弹性搜索进程没有启动以及导致声纳进程下降而出现了一些 linux 权限规则。

从 sonar.log 中可以明显看出

[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
2020.05.08 06:36:36 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 78
2020.05.08 06:36:36 INFO  app[][o.s.a.SchedulerImpl] Process[es] is stopped
2020.05.08 06:36:36 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped

【讨论】:

以上是关于由于 Elasticsearch 无法以 root 身份运行导致 Sonar Server 无法运行的主要内容,如果未能解决你的问题,请参考以下文章

以 root 用户身份运行 ElasticSearch

ElasticSearch Root身份运行

Linux环境 安装elasticsearch-6.4.3 单机版不能以root用户运行es 及 max_map_count 问题解决(含 安装包+分词插件 云盘资源)

Elasticsearch未分配分片异常处理

无法加载 JNA 原生支持库 Elasticsearch 6.x

解决 Elasticsearch 超过 10000 条无法查询的问题