Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
目录
- Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
- SonarQube介绍
- 安装
- Docker安装PostgreSQL容器
- Docker安装SonarQube容器
- SonarQube汉化插件安装
- 破解
- 生成license
- 配置agent
- 使用
Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
SonarQube介绍
Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。支持Java、kotlin、Scala、python、JavaScrip等二十几种编程语言的代码质量管理与检测。支持将代码扫描集成到现有的工作流,以便在项目分支和拉取请求之间进行连续的代码检查。
分为社区版、开发版、企业版数据中心版。对于静态检测,只有开发版、企业版支持C/C++,而我们的业务以C/C++为主,故选择需要破解的企业版。
安装
环境搭建参考博客:https://www.codestar.top/2024/10/10/Linux/Ubuntu-docker%E6%90%AD%E5%BB%BAsonarqube%E7%A4%BE%E5%8C%BA%E7%89%88/
Docker安装PostgreSQL容器
直接上命令:
docker pull postgres
如下:
启动容器:
docker run --name postgresql \--restart=always \-e POSTGRES_USER=admin \-e POSTGRES_PASSWORD=123456 \-e POSTGRES_DB=sonarqube_db \-p 5432:5432 \-v /opt/postgres:/var/lib/postgresql/data \-e ALLOW_IP_RANGE=0.0.0.0/0 \-d postgres
参数含义如下:
- –name:后接容器名
- –restart=always:dcoker启动后,自动重启容器
- POSTGRES_USER:pg数据库用户名
- POSTGRES_PASSWORD:pg数据库密码
- POSTGRES_DB:创建一个名为sonarqube_db的pg数据库
- -p 5432:5432:端口映射
- -v:主机目录->容器目录的映射
- ALLOW_IP_RANGE=0.0.0.0/0:允许任何主机访问
- -d:守护进程方式创建容器
- 最后一个参数:镜像名。
pg容器创建好后如图所示:
Docker安装SonarQube容器
获取企业版sonarqube镜像:
docker pull sonarqube:9.9-enterprise
如下:
我们可以使用如下命令创建并启动sonarqube容器:
# docker run --name 容器名(可任意) -d -p 内部端口:外部端口 镜像名
docker run --name sonarqube -p 9000:9000 -d sonarqube:9.9-enterprise
但是我们不能向上面那样干!它默认会使用H2嵌入式数据库,并且数据库是存在于内存当中的,如果我们的docker容器重启,那么之前所有的数据都将丢失!
和pg容器创建不同,这里需要手动创建主机到容器映射目录,并将其权限修改为777.
mkdir -p /opt/sonarqube/data /opt/sonarqube/extensions /opt/sonarqube/logs /opt/sonarqube/confsudo chmod 777 -R /opt/sonarqube
然后创建SonarQube容器实例:
docker run --name sonarqube \--restart=always \-e SONAR_JDBC_URL=jdbc:postgresql://192.168.0.135:5432/sonarqube_db \-e SONAR_JDBC_USERNAME=admin \-e SONAR_JDBC_PASSWORD=dc123 \-p 9000:9000 \-v /opt/sonarqube/data:/opt/sonarqube/data \-v /opt/sonarqube/extensions:/opt/sonarqube/extensions \-v /opt/sonarqube/logs:/opt/sonarqube/logs \-v /opt/sonarqube/conf:/opt/sonarqube/conf \-d sonarqube:9.9-enterprise
参数含义如下(同前面重复的省略):
- SONAR_JDBC_URL:pg数据库的url,ip根据主机实际情况填写
- SONAR_JDBC_USERNAME:pg数据库用户名
- SONAR_JDBC_PASSWORD:pg数据库密码
- extensions目录:sonarsube插件存放目录
- logs:日志目录
- conf: 配置目录
不出意外,容器状态会一直是restart状态,此时需要使用docker logs -f sonarqube查看对应的日志信息检查错误点。
一般是因为容器卷映射目录权限问题,或者是需要修改主机的系统参数(报错:max virtual memory areas vm.max_map_count [65530] is too low)。
权限问题好解决,直接chmod修改/opt/sonarqube目录权限为777即可。
而系统参数问题解决方法参考如下:
在主机上(宿主机,非docker容器!docker容器会继承宿主机的系统参数。)修改系统参数:
vim /etc/sysctl.conf# 最后一行添加:
vm.max map count=262144
vm.max map count=524288sysctl -p # 加载生效
然后重启docker:
docker start sonarqube
实例运行情况:
在ubuntu浏览器当中输入http://localhost:9000/ ,默认管理员用户及密码:admin/admin。
SonarQube汉化插件安装
进入到插件商城,搜索插件chinese
,按下面操作进入到插件主页进行下载:
进入汉化github插件仓库,进入标签发布页,找到9.9版本的中文插件,点击即可下载:
下载完成后,将插件拷贝到主机的/opt/sonarqube/extensions/plugins目录下(plugins目录需要手动创建),再次重启sonarqube容器,重新登录http://localhost:9000/,可以看到提示变成了中文,说明我们的插件安装成功了!
破解
破解参考博客:https://dashenxian.github.io/post/SonarQube%E7%A0%B4%E8%A7%A3
生成license
将如下这段信息全部复制,然后进行base64加密就是license的内容:
Company=Unknown
Digest=NotRequired
Edition=Enterprise
EditionLabel=Enterprise
Expiration=2099-01-01
MaxLoc=9223372036854775806
Plugins=abap,cpp,plsql,security,sonarapex,swift,tsql,vbnet,cobol,pli,rpg,vb
Features=*
ServerId=*
Support=false
Type=ny0c
同理,如果是开发版,只需将Enterprise替换为Developer。
Base64转换如下:
Q29tcGFueT1Vbmtub3duCkRpZ2VzdD1Ob3RSZXF1aXJlZApFZGl0aW9uPUVudGVycHJpc2UKRWRpdGlvbkxhYmVsPUVudGVycHJpc2UKRXhwaXJhdGlvbj0yMDk5LTAxLTAxCk1heExvYz05MjIzMzcyMDM2ODU0Nzc1ODA2ClBsdWdpbnM9YWJhcCxjcHAscGxzcWwsc2VjdXJpdHksc29uYXJhcGV4LHN3aWZ0LHRzcWwsdmJuZXQsY29ib2wscGxpLHJwZyx2YgpGZWF0dXJlcz0qClNlcnZlcklkPSoKU3VwcG9ydD1mYWxzZQpUeXBlPW55MGM=
配置agent
首先下载agent jar包:SonarQubeAgent-1.2-SNAPSHOT.jar。
使用docker命令,将下载好的agent jar包拷贝到容器当中,这里为方便,我直接拷贝到根目录下面。:
docker cp ./SonarQubeAgent-1.2-SNAPSHOT.jar sonarqube:9.9-enterprise:/
在sonarqube的配置文件conf/sonar.properties(sonar.properties文件需要手动创建),里面新增如下内容:
sonar.web.javaOpts=-javaagent:/SonarQubeAgent-1.2-SNAPSHOT.jar -Xmx1G -Xms128m -XX:+HeapDumpOnOutOfMemoryError
sonar.ce.javaOpts=-javaagent:/SonarQubeAgent-1.2-SNAPSHOT.jar -Xmx2G -Xms128m -XX:+HeapDumpOnOutOfMemoryError
重启sonarqube容器,然后License Manager当中填入上文获取的证书即可:
使用
这里主要叙述手工代码审查的步骤:
-
主页右上角 -> 新增项目 -> 手工
-
按需填写显示名和项目标识符:
-
选择本地:
-
(按需)将令牌修改为永不过期:
-
记住这个令牌:
-
选择C,C++或ObjC -> Linux,下面会出现下载必要的应用包、扫描器以及在项目当中扫描器的使用教程,相关步骤代码如下:
(注意下面这些配置都是属于客户主机的配置,即你所要审查的项目代码所在的那台主机)应用包、扫描器的安装以及环境变量的配置:
curl --create-dirs -sSLo $HOME/.sonar/build-wrapper-linux-x86.zip http://192.168.0.135:9000/static/cpp/build-wrapper-linux-x86.zip unzip -o $HOME/.sonar/build-wrapper-linux-x86.zip -d $HOME/.sonar/export PATH=$HOME/.sonar/build-wrapper-linux-x86:$PATH export SONAR_SCANNER_VERSION=4.7.0.2747 export SONAR_SCANNER_HOME=$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linuxcurl --create-dirs -sSLo $HOME/.sonar/sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_VERSION-linux.zip unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/export PATH=$SONAR_SCANNER_HOME/bin:$PATH export SONAR_SCANNER_OPTS="-server"export SONAR_TOKEN=sqp_0e3bfc1c50b71f7ba912e8e36700c315f155081d
其中ip地址以及令牌根据实际情况填写!
-
在独立的cmake项目当中使用sonarqube:
项目结构如下:
进入build目录,执行
cmake ..
,然后执行如下命令进行编译:cd build build-wrapper-linux-x86-64 --out-dir bw-output make
执行完成后会在build目录下生成一个bw-output目录,里面比较重要的是build-wrapper-dump.json文件,如果你看到该文件生成了很多配置(大几十行),说明你的配置是正确的,否则如果只有少数几行,说明配置存在问题,需要查看是否有步骤缺失。
build-wrapper-linux-x86-64
命令实际上会hook住编译器,从而获取项目当中各个源文件以及其依赖关系。接下来的sonar-scanner
命令才是真正执行代码审查的主体。然后回到项目根目录,使用扫描器进行代码审查,分析结果会传到sonarqube所属项目当中:
cd .. sonar-scanner \ -Dsonar.projectKey=test \ -Dsonar.sources=. \ -Dsonar.cfamily.build-wrapper-output=build/bw-output \ -Dsonar.host.url=http://192.168.0.135:9000 \ -Dsonar.login=sqp_0e3bfc1c50b71f7ba912e8e36700c315f155081d
这里主要关注这两个参数:
- -Dsonar.cfamily.build-wrapper-output:build-wrapper-linux-x86-64命令生成配置文件路径。- -Dsonar.sources:源码根路径
步骤如下:
等待执行完成后,输出:
此时同样的会在项目根目录产生一个配置目录:.scannerwork,结合上述,现在项目结构为:
在sonarqube网页上可以看到分析结果:
-
在buildroot项目当中使用sonarqube:
有了cmake项目使用sonarqube的经验,buildroot项目其实也类似,高度重复的部分会直接省略:
首先是环境变量的配置,参考步骤6的开头部分,然后是使用build-wrapper-linux-x86-64命令对buildroot包进行编译,并自动创建bw-output,这里以编译mediaserver为例:
# 更换项目令牌 export SONAR_TOKEN=sqp_60cd6b366e2852a5fdb5f7629c5e6c73b6c94d6c build-wrapper-linux-x86-64 --out-dir bw-output make mediaserver
在buildroot下生成了bw-output目录:
进入到buildroot/output/dc_rv1126_ipc/build/mediaserver/目录(合理修改
-Dsonar.sources
、-Dsonar.cfamily.build-wrapper-output
参数路径可以无需cd来cd去,前者代表源码根路径,后者代表执行build-wrapper-linux-x86-64
命令时所指定的–out-dir的目录路径),执行如下代码:sonar-scanner \ -Dsonar.projectKey=mediaserver \ -Dsonar.sources=. \ -Dsonar.cfamily.build-wrapper-output=../../../../bw-output \ -Dsonar.host.url=http://192.168.0.135:9000 \ -Dsonar.login=sqp_60cd6b366e2852a5fdb5f7629c5e6c73b6c94d6c \ -Dsonar.scm.disabled=true \ -Dsonar.scm.exclusions.disabled=true
结果如下:
-
本章完结
相关文章:

Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
目录 Ubuntu使用Docker搭建SonarQube企业版(含破解方法)SonarQube介绍安装Docker安装PostgreSQL容器Docker安装SonarQube容器SonarQube汉化插件安装 破解生成license配置agent 使用 Ubuntu使用Docker搭建SonarQube企业版(含破解方法ÿ…...
Spark SQL 之 Analyzer
Spark SQL 之 Analyzer // Special case for Project as it supports lateral column alias.case p: Project =>val resolvedNoOuter = p.projectList.map(resolveExpressionByPlanChildren(_, p...
c/c++数据类型转换.
author: hjjdebug date: 2025年 05月 18日 星期日 20:28:52 CST descrip: c/c数据类型转换. 文章目录 1. 为什么需要类型转换?1.1 发生的时机:1.2 常见的发生转换的类型: 2. c语言的类型转换: (Type) value2.1 c语言的类型变换是如何实现的? 规则是什么? 3. c 的static_cast…...

Django 项目的 models 目录中,__init__.py 文件的作用
在 Django 项目的models/init.py文件中,这些导入语句的主要作用是将各个模型类从不同的模块中导入到models包的命名空间中。这样做有以下几个目的: 简化导入路径 当你需要在项目的其他地方使用这些模型时,可以直接从models包导入,…...
实验六:FPGA序列检测器实验
FPGA序列检测器实验(远程实验系统) 文章目录 FPGA序列检测器实验(远程实验系统)一、数字电路基础知识1. 时钟与同步2. 按键消抖原理代码讲解:分频与消抖3. 有限状态机(FSM)设计代码讲解:状态机编码与转移4. 边沿检测与信号同步5. 模块化设计二、实验数字电路整体思想三…...

网络的知识的一些概念
1.什么是局域网,什么是广域网 局域网(Local area network)也可以称为本地网,内网,局域网有这几个发展经历: 最开始电脑与电之间是直接用网线连接的 再后来有了集线器() 再后来出…...

芋道项目,商城模块数据表结构
一、需求 最近公司有新的业务需求,调研了一下,决定使用芋道(yudao-cloud)框架,于是从github(https://github.com/YunaiV/yudao-cloud)上克隆项目,选用的是jdk17版本的。根据项目启动手册&#…...
yarn任务筛选spark任务,判断内存/CPU使用超过限制任务
yarn任务筛选spark任务,判断内存/CPU使用超过限制任务 curl -s “http://it-cdh-node01:8088/ws/v1/cluster/apps?statesRUNNING” | jq ‘.apps.app | map(select(.applicationType “SPARK” ) | select(.allocatedMB > 102400 or .allocatedVCores > 50)…...

【氮化镓】HfO2钝化优化GaN 器件性能
2025年,南洋理工大学的Pradip Dalapati等人在《Applied Surface Science》期刊发表了题为《Role of ex-situ HfO2 passivation to improve device performance and suppress X-ray-induced degradation characteristics of in-situ Si3N4/AlN/GaN MIS-HEMTs》的文章。该研究基…...
c#的内存指针操作(仅用于记录)
c#也可以直接操作内存指针,如下为示例: unsafe {byte[] a {1,2,3};fixed (byte* p1 a, p2 &a[^1]){Debugger.Log(1, "test", $"max index:{p2-p1}");Debugger.Log(1, "test", $"address:{(long)p1:X}")…...
常见机器学习算法简介:回归、分类与聚类
机器学习说到底,不就三件事: 预测一个数 —— 回归 判断归属哪个类 —— 分类 自动把数据分组 —— 聚类 别背术语,别管定义,先看问题怎么解决。 一、回归(Regression) 干嘛的? 模型输出一…...
SpringBoot项目里面发起http请求的几种方法
在Spring Boot项目中发起HTTP请求的方法 在Spring Boot项目中,有几种常用的方式可以发起HTTP请求,以下是主要的几种方法: 1. 使用RestTemplate (Spring 5之前的主流方式) // 需要先注入RestTemplate Autowired private RestTemplate restT…...
Linux下Nginx源码安装步骤详解
以下是在Linux系统下从源码安装Nginx的详细步骤及解释: 1. 下载Nginx源码 步骤: wget http://nginx.org/download/nginx-1.25.3.tar.gz tar -zxvf nginx-1.25.3.tar.gz cd nginx-1.25.3解释: wget:从官网下载Nginx源码包&#…...

SQLMesh 增量模型从入门到精通:5步实现高效数据处理
本文深入解析 SQLMesh 中的增量时间范围模型,介绍其核心原理、配置方法及高级特性。通过实际案例说明如何利用该模型提升数据加载效率,降低计算资源消耗,并提供配置示例与最佳实践建议,帮助读者在实际项目中有效应用这一强大功能。…...

Zookeeper 入门(二)
4. Zookeeper 的 ACL 权限控制( Access Control List ) Zookeeper 的ACL 权限控制,可以控制节点的读写操作,保证数据的安全性,Zookeeper ACL 权 限设置分为 3 部分组成,分别是:权限模式(Scheme)、授权对象(…...

【架构篇】安全架构-双向认证
mTLS(Mutual TLS)详解:双向认证的原理、流程与实践 摘要 mTLS(Mutual TLS)是一种基于数字证书的双向身份验证协议,广泛应用于微服务通信、金融交易等高安全场景。本文深入解析mTLS的工作原理、认证流程、W…...

负载均衡—会话保持技术详解
一、会话保持的定义 会话保持(Session Persistence)是一种负载均衡策略,其核心机制是确保来自同一客户端的连续请求,在特定周期内被定向到同一台后端服务器进行处理。这种机制通过记录和识别客户端的特定标识信息,打破…...

Flask快速入门和问答项目源码
Flask基础入门 源码: gitee:我爱白米饭/Flask问答项目 - 码云 目录 1.安装环境2.【debug、host、port】3.【路由params和query】4.【模板】5.【静态文件】6.【数据库连接】6.1.安装模块6.2.创建数据库并测试连接6.3.创建数据表6.4.ORM增删改查 6.5.ORM模…...

go语法大赏
前些日子单机房稳定性下降,找了好一会才找到真正的原因。这里面涉及到不少go语法细节,正好大家一起看一下。 一、仿真代码 这是仿真之后的代码 package mainimport ("fmt""go.uber.org/atomic""time" )type StopSignal…...

软件工程各种图总结
目录 1.数据流图 2.N-S盒图 3.程序流程图 4.UML图 UML用例图 UML状态图 UML时序图 5.E-R图 首先要先了解整个软件生命周期: 通常包含以下五个阶段:需求分析-》设计-》编码 -》测试-》运行和维护。 软件工程中应用到的图全部有:系统…...
R-tree详解
R-tree 是一种高效的多维空间索引数据结构,专为快速检索空间对象(如点、线、区域)而设计。它广泛应用于地理信息系统(GIS)、计算机图形学、数据库等领域,支持范围查询、最近邻搜索等操作。以下是其核心原理…...

AAAI2024 | 基于特征多样性对抗扰动攻击 Transformer 模型
Attacking Transformers with Feature Diversity Adversarial Perturbation 摘要-Abstract引言-Introduction相关工作-Related Work方法-Methodology实验-Experiments结论-Conclusion 论文链接 本文 “Attacking Transformers with Feature Diversity Adversarial Perturbatio…...

关于数据湖和数据仓的一些概念
一、前言 随着各行业数字化发展的深化,数据资产和数据价值已越来越被深入企业重要发展的战略重心,海量数据已成为多数企业生产实际面临的重要问题,无论存储容量还是成本,可靠性都成为考验企业数据治理的考验。本文来看下海量数据存储的数据湖和数据仓,数据仓库和数据湖,…...
鸿蒙OSUniApp制作自定义的下拉菜单组件(鸿蒙系统适配版)#三方框架 #Uniapp
UniApp制作自定义的下拉菜单组件(鸿蒙系统适配版) 前言 在移动应用开发中,下拉菜单是一个常见且实用的交互组件,它能在有限的屏幕空间内展示更多的选项。虽然各种UI框架都提供了下拉菜单组件,但在一些特定场景下&…...
C++面试2——C与C++的关系
C与C++的关系及核心区别的解析 一、哲学与编程范式:代码组织的革命 过程式 vs 多范式混合 C语言是过程式编程的典范,以算法流程为中心,强调“怎么做”(How)。例如,实现链表操作需手动管理节点指针和内存。 C++则是多范式语言,支持面向对象(OOP)、泛型编程(模板)、函…...

常用的Java工具库
1. Collections 首先是 java.util 包下的 Collections 类。这个类主要用于操作集合,我个人非常喜欢使用它。以下是一些常用功能: 1.1 排序 在工作中,经常需要对集合进行排序。让我们看看如何使用 Collections 工具实现升序和降序排列&…...
基于LabVIEW的双音多频系统设计
目录 1 系统设计概述 双音多频(Dual-Tone Multi-Frequency, DTMF)信号是一种广泛应用于电话系统中的音频信号,通过不同的频率组合表示不同的按键。每个按键对应两个频率,一个低频和一个高频,共同组成独特的信号。在虚拟仪器技术快速发展的背景下,利用LabVIEW等图形化编程…...

R S的EMI接收机面板
图片摘自R & S官网。 根据您提供的第一张图(设备前面板带屏幕的图像),这是 Rohde & Schwarz ESRP7 EMI Test Receiver 的正面显示界面,我将对屏幕上显示的参数逐项进行解读: 🖥️ 屏幕参数解读 左…...

[ctfshow web入门] web122
信息收集 这一题把HOME开放了,把#和PWD给过滤了 <?php error_reporting(0); highlight_file(__FILE__); if(isset($_POST[code])){$code$_POST[code];if(!preg_match(/\x09|\x0a|[a-z]|[0-9]|FLAG|PATH|BASH|PWD|HISTIGNORE|HISTFILESIZE|HISTFILE|HISTCMD|US…...
Nginx+Lua 实战避坑:从模块加载失败到版本冲突的深度剖析
Nginx 集成 Lua (通常通过 ngx_http_lua_module 或 OpenResty) 为我们提供了在 Web 服务器层面实现动态逻辑的强大能力。然而,在享受其高性能和灵活性的同时,配置和使用过程中也常常会遇到各种令人头疼的问题。本文将结合实际案例,深入分析在 Nginx+Lua 环境中常见的技术问题…...