成都飞机公司计算中心 肖菊香
摘要:为了保证我公司科研及生产任务的顺利完成和适应社会新技术发展的需要,我公司所承担的多种航空产品的研制生产以及转包工作都采用从国外引进的先进的CATIA应用软件对其进行外形建模和对其相应的数学模型进行数控编程等任务,因此能否保证CATIA应用软件的正常运行可直接影响我公司科研及生产任务的顺利完成,而CATIA应用软件的正常运行又是由其相应的License作支持为基础的。所以本文主要阐述 “怎样实现及优化CATIA License的管理和一些与License有关的特殊问题的处理”。 关键字:License, iFOR/LS ,应用软件,网络计算机系统, glbd, llbd 一、 前言
我公司作为航空工业的大型骨干企业,承担着多种航空产品的研制生产以及转包工作,科研和生产任务非常繁重。为了保证我公司科研及生产任务的顺利完成和适应社会新技术发展的需要,我公司已引进了多台UNIX企业级服务器、NT服务器和工作站,已形成了一个企业级服务器群和大量分布式应用的UNIX工作站群。服务器主要有SUN5500,SUN3500,SGI2100,IBM SP/2,工作站有IBM的RS/6000系列,SGI OCTANE2等。其中企业级服务器主要集中在计算中心主机房,作为用户数据SERVER、数据库SERVER、PDM SERVER、License SERVER等最重要的角色,一般不直接提供给用户使用;而直接面对用户的是不同类型的UNIX工作站,它们分布在计算中心机房、7K、工装等不同地点。这些工作站上有许多应用软件。如CATIA软件、VERICUT软件、PDM软件、C、C++、FORTRAN语言等。这些软件必须有相应的有效License作支持才能正常运行。由于不同软件模块对其响应的License要求不同以及生产过程中使用各软件模块的频率不一样,我门购买软件及其子模块的License个数都是不一样的,一般除最基本的模块能保证每台工作站都有一套License外,其余大多数产品或模块都不能保证每台工作站有一套相应的License作支持,而是通过网络动态浮动License来满足不同用户的使用的。由于我公司存在着大量的外形建模任务和对其相应的数学模型进行数控编程的任务,而这些任务主要是通过CATIA软件来完成的,因而它的License动态管理也是最重要的,下面就以CATIA License的管理为例来阐述“怎样实现License的动态管理”。 二、 License的动态管理
1. License简介
目前使用最普遍的license类型有Nodelocked、Concurrent-use、Use-once三种,这三种License有如下共同的特点:
● 用作满足iFOR/LS client申请的License请求 ● 每个License由一串加密了的字符集组成 ● 每个License只对特定的产品有效 ● 每个License都一定的有效期
● 每个License必须安装特定的机器上
下面以表格的形式比较一下这三种License的不同点。 License 类型 Nodelocked Concurrent-use Use-once 使用 应用程序访问 IFOR/LS License情况 Server情况 不使用 只有安装该License的机器才能访问它 使用 整个网络上的机器都能访问 使用 整个网络上的机器都能访问 使用情况 1 license=一个使用 (安装该license的机器) 多次使用? 可以 可以 不行 1 license=1个使用 (整个网络上的机器) 1 license=1 个使用 (整个网络上的机器) 图一、Nodelocked、Concurrent-use、Use-once的特点
1
Nodelocked License安装在特定机器的特定文件中(/usr/lib/netls/conf/nodelock),不需要License Server对它进行管理,在应用软件启动时去读nodelock文件即可,相对简单,下面就不多介绍。
Concurrent-useLicense和 Use-once License即为浮动License,它们的管理是动态的,相当复杂,但它们的管理方法是相同的, 都使用iFOR/LS(Information For Operation Retrieval/License System) 应用软件。iFOR/LS是NetLS(Network License System)版本,也是NCS(Network Computing System)版本,由于NCS的分布式计算技术(Distrbuted Computing Technology)使iFOR/LS的用户能访问到来自iFOR/LS network范围内的任意软件申请,iFOR/LS软件能监测iFOR/LS network范围内的任意台计算机上License的类型和License的个数及使用情况等。
2.动态管理License
Concurrent-use License和 Use-once License的浮动即动态管理 是通过iFOR/LS来实现的,都采用Client-Server方式,两种Licenses都安装在License Server(其机器上必须有netlsd daemon运行)上,应用程序安装在Client机器上。上面说过iFOR/LS是NetLS(Network License System)版本,也是NCS(Network Computing System)版本,因此iFOR/LS管理的 License Client-Server也是一个NCS Client-Server,而NCS的两个主要的组成部分是glbd(global location broker daemon)和llbd(local location broker daemon)。glbd的主要功能是为NCS Client提供有关NCS Server的位置信息;llbd在每一个NCS Server上都运行,并管理所在NCS Server上有关NCS Server的一些信息。iFOR/LS 和NCS共同起作用来实现license的动态管理。图二说明了 IFOR/LS and NCS通过 netlsd,llbd,glbd来管理License的交互过程。
License server daemon (netlsd) Local location (llbd) 机器 C 请求同意 机器 A 应用程序 我请求 license server 在哪里? 你所请求的license server在机器C上 机器 B Global location broker(glbd) Local location broker (llbd) 我需要一个license 图二、 “IFOR/LS 和NCS的交互情况” 反映了 netlsd,llbd,glbd的交互过程
当用户启动一个应用时,也就涉及到了具体产品或模块的应用,这些产品需要相应的License作支持才能得到有效的使用,即只有当该用户申请到了浮动License时才能真正运行。申请浮动License的过程为
2
(也可参见图三):
1、 用户启动应用程序。
2、 应用程序向License Server申请浮动License。
3、 通过IFOR/LS and NCS共同作用确定Server在哪里(这一步如图二)。
4、 License Server查看License 数据库中是否有有效的License;并检查用户文件
(/usr/lib/netls/conf/user_file)权限表,看该用户是否有权使用该产品。
5、 如果License 有效且该用户有权使用该产品,则License Server同意该License请求。 6、 用户从License Server 处抓到了License,应用开始运行。 7、 当用户退出应用时,也释放License 给License Server 。 Users Product Invoked Calls to the License server Request for License Request approved License grant, Product executes Software Product License Server Daemon netlsd Written by Software verdor User’s Access rights Verdors Products licenses License Database User File 图三、Invoking a Non-Nodelocked License Product 图二和图三充分说明了一个用户动态申请License的过程。但当用户申请License失败时,应用程序非正常退出。首先检查有效Licenses是否已全部被他人用完或Client端License初始化文件是否正确等,若这些都没有问题,在确保License Server机器及License Server要求的daemon(netlsd,glbd,llbd)都正在运行的情况下(执行如下命令查看netlsd,glbd,llbd的运行状态:Lssrc –a ),我们用图四所述的方法来查出问题所在。
3
1 还是出错 列出所有的 Licenses Server 4 已经安装 6 是 在Sever上发命令 Ls_tv 用 ls_stat检查License是否安装 License 没有安装 安装 5 License Client和Server 是同一台机器吗?e 不是 8 检查 用户文件 检查 产品版本 检查 网络 检查以下文件: 7 /etc/ncs/glb_obj.txt /etc/ncs/glb_site.txt 2 下掉 License Server and NCS daemons, 重起 License Server and NCS daemons 1 重试 3 下掉 License Server and NCS daemons 用 netls_config 和 netls_first_time 重配系统 图四、用户申请License失败时,排除问题循环示意图
图四的每一步及其具体操作如下:
1. 登录到License Server机器上,执行如下命令: /usr/lib/netls/bin/ls_tv
若有License Server列出,到第4步;否则到第二步。
2. (1) 停License Server daemon and NCS daemon,即执行命令:
/usr/lib/netls/bin/srv_stop
或 stopsrc –s netlsd stopsrc –s glbd stopsrc –s llbd
(2) 重起License Server daemon and NCS daemon,即执行命令: /usr/lib/netls/bin/srv_start 或 startsrc –s netlsd startsrc –s glbd startsrc –s llbd
然后到第1步检测License Server是否在运行,如果License Server 还无反应,则到第3步。 3. 重配License Server ,操作如下:
/usr/lib/netls/bin/srv_stop
/usr/lib/netls/conf/netls_config /usr/lib/netls/conf/netls_first_time
4
或 stopsrc –s netlsd stopsrc –s glbd
stopsrc –s llbd
/usr/lib/netls/conf/netls_config /usr/lib/netls/conf/netls_first_time
然后到第1步检测License Server是否在运行。 4. 检查请求的License是否安装在Server上,用smitty或执行下面的命令进行检查: /usr/lib/netls/bin/ls_stat –i –n server_hostname 5. 安装产品License,执行命令: /usr/lib/netls/bin/ls_admin
6. 到Client机器上,重新运行应用程序,如果还抓不到License,则有两种情况:(1)Client和Server
是同一台机器,到地7步;(2)Client和Server不是同一台机器,到地8步。
7. 检查文件/etc/ncs/glb_site.txt,看Client和Server定义的Server是否一致。
8. 检查Network是否通;检查Client端申请的License和Server端安装的是否为同一版本;检查文件
/usr/lib/netls/conf/user_file,看该用户是否有权使用该产品。
三、 License的优化管理及问题处理
1. 为了帮助NCS Client快速找到License Server我们可以直接在“/etc/ncs/glb_site.txt”文件中定义License Server的IP地址或Hostname。假设有两个License Server分别为sun5500(128.100.221.88)和spn01(128.100.221.101),则直接编辑“/etc/ncs/glb_site.txt”,并在里面加两行即可。格式如下: ip:128.100.221.88 ip:spn01
2. 为了保证CATIA既能正常运行,又能满足用户灵活的使用,我们在Client端的“/home/catadm/dec/CATLIC.dcls”文件中修改License定义。CATIA License定义有三种:
● REQUIRED:在CATIA启动时自动去抓。抓到了,CATIA正常运行;否则,出现U998错且非正常退出。
● OPTIONAL:在CATIA启动时,如果有,则自动去抓。除SBDC和SBPC外,即使抓不到,CATIA能启动起来。
● DYNAMIC:在CATIA启动时不抓,而是在CATIA应用里面通过License菜单,然后手工去抓。 因此一般除最基本的模块或有特殊要求(如SBDC或SBPC)定义为“REQUIRED”,除非有特殊要求,否则模块License定义都为“DYNAMIC”,当用户需要时就去抓,用完后手动释放或CATIA正常结束时自动释放出来,这样更灵活。可参见后面的CATIA LICENSE配置文件。
3.NC的特殊性。
目前有效NC License只有五套,而同时上机的用户多达十几个,显然是不够的,如果不定义好就会出现抢License的情况。以前我们了解到NC License必须定义为“OPTIONAL”抓到的License 才能作加工,但这样经常会出现不作加工的用户由于先启动CATIA而先抓到了NC License,而真正需要用加工的用户反而抓不到License,由于定义为“OPTIONAL”即使人家释放给他,如果不重新启动CATIA ,就是手工抓到了还是作不了加工,显然给用户带来了许多不便。我们经过反复试验,找到了一个小窍门来解决这一问题:(1)定义License为“DYNAMIC”;(2)在LICENSE初始化文件中加两行。这两行在LICENSE初始化文件即下述原文件中已用长方形框起来,以示区别。经过这样配置后,用户手动抓到的NC License就能作NC了,显然对用户来说是很方便的:需要时去抓,用完就释放它。CATIA LICENSE 配置文件文件如下:
CATLIC.SERVER.PORTNUMBER = 2421 ; CATLIC.LICENSE.DYNAMIC = 'ASSS410' ; CATLIC.LICENSE.DYNAMIC = 'ASUS410' ; CATLIC.LICENSE.DYNAMIC = 'CASS410' ;
5
CATLIC.LICENSE.DYNAMIC = 'COMS410' ; CATLIC.LICENSE.OPTIONAL = 'DETC410' ; CATLIC.LICENSE.DYNAMIC = 'DEVS410' ; CATLIC.LICENSE.DYNAMIC = 'FEAS410' ; CATLIC.LICENSE.DYNAMIC = 'FRFS410' ; CATLIC.LICENSE.DYNAMIC = 'GSAS410' ; CATLIC.LICENSE.DYNAMIC = 'IGIS410' ; CATLIC.LICENSE.DYNAMIC = 'IGSS410' ; CATLIC.LICENSE.DYNAMIC = 'MAAS410' ; CATLIC.LICENSE.DYNAMIC = 'MUMC410' ; CATLIC.LICENSE.DYNAMIC = 'NC3S410' ; CATLIC.LICENSE.DYNAMIC = 'NC5S410' ; CATLIC.LICENSE.DYNAMIC = 'NCBS410' ; CATLIC.LICENSE.DYNAMIC = 'NCRS410' ; CATLIC.LICENSE.DYNAMIC = 'PPBS410' ; CATLIC.LICENSE.REQUIRED = 'SBPC410' ; CATLIC.LICENSE.DYNAMIC = 'SOMS410' ; CATLIC.LICENSE.DYNAMIC = 'STPS410' ; CATLIC.LICENSE.DYNAMIC = 'SUDS410' ; CATLIC.LICENSE.DYNAMIC = 'SUMC410' ; CATLIC.LICENSE.DYNAMIC = 'SURC410' ; CATLIC.LICENSE.DYNAMIC = 'TSAS410' ; CATLIC.CATNC.REQUIRED = 'SBPC410' ; CATLIC.CATNC.REQUIRED = 'NC5S410' ; CATLIC.REPORT = 1 ; CATLIC.WARNING_DATE = 30;
4.特殊问题的解决。
在使用CATIA的过程中我们遇到了一些问题:CATIA在正常退出和非正常时,都不能杀掉它在启动时产生的CATLICSR进程,CATLICSR进程的运行导致CATIA基本模块的License不能释放,在其它用户甚至该用户自己在下次启动CATIA时,由于抓不到基本模块License而出现U998错而非正常退出,并因这种出错的频率太高给我们系统人员带来了很大的工作量及给用户带来许多不便,同时也会影响我公司生产。这个问题捆扰我们多年,经过反复分析和摸索才得知,有几种情况可能导致该问题的出现:
(1) CATIA正常退出时,CATIA系统没有结束CATLICSR进程;
(2) CATIA本身应用问题而非正常退出时,CATIA系统没有结束CATLICSR进程;
(3) 有的用户采用“Ctrl+c”组合键的办法快速退出CATIA时,导致不能结束CATLICSR进程。 根据以上三种不同的情况我们终于找到了各自的解决上述问题的有效方法:修改CATIA启动文件“/usr/catia/cfg/code/bin/catini”,在该文件中加少量程序即可解决这一问题。由于篇幅有限,这里只给出解决问题的部分程序,而不是所有“/usr/catia/cfg/code/bin/catini”文件。
对于第1,2种情况,分别在CATIA启动文件“/usr/catia/cfg/code/bin/catini”中的正常结束程序部分和非正常结束程序部分加一段小程序,就能保证CATIA无论在正常或非正常结束时都能正常结束CATLICSR进程。所加程序代码如下:
6
num=`ls -l /tmp/catlic.log |wc -l` catlicst >/tmp/catlic.log if [ $num -eq 0 ] then chmod a+w /tmp/catlic.log fi
如果用户都能按照正常的方式退出CATIA系统的话,则系统进程中就不应该再有CATLICSR进程存在,也就是说下次启动CATIA时就不应该再出现由于CATLICSR进程的存在而导致CATIA起不来的问题出现,但是由于第3种情况的存在,所以我们每次在启动CATIA之前一定要判断一下系统进程中到底是否有CATLICSR进程在运行,有的话先杀掉后再启动CATIA应用软件,解决这一问题(即由第三种情况而引起的的问题)的解决办法是在CATIA启动文件“/usr/catia/cfg/code/bin/catini”中的最前面加下面一段程序:
NBSR=`ps -ef | grep CATLICSL | grep -v grep | wc -l` if [ $NBSR -ne 0 ] then num=`ls -l /tmp/catlic.log |wc -l` Catlicst >/tmp/catlic.log if [ $num -eq 0 ] then chmod a+w /tmp/catlic.log fi fi
四、结束语
由于篇幅有限,本文主要阐述了CATIA License的动态管理,对于其他一些应用软件的License管理也可参照其管理方法进行管理。
参考文献:
1.CATIA Solutions Software Administration Guide. 2.iFOR/LS System Management Guide.
3.iFOR/LS Tips and Techniques.
4.System User’s Guide Communication and Networks.
7
因篇幅问题不能全部显示,请点此查看更多更全内容