从 SonarQube 6.5 升级到 6.6 后出现 elasticsearch“无法以 root 身份运行”错误。没有其他改变

Posted

技术标签:

【中文标题】从 SonarQube 6.5 升级到 6.6 后出现 elasticsearch“无法以 root 身份运行”错误。没有其他改变【英文标题】:Getting elasticsearch "can not run as root" error after upgrading from SonarQube 6.5 to 6.6. Nothing else changed 【发布时间】:2018-04-02 03:10:17 【问题描述】:

从 SonarQube 6.5 升级到 6.6 后出现 elasticsearch“无法以 root 身份运行”错误。其他没有任何变化。

CentOS 6.8 版(最终版) Java(TM) SE 运行时环境(build 1.8.0_101-b13)

java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) [elasticsearch-5.6.2.jar:5.6.2]
2017.10.20 11:59: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.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.6.2.jar:5.6.2]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-5.6.2.jar:5.6.2]
        ... 6 more

【问题讨论】:

检查运行软件的用户。请参阅this 文章。 请看michalwegrzyn.wordpress.com/2016/07/14/do-not-run-sonar-as-root 【参考方案1】:

遇到同样的问题,对我的声纳服务文件进行一些更改,它就开始工作了。以下是我的声纳服务文件

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking
#Type=simple
User=sonar
Group=sonar
PermissionsStartOnly=true
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
StandardOutput=syslog
LimitNOFILE=65536
LimitNPROC=8192
#TimeoutStartSec=5
Restart=always

[Install]
WantedBy=multi-user.target

也跟着改变声纳用户的主目录

$ usermod -d /opt/sonarqube sonar

【讨论】:

【参考方案2】:

systemd 的变化:

User=sonar
Group=sonar

并更改所有来源和 #RUN_AS_USER=sonar 它会运行。在 root 中运行然后 su 到声纳时似乎环境中的错误

【讨论】:

【参考方案3】:

我下载了 sonarqube-6.5 并尝试设置一个新用户“声纳”,但我仍然失败,原因相同 - Ubuntu 16.4。

【讨论】:

【参考方案4】:

我也遇到了这个问题,在 Centos 7 上以 root 身份运行 SonarQube,而不是在 docker 内。在之前的cmets中提到,问题来自SonarQube升级ElasticSearch,新版本不再允许自己以root身份运行。

在我的环境中,修复很简单:我已经创建了一个用户(“sonar”)和组(“sonar”)来“拥有”sonarqube 文件。由于我的 SonarQube 进程一直以 root 身份运行,因此它留下了 root 拥有的日志和临时文件。 1.我停止了服务。 2. 重新分配所有所有权(“chown -R sonar:sonar /opt/sonarqube-6.6”) 3. 将/opt/sonarqube-6.6/bin/linux-x86-64/sonar.sh 第48 行中的#RUN_AS_USER= 更改为RUN_AS_USER=sonar,并且sonarqube 服务和它的elasticsearch 服务都重新启动而没有进一步的问题。我不得不去http://<sonarhost:port>/setup 升级数据库,然后一切正常。

【讨论】:

OP @RayeRaskin 应该接受这个答案。有关原因,另请参阅***.com/a/47733598/766786。 完美运行,如果您没有声纳用户,只需添加 useradd sonar 在第 2 步之前创建一个

以上是关于从 SonarQube 6.5 升级到 6.6 后出现 elasticsearch“无法以 root 身份运行”错误。没有其他改变的主要内容,如果未能解决你的问题,请参考以下文章

从 SonarQube 4.5.4 LTS 升级到 5.3 后,Ant 分析无法删除文件

vSAN 6.6升级至6.7操作步骤

SonarQube + Maven + JaCoCo + GitLab CI:Sonar 在升级到 SonarQube 7.9.2 后开始显示 0% 的代码覆盖率

Centos 6.5 python 2.6.6 升级到 2.7.3,并安装easy_install和pip工具过程

sonar-maven-plugin:3.1.1:sonar 升级到 SonarQube 6.0 后分析错误

扫描后未在 sonarqube 中更新项目