--- /dev/null
+Index: org.glite/project/global.dependencies.properties
+===================================================================
+RCS file: /cvs/jra1mw/org.glite/project/global.dependencies.properties,v
+retrieving revision 1.486
+diff -u -r1.486 global.dependencies.properties
+--- org.glite/project/global.dependencies.properties 17 Mar 2006 18:19:31 -0000 1.486
++++ org.glite/project/global.dependencies.properties 30 Mar 2006 11:32:58 -0000
+@@ -1352,6 +1352,25 @@
+ ext.globus-sdk.rpm.version = ${ext.vdt.version}
+ ext.globus-sdk.rpm.age = 1
+
++# Globus vdt data server - grid ftp server
++ext.globus-data-server.name = ${ext.globus.name}
++ext.globus-data-server.vendor = ${ext.globus.vendor}
++ext.globus-data-server.version = ${ext.globus.version}
++ext.globus-data-server.platform = ${platform}
++ext.globus-data-server.subdir = ${ext.globus-data-server.name}/${ext.globus-data-server.version}/${ext.globus-data-server.platform}
++ext.globus-data-server.rep.base = ${jra1.rep.base}
++ext.globus-data-server.rep.file =
++ext.globus-data-server.rep.subdir =
++ext.globus-data-server.rep.url = ${ext.globus-data-server.rep.base}/${ext.globus-data-server.subdir}/${ext.globus-data-server.rep.subdir}/${ext.globus-data-server.rep.file}
++ext.globus-data-server.files =
++ext.globus-data-server.download = http://www.cs.wisc.edu/vdt/releases/1.2.2/installing-rpms.html
++ext.globus-data-server.homepage = http://www.cs.wisc.edu/vdt//index.html
++ext.globus-data-server.description = The Globus Toolkit(R). This is the version packaged by VDT.
++ext.globus-data-server.rpm.name = vdt_globus_data_server
++ext.globus-data-server.rpm.version = ${ext.vdt.version}
++ext.globus-data-server.rpm.age = 1
++
++
+ # GPT
+ ext.gpt.name = gpt
+ ext.gpt.vendor = gpt
+Index: org.glite.deployment/build.xml
+===================================================================
+RCS file: /cvs/jra1mw/org.glite.deployment/build.xml,v
+retrieving revision 1.62
+diff -u -r1.62 build.xml
+--- org.glite.deployment/build.xml 22 Aug 2005 17:00:02 -0000 1.62
++++ org.glite.deployment/build.xml 30 Mar 2006 11:32:58 -0000
+@@ -814,6 +814,39 @@
+ </if>
+ </target>
+
++ <target name="jpps" unless="setenvonly" depends="envset,config">
++ <if>
++ <isset property="small.memory"/>
++ <then>
++ <exec dir="${deployment.subsystem.dir}.jpps" executable="${antExec}" failonerror="${failonerror}">
++ <arg line="${target} "-Dsmall.memory=true" "-Dbootstrap=${bootstrap}" "-Dfailonerror=${failonerror}" "-Ddo.cvs.tag=${do.cvs.tag}" "-Dbuild.name=${build.name}""/>
++ </exec>
++ </then>
++ <else>
++ <ant dir="${deployment.subsystem.dir}.jpps"
++ target="${target}"
++ inheritall="false" />
++ </else>
++ </if>
++ </target>
++
++
++ <target name="jpis" unless="setenvonly" depends="envset,config">
++ <if>
++ <isset property="small.memory"/>
++ <then>
++ <exec dir="${deployment.subsystem.dir}.jpis" executable="${antExec}" failonerror="${failonerror}">
++ <arg line="${target} "-Dsmall.memory=true" "-Dbootstrap=${bootstrap}" "-Dfailonerror=${failonerror}" "-Ddo.cvs.tag=${do.cvs.tag}" "-Dbuild.name=${build.name}""/>
++ </exec>
++ </then>
++ <else>
++ <ant dir="${deployment.subsystem.dir}.jpis"
++ target="${target}"
++ inheritall="false" />
++ </else>
++ </if>
++ </target>
++
+ <target name="io-server" unless="setenvonly" depends="envset,config">
+ <if>
+ <isset property="small.memory"/>
+@@ -891,6 +924,8 @@
+ wn,
+ wms,
+ lb,
++ jpps,
++ jpis,
+ io-server,
+ io-client,
+ ce,
+Index: org.glite.deployment/project/dependencies.properties
+===================================================================
+RCS file: /cvs/jra1mw/org.glite.deployment/project/dependencies.properties,v
+retrieving revision 1.528
+diff -u -r1.528 dependencies.properties
+--- org.glite.deployment/project/dependencies.properties 22 Aug 2005 17:00:02 -0000 1.528
++++ org.glite.deployment/project/dependencies.properties 30 Mar 2006 11:32:58 -0000
+@@ -38,6 +38,8 @@
+ org.glite.deployment.wn.version = HEAD
+ org.glite.deployment.wms.version = HEAD
+ org.glite.deployment.lb.version = HEAD
++org.glite.deployment.jpps.version = HEAD
++org.glite.deployment.jpis.version = HEAD
+ org.glite.deployment.io-server.version = HEAD
+ org.glite.deployment.io-client.version = HEAD
+ org.glite.deployment.ce.version = HEAD
+Index: org.glite.deployment/project/glite.deployment.csf.xml
+===================================================================
+RCS file: /cvs/jra1mw/org.glite.deployment/project/glite.deployment.csf.xml,v
+retrieving revision 1.45
+diff -u -r1.45 glite.deployment.csf.xml
+--- org.glite.deployment/project/glite.deployment.csf.xml 22 Aug 2005 17:00:02 -0000 1.45
++++ org.glite.deployment/project/glite.deployment.csf.xml 30 Mar 2006 11:32:58 -0000
+@@ -389,6 +389,14 @@
+ <equals arg1="${org.glite.deployment.lb.version}" arg2="HEAD" />
+ </condition>
+
++ <condition property="jpps.head">
++ <equals arg1="${org.glite.deployment.jpps.version}" arg2="HEAD" />
++ </condition>
++
++ <condition property="jpis.head">
++ <equals arg1="${org.glite.deployment.jpis.version}" arg2="HEAD" />
++ </condition>
++
+ <condition property="io-server.head">
+ <equals arg1="${org.glite.deployment.io-server.version}" arg2="HEAD" />
+ </condition>
+@@ -832,6 +840,28 @@
+ tag="${org.glite.deployment.lb.version}" />
+ </target>
+
++ <!-- jpps component -->
++ <target name="jpps" depends="get.jpps.head, get.jpps.tag"/>
++ <target name="get.jpps.head" if="jpps.head">
++ <cvs-co package="org.glite.deployment.jpps" />
++ </target>
++
++ <target name="get.jpps.tag" unless="jpps.head">
++ <cvs-co package="org.glite.deployment.jpps"
++ tag="${org.glite.deployment.jpps.version}" />
++ </target>
++
++ <!-- jpis component -->
++ <target name="jpis" depends="get.jpis.head, get.jpis.tag"/>
++ <target name="get.jpis.head" if="jpis.head">
++ <cvs-co package="org.glite.deployment.jpis" />
++ </target>
++
++ <target name="get.jpis.tag" unless="jpis.head">
++ <cvs-co package="org.glite.deployment.jpis"
++ tag="${org.glite.deployment.jpis.version}" />
++ </target>
++
+ <!-- io-server component -->
+ <target name="io-server" depends="get.io-server.head, get.io-server.tag"/>
+ <target name="get.io-server.head" if="io-server.head">
--- /dev/null
+Index: org.glite.deployment.lb/config/scripts/glite-lb-config.py
+===================================================================
+RCS file: /cvs/jra1mw/org.glite.deployment.lb/config/scripts/glite-lb-config.py,v
+retrieving revision 1.66
+diff -u -r1.66 glite-lb-config.py
+--- org.glite.deployment.lb/config/scripts/glite-lb-config.py 13 Mar 2006 15:22:31 -0000 1.66
++++ org.glite.deployment.lb/config/scripts/glite-lb-config.py 15 Mar 2006 14:51:40 -0000
+@@ -120,7 +120,12 @@
+
+ if not os.path.exists('/tmp/mysql.sock'):
+ os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock')
+-
++
++
++ #-------------------------------------------------------------------
++ # start bkserver
++ #-------------------------------------------------------------------
++
+ pid = glib.getPID('bkserverd')
+ if pid != 0:
+ print 'The gLite LB Server service is already running. Restarting...'
+@@ -133,7 +138,7 @@
+ pid = glib.getPID('bkserverd')
+
+ if (pid != 0):
+- print "The gLite LB Server service has been started ",
++ print "The gLite LB Server service has been started ",
+ glib.printOkMessage()
+ else:
+ glib.printErrorMessage("Could not start the gLite LB Server service")
+@@ -142,6 +147,36 @@
+ return 1
+
+ #-------------------------------------------------------------------
++ # start jp-importer, if enabled
++ #-------------------------------------------------------------------
++
++ lb_export = 0
++ if params.has_key('lb.export.enabled'):
++ if params['lb.export.enabled'] == "true":
++ lb_export = 1
++
++ if lb_export:
++ pid = glib.getPID('jp-importer')
++ if pid != 0:
++ print 'The gLite JP Importer service is already running. Restarting...'
++ os.system('%s/etc/init.d/glite-jp-importer stop' % os.environ['GLITE_LOCATION'])
++ else:
++ print 'Starting the gLite JP Importer service...'
++
++ os.system('%s/etc/init.d/glite-jp-importer start' % os.environ['GLITE_LOCATION'])
++
++ pid = glib.getPID('jp-importer')
++
++ if (pid != 0):
++ print "The gLite JP Importer service has been started ",
++ glib.printOkMessage()
++ else:
++ glib.printErrorMessage("Could not start the gLite JP Importer service")
++ glib.printErrorMessage("Please verify and re-run the script "),
++ glib.printFailedMessage()
++ return 1
++
++ #-------------------------------------------------------------------
+ # Start Servicetool
+ #-------------------------------------------------------------------
+
+@@ -161,6 +196,10 @@
+ if (pid != 0):
+ os.system('%s/etc/init.d/glite-lb-bkserverd stop' % os.environ['GLITE_LOCATION'])
+
++ #-------------------------------------------------------------------
++ # Book Keeping Server
++ #-------------------------------------------------------------------
++
+ pid = glib.getPID('bkserverd')
+ if (pid != 0):
+ print 'Could not stop the LB Server service ',
+@@ -171,6 +210,25 @@
+ glib.printOkMessage()
+
+ #-------------------------------------------------------------------
++ # JP Importer
++ #-------------------------------------------------------------------
++
++ pid = glib.getPID('jp-importer')
++ if (pid != 0):
++ os.system('%s/etc/init.d/glite-jp-importer stop' % os.environ['GLITE_LOCATION'])
++
++ pid = glib.getPID('jp-importer')
++ if (pid != 0):
++ print 'Could not stop the JP Importer service ',
++ glib.printFailedMessage()
++ error_level = 1
++ else:
++ if params.has_key('lb.export.enabled'):
++ if params['lb.export.enabled'] == "true":
++ print 'The JP Importer service has been stopped ',
++ glib.printOkMessage()
++
++ #-------------------------------------------------------------------
+ # MySQL
+ #-------------------------------------------------------------------
+
+@@ -195,6 +253,10 @@
+ if retval != 0:
+ error_level = 1
+
++ retval = os.system('%s/etc/init.d/glite-jp-importer status' % os.environ['GLITE_LOCATION'])
++ if retval != 0:
++ error_level = 1
++
+ #-------------------------------------------------------------------
+ # Servicetool
+ #-------------------------------------------------------------------
+@@ -325,7 +387,27 @@
+ print "\n==> MySQL database %s already exist\n" % params['lb.database.name']
+
+ self.mysql.stop()
+-
++
++ # ------------------------------------------------------------------
++ # export from bkserver to cron
++ # ------------------------------------------------------------------
++ if params['GLITE_LB_EXPORT_ENABLED'] == "true":
++ file = open('%s/etc/glite-lb-export-cron-wrapper.sh' % os.environ['GLITE_LOCATION'], 'w')
++ file.write('#! /bin/sh\n')
++ file.write('. %s\n' % glib.getInstallerExportFile())
++ file.write('$GLITE_LOCATION/examples/glite-lb-export.sh\n')
++ file.close()
++ os.system('/bin/chmod 0755 %s/etc/glite-lb-export-cron-wrapper.sh' % os.environ['GLITE_LOCATION'])
++
++ file = open('/etc/cron.d/glite-lb-export.cron', 'w')
++ file.write('# periodically run purge and export jobs from bkserver\n')
++ file.write('00,30 * * * * %s %s/etc/glite-lb-export-cron-wrapper.sh\n' % (params['glite.user.name'], os.environ['GLITE_LOCATION']))
++ file.close()
++ os.system('/bin/chmod 0755 /etc/cron.d/glite-lb-export.cron')
++
++ # Touch cron spool directory to cause reloading of the crontabs
++ os.system("/bin/touch /var/spool/cron")
++
+ #-------------------------------------------------------------------
+ # RGMA servicetool: configure servicetool
+ #-------------------------------------------------------------------
+@@ -411,6 +493,17 @@
+ # Perl
+ glib.addEnvPath("PERL5LIB", "%s/lib/perl:%s/lib/perl5" % (os.environ['GPT_LOCATION'],os.environ['GLITE_LOCATION']))
+
++ # LB export
++ glib.export('GLITE_LB_EXPORT_ENABLED', params['lb.export.enabled']);
++ glib.export('GLITE_LB_EXPORT_BKSERVER', params['lb.export.bkserver']);
++ glib.export('GLITE_LB_EXPORT_JPPS', params['lb.export.jpps']);
++ glib.export('GLITE_LB_EXPORT_JPREG_MAILDIR', params['lb.export.jpreg']);
++ glib.export('GLITE_LB_EXPORT_JPDUMP_MAILDIR', params['lb.export.jpdump']);
++ glib.export('GLITE_LB_EXPORT_DUMPDIR', params['lb.export.dump']);
++ glib.export('GLITE_LB_EXPORT_DUMPDIR_OLD', params['lb.export.dump.old']);
++ glib.export('GLITE_LB_EXPORT_EXPORTDIR', params['lb.export.export']);
++ glib.export('GLITE_LB_EXPORT_PURGE_ARGS', '"%s"' % params['lb.export.purgeargs']);
++
+ # Set environment
+ glib.setUserEnv()
+
+Index: org.glite.deployment.lb/config/templates/glite-lb.cfg.xml
+===================================================================
+RCS file: /cvs/jra1mw/org.glite.deployment.lb/config/templates/glite-lb.cfg.xml,v
+retrieving revision 1.21
+diff -u -r1.21 glite-lb.cfg.xml
+--- org.glite.deployment.lb/config/templates/glite-lb.cfg.xml 13 Mar 2006 15:19:21 -0000 1.21
++++ org.glite.deployment.lb/config/templates/glite-lb.cfg.xml 15 Mar 2006 14:51:40 -0000
+@@ -17,9 +17,16 @@
+ parameter. Leave it empty of comment it out to use the same as 'glite.user.name'"
+ value="changeme"/>
+
+- <mysql.root.password
+- description="The mysql root password"
+- value="changeme"/>
++ <mysql.root.password
++ description="The mysql root password"
++ value="changeme"/>
++
++ <lb.export.jpps
++ description="Job Provenance Primary Storage.
++ [Example: localhost:8901][Type: string]"
++ value="changeme"/>
++
++
+
+ <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
+ <!-- Advanced parameters - Change them if you know what you're doing -->
+@@ -55,6 +62,12 @@
+ [Example: 17M][Type: Integer][Unit: MB]"
+ value="17M"/>
+
++ <lb.export.enabled
++ description="Enables exports to Job Provenance.
++ [Example: true][Type: boolean]"
++ value="true"/>
++
++
+ <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
+ <!-- System parameters - You should leave these alone -->
+ <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
+@@ -67,7 +80,42 @@
+ <value>destination</value>
+
+ </lb.index.list>
+-
++
++ <lb.export.bkserver
++ description="Book Keeping Server service when differs from default port on localhost.
++ [Example: localhost:9000][Type: string]"
++ value=""/>
++
++ <lb.export.jpreg
++ description="Maildir for job registrations.
++ [Example: /tmp/jpreg][Type: string]"
++ value=""/>
++
++ <lb.export.jpdump
++ description="Maildir for job dumps.
++ [Example: /tmp/jpdump][Type: string]"
++ value=""/>
++
++ <lb.export.dump
++ description="Dump directory for purged jobs.
++ [Example: /tmp/dump][Type: string]"
++ value=""/>
++
++ <lb.export.dump.old
++ description="Dump directory for handled purged jobs.
++ [Example: /tmp/dump.old][Type: string]"
++ value=""/>
++
++ <lb.export.export
++ description="Exported events divided to file per job.
++ [Example: /tmp/lb_export][Type: string]"
++ value=""/>
++
++ <lb.export.purgeargs
++ description="Purge arguments (with timeouts).
++ [Example: -a 1h -c 1h -n 1h -o 1d][Type: string]"
++ value="-a 1d -c 1d -n 1d -o 7d"/>
++
+ </parameters>
+
+ </config>
+Index: org.glite.deployment.lb/project/glite-lb.sdf.xml.template
+===================================================================
+RCS file: /cvs/jra1mw/org.glite.deployment.lb/project/glite-lb.sdf.xml.template,v
+retrieving revision 1.38
+diff -u -r1.38 glite-lb.sdf.xml.template
+--- org.glite.deployment.lb/project/glite-lb.sdf.xml.template 13 Mar 2006 15:19:21 -0000 1.38
++++ org.glite.deployment.lb/project/glite-lb.sdf.xml.template 15 Mar 2006 14:51:40 -0000
+@@ -57,6 +57,12 @@
+ build="@org.glite.lb.server-bones.info.build@"
+ arch="i386"/>
+
++ <component name="glite-lb-client"
++ version="@org.glite.lb.client.info.version@"
++ age="@org.glite.lb.client.info.age@"
++ build="@org.glite.lb.client.info.build@"
++ arch="i386"/>
++
+ <component name="glite-wms-utils-jobid"
+ version="@org.glite.wms-utils.jobid.info.version@"
+ age="@org.glite.wms-utils.jobid.info.age@"
+@@ -105,6 +111,12 @@
+ build="@org.glite.jp.ws-interface.info.build@"
+ arch="i386"/>
+
++ <component name="glite-jp-client"
++ version="@org.glite.jp.client.info.version@"
++ age="@org.glite.jp.client.info.age@"
++ build="@org.glite.jp.client.info.build@"
++ arch="i386"/>
++
+ <component name="gridsite"
+ version="@org.gridsite.core.info.version@"
+ age="@org.gridsite.core.info.age@"