跳转至

SOP — Synopsys License 服务上线(192.168.31.29)

变更日期:2026-09-28 | 类型:C 类(生产变更) 交付目录:synopsys_license_20260928/ 涉及主机:192.168.31.29(服务端)、192.168.31.18(验证节点) 备份台账:backup/README.md

目录

  1. 背景
  2. 目标
  3. 前置条件
  4. 影响范围
  5. 分步操作
  6. 验证
  7. 回滚
  8. 风险说明
  9. 附录

1. 背景

2018 批次 Synopsys 工具链已于 2026-09-28 完成首次安装(20 棵树、六台客户端可见), 但 license 一直未启用,工具无法实际启动。

用户提供 license 文件并放置于 192.168.31.29:/opt/FlexLM/Synopsys.dat。本次将其装载为 独立于 Cadence FlexLM 的第二个 license 实例,并以 VCS + Verdi 做实测验证。

设计依据(2026-09-28 讨论结论):

  • 采用「同一主机 + 各厂商独立 lmgrd」。FlexLM 的 lmgrd 是通用调度器,厂商逻辑在 vendor daemon(Cadence = cdslmd,Synopsys = snpslmd)。把两家合并进同一个 lmgrd 会引入签名/版本互斥、故障域耦合、换证互相中断等代价,故不合并。
  • 端口分段:Cadence 用 5280/5281,Synopsys 用 2700/2701。

2. 目标

目标 可验证状态
服务端实例运行 lmgrd(:2700) + snpslmd(:2701) 常驻,与 Cadence 实例互不影响
license 可发 snpslmd: UP,feature 注册完整
客户端可达 .18 上以 SNPSLMD_LICENSE_FILE=2700@192.168.31.29 能 checkout
幂等 重复执行启动流程,第二次零变更、全跳过

不在本次范围:六台节点的 modulefile 固化;VCS/Verdi 在 Rocky 9 的运行期兼容层 (见第 8 章)。

3. 前置条件

  • 31.29 root 免密 SSH 可达;Rocky 9.8;服务网卡 MAC 52:54:00:31:0e:02(= license 绑定 HostID)
  • SCL 二进制源:/data/nfs/tools/synopsys/scl/2018.06/linux64/bin/(宿主可读)
  • license 文件已就位:/opt/FlexLM/Synopsys.dat(620005 字节,CRLF 行尾)
  • Cadence FlexLM 在 31.29 运行中(lmgrd :5280 + cdslmd :5281)——全程不得干扰
  • 执行前检查:
ssh root@192.168.31.29 'pgrep -ax lmgrd; pgrep -ax cdslmd; firewall-cmd --list-ports; hostname; ip -o link show | grep -v lo'

预期:两条 Cadence 进程、端口 5280/tcp 5281/tcp、主机名 Flexlm、MAC 52:54:00:31:0e:02。

4. 影响范围

项 内容
主机 服务端 192.168.31.29;验证节点 192.168.31.18
是否停服 否。未重启 Cadence 服务,未执行 firewall-cmd --reload
在跑业务 变更时 .18 无 Slurm 作业;31.29 为专用 license 主机
窗口 无特殊窗口要求——端口用 runtime 方式放行,即使 Cadence 在用也可安全执行
回滚代价 低:停新实例 + 撤端口 + 删目录,Cadence 侧零影响

5. 分步操作

步骤 1:备份 license 并建立交付目录

先留退路:license 是本次唯一被修改的既有文件,必须先取回本机。备份规则见全局约束 「备份与留档」;本主题的台账在 backup/README.md。

TS=$(date +%Y%m%d-%H%M%S)
BASE=<交付目录>            # 本次为 synopsys_license_20260928
mkdir -p "$BASE/backup/opt/FlexLM" "$BASE/docs"
scp root@192.168.31.29:/opt/FlexLM/Synopsys.dat "$BASE/backup/opt/FlexLM/Synopsys.dat.bak.$TS"
sha256sum "$BASE/backup/opt/FlexLM/Synopsys.dat.bak.$TS"
ssh root@192.168.31.29 'sha256sum /opt/FlexLM/Synopsys.dat'    # 两侧须一致

预期:两侧 sha256 相同(本次 f897e6f7…b72f95)。 失败判断:不一致 → 重新 scp,勿继续后续步骤。

步骤 2:建服务目录、移入 license、拷入二进制

31.29 未挂载 /tools(license 主机刻意不依赖 NFS,避免 NFS 抖动连带许可中断), 因此 lmgrd/snpslmd 必须拷贝到本地。

SCLBIN=/data/nfs/tools/synopsys/scl/2018.06/linux64/bin
ssh root@192.168.31.29 'mkdir -p /opt/FlexLM/Synopsys'
ssh root@192.168.31.29 'mv /opt/FlexLM/Synopsys.dat /opt/FlexLM/Synopsys/Synopsys.dat'
scp "$SCLBIN/lmgrd" "$SCLBIN/snpslmd" "$SCLBIN/lmutil" root@192.168.31.29:/opt/FlexLM/Synopsys/
ssh root@192.168.31.29 'chmod 755 /opt/FlexLM/Synopsys/{lmgrd,snpslmd,lmutil}'

坑(二进制版本):SCL v2018.06 自带 lmgrd v11.14.1.3 x64_lsb,与 Cadence 现用的 v11.16.4.0 不是同一份。两者必须各自独立运行,不要用其中一个去带另一家的 vendor daemon。 该二进制依赖 LSB 解释器 /lib64/ld-lsb-x86-64.so.3——该链接已于 Cadence 变更时建立, 本次直接复用;若缺失,lmgrd 会报 No such file or directory(RC=127)。

预期:/opt/FlexLM/Synopsys/ 下有 4 个文件(lmgrd / lmutil / snpslmd / Synopsys.dat)。

步骤 3:修改 license 两行并统一行尾

只改两行,INCREMENT SSS 那条完整性 key 不碰:

行 改前 改后 原因
1 SERVER Flexlm 525400310e02 2700 SERVER 192.168.31.29 525400310e02 2700 客户端解析不了主机名 Flexlm,会报 lmgrd is not running (-96)(Cadence 场景 E 同源)
2 DAEMON snpslmd DAEMON snpslmd port=2701 固定 vendor daemon 端口,否则端口随机、防火墙无法精确放行
ssh root@192.168.31.29 '
cd /opt/FlexLM/Synopsys || exit 1
sed -i "1s/^SERVER Flexlm /SERVER 192.168.31.29 /" Synopsys.dat
sed -i "2s/^DAEMON snpslmd[[:space:]]*$/DAEMON snpslmd port=2701/" Synopsys.dat
head -2 Synopsys.dat'

坑(CRLF):原文件为 Windows 传来,头部数行为 CRLF、正文为 LF。第 2 行替换时 [[:space:]]* 会吃掉该行的 \r,导致行尾混杂。必须统一为 LF:

ssh root@192.168.31.29 'cd /opt/FlexLM/Synopsys && tr -d "\r" < Synopsys.dat > Synopsys.dat.lf && mv Synopsys.dat.lf Synopsys.dat'

预期:head -2 无 ^M;wc -l = 11391、grep -cE "^(FEATURE|INCREMENT)" = 2847(与改前一致)。 失败判断:行数或 feature 数变化 → 用步骤 1 的备份覆盖回原位,重新执行本步。

步骤 4:放行防火墙端口(不 reload)

--permanent 只写配置、不生效;--reload 立即生效但会重建规则表,可能瞬断 Cadence 在跑的许可连接。故采用「runtime 立即生效 + permanent 持久化」组合,全程不 reload。

ssh root@192.168.31.29 '
firewall-cmd --add-port=2700/tcp          # runtime,立即生效
firewall-cmd --add-port=2701/tcp
firewall-cmd --permanent --add-port=2700/tcp   # 持久化,待下次 reload/重启生效
firewall-cmd --permanent --add-port=2701/tcp
firewall-cmd --list-ports'

预期:2700/tcp 2701/tcp 5280/tcp 5281/tcp。

步骤 5:启动 Synopsys lmgrd 实例

必须在 license 文件所在目录启动(DAEMON snpslmd 未写路径,lmgrd 在 license 文件目录 与其自身目录查找 vendor daemon)。

ssh root@192.168.31.29 '
cd /opt/FlexLM/Synopsys || exit 1
if pgrep -ax snpslmd >/dev/null 2>&1; then
  echo "[SKIP] snpslmd already running"
else
  setsid nohup ./lmgrd -c /opt/FlexLM/Synopsys/Synopsys.dat -l /opt/FlexLM/Synopsys/lmgrd.log </dev/null >/dev/null 2>&1 &
  sleep 10
fi
pgrep -ax lmgrd; pgrep -ax snpslmd
ss -lntp | grep -E ":2700|:2701"'

坑(后台进程被回收):必须 setsid nohup … & 且 stdin/stdout/stderr 全部重定向, 否则进程随 SSH 会话结束被杀(Cadence 部署时同样踩过)。

坑(日志被截断):lmgrd -l <file> 每次启动都会截断重写日志,历史内容不保留。 需要跨启动留档时,启动前先 cp -p lmgrd.log lmgrd.log.$(date +%Y%m%d-%H%M%S)。

预期:两条新进程;:2700 与 :2701 均 LISTEN;日志出现 snpslmd using TCP-port 2701。 失败判断:snpslmd 未起 → 查 lmgrd.log,多为 DAEMON 路径找不到或 license 语法错误。

步骤 6:服务端验证

ssh root@192.168.31.29 'cd /opt/FlexLM/Synopsys && ./lmutil lmstat -c 2700@192.168.31.29 -a | head -8'
ssh root@192.168.31.29 'cd /opt/FlexLM/Synopsys && ./lmutil lmstat -c 2700@192.168.31.29 -a | grep -E "^Users of (Verdi|VCSCompiler|VCSRuntime)"'

预期:license server UP (MASTER) v11.14.1、snpslmd: UP v11.14.1; 三个 feature 各 Total of 99 licenses issued。

步骤 7:客户端验证(VCS + Verdi)

ssh root@192.168.31.18 '
export SNPSLMD_LICENSE_FILE=2700@192.168.31.29
LMU=/tools/synopsys/scl/2018.06/linux64/bin/lmutil
"$LMU" lmdiag -c 2700@192.168.31.29 -n Verdi | tail -6
"$LMU" lmdiag -c 2700@192.168.31.29 -n VCSRuntime | tail -6'

预期:This license can be checked out(本次 Verdi 与 VCSCompiler/VCSRuntime/VCSMXCompiler_Net 全部通过)。

坑(VCS 运行期,未解决):VCS_HOME/bin/vcs 编译会停在链接阶段—— ld: archive.0/*.a(...): .symtab local symbol at index 105 (>= sh_info of 2) / error adding symbols: bad value。这是 Rocky 9 的 binutils 2.35 读不了 VCS 2017.12 自带预编译 archive,与 license 无关。详见第 8 章。 另:VCS 脚本需系统 dc 命令(由 bc 包提供),缺失时报 vcs: line 3166: dc: command not found。

6. 验证

验证项 命令 本次实测结果
服务端状态 lmutil lmstat -c 2700@192.168.31.29 -a \| head -8 server UP (MASTER) v11.14.1 / snpslmd: UP ✅
feature 注册量 同上,grep -c "^Users of" 2843 ✅
Cadence 未受影响 pgrep -ax cdslmd; ss -lntp \| grep :528 进程与 5280/5281 原样 ✅
Verdi feature 客户端 lmdiag -n Verdi This license can be checked out ✅
VCS feature 客户端 lmdiag -n VCSCompiler / VCSRuntime 均可 checkout ✅
真实取用 服务端 grep "OUT:\|IN:" lmgrd.log OUT: "VCSCompiler_Net" root@slurm-work-01 → IN: ✅
幂等复跑 重跑步骤 5 的启动块 + 步骤 4 [SKIP] snpslmd already running、ALREADY_ENABLED ✅

验证结论:license 服务已就绪,VCS/Verdi 的许可均可正常取用;工具能否实际跑完编译, 取决于第 8 章的运行期兼容问题,与 license 无关。

7. 回滚

触发判据(任一达标即回滚):snpslmd 无法常驻或反复重启;lmstat 报 server 不可达; Cadence 侧 5280/5281 或 cdslmd 出现异常。

备份

文件 位置
改前 license backup/opt/FlexLM/Synopsys.dat.bak.20260928-130749(台账见 backup/README.md)

回滚步骤

⚠️ 高危:停服时绝不能用 pkill lmgrd——同机还有 Cadence 的 lmgrd,按名杀会连带 杀掉它,导致全集群 Cadence 许可中断。必须按 PID 精确 kill(PID 取命令行含 Synopsys.dat 的那个)。

# 1) 找到 Synopsys 实例的 PID(勿用 pkill lmgrd)
ssh root@192.168.31.29 "pgrep -af lmgrd | grep Synopsys.dat"

# 2) 先停 vendor daemon,再停该 lmgrd(先确认上一步 PID 不是 22552/Cadence 那个)
ssh root@192.168.31.29 "kill <snpslmd_pid>; sleep 2; kill <lmgrd_pid>"
ssh root@192.168.31.29 'pgrep -ax lmgrd; ss -lntp | grep -E ":2700|:2701"'   # 预期 Cadence 实例仍在,2700/2701 已消失

# 3) 撤销端口放行
ssh root@192.168.31.29 'firewall-cmd --remove-port=2700/tcp; firewall-cmd --remove-port=2701/tcp
firewall-cmd --permanent --remove-port=2700/tcp; firewall-cmd --permanent --remove-port=2701/tcp'

# 4) 需要还原 license 时
scp backup/opt/FlexLM/Synopsys.dat.bak.20260928-130749 root@192.168.31.29:/opt/FlexLM/Synopsys/Synopsys.dat

# 5) 清目录(确认无需保留后)
ssh root@192.168.31.29 'rm -rf /opt/FlexLM/Synopsys'

回滚后验证

pgrep -ax lmgrd 只剩 Cadence 一条;firewall-cmd --list-ports 只剩 5280/tcp 5281/tcp; 客户端 Cadence 工具仍可正常取许可。

8. 风险说明

# 风险 缓解
1 同机双 lmgrd 的误杀风险:pkill lmgrd 会同时杀掉 Cadence 的实例 停服一律按 PID;本 SOP 第 7 章已标红。这是本变更最高的运维风险
2 改 license 文件可能影响签名校验 只动 SERVER/DAEMON 两行,INCREMENT SSS key 不碰;改前完整备份。实测服务正常启动、feature 全部注册
3 firewall-cmd --reload 瞬断 Cadence 连接 改用 runtime + permanent 组合,全程不 reload
4 license 主机重启后服务丢失 当前用 setsid nohup 拉起,无开机自启;已列入待办(见第 9 章)
5 VCS 在 Rocky 9 编译失败:binutils 2.35 读不了 VCS 2017.12 自带预编译 archive(.symtab … (>= sh_info of 2) / bad value) 本次未解决,属独立课题;需引入老版 binutils 或用 VCS 兼容选项
6 Verdi 在 Rocky 9 启动失败:先缺 libXss.so.1(已装 libXScrnSaver),再缺 libpng12.so.0(RHEL 9 已移除该包) 本次未解决,需建立老库兼容层
7 节点侧补包改变系统状态 本次仅在 .18 装了 bc、libXScrnSaver(均为常规包,无副作用);.18 变更时无 Slurm 作业
8 license 主机单点,无冗余 与 Cadence 共机,同属单点;Triad 冗余需厂商签发支持,见待办

9. 附录

交付物清单

文件 说明
docs/SOP.md 本文件
docs/RUNBOOK.md Synopsys license 服务运行手册
backup/README.md 备份台账
backup/opt/FlexLM/Synopsys.dat.bak.20260928-130749 改前 license(620005 字节,sha256 f897e6f7…b72f95)

变更清单(服务端 31.29)

项 变更前 变更后
/opt/FlexLM/Synopsys.dat 存在于 /opt/FlexLM/ 移至 /opt/FlexLM/Synopsys/Synopsys.dat,改 2 行,行尾 CRLF→LF
/opt/FlexLM/Synopsys/ 不存在 新建,含 lmgrd / lmutil / snpslmd / Synopsys.dat / lmgrd.log
进程 仅 Cadence lmgrd+cdslmd 增加 Synopsys lmgrd(PID 25107)+snpslmd(PID 25108)
firewalld 5280/tcp 5281/tcp 增加 2700/tcp 2701/tcp(runtime + permanent)
Cadence 侧 — 未改动任何文件、未重启、未 reload

待办(未纳入本次范围)

  1. modulefile:六台客户端固化 SNPSLMD_LICENSE_FILE=2700@192.168.31.29。 ⚠️ 必须用厂商专用变量 SNPSLMD_LICENSE_FILE,不可依赖 LM_LICENSE_FILE 兜底—— Cadence 的 modulefile 已将 LM_LICENSE_FILE 设为 5280@192.168.31.29,Synopsys 老工具 回退读它时会去 5280 找 snpslmd,找不到会超时重试、拖慢启动。走 slurm_ins 工程 module_env.families。
  2. 运行期兼容层(独立课题):VCS 需老版 binutils;Verdi 需 libpng12 等老库。 属六台节点的批量变更,建议按 Cadence「依赖前置」的方式统一实现。
  3. 开机自启与监控:当前无 systemd 单元、无告警,主机重启后需手工拉起。
  4. 冗余:如需 Triad 三机冗余,须向 Synopsys 申请并由其签发含 3 行 SERVER 的 license。

决策经过

  • 2026-09-28:用户确认「改 license 两行(SERVER→IP、DAEMON 固定端口)」与「归入 /opt/FlexLM/Synopsys/」两项方案选择。
  • 2026-09-28:VCS 编译受阻于 binutils、Verdi 受阻于 libpng12,用户决定 「license 交付到此收尾,运行期兼容另立独立课题」。

来源:/home/rain/Documents/eda_tools_ins/Synopsys/synopsys_license_20260928/docs/SOP.md | 最后更新:2026-09-28 13:12(由 build/sync.py 同步,请勿在站点侧修改)