Coverity 2025.03 安装配置

安装

平台端安装

# 使用一个非root账户进行操作,例如使用coverity用户
sudo hostnamectl set-hostname suzitcov01
# 服务器上需要有netstat命令, 否则cov-im-stop命令执行不了, 在安装的最后会产生一个报错说connect无法停止
sudo apt install net-tools

# 安装几个依赖, 与lmgrd有关的
sudo apt install libc6-i386 lib32z1
sudo dpkg -i lsb-compat_9.20161125_amd64.deb 


# 去/etc/hosts 确保127.0.0.1 后面的第一个主机名就是suzitcov01, 这个其实也没有那么重要
cd /home/coverity
chmod +x cov-platform-linux64-2025.3.0.sh
./cov-platform-linux64-2025.3.0.sh

#安装过程不要改变默认配置, 提示指定授权文件的时候指定FreeChina_license的路径
#依次配置一个管理员密码, 配置一个本地的PGSQL, 指定主机名,
#指定平台端的http 8080, https 8443, 分析接口 9090, 控制接口 8005

配置coverity-im服务

sudo vi /etc/systemd/system/coverity-im.service

[Unit]
Description=Coverity Integrity Management Service
After=network.target  # 确保网络就绪后启动

[Service]
Type=forking  # 适用于后台守护进程
User=coverity  # 指定运行用户(需提前创建)
Group=coverity
ExecStart=/home/coverity/cov-platform/bin/cov-im-ctl start
ExecStop=/home/coverity/cov-platform/bin/cov-im-ctl stop
ExecReload=/home/coverity/cov-platform/bin/cov-im-ctl restart
Restart=on-failure  # 异常退出时自动重启
RestartSec=5        # 重启间隔(秒)
WorkingDirectory=/home/coverity/cov-platform  # 工作目录

[Install]
WantedBy=multi-user.target  # 多用户模式下启用


# 使用systemctl 启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now coverity-im

License服务

lmgrd、covlicd和license.lic文件,复制到/home/coverity/license/目录下, 以平台服务器作为分析端的license服务器。

配置/etc/rc.local,添加命令,开机以自动执行

#! /bin/bash 
/home/coverity/license/lmgrd -c /home/coverity/license/license.lic -l /home/coverity/license/log.txt
exit 0

配置分析端使用的license.config文件

因为我们使用集中式的license服务,所以license-server应该配置成27009@suzitcov01。 把license.config文件复制到分析端的bin目录下

#FLEXnet (do not delete this line)
license-server 27009@suzitcov01

分析端安装

license.config 中指定License 服务器,例如suzitcov01这台服务器的27009端口。 在使用分析工具时,要确保运行分析工具的主机可以正常解析suzitcov01这个主机名, 并且端口TCP 27009是连通的。

#FLEXnet (do not delete this line)
license-server 27009@suzitcov01

LDAP

配置LDAP登录

  • Configuration/System/Authentication and Sign In
  • Authenticate with LDAP  #下拉选项
  • 打勾 Disabl local password authentication  #admin永远是能登录的 ,此配置只是为了精准,如果仅为了让LDAP登录,不进行更精准的限制,可以不打这个勾
  • 打勾 Create LDAP users automatically on sign in
  • 打勾 Only create users that are members of imported group(s)   #此配置只是为了精准,仅仅是被同步到的AD组成员才能登录

LDAP服务器配置

Configuration/System/LDAP Configration

服务器配置

新建一个配置比如叫:OWL AD

  • Display Name: OWL AD
  • Primary Server 打上勾, 如果有多个LDAP服务器, 非Primary Server的用户需要在后面加@hostname
  • Host Name: dc01.owl.local
  • Port: 389   #尝试用636不生效, 尽管我的AD已经配置好了TLS
  • Bind DN: dc=owl,dc=local    #这里定义好了基础的base dn, 下方的user/group search 设置中的Base DN是这个DN之下的,就不用再出现dc=owl, dc=local这个顶部DN了
  • Security: none
  • 不勾选 Use anonymous bind
  • Bind DN:dirlookup@owl.local
  • Bind Password: ******
  • 勾选Retrieve group members from nested groups.
  • 点击"Connect to LDAP Server" 左上角会显示Success

User Search Settings

  • 下面是填写用户和组的来源和映射, Coverity针对Active Directory和LDAP两种服务器做了两个预填充功能, 如果你用的是AD,那就点一下Pre-Ffill Microsoft Active Directory Settings, 下方的User&Group Search Settings会自动填写大部分AD通用的字段,比如Username Attribute 就是sAMAccountName, 如果是LDAP就是uid。 本文档以AD为例。
  • User Search Base DN:   留空      #这里是一个比较混淆的地方, 仔细看它下方的说明, 它的本意是, 本设置已经在上方的服务器配置中定义了一个顶层的Base DN, 在这里的User Search DN只要写顶层Base DN下层的DN即可, 因为本例我在要在整个AD中搜索, 所以留空。
  • User ObjectClass: user
  • Username Attribute: sAMAccountName
  • Given Name Attribute: givenName
  • Surname Attribute: sn
  • Email Attribute: mail
  • Disabled User Filter: 留空
  • 测试用户时,输入一个AD用户名,左上角应该是显示sucess

Group Search Settings

  • User Search Base DN:   留空,原因和User部分一样
  • Group ObjectClass: group
  • Group Name Attribute: member
  • Members stored by: Full DN
  • Apply group filter to: Top-level groups and nested groups
  • Group filter: (&(objectClass=group)(name=app-suz-coverity-*))   # 意思是只有app-suz-coverity-开头的组才被搜索到

 

导入用户组

  • Configuration/System/Users & Groups
  • 切换到Group 页签
  • Import
  • Import users from LDAP Server, domain 上面配置的OWL AD
  • Next
  • Import 进程会根据Group filter 找到app-suz-coverity-*开头的所有组
  • Next 后, Import进程也会找到app-suz-coverity-*组中的成员

 

配置Roles

用户和组均可以配置Roles, 例如, 在app-suz-coverity-admins组的Roles配置下, Edit Global, 然后勾选System Admin, 即可授权给这个组Coverity平台管理员的权限。 对于少量的精英用户, 给他们配置Project Admin和Steam Admin的权限, 可以让他们通过分析命令生成新的项目。

分析端测试验证

本例使用一个开源的python项目举例 https://github.com/suenkler/django-tickets.git, 向平台服务端推送报告需要用户有Project Admins和Stream Admins权限, 否则需要事先配置好项目和Stream.

另外, 要保证工作节点上可以正常解析license服务器的主机名,

复制分析端到工作节点

分析端只需要解压分析端的工具到一台能编译你的目标代码的主机上, 配置环境变量的PATH指向分析工具的bin目录, 能用tab键补全cov-* 的命令即可。比如我们复制到一台工作节点的/home/owlhero/cov-analysis/ 下

配置环境变量

export PATH=/home/owlhero/cov-analysis/bin:$PATH

拉取代码

cd /home/owlhero
git clone https://github.com/suenkler/django-tickets.git
cd django-tickets

执行Coverity Scan

coverity scan
# 根据提示输入Coverity Connect 的URL: http://suzitcov01:8080
# 输入需要连接的Steam名称,如果是首次使用,会用当前的git项目名称作为steam名, 你也可以自定义一个新,或者使用一个平台端已经存在的Steam
# 输入平台端的用户名和密码
# Coverity Scan 会开始一次初始分析,并把结果上传到平台服务器

Analysis summary after merging defects:
    HIGH SEVERITY:   0 issue(s)
    MEDIUM SEVERITY: 2 issue(s)
    LOW SEVERITY:    2 issue(s)
    AUDIT SEVERITY:  0 issue(s)
[INFO] Analyze phase took 24.01s.
[INFO] Committing analysis results using Coverity Commit version 2025.3.0
[INFO] Executing command: /home/coverity/cov-analysis/bin/cov-commit-defects --dir /home/owlhero/django-tickets-master/idir --url http://suzitcov01:8080 --stream danjgo-tickets --on-new-cert distrust --ticker-mode no-spin --auth-key-file /home/owlhero/.coverity/authkeys/ak-suzitcov01-8080
Coverity Defect Commit Client version 2025.3.0 on Linux 5.15.0-143-generic x86_64
....
****************************************************
[STATUS] 2025-07-04 03:01:50 UTC - Committing 31 summaries...
|0----------25-----------50----------75---------100|
****************************************************
New snapshot ID 10002 added.
Elapsed time: 00:00:01
Results are available at http://suzitcov01:8080/query/defects.htm?stream=danjgo-tickets&outstanding=true
[INFO] Commit phase took 1.409s.
[INFO] Scan complete.

平台端查看结果

登录https://suzitcov01:8080

image-20250704111859168

posted @ 2025-07-04 11:27  陈大玉  阅读(103)  评论(0)    收藏  举报