~hudson-openstack/nova/trunk

« back to all changes in this revision

Viewing changes to vendor/Twisted-10.0.0/twisted/scripts/tap2rpm.py

  • Committer: Jesse Andrews
  • Date: 2010-05-28 06:05:26 UTC
  • Revision ID: git-v1:bf6e6e718cdc7488e2da87b21e258ccc065fe499
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#  based off the tap2deb.py file
 
2
#  tap2rpm.py built by Sean Reifschneider, <jafo@tummy.com>
 
3
 
 
4
#  TODO: need to implement log-file rotation
 
5
 
 
6
import sys, os, shutil, time, glob
 
7
 
 
8
from twisted.python import usage
 
9
from twisted.scripts import tap2deb
 
10
 
 
11
 
 
12
#################################
 
13
#  data that goes in /etc/inittab
 
14
initFileData = '''\
 
15
#!/bin/sh
 
16
#
 
17
#  Startup script for a Twisted service.
 
18
#
 
19
#  chkconfig: - 85 15
 
20
#  description: Start-up script for the Twisted service "%(tap_file)s".
 
21
 
 
22
PATH=/usr/bin:/bin:/usr/sbin:/sbin
 
23
 
 
24
pidfile=/var/run/%(rpm_file)s.pid
 
25
rundir=/var/lib/twisted-taps/%(rpm_file)s/
 
26
file=/etc/twisted-taps/%(tap_file)s
 
27
logfile=/var/log/%(rpm_file)s.log
 
28
 
 
29
#  load init function library
 
30
. /etc/init.d/functions
 
31
 
 
32
[ -r /etc/default/%(rpm_file)s ] && . /etc/default/%(rpm_file)s
 
33
 
 
34
#  check for required files
 
35
if [ ! -x /usr/bin/twistd ]
 
36
then
 
37
        echo "$0: Aborting, no /usr/bin/twistd found"
 
38
        exit 0
 
39
fi
 
40
if [ ! -r "$file" ]
 
41
then
 
42
        echo "$0: Aborting, no file $file found."
 
43
        exit 0
 
44
fi
 
45
 
 
46
#  set up run directory if necessary
 
47
if [ ! -d "${rundir}" ]
 
48
then
 
49
        mkdir -p "${rundir}"
 
50
fi
 
51
 
 
52
 
 
53
case "$1" in
 
54
        start)
 
55
                echo -n "Starting %(rpm_file)s: twistd"
 
56
                daemon twistd  \\
 
57
                                --pidfile=$pidfile \\
 
58
                                --rundir=$rundir \\
 
59
                                --%(twistd_option)s=$file \\
 
60
                                --logfile=$logfile
 
61
                status %(rpm_file)s
 
62
                ;;
 
63
 
 
64
        stop)
 
65
                echo -n "Stopping %(rpm_file)s: twistd"
 
66
                kill `cat "${pidfile}"`
 
67
                status %(rpm_file)s
 
68
                ;;
 
69
 
 
70
        restart)
 
71
                "${0}" stop
 
72
                "${0}" start
 
73
                ;;
 
74
 
 
75
    *)
 
76
                echo "Usage: ${0} {start|stop|restart|}" >&2
 
77
                exit 1
 
78
                ;;
 
79
esac
 
80
 
 
81
exit 0
 
82
'''
 
83
 
 
84
#######################################
 
85
#  the data for creating the spec file
 
86
specFileData = '''\
 
87
Summary:    %(description)s
 
88
Name:       %(rpm_file)s
 
89
Version:    %(version)s
 
90
Release:    1
 
91
Copyright:  Unknown
 
92
Group:      Networking/Daemons
 
93
Source:     %(tarfile_basename)s
 
94
BuildRoot:  /var/tmp/%%{name}-%%{version}-root
 
95
Requires:   /usr/bin/twistd
 
96
BuildArch:  noarch
 
97
 
 
98
%%description
 
99
%(long_description)s
 
100
 
 
101
%%prep
 
102
%%setup
 
103
%%build
 
104
 
 
105
%%install
 
106
[ ! -z "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != '/' ] \
 
107
                && rm -rf "$RPM_BUILD_ROOT"
 
108
mkdir -p "$RPM_BUILD_ROOT"/etc/twisted-taps
 
109
mkdir -p "$RPM_BUILD_ROOT"/etc/init.d
 
110
mkdir -p "$RPM_BUILD_ROOT"/var/lib/twisted-taps
 
111
cp "%(tap_file)s" "$RPM_BUILD_ROOT"/etc/twisted-taps/
 
112
cp "%(rpm_file)s.init" "$RPM_BUILD_ROOT"/etc/init.d/"%(rpm_file)s"
 
113
 
 
114
%%clean
 
115
[ ! -z "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != '/' ] \
 
116
                && rm -rf "$RPM_BUILD_ROOT"
 
117
 
 
118
%%post
 
119
/sbin/chkconfig --add %(rpm_file)s
 
120
/sbin/chkconfig --level 35 %(rpm_file)s
 
121
/etc/init.d/%(rpm_file)s start
 
122
 
 
123
%%preun
 
124
/etc/init.d/%(rpm_file)s stop
 
125
/sbin/chkconfig --del %(rpm_file)s
 
126
 
 
127
%%files
 
128
%%defattr(-,root,root)
 
129
%%attr(0755,root,root) /etc/init.d/%(rpm_file)s
 
130
%%attr(0660,root,root) /etc/twisted-taps/%(tap_file)s
 
131
 
 
132
%%changelog
 
133
* %(date)s %(maintainer)s 
 
134
- Created by tap2rpm: %(rpm_file)s (%(version)s)
 
135
'''
 
136
 
 
137
###############################
 
138
class MyOptions(usage.Options):
 
139
    optFlags = [["unsigned", "u"]]
 
140
    optParameters = [
 
141
                     ["tapfile", "t", "twistd.tap"],
 
142
                     ["maintainer", "m", ""],
 
143
                     ["protocol", "p", ""],
 
144
                     ["description", "e", ""],
 
145
                     ["long_description", "l", ""],
 
146
                     ["set-version", "V", "1.0"],
 
147
                     ["rpmfile", "r", None],
 
148
                     ["type", "y", "tap", "type of configuration: 'tap', 'xml, "
 
149
                      "'source' or 'python'"],
 
150
                    ]
 
151
 
 
152
    #zsh_altArgDescr = {"foo":"use this description for foo instead"}
 
153
    #zsh_multiUse = ["foo", "bar"]
 
154
    #zsh_mutuallyExclusive = [("foo", "bar"), ("bar", "baz")]
 
155
    zsh_actions = {"type":"(tap xml source python)",
 
156
                   "rpmfile":'_files -g "*.rpm"'}
 
157
    #zsh_actionDescr = {"logfile":"log file name", "random":"random seed"}
 
158
 
 
159
 
 
160
type_dict = {
 
161
    'tap': 'file',
 
162
    'python': 'python',
 
163
    'source': 'source',
 
164
    'xml': 'xml',
 
165
}
 
166
 
 
167
 
 
168
##########################
 
169
def makeBuildDir(baseDir):
 
170
    '''Set up the temporary directory for building RPMs.
 
171
    Returns: Tuple: ( buildDir, rpmrcFile )
 
172
    '''
 
173
    import random, string
 
174
 
 
175
    #  make top directory
 
176
    oldMask = os.umask(0077)
 
177
    while 1:
 
178
        tmpDir = os.path.join(baseDir, 'tap2rpm-%s-%s' % ( os.getpid(),
 
179
                                        random.randint(0, 999999999) ))
 
180
        if not os.path.exists(tmpDir):
 
181
            os.makedirs(tmpDir)
 
182
            break
 
183
    os.umask(oldMask)
 
184
 
 
185
    #  set up initial directory contents
 
186
    os.makedirs(os.path.join(tmpDir, 'RPMS', 'noarch'))
 
187
    os.makedirs(os.path.join(tmpDir, 'SPECS'))
 
188
    os.makedirs(os.path.join(tmpDir, 'BUILD'))
 
189
    os.makedirs(os.path.join(tmpDir, 'SOURCES'))
 
190
    os.makedirs(os.path.join(tmpDir, 'SRPMS'))
 
191
 
 
192
    #  set up rpmmacros file
 
193
    macroFile = os.path.join(tmpDir, 'rpmmacros')
 
194
    rcFile = os.path.join(tmpDir, 'rpmrc')
 
195
    rpmrcData = open('/usr/lib/rpm/rpmrc', 'r').read()
 
196
    rpmrcData = string.replace(rpmrcData, '~/.rpmmacros', macroFile)
 
197
    fp = open(macroFile, 'w')
 
198
    fp.write('%%_topdir %s\n' % tmpDir)
 
199
    fp.close()
 
200
 
 
201
    #  set up the rpmrc file
 
202
    fp = open(rcFile, 'w')
 
203
    fp.write(rpmrcData)
 
204
    fp.close()
 
205
 
 
206
    return(( tmpDir, rcFile ))
 
207
 
 
208
 
 
209
##########
 
210
def run():
 
211
    #  parse options
 
212
    try:
 
213
        config = MyOptions()
 
214
        config.parseOptions()
 
215
    except usage.error, ue:
 
216
         sys.exit("%s: %s" % (sys.argv[0], ue))
 
217
 
 
218
    #  set up some useful local variables
 
219
    tap_file = config['tapfile']
 
220
    base_tap_file = os.path.basename(config['tapfile'])
 
221
    protocol = (config['protocol'] or os.path.splitext(base_tap_file)[0])
 
222
    rpm_file = config['rpmfile'] or 'twisted-'+protocol
 
223
    version = config['set-version']
 
224
    maintainer = config['maintainer']
 
225
    description = config['description'] or ('A TCP server for %(protocol)s' %
 
226
                                            vars())
 
227
    long_description = (config['long_description']
 
228
                        or "Automatically created by tap2rpm")
 
229
    twistd_option = type_dict[config['type']]
 
230
    date = time.strftime('%a %b %d %Y', time.localtime(time.time()))
 
231
    directory = rpm_file + '-' + version
 
232
    python_version = '%s.%s' % sys.version_info[:2]
 
233
 
 
234
    #  set up a blank maintainer if not present
 
235
    if not maintainer:
 
236
        maintainer = 'tap2rpm'
 
237
 
 
238
    #  create source archive directory
 
239
    tmp_dir, rpmrc_file = makeBuildDir('/var/tmp')
 
240
    source_dir = os.path.join(tmp_dir, directory)
 
241
    os.makedirs(source_dir)
 
242
 
 
243
    #  populate source directory
 
244
    tarfile_name = source_dir + '.tar.gz'
 
245
    tarfile_basename = os.path.basename(tarfile_name)
 
246
    tap2deb.save_to_file(os.path.join(source_dir, '%s.spec' % rpm_file),
 
247
                                      specFileData % vars())
 
248
    tap2deb.save_to_file(os.path.join(source_dir, '%s.init' % rpm_file),
 
249
                                      initFileData % vars())
 
250
    shutil.copy(tap_file, source_dir)
 
251
 
 
252
    #  create source tar
 
253
    os.system('cd "%(tmp_dir)s"; tar cfz "%(tarfile_name)s" "%(directory)s"'
 
254
              % vars())
 
255
    
 
256
    #  build rpm
 
257
    print 'Starting build...'
 
258
    print '=' * 70
 
259
    sys.stdout.flush()
 
260
    os.system('rpmbuild -ta --rcfile "%s" %s' % ( rpmrc_file, tarfile_name ))
 
261
    print 'Done with build...'
 
262
    print '=' * 70
 
263
    
 
264
    #  copy the RPMs to the local directory
 
265
    rpm_path = glob.glob(os.path.join(tmp_dir, 'RPMS', 'noarch', '*'))[0]
 
266
    srpm_path = glob.glob(os.path.join(tmp_dir, 'SRPMS', '*'))[0]
 
267
    print 'Writing "%s"...' % os.path.basename(rpm_path)
 
268
    shutil.copy(rpm_path, '.')
 
269
    print 'Writing "%s"...' % os.path.basename(srpm_path)
 
270
    shutil.copy(srpm_path, '.')
 
271
    
 
272
    #  remove the build directory
 
273
    shutil.rmtree(tmp_dir)