From 1a83010e6502a8c093d57b9962627074ad8a9fd7 Mon Sep 17 00:00:00 2001 From: vtn Date: Mon, 8 Sep 2014 11:38:40 +0400 Subject: [PATCH] SALOME 7.3.0 pb with tests - patch for PPGP --- bin/nameserver.py | 304 +++++++++++++++++++++++----------------------- bin/server.py | 280 +++++++++++++++++++++--------------------- 2 files changed, 292 insertions(+), 292 deletions(-) diff --git a/bin/nameserver.py b/bin/nameserver.py index cb04c3b5e..f7394d9b3 100644 --- a/bin/nameserver.py +++ b/bin/nameserver.py @@ -1,152 +1,152 @@ -#!/usr/bin/env python -# -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -import sys, os, re, socket -#import commands -from server import * -from Utils_Identity import getShortHostName -from launchConfigureParser import verbose - -# ----------------------------------------------------------------------------- - -class NamingServer(Server): - XTERM="" - USER=os.getenv('USER') - if USER is None: - USER='anonymous' - #os.system("mkdir -m 777 -p /tmp/logs") - LOGDIR="/tmp/logs/" + USER - - def initNSArgs(self): - if sys.platform == "win32": - # temporarily using home directory for Namning Service logs - # to be replaced with TEMP later... - os.environ["BaseDir"]=os.environ["HOME"] - else: - os.environ["BaseDir"]="/tmp" - - try: - os.mkdir(os.environ["BaseDir"] + "/logs") - os.chmod(os.environ["BaseDir"] + "/logs", 0777) - except: - #print "Can't create " + os.environ["BaseDir"] + "/logs" - pass - - upath = os.environ["BaseDir"] + "/logs/"; - if sys.platform == "win32": - upath += os.environ["Username"]; - else: - upath += os.environ["USER"]; - - try: - os.mkdir(upath) - except: - #print "Can't create " + upath - pass - - if verbose(): print "Name Service... ", - #hname=os.environ["HOST"] #commands.getoutput("hostname") - if sys.platform == "win32": - hname=getShortHostName(); - else: - hname = socket.gethostname(); - #print "hname=",hname - - f=open(os.environ["OMNIORB_CONFIG"]) - ss=re.findall("NameService=corbaname::" + hname + ":\d+", f.read()) - if verbose(): print "ss = ", ss, - f.close() - sl=ss[0] - ll = sl.split(':') - aPort = ll[-1] - #aPort=(ss.join().split(':'))[2]; - #aPort=re.findall("\d+", ss[0])[0] - - # \begin{E.A.} - # put the log files of omniNames in different directory with port reference, - # it is cleaner on linux and it is a fix for salome since it is impossible to - # remove the log files if the corresponding omniNames has not been killed. - # \end{E.A.} - - upath += "/omniNames_%s"%(aPort) - try: - os.mkdir(upath) - except: - #print "Can't create " + upath - pass - - #os.system("touch " + upath + "/dummy") - for fname in os.listdir(upath): - try: - os.remove(upath + "/" + fname) - except: - pass - #os.system("rm -f " + upath + "/omninames* " + upath + "/dummy " + upath + "/*.log") - - #aSedCommand="s/.*NameService=corbaname::" + hname + ":\([[:digit:]]*\)/\1/" - #print "sed command = ", aSedCommand - #aPort = commands.getoutput("sed -e\"" + aSedCommand + "\"" + os.environ["OMNIORB_CONFIG"]) - #print "port=", aPort - if sys.platform == "win32": - #print "start omniNames -start " + aPort + " -logdir " + upath - self.CMD=['omniNames', '-start' , aPort , '-nohostname', '-logdir' , os.path.realpath(upath), '-errlog', os.path.realpath(os.path.join(upath,'omniNameErrors.log'))] - #os.system("start omniNames -start " + aPort + " -logdir " + upath) - else: - #self.CMD=['omniNames -start ' , aPort , ' -logdir ' , upath , ' &'] - self.CMD=['omniNames','-start' , aPort, '-logdir' , upath, '-errlog', upath+'/omniNameErrors.log'] - #os.system("omniNames -start " + aPort + " -logdir " + upath + " &") - - if verbose(): print "... ok" - if verbose(): print "to list contexts and objects bound into the context with the specified name : showNS " - - - def initArgs(self): - Server.initArgs(self) - if sys.platform == "win32": - env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("PATH")] - else: - env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("LD_LIBRARY_PATH")] - self.CMD=['xterm', '-e']+ env_ld_library_path + ['python'] - self.initNSArgs() - -# In LifeCycleCORBA, FactoryServer is started with rsh on the requested -# computer if this Container does not exist. Default is localhost. -# Others Containers are started with start_impl method of FactoryServer Container. -# For using rsh it is necessary to have in the ${HOME} directory a .rhosts file -# Warning : on RedHat the file /etc/hosts contains by default a line like : -# 127.0.0.1 bordolex bordolex.paris1.matra-dtv.fr localhost.localdomain localhost -# (bordolex is the station name). omniNames on bordolex will be accessible from other -# computers only if the computer name is removed on that line like : -# 127.0.0.1 bordolex.paris1.matra-dtv.fr localhost.localdomain localhost - -# To start dynamically Containers on several computers you need to -# put in the ${OMNIORB_CONFIG} file a computer name instead of "localhost" -# example : ORBInitRef NameService=corbaname::dm2s0017 - -# If you need to use several omniNames running on the same computer, you have to : -#1. put in your ${OMNIORB_CONFIG} file a computer name and port number -# example : ORBInitRef NameService=corbaname::dm2s0017:1515 -#2. start omninames with this port number like in orbmodile.py -# example : omniNames -start 1515 -logdir ${BaseDir}/logs/${Username} & - +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +import sys, os, re, socket +#import commands +from server import * +from Utils_Identity import getShortHostName +from launchConfigureParser import verbose + +# ----------------------------------------------------------------------------- + +class NamingServer(Server): + XTERM="" + USER=os.getenv('USER') + if USER is None: + USER='anonymous' + #os.system("mkdir -m 777 -p /tmp/logs") + LOGDIR="/tmp/logs/" + USER + + def initNSArgs(self): + if sys.platform == "win32": + # temporarily using home directory for Namning Service logs + # to be replaced with TEMP later... + os.environ["BaseDir"]=os.environ["HOME"] + else: + os.environ["BaseDir"]="/tmp" + + try: + os.mkdir(os.environ["BaseDir"] + "/logs") + os.chmod(os.environ["BaseDir"] + "/logs", 0777) + except: + #print "Can't create " + os.environ["BaseDir"] + "/logs" + pass + + upath = os.environ["BaseDir"] + "/logs/"; + if sys.platform == "win32": + upath += os.environ["Username"]; + else: + upath += os.environ["USER"]; + + try: + os.mkdir(upath) + except: + #print "Can't create " + upath + pass + + if verbose(): print "Name Service... ", + #hname=os.environ["HOST"] #commands.getoutput("hostname") + if sys.platform == "win32": + hname=getShortHostName(); + else: + hname = socket.gethostname(); + #print "hname=",hname + + f=open(os.environ["OMNIORB_CONFIG"]) + ss=re.findall("NameService=corbaname::" + hname + ":\d+", f.read()) + if verbose(): print "ss = ", ss, + f.close() + sl=ss[0] + ll = sl.split(':') + aPort = ll[-1] + #aPort=(ss.join().split(':'))[2]; + #aPort=re.findall("\d+", ss[0])[0] + + # \begin{E.A.} + # put the log files of omniNames in different directory with port reference, + # it is cleaner on linux and it is a fix for salome since it is impossible to + # remove the log files if the corresponding omniNames has not been killed. + # \end{E.A.} + + upath += "/omniNames_%s"%(aPort) + try: + os.mkdir(upath) + except: + #print "Can't create " + upath + pass + + #os.system("touch " + upath + "/dummy") + for fname in os.listdir(upath): + try: + os.remove(upath + "/" + fname) + except: + pass + #os.system("rm -f " + upath + "/omninames* " + upath + "/dummy " + upath + "/*.log") + + #aSedCommand="s/.*NameService=corbaname::" + hname + ":\([[:digit:]]*\)/\1/" + #print "sed command = ", aSedCommand + #aPort = commands.getoutput("sed -e\"" + aSedCommand + "\"" + os.environ["OMNIORB_CONFIG"]) + #print "port=", aPort + if sys.platform == "win32": + #print "start omniNames -start " + aPort + " -logdir " + upath + self.CMD=['omniNames', '-start' , aPort , '-nohostname', '-logdir' , os.path.realpath(upath), '-errlog', os.path.realpath(os.path.join(upath,'omniNameErrors.log'))] + #os.system("start omniNames -start " + aPort + " -logdir " + upath) + else: + #self.CMD=['omniNames -start ' , aPort , ' -logdir ' , upath , ' &'] + self.CMD=['omniNames','-start' , aPort, '-logdir' , upath, '-errlog', upath+'/omniNameErrors.log'] + #os.system("omniNames -start " + aPort + " -logdir " + upath + " &") + + if verbose(): print "... ok" + if verbose(): print "to list contexts and objects bound into the context with the specified name : showNS " + + + def initArgs(self): + Server.initArgs(self) + if sys.platform == "win32": + env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("PATH")] + else: + env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + os.getenv("LD_LIBRARY_PATH")] + self.CMD=['xterm', '-e']+ env_ld_library_path + ['python'] + self.initNSArgs() + +# In LifeCycleCORBA, FactoryServer is started with rsh on the requested +# computer if this Container does not exist. Default is localhost. +# Others Containers are started with start_impl method of FactoryServer Container. +# For using rsh it is necessary to have in the ${HOME} directory a .rhosts file +# Warning : on RedHat the file /etc/hosts contains by default a line like : +# 127.0.0.1 bordolex bordolex.paris1.matra-dtv.fr localhost.localdomain localhost +# (bordolex is the station name). omniNames on bordolex will be accessible from other +# computers only if the computer name is removed on that line like : +# 127.0.0.1 bordolex.paris1.matra-dtv.fr localhost.localdomain localhost + +# To start dynamically Containers on several computers you need to +# put in the ${OMNIORB_CONFIG} file a computer name instead of "localhost" +# example : ORBInitRef NameService=corbaname::dm2s0017 + +# If you need to use several omniNames running on the same computer, you have to : +#1. put in your ${OMNIORB_CONFIG} file a computer name and port number +# example : ORBInitRef NameService=corbaname::dm2s0017:1515 +#2. start omninames with this port number like in orbmodile.py +# example : omniNames -start 1515 -logdir ${BaseDir}/logs/${Username} & + diff --git a/bin/server.py b/bin/server.py index 54cd51357..8e912bd8e 100644 --- a/bin/server.py +++ b/bin/server.py @@ -1,140 +1,140 @@ -#!/usr/bin/env python -# -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -# -# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# - -import os, sys, string -from salome_utils import getHostName -process_id = {} - -# ----------------------------------------------------------------------------- -# -# Definition des classes d'objets pour le lancement des Server CORBA -# - -class Server: - """Generic class for CORBA server launch""" - - server_launch_mode = "daemon" - - def initArgs(self): - self.PID=None - self.CMD=[] - self.ARGS=[] - if self.args.get('xterm'): - if sys.platform != "win32": - self.ARGS=['xterm', '-iconic', '-sb', '-sl', '500', '-hold'] - else: - self.ARGS=['cmd', '/c', 'start cmd.exe', '/K'] - - def __init__(self,args): - self.args=args - self.initArgs() - - @staticmethod - def set_server_launch_mode(mode): - if mode == "daemon" or mode == "fork": - Server.server_launch_mode = mode - else: - raise Exception("Unsupported server launch mode: %s" % mode) - - def run(self): - global process_id - myargs=self.ARGS - if self.args.get('xterm'): - # (Debian) send LD_LIBRARY_PATH to children shells (xterm) - if sys.platform != "win32": - env_ld_library_path=['env', 'LD_LIBRARY_PATH=' - + os.getenv("LD_LIBRARY_PATH")] - myargs = myargs +['-T']+self.CMD[:1]+['-e'] + env_ld_library_path - command = myargs + self.CMD - #print "command = ", command - if sys.platform == "win32": - import win32pm - pid = win32pm.spawnpid( command, '-nc' ) - elif Server.server_launch_mode == "fork": - pid = os.spawnvp(os.P_NOWAIT, command[0], command) - else: # Server launch mode is daemon - pid=self.daemonize(command) - if pid is not None: - #store process pid if it really exists - process_id[pid]=self.CMD - self.PID = pid - return pid - - def daemonize(self,args): - # to daemonize a process need to do the UNIX double-fork magic - # see Stevens, "Advanced Programming in the UNIX Environment" for details (ISBN 0201563177) - # and UNIX Programming FAQ 1.7 How do I get my program to act like a daemon? - # http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16 - #open a pipe - c2pread, c2pwrite = os.pipe() - #do first fork - pid=os.fork() - if pid > 0: - #first parent - os.close(c2pwrite) - #receive real pid from child - data=os.read(c2pread,24) #read 24 bytes - os.waitpid(pid,0) #remove zombie - os.close(c2pread) - # return : first parent - childpid=int(data) - if childpid==-1: - return None - try: - os.kill(childpid,0) - return childpid - except: - return None - - #first child - # decouple from parent environment - os.setsid() - os.close(c2pread) - - # do second fork : second child not a session leader - try: - pid = os.fork() - if pid > 0: - #send real pid to parent - os.write(c2pwrite,"%d" % pid) - os.close(c2pwrite) - # exit from second parent - os._exit(0) - except OSError, e: - print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) - os.write(c2pwrite,"-1") - os.close(c2pwrite) - sys.exit(1) - - #I am a daemon - os.close(0) #close stdin - os.open("/dev/null", os.O_RDWR) # redirect standard input (0) to /dev/null - try: - os.execvp(args[0], args) - except OSError, e: - if args[0] != "notifd": - print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror) - pass - os._exit(127) - +#!/usr/bin/env python +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +import os, sys, string +from salome_utils import getHostName +process_id = {} + +# ----------------------------------------------------------------------------- +# +# Definition des classes d'objets pour le lancement des Server CORBA +# + +class Server: + """Generic class for CORBA server launch""" + + server_launch_mode = "daemon" + + def initArgs(self): + self.PID=None + self.CMD=[] + self.ARGS=[] + if self.args.get('xterm'): + if sys.platform != "win32": + self.ARGS=['xterm', '-iconic', '-sb', '-sl', '500', '-hold'] + else: + self.ARGS=['cmd', '/c', 'start cmd.exe', '/K'] + + def __init__(self,args): + self.args=args + self.initArgs() + + @staticmethod + def set_server_launch_mode(mode): + if mode == "daemon" or mode == "fork": + Server.server_launch_mode = mode + else: + raise Exception("Unsupported server launch mode: %s" % mode) + + def run(self): + global process_id + myargs=self.ARGS + if self.args.get('xterm'): + # (Debian) send LD_LIBRARY_PATH to children shells (xterm) + if sys.platform != "win32": + env_ld_library_path=['env', 'LD_LIBRARY_PATH=' + + os.getenv("LD_LIBRARY_PATH")] + myargs = myargs +['-T']+self.CMD[:1]+['-e'] + env_ld_library_path + command = myargs + self.CMD + #print "command = ", command + if sys.platform == "win32": + import win32pm + pid = win32pm.spawnpid( command, '-nc' ) + elif Server.server_launch_mode == "fork": + pid = os.spawnvp(os.P_NOWAIT, command[0], command) + else: # Server launch mode is daemon + pid=self.daemonize(command) + if pid is not None: + #store process pid if it really exists + process_id[pid]=self.CMD + self.PID = pid + return pid + + def daemonize(self,args): + # to daemonize a process need to do the UNIX double-fork magic + # see Stevens, "Advanced Programming in the UNIX Environment" for details (ISBN 0201563177) + # and UNIX Programming FAQ 1.7 How do I get my program to act like a daemon? + # http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16 + #open a pipe + c2pread, c2pwrite = os.pipe() + #do first fork + pid=os.fork() + if pid > 0: + #first parent + os.close(c2pwrite) + #receive real pid from child + data=os.read(c2pread,24) #read 24 bytes + os.waitpid(pid,0) #remove zombie + os.close(c2pread) + # return : first parent + childpid=int(data) + if childpid==-1: + return None + try: + os.kill(childpid,0) + return childpid + except: + return None + + #first child + # decouple from parent environment + os.setsid() + os.close(c2pread) + + # do second fork : second child not a session leader + try: + pid = os.fork() + if pid > 0: + #send real pid to parent + os.write(c2pwrite,"%d" % pid) + os.close(c2pwrite) + # exit from second parent + os._exit(0) + except OSError, e: + print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) + os.write(c2pwrite,"-1") + os.close(c2pwrite) + sys.exit(1) + + #I am a daemon + os.close(0) #close stdin + os.open("/dev/null", os.O_RDWR) # redirect standard input (0) to /dev/null + try: + os.execvp(args[0], args) + except OSError, e: + if args[0] != "notifd": + print >>sys.stderr, "(%s) launch failed: %d (%s)" % (args[0],e.errno, e.strerror) + pass + os._exit(127) + -- 2.39.2