从 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 分析无法删除文件
SonarQube + Maven + JaCoCo + GitLab CI:Sonar 在升级到 SonarQube 7.9.2 后开始显示 0% 的代码覆盖率
Centos 6.5 python 2.6.6 升级到 2.7.3,并安装easy_install和pip工具过程