Monday, July 18, 2005

谈Teamcenter系统的批量安装

装系统真是一件体力活。

曾经有过几次安装大量系统的经历,对于安装规模在200台左右的系统,要是一台一台启动setup来安装,肯定会死人的,因此一定要想别的办法才行。

我们的Teamcenter Engineering系统大致分为以下四部分(以Ver 9.1为例):
(1)LSE0910
(2)Tceng0910
(3)TCVIS0910
(4)UGNX
以 上四部分中的1,2两项目实际上是可以进行复制安装的,第三项也可以复制,但对它后续配置太麻烦,有很多注册表项和库文件,因此不作为复制的部分,对于 UGNX,由于其安装之后大概有1~2GB, 如果将安装之后的文件进行复制分发,所需要的时间远大于重新安装的时间,综合考量,也不作为复制部分。因此我们主要对复LSE0910与 TCENG0910两部分内容。

下面举个例子:



某客户有200台客户端,所有客户端均在域环境中,并作如下安装规划:
(1)LSE安装路径为c:\UGS\LSE0910;
(2)TCENG安装路径为c:\UGS\TCENG0910;
(3)TCVIS的安装路径为c:\UGS\TCVIS0910;
(4)UGNX使用现有的安装,路径不确定,已经正常工作;

针对这样一个CASE,我们采用域管理员进行批量分发和配置。首先我们需要安装一台母机,然后将安装好的母机分发到每台客户端,最后使用域管理员对所有客户端逐一进行配置。

思路确定之后,安装步骤如下:

一、域管理员登录,安装母机,打好所有补丁,按要求更改配置文件并测试;
二、域管理员登录母机,使用如下脚本将LSE0910与TCENG0910分发到所有客户端(分发之前注意磁盘空间是否足够):

cd /d c:\
echo D > D
call xcopy c:\UGS\LSE0910 \\192.168.1.100\c$\UGS\LSE0910 /s /e < D >> 192.168.1.100.log
call xcopy c:\UGS\Tceng0910 \\192.168.1.100\c$\UGS\Tceng0910 /s /e
< D >> 192.168.1.100.log
call xcopy c:\UGS\LSE0910 \\192.168.1.101\c$\UGS\LSE0910 /s /e
< D >> 192.168.1.101.log
call xcopy c:\UGS\Tceng0910 \\192.168.1.101\c$\UGS\Tceng0910 /s /e
< D >> 192.168.1.101.log
call xcopy c:\UGS\LSE0910 \\192.168.1.102\c$\UGS\LSE0910 /s /e
< D >> 192.168.1.102.log
call xcopy c:\UGS\Tceng0910 \\192.168.1.102\c$\UGS\Tceng0910 /s /e
< D >> 192.168.1.102.log
... ...
del D

以上脚本会完成客户端LSE与TCENG的分发工作,日志记录在以IP地址为名称的LOG文件中。

三、对LSE进行后续配置的脚本:
对于复制分发的系统,我们需要对LSE0910目录中的某几个文件进行修改,需要使用当前客户的主机名对母机的机器名进行替换,并且需要根据当前UGNX的安装情况,自动更改UGMANAGER的配置文件,我们建立如下脚本来实现。
在以下脚本中,我们仍然使用到了前面文章中提供的GNU_TOOLS,将其放置于服务器的共享位置,并使它在母机的路径中即可。完整脚本如下:

脚本名称:do_it.sh
=====================

#!/usr/bin/bash

####################################################
# TCENG0912 BATCH INSTALLATION SCRIPT #
# AUTHOR: gonghua.dong@ugs.com.cn #
# Version 1.00 xxxxxxxxxxxxxxxxxxxxxxxx #
####################################################
#
# Version History
# 18-Jul-2005 DongGonghua Ver 1.00
# $HISTORY$

# Install & Execution instruction:
#
# 1) Copy "util" to some place such as "c:\util"
# 2) Reset PATH Env as this: set PATH=c:\util;%PATH%
# 3) goto the folder contains installed folders such as c:\ugs
# 4) Execute: bash do_it.sh

#
# Syntax: bash do_it.sh
#

# Environments
ORACLE_SID=the_sid_name
SERVER_NAME=the_server_name
TEMPLATE_NAME=the_template_name
CURRENT_HOSTNAME=$(echo $COMPUTERNAME tr 'A-Z' 'a-z')
UGROOT=$(echo ${UGII_BASE_DIR}
| sed -e 's/\\/\\\\/g' |sed -e 's/\ /\\\ /g' |sed -e 's/^\(.*\)$/\"\1\"/g')



# Start
# Check if the Target_Folders are existed.
ls -ld LSE0910 Tceng0910 > /dev/null 2>&1

if [ ${?} -eq 0 ] ; then
cat LSE0910/client_specific.properties |sed -e "s/$TEMPLATE_NAME/$CURRENT_HOSTNAME/g"
> LSE0910/client_specific.properties.new
cat LSE0910/site_specific.properties |sed -e "s/$TEMPLATE_NAME/$CURRENT_HOSTNAME/g"
> LSE0910/site_specific.properties.new
cat LSE0910/orbix/config/common.cfg |sed -e "s/$TEMPLATE_NAME/$CURRENT_HOSTNAME/g"
> LSE0910/orbix/config/common.cfg.new
cat LSE0910/orbix/config/orbixnames3.cfg |sed -e "s/$TEMPLATE_NAME/$CURRENT_HOSTNAME/g"
> LSE0910/orbix/config/orbixnames3.cfg.new
#cat LSE0910/orbix/config/Repositories/ImpRep/
${ORACLE_SID}_PortalServer.imp
#|sed -e "s/
$TEMPLATE_NAME/$CURRENT_HOSTNAME/g" > #LSE0910/orbix/config/Repositories/ImpRep/
${ORACLE_SID}_PortalServer.imp.new

cat LSE0910/start_ugmanager.bat |sed -e "s/^set\ UGII_BASE_DIR=.*/set\ UGII_BASE_DIR=${UGROOT}/g" > LSE0910/start_ugmanager.bat.new

rm -f LSE0910/client_specific.properties > /dev/null 2>&1
rm -f LSE0910/site_specific.properties > /dev/null 2>&1
rm -f LSE0910/orbix/config/common.cfg > /dev/null 2>&1
rm -f LSE0910/orbix/config/orbixnames3.cfg > /dev/null 2>&1
#rm -f LSE0910/orbix/config/Repositories/ImpRep/
${ORACLE_SID}_PortalServer.imp > /dev/null 2>&1

rm -f LSE0910/start_ugmanager.bat > /dev/null 2>&1

mv LSE0910/client_specific.properties.new LSE0910/client_specific.properties
> /dev/null 2>&1

mv LSE0910/site_specific.properties.new LSE0910/site_specific.properties
> /dev/null 2>&1

mv LSE0910/orbix/config/common.cfg.new LSE0910/orbix/config/common.cfg
> /dev/null 2>&1

mv LSE0910/orbix/config/orbixnames3.cfg.new LSE0910/orbix/config/orbixnames3.cfg
> /dev/null 2>&1

#mv LSE0910/orbix/config/Repositories/ImpRep/
${ORACLE_SID}_PortalServer.imp.new
#LSE0910/orbix/config/Repositories/ImpRep/
${ORACLE_SID}_PortalServer.imp > /dev/null 2>&1

mv LSE0910/start_ugmanager.bat.new LSE0910/start_ugmanager.bat
> /dev/null 2>&1


# done in "go.bat"
# echo -e "192.168.1.1\the_server_name"
>> ${WINDIR}/system32/drivers/etc/hosts



else
echo
echo Target Folders are not correct.
echo "LSE0910", "TCENG0910" must exist in the current folder.
echo Enter the target folder first, such "c:\ugs"
echo
fi

# The End Of The Script


四、如何处理TCVIS的安装(PV)
在 安装规划的时候, 我们定义的TCVIS的安装路径为c:\UGS\TCVIS0910,实际上当我们在配置脚本的后边调用TCVIS的安装程序的时候,用户可能干预 TCVIS的安装路径,因此,我们必须对路径作一个限定,使TCVIS必须正确地安装到c:\UGS\TCVIS0910中。
在TCVIS 的安装 盘中有这样一个文件PLMVis_sample.ini。在这个文件中定义了它的默认安装路径“destpath=C:\ Program Files\EDS\PortalVisualization\9_1”,我们将它改成“destpath=C:\UGS\TCVIS0910”,并把该 文件更名为PLMVis.ini。这样,当我们再次调用TCVIS的安装程序的时候,它会使用该路径自动完成安装。

五、完整配置脚本 (MS-DOS Batch)
当安装的整体思路与技术细节都确定了之后,我们写下这样一个脚本,供大家参考:

脚本名称:go.bat
================

@echo off

Rem To be sure I login as DOMAIN_NAME/Administrator
if not x%username% == xAdministratorx goto error1
if not x%userdomain% == xDOMAIN_NAMEx goto error1

Rem To be sure every client can find the server with its hostname
echo 192.168.1.1 the_server_name >>
%WINDIR%\system32\drivers\etc\hosts


if not exist \\the_server_name\c$ goto error1

Rem Check if the GNU_TOOLS is OK
if not exist \\the_server_name\c$\gnu_util goto error2

Rem the gnu_util is already placed in \\the_server_name\c$\gnu_util, so
set PATH=\\the_server_name\c$\gnu_util;%PATH%

Rem Execute the script to replace hostname
bash do_it.sh

Rem Install PV and PV_Patch automatically
call \\the_server_name\c$\SETUPs\ TcEng912_wnti\ TcEngPV0912_winsetup.exe
call \\the_server_name\c$\SETUPs\9.1.2.8\ iman0910portal_viewerPortalVisulizationV9125_5104_50314_win.exe

goto end

:error1
echo Do you login as "HHM/Administrator" ? pls check that.
goto end

:error2
echo CYG UTILITIES not found, pls check that.
goto end

:end

No comments: