SOP — Synopsys 2018 工具集安装(synopsys_install_2018)¶
变更批次:2026-09-28|执行结果:成功(20 个产品树 / 41G / 六台客户端可见 / 幂等复跑零变更)
目录¶
1 背景|2 目标|3 前置条件|4 影响范围|5 分步操作|6 验证|7 回滚|8 风险说明|附录 A–C
1. 背景¶
需要在一套 Rocky 9.8 计算集群(Slurm + LSF 两套调度、NFS/Lustre/local SSD 三层存储)上, 把 Synopsys 2018 年代的工具集部署为多机共享的只读工具链。介质形态与旧工程(VCS+Verdi X-2025.06)不同:Installer 是 rar + v5.0、介质是 2018 年的 spf、且产品数量从 2 个扩到 18 个介质。
用户决策(2026-09-28):版本红线 = 月份基线 ≤ 2018.06;同产品多版本取最新;跨代取功能覆盖最大者; 不装 VC VIP(2018.09 超线且与 VCS-MX 2017.12 不配套)、不装 ICC(被 ICC2 覆盖)、不装 Windows/32位/SUSE/PPC64 包。
2. 目标¶
/data/nfs/tools/synopsys/<产品>/<版本>下 20 棵树就绪,属主root:root、u=rwX,go=rX- 六台客户端经
/tools(只读挂载)可见且主程序可执行 - 全流程幂等:复跑零变更
- 每步可复核:命令、输出、rc、日志全部留痕
3. 前置条件¶
| 类别 | 条件 | 检查方式 |
|---|---|---|
| 本机身份 | 本机(dell-R620,Ubuntu 24.04.3)为 NFS 宿主,/data 为本地 ext4 |
findmnt -no SOURCE,FSTYPE /data |
| 本机工具 | perl、tclsh、csh、unrar、python3 |
command -v perl tclsh csh unrar |
| 磁盘 | /data 可用 ≥ 80G(本次实装 41G);介质所在分区 /dev/sda3 预留 ≥ 10G |
df -B1G --output=avail /data |
| 安装器来源 | synopsys2018/synopsysinstaller_v5.0.rar sha256 与配置一致 |
sha256sum 对照 config/synopsys_install.yaml |
| 节点依赖 | 六台 i686 基础库、tcsh、libnsl、EPEL、Lmod(已由 Cadence IC617 批次备好) | ssh root@<ip> 'rpm -qa \| grep -c i686'(预期 139) |
| 节点空闲 | 装 i686 包会变更系统包 → 有作业的节点不动 | squeue -h -w $(hostname) / bjobs |
| 权限 | 本机 sudo -n 免密;六台 root 免密(~/.ssh/id_ed25519) |
sudo -n true、ssh root@<ip> hostname |
关键前置(本次踩坑得出,缺一即静默失败):本机必须有 csh(post-install 脚本 shebang 为
#!/bin/csh -f)与 unrar(7z 解不了该 RAR5)。
4. 影响范围¶
- 目标主机:本机(NFS 宿主)执行安装;六台客户端只读可见,不需要停服
- 变更对象:
/data/nfs/tools/synopsys/下新增 20 个产品树(41G);不动 fstab/exports、 不动/opt/modulefiles/* - 不影响:集群既有 Cadence/Mentor 工具、Slurm/LSF 队列、用户数据
- 窗口期:无停服窗口要求;全程约 50 分钟(介质处理 18 个 + 依赖与验证)
- 节点侧动作(仅补 LSB 链接):对 5 台(.19/.20/.25/.26/.27)创建
/lib64/ld-lsb-x86-64.so.3、/lib/ld-lsb.so.3软链;执行前确认该节点无在跑作业
5. 分步操作¶
步骤 0:预检(只读)¶
确认前置条件全绿再动手;一次性汇总,不因首项失败即退。
df -B1G --output=avail /data / # 预期 /data ≥ 80G
sudo -n true && echo sudo-ok # 预期 sudo-ok
command -v perl tclsh csh unrar # 预期四条路径齐全
for ip in 18 19 20 25 26 27; do ssh root@192.168.31.$ip 'hostname; rpm -qa | grep -c i686'; done
预期:全部满足。失败判断:缺 csh/unrar → 先按步骤 1 补齐;节点不可达 → 先处置 SSH。
步骤 1:本机工具前置¶
Ubuntu 缺 csh 会让安装后置脚本静默失败(batch_installer 只记 ERROR、rc 仍为 0);
缺 unrar 则无法解出 Installer。两者都需先装。
sudo -n apt-get install -y csh unrar # csh 提供 /bin/csh;unrar 支持该 RAR5
ls -l /bin/csh && /bin/csh -f -c 'echo csh-ok'
预期:csh-ok。失败判断:包不可得 → 换 tcsh 并建 /bin/csh 软链。
步骤 2:节点依赖前置(六台,有作业跳过)¶
i686 基础库与 tcsh/libnsl 等已由 Cadence IC617 批次装好(六台各 139 个 i686 包),
本次只需补齐 Cadence 记录在案的 LSB 解释器链接(老工具 lmutil 等依赖)。
for ip in 19 20 25 26 27; do
ssh root@192.168.31.$ip 'n=$(squeue -h -w $(hostname) 2>/dev/null | wc -l); [ "$n" != "0" ] && exit 0;
ln -sf /lib64/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3;
ln -sf /lib/ld-linux.so.2 /lib/ld-lsb.so.3' # 幂等:已存在即覆盖为同一目标
done
预期:五台链接存在。失败判断:节点有作业 → 跳过该节点并登记,稍后补。
步骤 3:解出 Installer 并锁定来源¶
Installer v5.0 是 rar → .run(Perl 脚本)→ -dir 解包 三段式,解出的
scratch/installer/ 含 batch_installer(POSIX shell)与 install_bin/(全 Tcl/shell,无编译二进制)。
# ① 解 rar 取出 run(7z 不支持该 RAR5 压缩方法,须用 unrar)
unrar x -o+ <media>/synopsysinstaller_v5.0.rar "synopsysinstaller_v5.0/SynopsysInstaller_v5.0.run" <工程>/scratch/installer_dist/
# ② 校验来源:sha256 必须与 config 中 installer_run_sha256 一致(无跳过开关)
sha256sum <工程>/scratch/installer_dist/synopsysinstaller_v5.0/SynopsysInstaller_v5.0.run
# ③ 解包 installer
chmod 755 SynopsysInstaller_v5.0.run && ./SynopsysInstaller_v5.0.run -dir <工程>/scratch/installer
预期:Installation complete.,产出 batch_installer/installer/install_bin/。
失败判断:sha256 不符(来源不可信,无跳过开关)→ 停止并重新获取介质。
步骤 4:逐介质安装(核心)¶
对每个介质:-list 生成模板 → 解析 PRODUCTS/RELEASES → 按介质实存平台过滤生成最终 cfg
→ -config 安装 → 回查。
cd <工程>/scratch/installer
# ① 生成模板(只读介质,不写目标)
./batch_installer -list -source <media>/<介质目录> -o <工程>/config/generated/<键>_template.cfg
# ② 生成最终 cfg:白名单 = 模板 PRODUCTS;PLATFORMS = 介质实存 spf 的平台(排除 windows/32位)
# 由 utils/snps_install.py::build_final_cfg 生成,TARGETDIR 写入 target_root
# ③ 安装(-target 必须显式给,模板内 TARGETDIR 不足以定位)
./batch_installer -config <工程>/config/generated/<键>_install.cfg -target /data/nfs/tools/synopsys
注意事项与坑(实现体 scripts/batch_install.py 已处理,此处留痕):
- 交互必须回答:安装器即使
-config批处理也会问 EULA([[A]ccept|[D]ecline],只认 A/D) 与安装确认([yes],只认 yes);无效回答会无限重问(实测 tclsh 满 CPU、永不结束)。 cfg 里的EULA:字段不是开关。实现体用 pty 按提示类型应答(utils/snps_interact.py)。 - 产品名 ≠ 目录名:
tx装入syn/、txs装入txs/、pt→pts、ppower→pwr、verdi的 RELEASES 串带产品名前缀(Verdi_N-2017.12-SP2);spyglass只有common平台;fpga平台是linux而非linux64。目标路径一律以安装器日志Installing ... to Y为准。 - rc 不够:安装器 rc=0 时日志仍可能有
ERROR:(post-install 失败被吞),回查须同时检测 ERROR 行。 - 幂等判据:用
<target>/.installer/<product>/<release>记录,而非按产品名拼目录。
预期:每个介质日志末尾 Installation ... finished successfully。失败判断:出现 ERROR 行或目标目录缺失 → 见第 7 章。
步骤 5:post-install 补跑(若步骤 3 前置缺失过 csh)¶
已完成步骤 1 的前提下,post-install 会在安装时自动成功;仅当先前在无 csh 环境下装过, 才需补跑。命令取自已生成的安装日志,不手工拼:
cd <工程> && .venv/bin/python scripts/rerun_post_install.py # 从 logs/install_*.log 提取并执行
预期:每条 rc=0。失败判断:rc≠0 → 查看生成的 logs/post_install_fix_*.log 定位。
步骤 6:权限收敛¶
sudo chown -R root:root /data/nfs/tools/synopsys
sudo chmod -R u=rwX,go=rX /data/nfs/tools/synopsys
预期:树根与文件均 root:root。注意:find -perm /022 会命中大量符号链接
(符号链接权限恒为 lrwxrwxrwx,无意义),须用 -type f 复核,普通文件命中数应为 0。
find /data/nfs/tools/synopsys -perm /022 -type f | wc -l # 预期 0
6. 验证¶
# ① 产品树齐全(预期 20 个目录)
ls /data/nfs/tools/synopsys | wc -l
# ② 体积与属主
du -sh /data/nfs/tools/synopsys && stat -c '%U:%G %a %n' /data/nfs/tools/synopsys
# ③ 六台客户端可见且可执行
for ip in 18 19 20 25 26 27; do
ssh root@192.168.31.$ip 'ls /tools/synopsys | wc -l;
test -x /tools/synopsys/vcs-mx/N-2017.12-SP2/bin/vcs && echo vcs-ok;
test -x /tools/synopsys/scl/2018.06/linux64/bin/lmgrd && echo lmgrd-ok'
done
# ④ 幂等:复跑应全部「已就绪,跳过」
cd <工程> && .venv/bin/python scripts/batch_install.py
预期:20 / 41G / root:root 755 / 六台 20 且 ok / 18 个介质全部跳过。
本次实测结果见 reports/install-summary-20260928-0415.md。
7. 回滚¶
安装目标是全新目录,介质完好,最坏情况回到「目录为空」:
# 【高危】删除安装树(不可逆;执行前确认目标确实是本工程的安装根)
ls -ld /data/nfs/tools/synopsys # 先核对
sudo rm -rf /data/nfs/tools/synopsys/scl # 按产品逐个删,避免无边界通配
- 备份:本次变更未覆盖任何既有文件(纯新增),故无需文件级备份;
变更过程中被覆盖的文档(项目根
docs/HANDOFF.md)已备份至docs/backup/, 清单与回滚说明见docs/backup/README.md。 - 介质:
synopsys2018/介质全程只读(-list/-config不留痕),可直接重装 - 回滚后验证:
ls /data/nfs/tools/synopsys为空、ls /tools/synopsys六台均为 0 - 不适用:无需卸载脚本;不要把「重装」当成「卸载」(介质与目标无隐藏状态,除
.installer记录)
8. 风险说明¶
| 风险 | 缓解 |
|---|---|
| 2017/2018 工具在 Rocky 9.8 上的运行期兼容性(官方仅支持 RHEL 6/7) | 本次只装不启动(license 未就绪);Cadence IC617 已在同环境运行成功,风险降级;实际启动前先按 docs/troubleshoot.md 第 3 组逐项验证 |
| 安装器交互若回答错误会无限空转(非报错) | 已用 pty 驱动按提示应答;timeout 兜底;判据是「目标零写入 + tclsh 高 CPU」 |
| post-install 静默失败(rc=0 但未执行) | 回查加入 ERROR 行检测;前置条件强制 csh |
介质所在分区 /dev/sda3 仅余 61G |
实测 EST 展开不留痕、不额外占用;解包 IO 落在 /data(1.2T) |
| 权限收敛误伤符号链接 | 用 -type f 判定;符号链接权限位无意义 |
| 六台节点装包影响在跑作业 | 依赖已在 Cadence 批次完成,本次仅补软链;执行前检查作业并跳过忙节点 |
附录 A:交付物清单¶
| 交付物 | 路径 |
|---|---|
| 配置真源 | config/synopsys_install.yaml |
| 安装执行器 | scripts/batch_install.py |
| 交互驱动 | utils/snps_interact.py |
| post-install 补跑 | scripts/rerun_post_install.py |
| 检索与踩坑台账 | docs/troubleshoot.md |
| 安装总报告 | reports/install-summary-20260928-0415.md |
| 逐介质日志 | logs/install_<介质>_<时间戳>.log、logs/list_*.log |
| 生成的安装 cfg | config/generated/<键>_template.cfg、<键>_install.cfg |
| 备份台账 | ../docs/backup/README.md |
附录 B:执行记录(2026-09-28 03:19–04:15)¶
| 环节 | 结果 |
|---|---|
| 工程搭建 | 复用旧工程框架 + 复制 venv;新增执行器/交互驱动/补跑脚本 |
| 通用预检索 | 23 条结论入 docs/troubleshoot.md |
| 本机前置 | apt install unrar、apt install csh |
| 节点前置 | 五台补 LSB 链接(.18 早已具备) |
| 安装 | 18 个介质逐个 -list/-config,全部成功;中途两次卡死均由 P2 根因(EULA 交互)引起,修复后一次通过 |
| post-install | 11 条补跑全 rc=0 |
| 权限收敛 | root:root + u=rwX,go=rX;普通文件 go 写位 0 |
| 客户端 | 六台 20 条目、主程序可执行 |
| 幂等复跑 | 18 个介质全部跳过、零变更 |
附录 C:决策记录¶
- 执行位置:本机(NFS 宿主)跑 installer,不走 SSH 到节点、不 remount
/tools(ro)—— 依据:Installer 全 Tcl 脚本可跑通、目标为本地 ext4、省两处高危动作 - Installer 选型:用介质自带的 v5.0(而非旧工程 v5.9)—— 已实测可解包并装 2018 介质
- 平台白名单:由介质实存 spf 推断,不硬编码(
fpga的linux、spyglass的common均正确保留) - 不装:VC VIP(2018.09 超线)、ICC(被 ICC2 覆盖)、snps_container(容器化自 P-2019.06 起才需要)
—— 注:ICC 一项已于 2026-09-29 反悔并补装(ICC2 转换 Milkyway 参考库需要其
icc_shell), 见附录 D
附录 D:后续增量(2026-09-29)¶
按同一实现体与配置模式补装老 IC Compiler,本 SOP 的分步流程完全复用,差异仅两点:
- 配置增量:
config/synopsys_install.yaml的media.products与install.products各加一行icc: {dir: ic_compiler_vO-2018.06-SP1}/icc: {release: O-2018.06-SP1, trees: [icc]} - 执行身份变化:目标树此时已收敛为
root:root 755,而安装器拒绝以 root 运行 (-install_as_root厂商标注 not recommended)。故改用"普通用户 + 临时 ACL":sudo setfacl -m u:rain:rwx /data/nfs/tools/synopsys{,/.installer}→ 以 rain 跑安装 →setfacl -x回收 →chown -R root:root+chmod -R u=rwX,go=rX收敛。
结果:新增第 21 棵树 icc/O-2018.06-SP1(1.5G),六台 + 31.28 可见、icc_shell 可执行。
完整变更档案见 ../synopsys_icc_install_20260929/docs/SOP.md。
来源:
/home/rain/Documents/eda_tools_ins/Synopsys/synopsys_install_2018/SOP.md| 最后更新:2026-09-29 03:49(由build/sync.py同步,请勿在站点侧修改)