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. 背景¶
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 |
待办(未纳入本次范围)¶
- 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。 - 运行期兼容层(独立课题):VCS 需老版 binutils;Verdi 需
libpng12等老库。 属六台节点的批量变更,建议按 Cadence「依赖前置」的方式统一实现。 - 开机自启与监控:当前无 systemd 单元、无告警,主机重启后需手工拉起。
- 冗余:如需 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同步,请勿在站点侧修改)