跳转至

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. 目标

  1. /data/nfs/tools/synopsys/<产品>/<版本> 下 20 棵树就绪,属主 root:root、u=rwX,go=rX
  2. 六台客户端经 /tools(只读挂载)可见且主程序可执行
  3. 全流程幂等:复跑零变更
  4. 每步可复核:命令、输出、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:决策记录

  1. 执行位置:本机(NFS 宿主)跑 installer,不走 SSH 到节点、不 remount /tools(ro)—— 依据:Installer 全 Tcl 脚本可跑通、目标为本地 ext4、省两处高危动作
  2. Installer 选型:用介质自带的 v5.0(而非旧工程 v5.9)—— 已实测可解包并装 2018 介质
  3. 平台白名单:由介质实存 spf 推断,不硬编码(fpga 的 linux、spyglass 的 common 均正确保留)
  4. 不装: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 的分步流程完全复用,差异仅两点:

  1. 配置增量:config/synopsys_install.yaml 的 media.products 与 install.products 各加一行 icc: {dir: ic_compiler_vO-2018.06-SP1} / icc: {release: O-2018.06-SP1, trees: [icc]}
  2. 执行身份变化:目标树此时已收敛为 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 同步,请勿在站点侧修改)