source: TI12-security/trunk/python/ndg-security-install.py @ 2368

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/python/ndg-security-install.py@2368
Revision 2368, 5.7 KB checked in by pjkersha, 13 years ago (diff)

TODO: fix system call to Twisted setup.py - gives no such file directory OSError.

  • Property svn:executable set to *
Line 
1#!/usr/bin/env python
2"""Install NDG Server package with M2Crypto build settings and to include
3Twisted
4
5NERC Data Grid Project
6
7@author P J Kershaw 15/03/07
8
9@copyright (C) 2007 CCLRC & NERC
10
11@license This software may be distributed under the terms of the Q Public
12License, version 1.0 or later.
13"""
14import os, sys
15import urllib
16import optparse
17from ConfigParser import SafeConfigParser
18from subprocess import call
19
20
21def installTwisted():
22    if opt.noTwisted:
23        return
24       
25    # Install Twisted sumo
26    twistedTarURI = \
27'http://tmrc.mit.edu/mirror/twisted/Twisted/2.2/TwistedSumo-2006-02-12.tar.bz2'
28    urllib.urlretrieve(twistedTarURI, 'TwistedSumo-2006-02-12.tar.bz2')
29   
30    import tarfile
31   
32    twistedTar = tarfile.open('TwistedSumo-2006-02-12.tar.bz2', 'r:bz2')
33    for tarInfo in twistedTar:
34        twistedTar.extract(tarInfo)
35   
36    os.chdir('TwistedSumo-2006-02-12')
37    try: 
38        retCode = call(sys.prefix + '/bin/python setup.py install')
39    except OSError, e:
40        raise SystemError, "Error calling setup install for Twisted: "+str(e)
41   
42    if retCode != 0:
43        raise SystemError, "Twisted setup install returned %d" % retCode
44   
45    os.chdir('..')
46
47
48if __name__ == "__main__":
49    dependencyLink = "http://ndg.nerc.ac.uk/dist/" 
50       
51    parser = optparse.OptionParser()
52   
53    parser.add_option("-a",
54              "--install-all",
55              dest="installAll",
56              action="store_true",
57              default=False,
58              help="Install client AND server packages.")
59   
60    parser.add_option("-c",
61              "--install-client",
62              dest="installClient",
63              action="store_true",
64              default=False,
65              help="Install client package only.")
66   
67    parser.add_option("-s",
68              "--install-server",
69              dest="installServer",
70              action="store_true",
71              default=False,
72              help="Install server package only.")
73   
74    parser.add_option("-o",
75                      "--openssl-path",
76                      dest="opensslPath",
77                      default='/usr/local/ssl',
78                      help="Path to openssl for M2Crypto to link with")
79   
80    parser.add_option("-n",
81                      "--no-twisted",
82                      dest="noTwisted",
83                      action="store_true",
84                      default=False,
85                      help=\
86"""Skip Twisted install.  This option applies to the all and server package
87options only.  Twisted is not needed for the client.""")
88   
89    parser.add_option("-f",
90                      "--find-links",
91                      dest="dependencyLinks",
92                      default=dependencyLink,
93                      help=\
94"""Set URLs to locate packages.  Default is \"%s\"""" % dependencyLink)
95
96    (opt, args) = parser.parse_args()
97
98    # Sanity check
99    nInstallArgs = sum((opt.installClient, opt.installServer, opt.installAll))
100    if not nInstallArgs:
101        parser.error("At least one install option must be set")
102       
103    elif nInstallArgs > 1:
104        parser.error("Only one install option may be set")
105       
106       
107    # Set-up link path for openssl for M2Crypto build by creating a distutils
108    # config file containing the include file and library file paths
109   
110    opensslInclPath = os.path.join(opt.opensslPath, 'include')
111    opensslLibPath = os.path.join(opt.opensslPath, 'lib')
112   
113    distutilsCfgFilePath = os.path.join(sys.prefix,
114                                        'lib',
115                                        'python%s' % sys.version[:3],
116                                        'distutils',
117                                        'distutils.cfg')
118    configParser = SafeConfigParser()
119   
120    if configParser.read(distutilsCfgFilePath):
121        # File already exists
122        if not configParser.has_section('build_ext'):
123            configParser.add_section('build_ext')
124       
125        if configParser.has_option('build_ext', 'include_dirs'):
126            existingInclDirs = configParser.get('build_ext','include_dirs')
127           
128            if opensslInclPath not in existingInclDirs.split():
129                includeDirs = "%s %s" % (opensslInclPath, existingInclDirs)
130                configParser.set('build_ext', 'include_dirs', includeDirs)
131        else:
132            configParser.set('build_ext', 'include_dirs', opensslInclPath)
133       
134        if configParser.has_option('build_ext', 'library_dirs'):
135            existingLibDirs = configParser.get('build_ext','library_dirs')
136           
137            if opensslLibPath not in existingLibDirs.split():
138                libraryDirs = "%s %s" % (opensslLibPath, existingLibDirs)
139                configParser.set('build_ext', 'library_dirs', libraryDirs)
140        else:
141            configParser.set('build_ext', 'library_dirs', opensslLibPath)
142                             
143    else:
144        # No config file present - make one
145        configParser.add_section('build_ext')
146        configParser.set('build_ext', 'include_dirs', opensslInclPath)
147        configParser.set('build_ext', 'library_dirs', opensslLibPath)
148       
149    configParser.write(open(distutilsCfgFilePath, 'w'))
150
151   
152    easyInstallCmd = "%s/bin/easy_install -f %s %%s" % (sys.prefix, 
153                                                        opt.dependencyLinks)
154    from setuptools.command.easy_install import main
155   
156    import pdb;pdb.set_trace()
157   
158    # Installation based on flags set
159    if opt.installClient:
160        main(['-f', opt.dependencyLinks, "ndg_security_client"])
161       
162    elif opt.installServer:
163        main(['-f', opt.dependencyLinks, "ndg_security_server"])       
164        installTwisted()
165       
166    elif opt.installAll:
167        main(['-f', opt.dependencyLinks, "ndg_security"])
168        installTwisted()
169   
Note: See TracBrowser for help on using the repository browser.