From 431f43e9aab161da80041db2c2bc9f37210b0614 Mon Sep 17 00:00:00 2001 From: cvs2svn Date: Mon, 6 Feb 2006 12:14:37 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'GLITE_RELEASE_1_5_1'. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Sprout from master 2005-10-15 14:14:12 UTC Aleš Křenek 'libtool version info' Cherrypick from master 2005-11-23 22:44:56 UTC Alberto Di Meglio 'Merged from branch 2.0.0': org.glite.deployment.lb/project/lxscript-rpm.xsl org.glite.deployment.lb/project/quattor-template.xsl Cherrypick from master 2004-07-12 16:18:37 UTC Alberto Di Meglio 'Modified to use myproxy from the repository if available': org.glite.security.proxyrenewal/project/configure.properties.xml Cherrypick from glite-security-proxyrenewal_branch_1_0_0_RC1 2005-08-10 18:42:48 UTC Joni Hahkala 'get the header from teh right place after the removal of the copy': org.glite.security.proxyrenewal/Makefile org.glite.security.proxyrenewal/build.xml org.glite.security.proxyrenewal/config/startup org.glite.security.proxyrenewal/interface/renewal.h org.glite.security.proxyrenewal/project/build.number org.glite.security.proxyrenewal/project/version.properties org.glite.security.proxyrenewal/src/api.c org.glite.security.proxyrenewal/src/commands.c org.glite.security.proxyrenewal/src/common.c org.glite.security.proxyrenewal/src/renew.c org.glite.security.proxyrenewal/src/renewal_locl.h org.glite.security.proxyrenewal/src/renewd.c org.glite.security.proxyrenewal/src/renewd_locl.h org.glite.security.proxyrenewal/src/voms.c Cherrypick from glite-lb-client_branch_2_1_0_2_pre_cares 2006-01-20 14:31:50 UTC Aleš Křenek 'pushed version': org.glite.lb.client/Makefile org.glite.lb.client/examples/job_reg.c org.glite.lb.client/examples/resubmission.l org.glite.lb.client/examples/shallow_and_full_resub.l org.glite.lb.client/examples/shallow_resub_complex.l org.glite.lb.client/examples/shallow_resub_simple.l org.glite.lb.client/examples/shallow_resub_simple2.l org.glite.lb.client/project/build.number org.glite.lb.client/project/version.properties org.glite.lb.client/src/connection.c org.glite.lb.client/src/logevent.c.T org.glite.lb.client/src/producer.c Cherrypick from glite_branch_1_5_0 2006-01-25 15:30:37 UTC Andrew McNab '-fPIC for ia64': org.gridsite.core/CHANGES org.gridsite.core/VERSION org.gridsite.core/project/configure.properties.xml org.gridsite.core/project/version.properties org.gridsite.core/src/Makefile org.gridsite.core/src/gridsite.spec org.gridsite.core/src/grst_asn1.c org.gridsite.core/src/grst_x509.c org.gridsite.core/src/htcp org.gridsite.core/src/mod_gridsite.c org.gridsite.core/src/showx509exts.c Cherrypick from glite-deployment-lb_branch_2_1_0 2006-01-26 09:00:25 UTC Master Builder 'Incremented build number [GLBUILDER]': org.glite.deployment.lb/CHANGELOG org.glite.deployment.lb/config/scripts/glite-lb-config.py org.glite.deployment.lb/config/templates/glite-lb.cfg.xml org.glite.deployment.lb/doc/release_notes/release_notes.doc org.glite.deployment.lb/doc/release_notes/release_notes.html org.glite.deployment.lb/doc/release_notes/release_notes.pdf org.glite.deployment.lb/project/build.number org.glite.deployment.lb/project/glite-lb.sdf.xml.template org.glite.deployment.lb/project/properties.xml org.glite.deployment.lb/project/version.properties Cherrypick from glite-lb-server_branch_1_3_0_2_pre_cares 2006-02-02 09:11:45 UTC Zdeněk Salvet 'Fix for bug #14247.': org.glite.lb.server/project/build.number org.glite.lb.server/project/version.properties org.glite.lb.server/src/bkserverd.c org.glite.lb.server/src/db_store.c org.glite.lb.server/src/jobstat.h org.glite.lb.server/src/jobstat_supp.c org.glite.lb.server/src/process_event.c org.glite.lb.server/src/query.c org.glite.lb.server/src/store.c.T org.glite.lb.server/src/stored_master.c Cherrypick from glite-lb-common_branch_3_0_0_2_pre_cares 2006-02-02 05:38:33 UTC Master Builder 'Incremented build number [GLBUILDER]': org.glite.lb.common/Makefile org.glite.lb.common/interface/context-int.h org.glite.lb.common/project/build.number org.glite.lb.common/project/version.properties org.glite.lb.common/src/context.c org.glite.lb.common/src/lb_plain_io.c org.glite.lb.common/src/log_msg.c org.glite.lb.common/src/ulm_parse.c Cherrypick from glite-jp-primary_branch_1_1_0_RC15 2005-10-21 12:54:03 UTC Aleš Křenek '- merged in 1.5 version of config/startup': org.glite.jp.primary/Makefile org.glite.jp.primary/config/glite-jp-primary-dbsetup.sh org.glite.jp.primary/config/startup org.glite.jp.primary/doc/README.install org.glite.jp.primary/examples/sample_job org.glite.jp.primary/project/build.number org.glite.jp.primary/project/version.properties Cherrypick from glite-jp_branch_1_1_0_RC15 2005-12-01 20:05:07 UTC Aleš Křenek '- push version': org.glite.jp/build.xml org.glite.jp/project/build.number org.glite.jp/project/dependencies.properties org.glite.jp/project/glite.jp.csf.xml org.glite.jp/project/version.properties Cherrypick from glite-lb_branch_1_2_0_3_pre_cares 2006-02-06 12:14:36 UTC Aleš Křenek 'tagging': org.glite.lb/build.xml org.glite.lb/project/build.number org.glite.lb/project/dependencies.properties org.glite.lb/project/glite.lb.csf.xml org.glite.lb/project/version.properties Cherrypick from glite-lb-proxy_branch_1_2_0_2_pre_cares 2006-02-06 12:09:19 UTC Aleš Křenek 'Don't include interlogd in RPM': org.glite.lb.proxy/Makefile org.glite.lb.proxy/project/build.number org.glite.lb.proxy/project/version.properties org.glite.lb.proxy/src/lbproxy.c Cherrypick from glite-wms-utils-exception_branch_1_0_3_RC15 2006-01-19 23:16:39 UTC Elisabetta Ronchieri 'Increased version': org.glite.wms-utils.exception/configure.ac org.glite.wms-utils.exception/project/build.number org.glite.wms-utils.exception/project/configure.properties.xml org.glite.wms-utils.exception/project/version.properties Cherrypick from glite-wms-utils-jobid_branch_1_0_2_RC15 2006-01-19 23:17:46 UTC Elisabetta Ronchieri 'Increased version': org.glite.wms-utils.jobid/configure.ac org.glite.wms-utils.jobid/project/build.number org.glite.wms-utils.jobid/project/configure.properties.xml org.glite.wms-utils.jobid/project/version.properties Cherrypick from glite-lb-server-bones_branch_2_1_0_2_pre_cares 2005-12-01 18:58:10 UTC Aleš Křenek 'push patch version': org.glite.lb.server-bones/examples/cnt_example.c org.glite.lb.server-bones/project/version.properties org.glite.lb.server-bones/src/srvbones.c Cherrypick from glite-security-gsoap-plugin_branch_1_2_1_pre_cares 2006-01-20 13:02:41 UTC Aleš Křenek 'pushed version': org.glite.security.gsoap-plugin/Makefile org.glite.security.gsoap-plugin/project/build.number org.glite.security.gsoap-plugin/project/version.properties Cherrypick from glite-jp-client_branch_1_0_0_pre_cares 2005-12-01 20:02:26 UTC Aleš Křenek 'fix for #13855': org.glite.jp.client/Makefile org.glite.jp.client/project/version.properties Cherrypick from glite-lb-client-interface_branch_3_0_0_RC15 2005-10-18 15:35:17 UTC Aleš Křenek 'pull back incorrectly increased version number': org.glite.lb.client-interface/project/build.number org.glite.lb.client-interface/project/version.properties Cherrypick from glite-lb-logger_branch_1_2_0_2_pre_cares 2005-12-01 19:01:46 UTC Aleš Křenek 'push patch version': org.glite.lb.logger/project/version.properties org.glite.lb.logger/src/send_event.c Cherrypick from glite-lb-ws-interface_branch_3_0_0_RC15 2005-10-18 15:35:44 UTC Aleš Křenek 'pull back incorrectly increased version number': org.glite.lb.ws-interface/project/build.number org.glite.lb.ws-interface/project/version.properties Cherrypick from glite-jp-common_branch_1_1_0_RC15 2005-10-16 18:26:39 UTC Master Builder 'Incremented build number [GLBUILDER]': org.glite.jp.common/project/build.number Cherrypick from glite-jp-index_branch_1_1_0_RC15 2005-10-20 09:40:06 UTC Aleš Křenek 'added from HEAD': org.glite.jp.index/doc/README Cherrypick from glite-jp-server-common_branch_1_0_0_RC15 2005-10-16 18:28:26 UTC Master Builder 'Incremented build number [GLBUILDER]': org.glite.jp.server-common/project/build.number Cherrypick from glite-jp-ws-interface_branch_1_1_0_RC15 2005-10-16 18:24:30 UTC Master Builder 'Incremented build number [GLBUILDER]': org.glite.jp.ws-interface/project/build.number Cherrypick from glite-lb-logger_branch_1_2_0_RC15 2005-10-16 18:35:58 UTC Master Builder 'Incremented build number [GLBUILDER]': org.glite.lb.logger/project/build.number Cherrypick from glite-lb-server-bones_branch_2_1_0_RC15 2005-10-16 18:30:21 UTC Master Builder 'Incremented build number [GLBUILDER]': org.glite.lb.server-bones/project/build.number Cherrypick from glite-lb-utils_branch_1_0_0_RC15 2005-10-16 18:40:43 UTC Master Builder 'Incremented build number [GLBUILDER]': org.glite.lb.utils/project/build.number Cherrypick from glite-security-gsoap-plugin_branch_1_2_0 2005-10-18 07:16:35 UTC Aleš Křenek 'use gsoap 2.7.6b too': org.glite.security.gsoap-plugin/build.xml Delete: org.glite.deployment.lb/config/scripts/remove_all_rpms.sh org.glite.jp.client/doc/README.jpimporter --- org.glite.deployment.lb/CHANGELOG | 7 + .../config/scripts/glite-lb-config.py | 318 +- .../config/scripts/remove_all_rpms.sh | 49 - .../config/templates/glite-lb.cfg.xml | 118 +- .../doc/release_notes/release_notes.doc | Bin 267264 -> 192512 bytes .../doc/release_notes/release_notes.html | 3358 ++++++++++---------- .../doc/release_notes/release_notes.pdf | Bin 217944 -> 157326 bytes org.glite.deployment.lb/project/build.number | 4 +- .../project/glite-lb.sdf.xml.template | 58 +- org.glite.deployment.lb/project/lxscript-rpm.xsl | 12 +- org.glite.deployment.lb/project/properties.xml | 5 +- .../project/quattor-template.xsl | 11 + org.glite.deployment.lb/project/version.properties | 2 +- org.glite.jp.client/Makefile | 3 +- org.glite.jp.client/doc/README.jpimporter | 114 - org.glite.jp.client/project/version.properties | 2 +- org.glite.jp.common/project/build.number | 4 +- org.glite.jp.primary/Makefile | 7 +- .../config/glite-jp-primary-dbsetup.sh | 14 + org.glite.jp.primary/config/startup | 52 +- org.glite.jp.primary/doc/README.install | 59 + org.glite.jp.primary/examples/sample_job | 8 + org.glite.jp.primary/project/build.number | 4 +- org.glite.jp.primary/project/version.properties | 2 +- org.glite.jp.server-common/project/build.number | 4 +- org.glite.jp.ws-interface/project/build.number | 4 +- org.glite.jp/build.xml | 7 +- org.glite.jp/project/build.number | 4 +- org.glite.jp/project/dependencies.properties | 18 +- org.glite.jp/project/glite.jp.csf.xml | 24 +- org.glite.jp/project/version.properties | 2 +- org.glite.lb.client-interface/project/build.number | 4 +- .../project/version.properties | 2 +- org.glite.lb.client/Makefile | 18 +- org.glite.lb.client/examples/job_reg.c | 28 +- org.glite.lb.client/examples/resubmission.l | 1 + .../examples/shallow_and_full_resub.l | 9 +- .../examples/shallow_resub_complex.l | 10 +- .../examples/shallow_resub_simple.l | 6 +- .../examples/shallow_resub_simple2.l | 6 +- org.glite.lb.client/project/build.number | 4 +- org.glite.lb.client/project/version.properties | 2 +- org.glite.lb.client/src/connection.c | 6 +- org.glite.lb.client/src/logevent.c.T | 5 +- org.glite.lb.client/src/producer.c | 15 +- org.glite.lb.common/Makefile | 20 +- org.glite.lb.common/interface/context-int.h | 1 + org.glite.lb.common/project/build.number | 4 +- org.glite.lb.common/project/version.properties | 2 +- org.glite.lb.common/src/context.c | 27 +- org.glite.lb.common/src/lb_plain_io.c | 8 + org.glite.lb.common/src/log_msg.c | 5 + org.glite.lb.common/src/ulm_parse.c | 3 +- org.glite.lb.logger/project/build.number | 4 +- org.glite.lb.logger/project/version.properties | 2 +- org.glite.lb.logger/src/send_event.c | 2 +- org.glite.lb.proxy/Makefile | 12 +- org.glite.lb.proxy/project/build.number | 4 +- org.glite.lb.proxy/project/version.properties | 2 +- org.glite.lb.proxy/src/lbproxy.c | 10 +- org.glite.lb.server-bones/examples/cnt_example.c | 32 +- org.glite.lb.server-bones/project/build.number | 4 +- .../project/version.properties | 2 +- org.glite.lb.server-bones/src/srvbones.c | 50 +- org.glite.lb.server/project/build.number | 4 +- org.glite.lb.server/project/version.properties | 2 +- org.glite.lb.server/src/bkserverd.c | 1 + org.glite.lb.server/src/db_store.c | 10 +- org.glite.lb.server/src/jobstat.h | 2 + org.glite.lb.server/src/jobstat_supp.c | 35 + org.glite.lb.server/src/process_event.c | 161 +- org.glite.lb.server/src/query.c | 3 +- org.glite.lb.server/src/store.c.T | 18 +- org.glite.lb.server/src/stored_master.c | 4 +- org.glite.lb.utils/project/build.number | 3 +- org.glite.lb.ws-interface/project/build.number | 4 +- .../project/version.properties | 2 +- org.glite.lb/build.xml | 61 +- org.glite.lb/project/build.number | 4 +- org.glite.lb/project/dependencies.properties | 25 +- org.glite.lb/project/glite.lb.csf.xml | 25 +- org.glite.lb/project/version.properties | 2 +- org.glite.security.gsoap-plugin/Makefile | 25 +- org.glite.security.gsoap-plugin/build.xml | 5 + .../project/build.number | 3 +- .../project/version.properties | 2 +- org.glite.security.proxyrenewal/build.xml | 3 +- .../project/build.number | 3 +- .../project/configure.properties.xml | 11 +- .../project/version.properties | 6 +- org.glite.security.proxyrenewal/src/voms.c | 1 + org.glite.wms-utils.exception/configure.ac | 5 +- org.glite.wms-utils.exception/project/build.number | 4 +- .../project/configure.properties.xml | 2 +- .../project/version.properties | 2 +- org.glite.wms-utils.jobid/configure.ac | 5 +- org.glite.wms-utils.jobid/project/build.number | 4 +- .../project/configure.properties.xml | 2 +- .../project/version.properties | 2 +- org.gridsite.core/project/configure.properties.xml | 2 +- org.gridsite.core/src/Makefile | 2 +- org.gridsite.core/src/htcp | Bin 0 -> 49931 bytes 102 files changed, 2699 insertions(+), 2340 deletions(-) delete mode 100755 org.glite.deployment.lb/config/scripts/remove_all_rpms.sh delete mode 100644 org.glite.jp.client/doc/README.jpimporter create mode 100644 org.glite.jp.primary/config/glite-jp-primary-dbsetup.sh create mode 100644 org.glite.jp.primary/doc/README.install create mode 100644 org.glite.jp.primary/examples/sample_job create mode 100644 org.gridsite.core/src/htcp diff --git a/org.glite.deployment.lb/CHANGELOG b/org.glite.deployment.lb/CHANGELOG index 9f1b376..e899df1 100644 --- a/org.glite.deployment.lb/CHANGELOG +++ b/org.glite.deployment.lb/CHANGELOG @@ -1,3 +1,10 @@ +DATE: 04-12-2005 21:15 +[dimeglio] Added configuration parameter for setting mysql max_allowed_packet + +DATE: 23-11-2005 23:50 +[dimeglio] Use ConfigParams class +[dimeglio] Removed servietool instabce config params, put instance creation in script + DATE: 08-07-2005 15:20 [dimeglio] Merged from branch 1.2.2 diff --git a/org.glite.deployment.lb/config/scripts/glite-lb-config.py b/org.glite.deployment.lb/config/scripts/glite-lb-config.py index f63be09..167539a 100644 --- a/org.glite.deployment.lb/config/scripts/glite-lb-config.py +++ b/org.glite.deployment.lb/config/scripts/glite-lb-config.py @@ -6,7 +6,7 @@ # For license conditions see the license file or http://eu-egee.org/license.html # ################################################################################ -# glite-lb-config v. 1.3.0 +# glite-lb-config v. 2.1.1 # # Post-installation script for configuring the gLite Logging and Bookkeping Server # Robert Harakaly < robert.harakaly@cern.ch > @@ -16,9 +16,13 @@ # Version info: $Id$ # # Usage: python glite-lb-config [-c|-v|-h|--help] -# -c print configuration -# -v print version +# -c, --checkconf print configuration +# -v, --version print version # -h,--help print usage info +# --configure configure the service +# --start start the service +# --stop stop the service +# --status show service status # # Return codes: 0 - Ok # 1 - Configuration failed @@ -30,6 +34,8 @@ import sys, posix, getopt,time sys.path.append(".") from gLiteInstallerLib import gLib +from gLiteInstallerLib import ConfigParams +from gliteRgmaServicetool import gliteRgmaServicetoolInstance from gliteRgmaServicetool import gliteRgmaServicetool import mysql as MySQL @@ -42,10 +48,9 @@ class glite_lb: def __init__(self): self.mysql = MySQL.Mysql() self.verbose = 0 - self.version = "1.3.0" + self.version = "2.1.1" self.name = "glite-lb" self.friendly_name = "gLite Logging and Bookkeeping" - params['module.version'] = self.version #------------------------------------------------------------------------------- # Banner @@ -98,6 +103,7 @@ python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \ print ' -c, --checkconf print the service configuration' print ' -v, --version print the version of the configuration script' print ' -h, --help print this usage information' + print ' --configure configure the service' print ' --start start the service' print ' --stop stop the service' print ' --status check service status' @@ -138,34 +144,19 @@ python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \ #------------------------------------------------------------------- # Start Servicetool #------------------------------------------------------------------- - - pid = glib.getPID('rgma-servicetool') - if (pid != 0): - print 'The gLite R-GMA Servicetool service is already running. Restarting...' - rgmaServicetool.stop() - else: - print "Starting the gLite R-GMA Servicetool service" - - rgmaServicetool.start() - - - # Check that the daemon is running - - pid = glib.getPID('rgma-servicetool') - if (pid != 0): - print "The gLite R-GMA Servicetool service has been started ", - glib.printOkMessage() - else: - glib.printErrorMessage("Could not start the gLite R-GMA Servicetool service") - glib.printErrorMessage("Please verify and re-run the script "), - glib.printFailedMessage() - return 1 + if params['rgma.servicetool.activate'] == "true": + + errorcode = rgmaServicetool.start() + if (errorcode != 0): + return 1 return 0 def stop(self): + error_level = 0 + pid = glib.getPID('bkserverd') if (pid != 0): os.system('%s/etc/init.d/glite-lb-bkserverd stop' % os.environ['GLITE_LOCATION']) @@ -174,29 +165,27 @@ python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \ if (pid != 0): print 'Could not stop the LB Server service ', glib.printFailedMessage() + error_level = 1 else: print 'The LB Server service has been stopped ', glib.printOkMessage() + #------------------------------------------------------------------- + # MySQL + #------------------------------------------------------------------- + self.mysql.stop() #------------------------------------------------------------------- - # Stop the servicetool + # Servicetool #------------------------------------------------------------------- - pid = glib.getPID('rgma-servicetool') - if (pid != 0): - rgmaServicetool.stop() - - pid = glib.getPID('rgma-servicetool') - if (pid != 0): - print 'Could not stop the R-GMA Servicetool service ', - glib.printFailedMessage() - else: - print 'The R-GMA Servicetool service has been stopped ', - glib.printOkMessage() - - return 0 + if params['rgma.servicetool.activate'] == "true": + + if rgmaServicetool.stop(): + error_level = 1 + + return error_level def status(self): @@ -206,6 +195,15 @@ python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \ if retval != 0: error_level = 1 + #------------------------------------------------------------------- + # Servicetool + #------------------------------------------------------------------- + + if params['rgma.servicetool.activate'] == "true": + + if rgmaServicetool.status() != 0: + error_level = 1 + return error_level def configure(self): @@ -215,12 +213,11 @@ python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \ #-------------------------------------------------------- if os.system("python %s/glite-security-utils-config.py --subservice" % glib.getScriptPath()): - print "\nInstalling gLite Security Utilities ", + print "\nConfiguring gLite Security Utilities ", glib.printFailedMessage() - return 1 - - print "\nInstalling gLite Security Utilities ", - glib.printOkMessage() + else: + print "\nConfiguring gLite Security Utilities ", + glib.printOkMessage() # Create the GLITE_USER if it doesn't exists print "\nCreating/Verifying the GLITE_USER account %s" % os.environ['GLITE_USER'] @@ -231,8 +228,8 @@ python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \ glib.printOkMessage() # Create all directories needed - print "\nVerify CA certificates directory ", glib.check_dir(os.environ['GLITE_CERT_DIR']) + print "\nVerify CA certificates directory ", glib.printOkMessage() # Copy certificates @@ -244,17 +241,38 @@ python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \ os.chmod("%s/hostkey.pem" % lb_cert_path, 0400) glib.printOkMessage() - # Create the MySQL database - print "\nCreate/Verify the %s database" % params['lb.database.name'] + #-------------------------------------------------------- + # Configure MySQL + #-------------------------------------------------------- + + # Set mysql parameters + #self.mysql.setConfiguration('client','max_allowed_packet',params['mysql.max_allowed_packet']) + self.mysql.setConfiguration('mysqld','max_allowed_packet',params['mysql.max_allowed_packet']) + + # start MySQL self.mysql.stop() time.sleep(5) - self.mysql.start() - + self.mysql.start() + if not os.path.exists('/tmp/mysql.sock'): os.symlink('/var/lib/mysql/mysql.sock', '/tmp/mysql.sock') + # ------------------------------------------------------------ + # Check password of MySQL + # ------------------------------------------------------------ + + self.mysql_root_password = params['mysql.root.password'] + if not params.has_key('set.mysql.root.password'): + params['set.mysql.root.password'] = 'false' + setempty = params['set.mysql.root.password'] + if self.mysql.checkMySQLConfiguration(self.mysql_root_password,setempty): + return 1 + + # Create the MySQL database + print "\nCreate/Verify the %s database" % params['lb.database.name'] + # Check if database exists - if self.mysql.existsDB(params['lb.database.name']) != 0: + if self.mysql.existsDB(params['lb.database.name'],self.mysql_root_password) != 0: # Create database print ('\n==> Creating MySQL %s database\n' % params['lb.database.name']) @@ -262,15 +280,14 @@ python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \ os.remove('/tmp/mysql_ct') file = open('/tmp/mysql_ct', 'w') - text = ['CREATE DATABASE %s;\n' % params['lb.database.name'], - 'GRANT ALL PRIVILEGES ON %s.* TO %s@localhost IDENTIFIED BY "";\n' \ - % (params['lb.database.name'],params['lb.database.username']), - 'USE %s;\n' % params['lb.database.name'], - '\. %s/etc/glite-lb-dbsetup.sql\n' % os.environ['GLITE_LOCATION']] + + self.mysql.add_user(params['lb.database.name'],params['lb.database.username'],"",self.mysql_root_password) + text = ['USE %s;\n' % params['lb.database.name'], + '\. %s/etc/glite-lb-dbsetup.sql\n' % os.environ['GLITE_LOCATION']] file.writelines(text) file.close() - os.system('/usr/bin/mysql < /tmp/mysql_ct') + os.system('/usr/bin/mysql -p%s < /tmp/mysql_ct' % self.mysql_root_password) os.system('/bin/rm /tmp/mysql_ct') #Starting and stopping the database before the index creation @@ -312,17 +329,32 @@ python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \ #------------------------------------------------------------------- # RGMA servicetool: configure servicetool #------------------------------------------------------------------- - - print "Configuring the R-GMA Servicetool..." - - if rgmaServicetool.configure(glib): - # error in configuring services - print "Configuring the R-GMA Servicetool... ", - glib.printFailedMessage() - return 1 - - print "Configuring the R-GMA Servicetool... ", - glib.printOkMessage() + + if params['rgma.servicetool.activate'] == "true": + + # Instantiate the rgma-servicetool class + rgmaServicetool = gliteRgmaServicetool() + rgmaServicetool.verbose = self.verbose + + # Create Local Logger instance + serviceId = "%s_%s" % (glib.fq_hostname, params['lbserver.serviceType']) + servicetoolInstance = gliteRgmaServicetoolInstance(glib, serviceId) + + # set params + servicetoolInstance.setServiceName(params['lbserver.serviceName']) + servicetoolInstance.setServiceType(params['lbserver.serviceType']) + servicetoolInstance.setServiceVersion(self.version) + servicetoolInstance.setStatusScript(params['lbserver.statusScript']) + servicetoolInstance.setEndpoint(params['lbserver.endpoint']) + + # add instance to the gLite configuration + if servicetoolInstance.add() == 1: + return 1 + + # Configure servicetool + if rgmaServicetool.configure(glib): + # error in configuring servicetool + return 1 return 0 @@ -330,6 +362,19 @@ python %s-config [OPTION...]""" % (self.name, os.environ['GLITE_LOCATION'], \ # Set all environment variables #------------------------------------------------------------------------------- +def loadDefaults(params): + + params['GLITE_LOCATION'] = "/opt/glite" + params['mysql.root.password'] = "" + params['lb.database.name'] = "lbserver20" + params['lb.database.username'] = "lbserver" + params['mysql.max_allowed_packet'] = "17" + + params['lbserver.serviceName'] = 'LB Server service at %s' % glib.fq_hostname + params['lbserver.serviceType'] = 'org.glite.lb.server' + params['lbserver.statusScript'] = '%s/etc/init.d/glite-lb-bkserverd status' % params['GLITE_LOCATION'] + params['lbserver.endpoint'] = 'not available' + def set_env(): # gLite @@ -380,20 +425,24 @@ if __name__ == '__main__': print '"\nThis script must be run as root\n' sys.exit(1) + # Get an instance of the ConfigParams class + params = ConfigParams() + # Get an instance of the library class glib = gLib() # Load parameters - params = {} + loadDefaults(params) try: - opts, args = getopt.getopt(sys.argv[1:], '', ['siteconfig=']) + opts, args = glib.getopt(sys.argv[1:], '', ['siteconfig=']) for o, a in opts: if o == "--siteconfig": params['site.config.url'] = a break except getopt.GetoptError: pass - if glib.loadConfiguration("%s/../glite-lb.cfg.xml" % glib.getScriptPath(),params): + if glib.loadConfiguration(["%s/../glite-lb.cfg.xml" % glib.getScriptPath(), \ + "%s/../glite-rgma-servicetool.cfg.xml" % glib.getScriptPath()],params): print "An error occurred while configuring the service" sys.exit(1) @@ -415,66 +464,111 @@ if __name__ == '__main__': # Command line opts if any try: - opts, args = getopt.getopt(sys.argv[1:], 'chv', ['checkconf', 'help', 'version','stop','start','status','siteconfig=']) + opts, args = glib.getopt(sys.argv[1:], 'chv', ['checkconf', 'help', 'version','configure','stop','start','status','siteconfig=']) except getopt.GetoptError: service.usage(msg = "Unknown options(s)") sys.exit(1) + if len(opts) == 0: + service.usage() + sys.exit(0) + # Check cli options for o, a in opts: + if o in ("-h", "--help"): service.usage() sys.exit(0) + if o in ("-v", "--version"): service.showVersion() sys.exit(0) + if o in ("-c", "--checkconf"): service.copyright() service.showVersion() glib.print_params(params) + print + rgmaServicetool.showServices() sys.exit(0) - if o in ("stop", "--stop"): + + if o == "--configure": + + # Check certificates + if params.has_key('glite.installer.checkcerts'): + if params['glite.installer.checkcerts'] == "true": + if glib.check_certs(params) != 0: + print "An error occurred while configuring the %s service" \ + % service.friendly_name + sys.exit(1) + + # Print configuration parameters + if verbose: + glib.print_params(params) + + service.copyright() + service.showVersion() + service.banner() + + # Stop all services + glib.printInfoMessage("\n\nStopping all running LB services...") service.stop() - sys.exit(0) - if o in ("start", "--start"): - service.start() - sys.exit(0) - if o == "--status": - sys.exit(service.status()) + + # Configure the service + return_result = service.configure() + + if return_result == 0: + + # Stop all services + glib.printInfoMessage("\n\nStopping all running LB services...") + service.stop() + + print "\n\nThe %s configuration was successfully completed\n" % service.friendly_name + print "You can now start the service using the --start option of this script\n\n" + glib.registerService() + + sys.exit(0) + + elif return_result == 2: + + # Stop all services + glib.printInfoMessage("\n\nStopping all running LB services...") + service.stop() + print "\n\nThe %s configuration was completed,\n" % service.friendly_name + print "but warnings were issued. Please revise them and re-run the script\n" + print "or configure LB manually\n" + + sys.exit(2) - # Check certificates - if params.has_key('glite.installer.checkcerts'): - if params['glite.installer.checkcerts'] == "true": - if glib.check_certs(params) != 0: - print "An error occurred while configuring the %s service" \ + else: + print "\n\nAn unrecoverable error occurred while configuring the %s" \ % service.friendly_name - sys.exit(1) - - # Print configuration parameters - if verbose: - glib.print_params(params) - service.copyright() - service.showVersion() - service.banner() - - # Configure the service - if service.configure() == 0: - print "\n%s configuration successfully completed " % service.friendly_name, - glib.printOkMessage() - glib.registerService() - else: - print "\nAn error occurred while configuring the %s " % service.friendly_name, - glib.printFailedMessage() - sys.exit(1) + sys.exit(1) + + if o in ("start", "--start"): + # Start the service + if service.start() == 0: + print "\n\nThe %s was successfully started " % service.friendly_name, + glib.printOkMessage() + sys.exit(0) + else: + print "\n\nAn error occurred while starting the %s " % service.friendly_name, + glib.printFailedMessage() + sys.exit(1) + + if o in ("stop", "--stop"): + # Stop the service + if service.stop() == 0: + print "\n\nThe %s was successfully stopped " % service.friendly_name, + glib.printOkMessage() + sys.exit(0) + else: + print "\n\nAn unrecoverable error occurred while stopping the %s " % service.friendly_name, + glib.printFailedMessage() + sys.exit(1) - # Start the service - if service.start() == 0: - print "\nThe %s was successfully started " % service.friendly_name, - glib.printOkMessage() - else: - print "\nAn error occurred while starting the %s " % service.friendly_name, - glib.printFailedMessage() - sys.exit(1) - + if o == "--status": + sys.exit(service.status()) + diff --git a/org.glite.deployment.lb/config/scripts/remove_all_rpms.sh b/org.glite.deployment.lb/config/scripts/remove_all_rpms.sh deleted file mode 100755 index 2835ee1..0000000 --- a/org.glite.deployment.lb/config/scripts/remove_all_rpms.sh +++ /dev/null @@ -1,49 +0,0 @@ - -#!/bin/sh - -rpm -e edg-fetch-crl-1.0.0-EGEE \ -ca_ArmeSFo-0.23-1 \ -ca_ASGCCA-0.23-1 \ -ca_BEGrid-0.23-1 \ -ca_CERN-0.23-1 \ -ca_CESNET-0.23-1 \ -ca_CNRS-0.23-1 \ -ca_CNRS-DataGrid-0.23-1 \ -ca_CNRS-Projets-0.23-1 \ -ca_CyGrid-0.23-1 \ -ca_DOEGrids-0.23-1 \ -ca_DOESG-Root-0.23-1 \ -ca_ESnet-0.23-1 \ -ca_FNAL-0.23-1 \ -ca_FNAL_KCA-0.23-1 \ -ca_GermanGrid-0.23-1 \ -ca_Grid-Ireland-0.23-1 \ -ca_GridCanada-0.23-1 \ -ca_HellasGrid-0.23-1 \ -ca_INFN-0.23-1 \ -ca_IUCC-0.23-1 \ -ca_LIP-0.23-1 \ -ca_NIKHEF-0.23-1 \ -ca_NorduGrid-0.23-1 \ -ca_PK-Grid-0.23-1 \ -ca_PolishGrid-0.23-1 \ -ca_Russia-0.23-1 \ -ca_SlovakGrid-0.23-1 \ -ca_Spain-0.23-1 \ -ca_UKeScience-0.23-1 \ -glite-wms-utils-exception-0.1.0-0 \ -glite-wms-utils-jobid-0.1.0-0 \ -glite-lb-client-interface-0.2.0-0 \ -glite-lb-server-bones-0.0.0-0 \ -glite-lb-common-0.2.0-0 \ -glite-lb-logger-0.2.0-0 \ -glite-lb-server-0.3.0-0 \ -glite-security-proxyrenewal-0.1.0-1 \ -ares-1.1.1-EGEE \ -gpt-VDT1.2.0rh9-1 \ -vdt_globus_essentials-VDT1.2.0rh9-1 \ -perl-Expect.pm-1.01-9 \ -myproxy-1.14-EGEE \ -MySQL-client-4.0.20-0 \ -MySQL-server-4.0.20-0 - diff --git a/org.glite.deployment.lb/config/templates/glite-lb.cfg.xml b/org.glite.deployment.lb/config/templates/glite-lb.cfg.xml index ed39d97..25891ed 100644 --- a/org.glite.deployment.lb/config/templates/glite-lb.cfg.xml +++ b/org.glite.deployment.lb/config/templates/glite-lb.cfg.xml @@ -1,4 +1,4 @@ - + @@ -17,6 +17,10 @@ parameter. Leave it empty of comment it out to use the same as 'glite.user.name'" value="changeme"/> + + @@ -30,12 +34,30 @@ description="Enable check of host certificates" value="true"/> - - + + + + + + + + + + @@ -45,90 +67,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/org.glite.deployment.lb/doc/release_notes/release_notes.doc b/org.glite.deployment.lb/doc/release_notes/release_notes.doc index ae9fd1814da46c1ba144a0202e5185f6fe1069cf..2ad2d4d1bf359419707777ee266496f87aa65f73 100644 GIT binary patch literal 192512 zcmeF42S8KT_s4HSAb=psaF0}R3$k3e5Cu_jfuk-kK!7OA1XQfMR;_hZ+uGI+t=c;3 zsC(2=M_v83?rrO;t1hh8E&RXdy}aZ-NDwLdSDWaEymjX}_uO;uyYFTHzLICZSzhiO z%k^o_Y*==V1G5tyx52hvW;jrSu?%d}Zgx&i4joOy&Oo38IAs021~qW~+pTP5KL-V4 z4_vqKqJ?Dff#7>~Vyrle=^xYo()df``IF+m4vJE&wyTVdy}>xjhw^8uky400uGl6$ z%E@st9<{VBTriK@*k6_3r*H8#9Sy3%pA&z(^M|;Fe;D7M_^t9zJ=?AZ;Ds^ z$z8ufd4+3ee>WsM7U4?aVAN{SXxA)bEK8JmqD!amiH_#?z4K30%z zp*)u2qj*oEK1ct-m=8?Yf@+Mdqllp&K?O;`!Zk-OFjfKQgz}7qzBpk&=niUw zwgEx!#{R(A+c>}c9Akl^IDfy!Sdt@SGf^KtI8ORUpKG}8FT~RI3BP|D;p0)Sw4aVc zw~>BPd?=ncL%ibn1pVrEg|P{!H=&+|Z$VzdzVI!M!`!yhe8z?%y>Z_&_AxFf2Ym_0 zx1f*0x4E$5W5JLs)&H|TLcVf;3-z4)c}o} zSEVOvRL_o3m7E%vk)%-#@>cnI`{JLfE5gO6CMBf~reyV+SV}{$O4Fqd(#C02>bN*9 z9Z@H#v?=kax@0x&snjv48R=Y_;*4lg((7^u4XMOw(ljY?nv__rM$exZkdiuB6_b&m zSE*CtR9d}0L&I;XRY_WXx+*oEKO38rs@KG+^xBkI4HsjYPBTcGnqe%sw<yo-q;OTMPSU1lLWUY0Di@@rs!XR;vF0Q47RS^oH6>n~kfGx;Lotcu zm!cW0N>l69$(nSHPOnN-57MY&G#UsjE)Ml6lnHszcqPSn$Hpgk4@pi^#cPu^fzHmI zg^;Qg#Gq`giC1SNrK<+1lQL+}sDetRE+JX%jVc(Vjn$;5rY3o-QMf_sbd54yhikiL z=u%XvDfLq09st8mIAg?j15jos2pUR8b&RUsdm}nQ7Ro5rY^t>XaIN zl}f!P-8(r`KQPH#mztXHou=072dC=dl=12$y++wKp096Xk)cvtWSq8a;4b@+lQs+yJgecR=>J)VXUpjqivPPAPyy;Yf)tO?!aMj$`AQyvJ zAQiqklGQ_^(biH2YvQ8Q)Ug9J=}O;*%3O88T>zn^@-<9#pC_28%D5IJ$VXZrQc_ht zO?qs-4=2%Rh^QV zoQfn2l_rgds*A58qeAKhjiSI715sM3s4gAZe@*E>+7ax&$m4vBy6Uns&%-Y>VyyE#b?EfPYz%F72dkE58JOgo39hu7Wh3Hd(F9E%2e9t4&2cMUs50Ye27fAJG)JXoxitA;t-b;(lLl>`(g%3z;*F8z^rY3pbxNF4as3l{E;r)-68C({m)2W}Q+;_oRlcbjD}^S`yr}*R6K95g z!q8{snN7eb-89LgtPjKR5(ZTk^614SkLLH{2U!Krfw5vSbIr{NcqQml)oEU7Ng0?` zS0+SuYS|g{y0pX1sU+xyo(^*c@H=0EVKs$9kRy~K(!pDHS)wdnrhb5D{QCY|XXjdZ?QeAlvIlcSiBGlI?ii^`#VKwEm^vhkhYIIVYldJt z1@~$7;u%wJs+7+U1ctcrSDzH?Unr$6TnePTY3aBvq*1lOEd^C)Zl0HJ%XY=|`~ciS ztJ$V=*ILT%t-Dg+;ipS%T+|hS^u0vU7gBXC7vFOHRCp9xkJ}?kDt#nv&}^4){UR@< zAsv*CqA&VFT8tls?C+=3DBGzAsa5SFLQuef!uqL}E18n;@{JCN_KWsujLDf;6fq=I*-EFunuc^O<_B~d++@+Fr(#}CxV24E_9hVr6t#d2>63f| zyh7T9gcNZjwj4hS-yt)yOSoZzlHXBzsakRKmC688xI&J0ElWe3q8Fb;A>Eb2reQ2L zKi=hw{X$D?7+Am1(ppLbrA0rKr3B3WtN5>^e7j?*=&n%?!aarIi(YuOF| zBU^=a>)NXpbl#`Pl|Y&!sJ@S{SK}hq`~1^DwG4_&k4{KRjmgkQYxH`)>Fbrr#`s+7W^qQX)^$Th%fpQ>BiLP0gT{d|c60 zX!HEiAo#SY89FS1iNz`pqK?5TF|1%pz!E3AzX56BhH8AO z%FB-$A68pJp?!UPd{h`#7FmgWeHu36rNeC%O__v9J7ArxU?$SF$r{WEC#UIYfnSZt z*hDmaEGDbL&2H9+;PtNtEQLBfqv(p~Ti?GvCox~zDx%^UB5ju%LpLImsg$tX@YZ0O zG_=GGOACui<$V1Ed>ip4psgY*fgw^DU1(i0H5^)3MK@Hjl$w)(swTt)%Sq)+C!2Sv zY44=v7Rc#UXfc{t_;s|nB1sD=p=G70jEhE#u$&DW8${KpVdEkzCl_fXE#Ref#VW&^ zQD|hEI)P-z_4i3JI4}guO|gp9&|7(Xdly~N8v6-F!&XrhjgOS(jre7UqOLX$YiRYV z!RWRURKfyavg?D?I#nE&kjB!Gya9BD!atst8NdNHBzr8x@%$L{unEC>$@?IH(z{ADm62;JD=!{Bi>- z5_eoh(?qDwqH&LW1N;Jbr-IumA|*6L3U3<@5xL>CqB|b$ahz&khDMi3h90JZbkA^s z9{#&No;v|kkNHko>}+tHxtqCoqNV7{?C)=AcmdcdsxtGD_TXBVv_I3R1}DO0=QS3K z(P_0d6^6WbJ*L2iK=|Cca=5~%lH3pN;31$GJT@deGJ&T#434DjJq zq@ll05&4}I6W@&a-bH0tzaN*1B~{TVX|yUHjl%TwMV^N~uol0l^Z}XSy)@b=8f`E{ ziD!j`$5y=YI127Fpu^#xE1*@JyyrtVgSq=4MOYpmuFFI&e2T0*6lF#liUaG)Kam3? zEM9xB!W;qJ5`sk*t}raaKuHbqEwUo|)c5C$h>apDA|EBplGNcLJ;Wnw;s>C3WgJXT z;?V;oMO7$tZhpo-#;@r57%tLOU4l3N3;~qVF!JVa*>R3rd`41|s(Ysnkx)v9DpKgf@z*L|l~AKm;4W4}j1vxOoQ}JCG;JxuE2IQ}2bM^477a zO4g`>Kd*DNQ8XnpL>bb$O>~d&=-M=X)6xVU_arq6U|5r0R3&KG*w^4sV54YCV2HAH z20fTbE`=I*gwrwl=B81(dzg6WGAXGjr{a7JKEH2$pQ7^lDJr-j#_<~OIe4dKa!-N| z#-o;yNm!@It{q!;2#Gdz!B`sPjpwlkB&Dk3_y>x0!eim4XDRt{dJlBTm{g`YzM_(+ zuTO(U4LI+K+bSA~3X$@%6CS(aohJ-k=@t`tzx0SD_v!^|cyVex5iA-BNnT%&q{eL! z!woR$-7p$3t)eM_ z5NQZEt0&Bbd2xEhm4tHdY~$>#a5nsPc6N4Cwe8p{yj$y#&TU(D?G_R8%!jG*=q)`; z&FO5k9uM++_fJcxqUuvy)gdIJO-N{`hz>2gw(S_wRpl=8P(~PDCex9gOINl|jrCTw z<(4?%^%uH8q#oKfJcKO2Dpw3DcY|G{nGU=OB`!6VvaiIN2)xI`&!?V`Z#_K7-2f$W zc5WNl)eAfRUiEz%HS+hTX}``b+n9;d-$PYT<)-S`tplBp%$q1~;ZlSaKhOUvp8uZ^ zc6c|RJ!4fsRnP!51U*1H7y(9s(O?XC7rY041Y5y5a1-1DcR)=C#sWYypa)aIhhQ4m z1NMS*;4!F;x1QAje_uXvVCUvFo0opK^t;VpZ~l4)*!=aBHRDE188jfacO>3ISSoQ| z89$aB=Ah66+CMjZtYn`*?}YPC3g+&Sc&qMKCWJB^MX0In16WF!gMB)nSb`(8(*2m9 zB>UC9R!a8$WZfkD*SepQ>{G79@qaLInPmU_8q)Lo8=f?sN3JQpQrzEUl!Ge^a!FSi z_se-CCdKzQToq_Px{3X0<2my{ALK0b&g?JVJo9qxs1CHS|kGQ2b{A&%6YDdfTyUIphema&o`3iJcQHMB))#S}7Z z)paO~tp>s|Cz5~pj(AHQ-t`#)-Ud(cdF|@Xn&IcH0fmCeWD2ssLR%k+?a_eR`;Xu- zI08<9lb}j5*b3kYT7qEkK9~sp1Q$VbyaKZY_!O)I>%j(a2pk0}XU5(FL%>il8+-%i zfOW-jJ-7regIdsdFHjHogU;Zeo0tB$ba2cytHdoo_`BheRJun8B@lM7?eWx zJzsl^^Er+!O!gQ1yXs7p>{Bx{+H)t5#N@KO4ZRAp<9ioM<#b{LQ(putPN7OAu2WVq z9mQ3WedASpzh&sxaFnjfb!};n#BaOX8Pcs!=AOSCahmT14Y47=d`{>u^@*lfgedBe zJttX{oJqzEG9(!rURufPRFqh?Bs=ZJXCyn~6VJabwS-hBMoS1=2tD9leJQ<4VlPEk zO=fIB9AyEvwX|Sf8i}`IMs~wV|UY5dH{QN zW888dbHuA!&&u46`rt$krBu*w_j|b5qk*jSJ-mCh4E-rb?T70Ms5{6hFWs#m-K{9y z4LEAYWVVQe+i*;* z$lrlv8xImdCG@N0b4>v6gU`S`uox@{_r>z~+v3g*@tG?YcMgir6mUlzbA>KtIwOvhA=aiDBShgOXW@~Pf#Sm&bB!>jqj_=y zpFj7UQ|>Vfg*L{9>vPXRiRYZk3v%58Ig)Hit_L8meqw2~E5wdC$n$QS(|4*zLEp&< zMn1`#o<+|6;pa8(eVF3o96#kq7q#2ds!UM|jV9Mek#6Rg2UIE7M{yNxO8WU1F28)H zo7mq+8BP8^ZI?fq=TL>bhbrbhWYPa8Ssw)F!398V_AuIMKXI8}b@@+*te&fLx5{4_ z|B+4BfOv2a90E7MP4EaLU_`40{lNfm9Gn0T!6RUYpSsBe?|@-oILHFGK?$_ulAt1( z3Z{YS;3HsL3SmJQXbZZ5U%;>6>WSSa)}L6ie#xi8#%N(+WK*@^v9+(SVZ z&;z^;(m@6o3f=+3zyxp?+ynQ)0}xjRekAx3d<7N)58P@l4a$JBfb;9%*5Th*)5c6o z`l|O=oSPSN0=*XF{gy9af1d5P7{~r8J#6zE`~L-RMl|-PtId!7=}f6a;k;y&4nNN9 zaibq5oXzD|{{Q-aB{5KZc0ICk)YiiQ$(rO$GLDDrUOD?uwQOnpPm@d5_Ft&>PqIz` zgTV|y?RPxd>MJMz{N{h$U^J}qFO>YrF24uHfo0$auo2WOhxK`&4yX%01D}K4U=KI~ zT9#+56=)4Yz;dtxoCD{y8{M;As`c61J^;rN{lrE zt-&^M>&*T$JNEBbdd9HvnXoZN*hn&L2))T*RY9yE-}5X*iqE!~{IyR}`hs2?ju!Ro zYYW#~82cca12@yNJ##jpHnsH$;4`ogkPgg5>0Yb$zXP3?wfz^W{gbS}0N;acfZF#; zYPU@EdDZ8CGmvSk{0k+2lJzRE7n}lQyN|;zzgF_E4%2Owf1%`0vOWQBfh<7%@(ony zYbF0%m96p@-6?#Y`CpRtP2dFo$`_E&6^iP7t>nM1idFuFlt1~^JHXFiCuj}Xhkyy- zeeelzRx#!RN`R8!eJ~N60;j2yzyYFhB=LaBU@G_!Oat~+aURqK zUZ62p29|@nfBd%Tx23<`U3&L3VPlN2ktA#|%OBoPFIKl8zBhkuxmpFkwsG}>T$}&u zk7xSk>{;GDpYI^lR-wli)u^qv0kL2VAh~}4dG-@m?W^wpEw5&6|AlP-BB@OuMOIQcAz`h4fcXx!2dvVbhRx&OVAO#4KlzGFciE4 zhJoQ=1egcD1>b?y;3selNY{9M^ufFD=m+Qryz@cqyWPXPqw8@k#jTvBIZfkQ)-oQ6 zacyDzESgn#8lcLROL5dR-6(yV^p7`zrxA7ruj2@^Nt?4vSQq}wpKg02)v7|4vyxvAQBU!&=oJA4N=31v? zoTU-YOG5KG_y9UC>P-dzBUenuzMIaQUAxW4=32iXvEh!ekd7or#_|YfbLGNV9^t$s zG&~(TE_goWN$yv`Rd53ohwMns7r|ArL?m+nk~0O|5l5E)HfPgqQ00Z`)2%K4IczMm zBRNx>y#*csYP);UPWy>PB$0gqcf{eJciUVEsC8Oe|CJ5{VbzsF`F~`ScY{6P7qA~3 z0mr}@a28w#b!#!^4e*>L3kMxQNAMxQa-8jJzWr>%u;gLAhP9sHpI6)kwTy{P3t|~P zJrXC>9%~o}3U-#>XhK$v-VesT-3xZmbQO&jC3di|))iyWv1R9)8-t>ZAN6$?oku5&ejoKax6xnN=t>(T1Kx8w z)T$u%fxkAQWkIerwh+=Sb1lS>^10>(iOrH#F}7k#C66u2<&&|3**9a`7vjv-_7MyJ zB%!!uxviv1koj83`V=79e-D}V6DxkZLhOixJn!~%w0+K3>FEYbO8yg;?cZ$o5b2J_62xmXLcZ&>Dn*Z^3uq3^)s}gI>6= z)CcqhQQ&{zSFjK42baKoU|SFO1VJVk3dVsIU=>&m)__|V4qw=OYssy{wDBozO#NW$ zyHhi?Q=_JK(vktH$i2a5N_)=t;@{2*FGm<0;r%&umoC>^J4*}i>Y;O@tIL&2+|w=# z-j|$pYG=c`03jlJhv)W4xoIEw`?%W-I4-#l$a|JY!V2OG7Syxs8d{Lp^7kMu`JK=5 z5m_Z_>kGhUa0rmBe}nv9EBoI809@0n7LQI*45bSYp#B z(6lMuD#qRN<6h=hhH)=5qag~z_#1ZuxqWJM4%}`-!x3t_;x|~+oj|&Z^Z)H&AguB) zjQs7$4xa}Xz@OkExCF#{@EE#K47b>wfHSBLYJfB_5DW%GKqeRpwu2qu61WVmg1^8u z5a5S*N`fY!DQE_ogYjSjSPoWzRbVw(19AYvtfC!If;;%VfIVB+FJHg#z``#k4mbTv zGi^>B&hKDmjg+fY;?R(du>I~P8;>(|%*>g$_#Pzpc~M_dUVIL3WEMw^KBI2mfu?kF zkM6PG)9ibaEpzezdJtfU@2t8k2YUhst$yktY8OX^K zR0AaIyW+-sy(n+P1VM zSSll@CEr-J#N7Me71W=S>>WS^hy?F~v4C`8JfJ&z2f-n55}X33!SA337UI}eSYF@^+<^xzH2|f78pMEa!FON*SO^w@yWk)2 z1Uv=VAP3wz&;2{Xe-(b`e})LC{gl9OP1t@f@=oX;p#@Lo+5U<}U#GJmW0GeaWJB_M zP1`?tbLQ?Oa_zrVM{6%(=Jy{ILVKmQSsiVO+Txoi{|~J4H*5a|+e>!#2_U=rCd!|6 zvbKM7?O*6esn6U3sE>RT<)2}dzuERL_(bIY%m?J}yovJv%PN1f@)!JD@@2;~g6|LB zMEOT|w%UJl_MgTtZ6Wh^U=$b)NC(D(_rN}|9~=Y6!3l5@cw*&WH4qK@ffx`A;=od{ z46Ffb!8))W*x-JE0(b#$-~)Vt9~cIPgR$T}Fb<3d2f#sKi`9L0z#cdNN6-~?1ARbW z5Cx*aLa+!t1dqTI@DyZ&Fsv|b3p#@?AOb{!ufW$}C)fq{fW3eXJ?P#bKcDF;%t?l2e{TJFTwb6QLXVfO&MESSv zVzvL~?7v`x$=)hqAIZMHiSplUmA~2cFZ8F>cRmKxSH6kz_m8l)e{=0$@Quh1+HLTA z-bDE?u*%FQb%RAz$o@d*GTNs2}zM@}4 ztk`ISY3?79l`y<9fLo+(Ihi#iMChHQ%<{wc@DkeYl##>JEk@(w9hwD{>rX}vHu47n_VUJX2@T# z$7Fjq1G2SmqWp(h8i0x513-9W`Iw@XW%@z0R9Gdz(3#~ zxDQ&kMtIN`v;*xyIG6!G1wVp~U^CbPegY17aK#an040Gda07inUoaU=0Uv^CU^+Mj zPJ{E{0?0aT{I}1vc{;1`JH|DCH0BULWWbE01Kz*4I3_WUKtxxVMj$LgkSWP;0AxY( zdK26KDQo*TYyXAzNo_HR+75UV<=?rx)&85a|AMV0yLuOp9eoq!|Fc#8X4}8eZ&Dw* z2~eN-Cdxmshqe8iYyW}|ME=fHK>p2}DF0?8n7Feg(L{AB%QG_jU$$Uc!yUm~mu9NAlcQG2YuTd)7F5xCNu^?yUFCi+9X<0w zXX%@J4_)muHP`j|cqOq<-6^nD$cev?G`9Pa@u$zAI<4~xJ6e!L9t3v1-b z!VGT>qe|n~|0N^K*8U&w-#Ti?WR5mTOnuJ=GO;5$7Y9OHrgnP}P&>UY7T*c+4o;dr zcyh?}vAkorMydn(-m^WQM`i_Cv(?$A8~6UFjZ{AA$IiC0^Z@qk#>;Xad&SpmNo&wj zE0SJC7RLB)43t+`A8RMrW3s(pfG>fh-A9RQ$MTN&s+YDcEn~jA)B{TwpTGSZbV+We zLMZ(6-%^`_6Kk251k)1gvA&rJ8qxs|jfsDozC{BI^Tp!fWhVCaht=YwlI zv}#uuZ(gi~4vPxtRO{+Qa$W zKE$&Hu{>%Ki~2HThtUiWu=9u zM&vUJ@|M6i-~Nkjaz)6VY_bZFO|A;aCRYb!lWPKrZfH%m6Qe!xPKe+_Z#{=dSq7W%15w@y;Rf z4hEQ}k0b)&@cZ=gSKH*=4Hj>A4UpL$EhAiJFGH^>`q&@E74SfmJIl?f+RttT#*xxb zKf6+H(j(ZjJ8hr)nA=ew9Lg~qHhhm_@C4|S>o~vfeh(*$_RX)3HlZ{~3&racWez3r zYHT^|m+;7&ycl=HZC+EdYR03^bX4XxZxx2ak~4e^GSRg%?k9Ea$%onwc7P+`C?MIB z+)sit;2OvQ^bRc*k6yg}%jUH| zES^7W@vIqu`#XK{l*Lo>_tH2aypTV+JuY}=oIw#hw34L~>37tU!x(f2AQVAsZ9`Sz(sE zSIkqH;xdLcBvet5Gs*ZmxB+g0TR@QcJ#lSc6YumB?^qrj!uFazScql%!0WK|ad0JF z7Hh1Xt4Z0J41+(kxev%z{Px_oLizD}nZ#bG%-9RnYilnA>oCMrVQNn~XGJ76%Iv94 zHwDc=b0Dvktw3uK0zyF>5C$YVks+3$Uc4i57ye&%_y>WZEu%?OzDUX2tDsBC z-IWMM;8bKoj=!>!Y8757o|&ghVRqMy{gDue+0Do^^~7~4`F9}*F6ml?E~VU2C&MW^ zol{=ATS2;8QMzlG?c+KUtka+tCFw<&Gs&_oXb0MZaL@sC1f4)l6B`EQ)l_c8^_9WZ$HdP1ND84L_Tf*|0ZYJ@{ODVYc3ux%lK) z?R{Z0TL0UowSUiFnGZMoR&vr9wurS~Sd8pYX^;vMSvvluu|QT2{}Nad(_&x4yxCy< zjlp*;zI7~x+e(yNQxD%bzhWy*~g&ZQz`Ji;e1FD{J+NXHNV_&sqP-iRxW!J%bm zbCvv$H@?KLisIIKk%~*AeH9c}3k7b(8dy}?{!l|+b(5ivq`JI^7Uz;&tKkGMQKA`q|&CpRzlQs zZpt9;uQ{9R^ISIf%73WruZl9ae38mbQ);h|MH&oW+Kcm*$rsnb?=JAP*=FpS{3#sPM--bfTgK3lL$?-5dNGuOqQ3Qkr3i|{bwNxS6ZvW zzH$nigbA|*ZeCeuP*UE?zL^U9yrs1&>?^0R(isTyY01j^zo8cPc}x4MD6Dms!RW(E zMHs`~prE^WUbw5q56TMe9=tBI47_{rZ%S@ek4{x>CmRTO#P zi<~YS`HD;yiPtAs8mQ^u?b2O0FW6w3^&Nz%Gn(~Hhh3)a$9d}LvaTi z6j^M)HEamyr>Ai?-L%Y;RJ!2Pf3M4J?V_uJS4FX{Q-T&0yFctUE!mI5d47$CX|O5u z0+wBp*JUQfoI*ce$zK&kE?7P~=JV7_$9$h!vFYz=dTPaHmf!fh>bj$OWW^{ob2o<_Qa}R_*vunjOpLkx_^0TG?iC(oo z?q*P*N?H}o0)QXz!DDu`@{*>3GtgJl+W7k1qj#3w&sU{aEqsZrM(!mVxn$gXpa;QH zpAufw_Bqj9lSL^QtJ^!x!nssb3Mtrvub15^w$vhl)ublL+8?R_a}8 z{Y}9pMz_5YrLrpEOSE`m1r!z>(6R$Bbi2axuh&}vpTAUA1$>DLmAxt=u0yZvC*ZZniz<*b&S49C|yBE(CW?(xA!@zV5FX%-xG}E1dA#OA` zp+}a3o>|lyrUU=&Y|D#y@yx4L;#Wm+YrRO{(M#lI=?(8p(nCcCffW2xV+t$Ty8ZwbP=hj5| zsU>Um=G9)SA~Bh@$ryjrKsLi_k)CDnU%w_JeIw^2L)W%l(zQ+Ey0+~F?b`B2l7BCg z_j>Bu%q3cY>NVxunke73S*w@2HmUYn6-m^!S({AmuFcwHtWD;uEbq&vjozT;CL`@n zHyZj=TSI?3UPfKpMy@}#<@(d{vS$tz^F|Vz>yEqBG0S_sr9>^7K^v6Rnuts;l~KOc zRSrLT*&4GI{73q$KW9svEiqq4v#|MpT$mz@-iNwE;h04+$ndjM%#q<U$ox=ifoYJgEE4-LHn;lv)t1gb^xiaT? z&RJHXU1-}-CX>rh52%TppIAwI)`#u3kyT;xk}{i;vYbmABl>R;%Hus!{2!w^T9& zQ`#wA?Co7t9s!7p?cBPkl~o41`;DIVjeXVN4rF=y$LPj5IF>41rfj)t)oawORXd=5 zgNBV72exV*651xLZM(>>-MaU9yJxT1I8A&)qPD+2J!8<|A(=zp9sAz6@e|&kIQ^rK zKbi6AXP?iUGk4y%-_2jJaM6mDt5&aByKeo4ZQFPJymQy?J$nxxI(+2lvEwIBo;!cx z&x@BXU%C3%?Z5Bb{pa5O2M-^~mW{p|DXXsXQ|IU@B}$h3#9ucCIbE zDAfbqs`!nzcMqQS&GM}dRsAEfJYsYQ97}lyoU3-5io}(uUR3|a8=k-M|w_XdRi^TmhFzvw@6&5Rl?>z99c{m+nb z+b&&cION`w)iG`VoDwiC`P)HNKk2*PBeKi7!?P2Q{_xrCwc2uWkJ^J&^-o;0fBePqsZSl{ZEuRFJKR$mr&V1kL(bdv-my|9$ zX=+rRz{lAwyU+UPV7;roTt_YnxU_Wfk3Y1#xvS!Z99HJ^gI?#4czrV_8B0`4!QLJ>Y%+1xu zetUCk=r60!FCBXP%VvR@!^<6rx})22Cg!4hm*~*UmLcw)WtIp#lm4_;VzZhyEqdp$ zsfk;zZ5;Wi#P`2E?f>=iVte9SYd3vz62Be}8my>cSS|+g;sucEI^rH|Nf|wxUW#RojJkFJ|rh zw7*N`rhP_KS>>6-x(>KFwb+Q`e^h&SNB5JJCpRtrOSK)}mm5B_an;Wq8YyFM?rU@< zWO%Fc<3}|wTdZc2o@t?(TkkLW`Rw=VUiUr-y{r9he7k{P-0#%n!LA%ud1mV4sZV|$ zT53$vOf#by8cM~kD`o=^N&AKe(@y5#;>b)$5%C-qrWA=Q!DEd4{- zfA`bxvIDM-v`fF?dZE>tvTi@-8Hlyzk_%rq7fD32FkMP%S@LD=vJKUychpM|%Vjau)Ehw{HzyH{` zW3~++;FDc(_P2|!Pg>Mz`iw`%AJ^L&xcE^HdoN&euZvw0Hm;bM=^=A0rb_YOH}vGP zS=o*w4sG^0w&h%ztop0RE!Z%6&BViD2bO)hzUt*KFV87=&!xE7yUUj}UKo7!D_f7heta?fz{Wd)kFE#Hr!K4?yS>Glqu+nm|Jrv?g0iNqh)6rsd-1f5RV!!C9eBs( zo26T>hbMR)&bTpr#QEkc!yhf3_`j?_HqC$VMY}ae(!XDK^ZL?Q7x(2~j;nm=YOjoo z0q3vZZ`kWS_by>_&gzrpuX&{=yV0e6h42yS!6QCjP(SnQVl{k+{~f$=XIfiUd3*h+ zilvU&`-N8fByI5eJ+X(UUHvtp?UL5}J{>t=$$-e)^LH#O{>1;#cYhz4)NyNQx62>i zh-i~Gd*p>9Hv+xZZa;J4!nS*XarcknH@>&1zE0heel~7pC0*u){S|tQ&pzDc_b1IB z+&MS3a+{R+Rhsv*w(Qv7pkj+#(^ubY?)@P1?7owAwr>b|dhzFjFFRiO`Q<1E@6C|LtcNDd^o z>!&_d^!R#MEX>cZ4WI7Hj@eXv`_qsuPxX}_*)RKbMGkvd=|Z!&a@f4NSAA#wUF)0d zS|hK9ta&{DYLvs{)Eu^_()jFc(?(u#iMj_hh7tBU(I_UAysj4!gg1 ziv{jZ0D7wOA=JILtDAjf3VE`>6)f)=WaP(`MSbKtq;^q zzck}~#InBC^)CFrdFq1x`rrHX-dcXs zyrVtJcbm~+-sLHeLz|CV-{a}~o69Cw4LrNg=4t(r4`yEarfHoKhe|fC{psMfPbz)e zw&T%>-5W(8AG~vI_YK)=&uVYBzPISRo5z&3rz}~~Vg7;5@HAxmhCbT6ar?Qc*RP$u z^IE&Ala6W`wdB-nLq<2d&&A(=b3 z3f)@R_BvBWI`#_v?T?x^W&0)f_pf^>?86z`+EiZt_(+3UO;#N`@vG|N9q!|Ab{pN| z;78YcG?;S!!1=_l)+#<-`A)aV&3~Oe?c$7s z{Tb^9hg4Ng>{>a%ulSVtSyxZT_4wcIVU7=OWDU(u++69J^T>YtzTDchcKJiY{JvWM zsK@by`R%@0s2Q=>{cPF&6-LxQ_U^7D+iTdL`1x-CD-%DS+brtxo`x-KvYS4M+Vo!2 z;ool>H><*^kDBiPp;N?%KW}Y5YIJn_Cw>nGd^48C(*YU{bL6v6x*lSCuf8`!-E*edldlOf<*IaPz@SQUg%h}Cc67}|;`Mt`& zTOp;)(nf#AtepGB`S7sio)NX@yvN!&{IqLJ{lC(C?21`8sQ&GUpF>xjtJUkt(o>#W zTAkW{X~o=@ozpLPuGz5Vugt--Zr9teXX+4j_L%isPJXm4TXlQZw)S+jCZTRDI1OHOXyIj0CaO#|uP4Aqw`(VM4 z!RM6Y12%O(_)e2w-ihyd<5J(Hi~CO4{iw&6*(d(6yIp!pdUWwt=YB19zw3;Xml8fn zzHquryQTg&qFWz``qMXJT%BvR2K@R?CH=gwns=%?^FfBT`K+@Y9FN|#8+YD0u*}8D z$D9_I81~)D&2@*>I?&u}NKA+FJtobqlR4vi(HG7A*cs`#5?)>4bM4 z4bVO8w!Y`>-=}V!deY_W-DL@9lRGR+zcg&>$_~YU+Z68q?z?xFY*7rW_jLA?_7{dX z+%cl=ZTFd-SA073;hkM7&7XdYySUC(P5UkI(&mM8Hq}a~KX22OkRMZjSvYa~&q*iT z+uR%zI`Fp^+gG;_@wl+0_^3G(YmMp>;?BfO-uBUz+Dk4j_|aE=dquaQYs1baHFo!^ z_|rG@EBsaZ$z?w{m%9h_@+epP`H3jr)b-fAQ zg=Z>8WB5V2=PAsJT!oQN++`Z7zOMikiKM?+A`+b zv}HVG-LTfc3#@^Tn6bQ_BWE2M{n{=6vBO>}mYLCO<&toSe!Shr)5dLHP5iuhO;+1e zruMYKlxM4UrC4;BOpzSsV6O-1VNQzfOcsQ>DLiNDj8JtQ%HppB3&SL<8WW%NC{_Zd zTYYiV9op|$ofQj}F}HbH+z+P*Rc9UyKb4K&@ov?w4C~ZR&boj^%=mU>axUJET)eG3 z-!mJp9~ZA2@yev}%8DD}72@p9Y()9A6rVrhD}f)kcdRbw{n!TvT`=GNA%8 z>{%33aPdZQ`9yGh@|HgUN8Qlw?L1|U)on~s+pvlhcLR&j<7Wb0UC)#l_M&uh~11?58#Aqvx(bkn2vMY+TD^qfDcFi}=hFqLV#Azpu z)6UIY)k3H2xmbDKLSTII)@>skb;s1dV|Ar8R%I#5sacshaPj6Zv&LM!4v5!Y8n3-c zX0B%Q-I}!w`a9Z7dyaqBB|uE$yVmp7h3}L>vo6JERrG z^y$vDL3eUi;@gRQ5booIXSvl_gPg?O#E`aH6_#2SW2Nc$VEO)1*l@H-Vrn`pXT=ap zO*SCtZq8PGLtzXbC1(NXwulxtOelT1!9Ikt?m=_dZRE^kFG_OxOybr<(+_~gp}o^{ zar{DkYV!jSgA;3BTNYf~DJ^jn8^wZHbv6gL+Ji)O;>yL7iuCC9W&Dkq2(FeWCR$rf zFSdj&VqvvqtR1TiskzG9iE?6Rv@{fg+E_`lT+Tb~nf#DzYE_w>ELYw(5WrN3tBNc@ z5*O7zpAU-58T~aE(YlgphzLi#SuNCsugqH%su(9n`e9QQ>M#Q~GzQxg9>3#`)-7Yf zGSr<>51h@Exhq1@t0hPv?#$PdK~AE^g}SSPc;xst#iL}cIIW@8=cF@qcgzEZbqEaW z5XM(?}5PqG^6n>pd$=eu&4@ABwe4yF%1Gw;I5&mPj zDg4KB1+1Pc!j#S@EZIy~Rt{m)(A5cfPqPuimdPh9Sw~k^9$~{3rm*3-qr|6MHlMI$ z1zlMMgso|73R}}w2wN_nuw?68p;azp6?Ueu3OgZe`Fz5XJ#%H15caGn>{&zDAQl`X zV}Dco#C80~fdxai;?TBL&=o;POR&nkchHpU!_mNOSReb*Sg4-e36hfc7sXH#FE^o< zL9IC*f7Q@dvVGLvP5wqj9N|0zIWp&HUvlgh+3xe2LXjNp`(c}Fzh$UJDByJ{(CH#9 zrR6HuiPCbzL*VAp>d!r~LG6To82BoRR)xJqC4kZ*EnSXl9KA4(Pw_NT)a9T|Mw?+w zvlo|U6?rdFnk6lyDJ`EfQsl}9Cko{Dmk{R%r$N|Y6ZrqA9l!!GFY|>h$%uIBZ|pc z;ybEXTgWyJ`R04EQmh(8xh$^t~p#r!?kq2;w5o z)QQ!|w+1_+)yUWwIecarF6TZ@u$=V1!em2P#kJ^!zLk^65J4g(B--16bwfWgP2NCM zkL1@_>_g>giC9B`-Z=`TnS;79wNa;B^Pq-e)%rDxi_so!(;Sy{q<@M=fAo`UtEfs3$AV7s$B(S-vQZoV5mbr?_z1mQNO_` zWobO-0}a7&zzo38yP?e>@3}^YjP>KnTg9fI zD2EPQn~jI;#r|9cSWU!W>nYWE;eOwMk=1f->f3BbFfiB`)^7 zRx+>MuYleN>AH-qAS*fc&ur3^C~Wt`w#ed}(wm6%O3H$5CW=Z_ob^JTry$Keut;hU zg1xTnFKm&o+5pc*Lkoqnd2nv1EnmJbOEh{5m&oMB$2NvpY|Q$CC;)xs#uVH*I1DPp zkAuZ_F`jin+mEn`7v-gxnf_UYGBVh!`i#$l+dMzCe?NG#;%cTkrdFIcohYu3V{D>C z>DU|ejBj@|_F$|mN{VuF4)QWtGdX+I}76SXsS&ir;&)$ zRUyu4LE(d(&&dC^XzTkhF>Pvx^Ocs_b z0{L(Z8rBA_I+K=wYGzdFK z0WZ;*kCLLWow?EqUKG_i$t#Y_OFLs;1W!?cycA<3XN>2K)=BD-Q(JOn?NM**&`o>h zMB%$1zG*JN=^0`9`GjzU{TO2o3i~m}8+=&jXN2YF5;`Dk8U{cVHqAx|Tl^Ve`MHFS z2pg{8!-gw_urALC%g-frLfD$NeAt?{Lf8_|2+PkUbVgW(9UoR}T0zAN%2(+PEJ=McAT^8$;O{L-F?2m32eN z{m>8!xgQ$BhxA9t7>gl!-Rh2zjUZzR*$6V`Lk1wE&SFSjvw9%pY)F_w&W42fko6IA zjKz?=UcHTw_NZqHX^(oQkb%qxA*b7l+jKEeIfG&QsJ|!cK(ppO`GHM&?4Sp1fUt9H zn~Unm*+N*p#vI`Fax)ke`0x!8enkPpQ@uH`-hB9qeE3EPzpa4bsrDS;O>pT~;=?ya z_=5!uPj%?P`tso`Q}|%k8sX2|23sgU^<(^dJ?KS()PEGmeIBXT5XwRj$KSS?+coN$ zi>MBB$HCWQalAQ%G>`W__QPuqWub^iZddSls6LBhv_*Qz$I}Qo2xV;$kLz>9L-kr5 zy(DQRAJ1&G*iaURc&a={JXF8M;c1hO^6}U!Nk4rNkDr|-{glp?JHSKWt{S4zA7KS8N%xd7@pV9 z1U|ecg&zTb=622)yAdKA>d4KT#G2@nbx?LRU^Ii?zu_9kbu;cvQ4*K;a-ZJif z%*~g`xcL$pH(w&-=1XLlFDYT1?O{0z))Dt$N(X^C3cnlt4UJtV?=HIBsFq$y-)b7|b%@(C%c8q*lDn}ypj-LnA za(X~MS}JmP8e<;vl}=-9Mt)XP%tlkJ@X(F1mM{}5jinM0Gw&;t7m$X!>CT#?jIK)D z^EB2C-KV1YKE8BrY#^0Rw1R+2i1`k>-=t#g!$`IHX$^xPp~m6PnA@XViN`B6-tUCc z<<$*411K>3W`?_8^e7tjIy7#gnFSgh(;Y>! zlr&dJs|*mAJ;loGsfHPKnD|R2W%d+1v!@zj_EaOx zp32JXsb-ixm5|v}iI_cS-tBqap#$dfP5MR0DNSklDKCWdD1TkdaaT|J&kBau?#(n<0jd7npuQ2T+ zNPSfQad@VC(UnsgG`mS<#bK11Qsd-?Z~jviUo`UCi&N*pV^9~>69PU2)4*)76l?%L zf+OH0ps1<>x}nw-1cT2}ko8~#I0TM@p-_)+z#K3atb?Mg2YbO~5P-~4zB__=kN_&7 zGHZbe;C=8Jm$fUDpz6z>SQ1TKRc;3U-W6!;t50S{># zN_hu3KrJ0X37~{>l7dzN!5|E@fvSc9daO1ByaVDP!~`%H%m814@i2xHz-M3~SO#Xg zGWG@d9&7`guc1ujASmw~JtZa1mSrx4;9C1NN#I`vvR=C%_r7^exmCSPM>p zv*7zGkU3Znc7uIjPF3g;_yMc|o4|*j&{Z%S>;s3v{A#ERuo)ZzXTWdOaUSdkm%!y3 z$TMhKld(tOF>tB{+YQP9Pf!h12btgsxC;IP&1yr2U=>&m?CUW09vBD4gVP|cE@K)H z4}JvIy%?(jYJ%b533v*!L8Lcy8vF#df>QNR2Cx7u1leGW4`c6wvET$y`{G_Uhz09F zJwL{LfG-#al>W#UZ~#%@F?a%=f`|arDcA$ZUi<>w;KI9u%AgLY3%tN6Pz=*MPQV%T z1E;`g@H_Bnhs4yuc`M3uJ-YAT$Vd0iJ-T zAfhGg2RH-{gCpQBxEIXWeIRcIeFiR|1c(I(!69%M)M$jME@TOKF)qz7y3HwHq10{|wZN zu|BxuXHWx)r&6g^QMdZ z7+&<4Wz&rEoz23L`?Ci{Z=ex60zPmGHop-`_Z4O~MInOOk z+O)HiHtnQMJ89ES+O!XzP5aQJjcE;SAP8-tJ#>Ih&>6ZwSMalc@8bNM;I)H)!tZ#t z@L^+(84d+70!G3p7!70KXc!CQU_4BKV_+gog2^xiroyo>4W`2kI1XmQERfCp8tRmR zyl=6#5dXy*;2_fkf`M2!IpHRMtY~R(A=ONg&Gtv7rY+>4W463NAedtL)0 zG(@{a=Ow3c?&iS)!U)T`f84J13)6j8{M?eVnA?(iAtSPdoIIG!FDBu0BwfXOZV!N4 zwPh(tAZIn*63SA|Fsu9gC1v6MYIC1krz}tE#a2sFFSKPUQNJhiOWn>dcDo$ItG1AX zj@hEyrutemvL$khZnw%`yu7r3+@kZK6QylBi6!%lTCM;S8}8&KB+Oo{sK$U6j}@FBmCXz5Y~p$j!B}c-<-r zli0)Mb>;m<*E#YRugBd@mC2q z-}G5oq%!rY@&bg4)r%XSD3QM^r_a5A1qf4(d+VD&6Fq-Q^FhCViJp~2_o3AI>a#>?NbE2E{Y&i6 zSD%XxTztOiOZ2=;6s5g@U2J}lQw4hQO&{Zl;`%F)TX6rz=cF%jy-BoD>60AV64#Bs z&!+o~$$M0ofk^*7fm@Z!NcX){flqv{n_qnHdnZ4C&U+`{`|gJ6=g)OZ#wQJseVqE% z)u+zI=7|EGB+qLX>!x!RxcTOn3ZLof$9K6zik0&K#^;;9%G9ZTa_U?K`t(g7-*?3= zv*c7kn2GMKZ+sQ%lQLP+#@+{=tDsE&pNy}<{IZ|*nJB(Wl##yo)-A7fi(~J5qVnZs zd5H78SHjKr`E%NQiRx6lf19Sr?Y?cuIkTR45uZqa&?TOdxIT6wqV z^f~@^NQhXSRX)r_awg-GZrMTyUZ08bQnZ`okx<%V+kDn3%jJLFP3^(P;b&8N@jQRk zax+$2KVF#8{RbyL_t~7EK$b*q3FJ%^-!=G)luI0kz}XV!r2^(ph|-zs%T9Z=TeLpo zx)DSiw?IW{i1rteC1DzLnQs~rJu9(gIbnnpkiEr^FX_);*R@G6b>+T?tjxB*#;9mc zrP%qD^p%x6cT#d*q=Ppvk~=5Tk6}Kf|FyZ04%R$K$vKcBb0BHFh&z769e?4Dx44c{ zvfOwJtK zJ(RKOS<|PLb8jV42o8nRnX&1+PRVw*pylr{$Dd+7$CD=%rt4;h8Oblvc~@aZ++t-p z)8kg&pDRnLB}>}`vbb(lmBs6?DzbD+AdBl(Raw0Lsv=AG1hTkpRh7l-uPUNCy>Q;tEwzse^rrXb^=*kx2nqG^;Z>HPD&t)>sD1+y#A^p%fbY*xNcRI z#p|ysvMfm;i|bZZS-k!#D~sJ8^!uJYw(aJv#}d2UUO@ZENuLRM+gYU<)pb){Ro@9y zdI@;iX9vP9C7g!qR;F6Bn}zF5tIg-8&rg>9?PidrCu#3Ux@RLs2c>-lKTObSPppWO zmrg}zu3JoA3Y2f75T>;S1F`-*dCA|O)1HXFw_}3d_O;$kxOy?6D7Qd$-J;WQ+u>Gx zp0v*I(xO%Z=`C-ZzlwxfWS)%PW(dDjP zURxO}#%>c^CT~5=4VisR|2@_%FX-MQ6N+`iw{!oZ-4ex@*e$x8P<(FL6I(x2-tF3g zSUCxEH0Mld+VxRxoC@IA%1r0<;x)90IZJHCYe^t|VJ(x(Y8T0);j2P8hLZp`$=$MZ;R+Da4Nci($dNqsi+ z#Fs%#&0$-^{hYpsm4@=q!zmS|&-Um4Jp929)A!y6EjR0VNcE(z0jHH`YVbTHdfu)0 zay{|Mkl7fvrzF;Ag8NrteA%A(vWSaW_RZ`A7+-Y$wAZUD*^`#=IjTwe{O(_B_w;JV zr)SzNchyGG=bd`WHnyyG8JQMcr+VwS#C267e+RoB^Xf(VNQ*q1QGJrCxcT09`?L>bb3oTSf7?c~@c9i%DN~+!DlRmF4cUsrbBgzxqJcaZ41R_x^eF^;Kon z&({@|t!^3=pIi2P@Y#Wj&#!Eq@%e#^&#!KL>Hx;)*VgF&#eqwoUt8)o2Qa?qwxU)# zXAPt;4_x~E+QOS_5TEb!7bForZ5!|NUfs67Z+xD%)M!uLKPOV2`L`7-(Uz(xzNMb{ zrtXLM;@5x1`S!qWt(g!i7WNj?-#mvEyuw>Tx9B=m{!}t+I(y zKjqSG(520h8JPtEzL9XI!V7USM3|}Uv7h;tpYtuZ3~wEv^0UJH;`sBuM~kd5{qMWu zPib)LIK`*Fp~~!%c;&U@FF||>)2H~{`d#r!CAyob)sHW5>P4o{puPmcraKpDqu6~5 z_x>rqh+CY#=zK1U*B5p48J$15JT&zbR$5as%C(84Psz0R-MQplHa9Qn*rfMi!C7q? zn@EG}rc{2}i@Zg zH!RGC6QK~6!y4cwnA0Hy=YeE>6j|HT!Fz;+-9#s7GKsqf*FL?r7ts2q zS3p`L^a3x!m>hdO)34YsB7bTf(>(I%d7$-6yEoxmZ_v7>qnnb4LF<(kl6PMRty8+O zIks-l`lL_8X!5hxCCw#IUj$l@bP0L;1JF98mqF&C+;g}Wx{}wm?&$L{tTp+h4e5nF zpmjvghrfZ=4?Q`EEbtCYYRej-p!Gs0w&R%wtrI%Dy)mVr^+9{`yj%)e7j!hw%q^hx zKu_vq%nNX8XV&n9_d#oYu7OiPYkocndq8V`_U}fX1Fije0o(&x`*Roo(8QQx)mM-tsz>kANm5V zA$mG&2CXIf3Z&(8?_dU;2wGG0Huwg#rs%l-l#!sdMSls;fYuK^1x-TQmxI<9eHT6gtus1cFzZu* z)){>h-UF>S+UrQ3Ptba!55qQi0vZk>zk${ry##&^T7UF?_#CwU=m^Te@t}1`uZG`) z)*;QJ@W} z=6T6&Skj)k-BasjaXh?Uz)DQxG9%mR*Fwp}`nrPolz zaerFAK_qH}pJIHRLKs0B#tZ3L6p_jjT8%-@ucE~n#9tAu#uAQ3qJxe6l55R;_p4Fd z`8D$0zec_X)X4Y18u>n=M!pBt$oF7#c#U#PpBnn_TSNc-YUn?|hW`84(EorM`X5+B z|1^c!Dzoy9R=Uv&H-4+zXoVZUl1?SCN_h%Az8X^LO-mQ*Lj$0SwchAb;8PQ*q_^KF zv)ivSol4Pr5&Rx@z#jMvT2dSbp#uzoO%Q_H;W1cC0ye45t$7EMKpwQC}S2ZK_M&P!p5|3 z;Cd>FQn@`FZRz#F9qnk{!z1t*{JK4DGPoNa zfXh1=^D8KY+u#9s1h#afCkh)o6DPFqf(-DduJknFZ=jy@72W7j!Sddu1D5yU9>IDz z1G>`d90JqeIC#Gwy)O6`_QAXP=pA09=ePqtg)iaufwVM0y~fk&`JD|Hz)xTxJ-+eK zn;zbg@HcvK|A3q5wcP<5=$V}X`NQaC!Or364Bm$i;fexdegk*IU*X0P=mjnuiC$sr zC@gf4POG5-Xf&gqM?GhHrZUW7KLBaODXJQGb^KH{j>D=YS!^sBq%Ol~)6$ZkgZmU^ zw}^g zTG{7A7=Vb2!5xc#5v9ocPD%297P%2*t5b=x2R;PZ>r}FQu95|0vr`F^MF~?MWVcgE z(+)R*(WzwV2%SK7I+ZXZVHC(#rlfkubhHawL?vfn))v~71P zfgXalK=wP8M6%tf1d`oOC68=&Drsb|d$|+(g6}A0WSf&sPPRDN;ADG~%}us8+1NVu zv~6m#rOAdS+nH=;vX#k3Cfk^7VzPzF1}58=Y+kZ;$;KtymTX$GWi_L;k?m?W`AN2_ zE=Sn5sRooZvPH=TCEL?(N*vjm9-+jMZRye>lvFTssBJr{f0S)2dYip$Ll08&$QHDb z5=XY5qY7+W&-f9<3p?RU_-Z6Fjh|U2 znzQGpHJx!~lh%H2%e#KrX5{!CZT;MG$6nvA?C~|<`ME6^`{Lj|Sr-rVb9*PV)$r0k zz8G_VbY-rYbJPU|@4tS|b$%5lN0}YH1+OP##e+`17J%74L9dAx9(|DB{jEEII!GC1eV*#4y@WqeK$88;Jdj5_-<|ul6rU3 zaA0>gC9u1j)*z{&7U94`EeI^sqJ~MG+A_2WC={ut6Ht4WC@%sfs-Y$-EFdaHpw<{!pbJuiOZqW7H;nU z*gJ6*8e*!_HTSon)xZj|D=T~>c4g6D-IY~we>H9f-jW>-Y)dwQZON`d*L-76IIxX5 z1hz4!hF$YPLr!1N-O@0{iHY8YcDOR^b32 zZbg6(x2iCyacp>vbFkTk1M{`vd3;7pzqF`%%JDh%znEyS`b~|t^zw$)+G2bZV0GR0 zJ@zZCt=qm&=<9ox6E{z4`1j zqkPtj^3AJUPeS!UOwQ&qeCOi34BxqXdAaLIt9a!*H97>|_L3NPvqA`ApALP8-3hyN z=sSINW2e^}LRw5Hyd;hZB^Ud6*|!+#u#1;{%S+=pp`^!#loK104A1ikNf!3`-y&jy zkTS}J);LD4KIx4&zx>VI&3)46v*%@X1)*g+A^I7{b1W;Ye_k9lp@s3Z-owURB8=Ud zCbSImA=LziVZdClO!Yl26&(_a4Tx`)YGfDo39$Nh;kbcS$E@ZPn4Q$>+J$`rw3AvL zt3=$us?((K3CvDvbvt!F0am|FY|3wmpMqvQ1>x5R0pq+h&{OPe?kf#jrsVsP>h<`m z`y5>6-iFA#rRqNiaRaN)bKnzL&7K3F0IT&JNMnArLFfV<62@3Q`BV7aL!wnMGYj|&m;s0*W8-}N8687sJ*kSk=-QF-f4HVaFcyEW{pHsbI zc$z3-zwUt@hJPXL4a3twalMB3b{PJ7(i?`SX%hD99@t^{7s=i*JPi`pYj|&m;cuDn zh7oRp#qws-J;F;V{An$>wh* zKa23uUG=N|xPkc>v7TO$H;Xu5fcOMfvufWbz-m?dd}*7{?^BPHTkU%7;ECcrt$0JN^ku7 z_|f}YAN_fM>jOydZ+&Fx{jCobbk}8n=b{)h9Ogh_S2p7&GyajtKUEWf6w*Np6}`{ zcQsA*JI~BW^9}race zL(ZP1QvpnwY7k%2<$Kp~%Sl~z@8Q$Zzn(wGDcSx$<9D*Y+MDJ6cxGqY@Tzmxnf2M{ zWH#>q=E>FxC)^PYdt3HZ%cFJG6YC#t`0?6r7!aXt`G8)Hnyo*DAs!5tU`A@m^6LE; zGlf7P&Yowo|MQI^v47h2%A6a9zB5T7Fd${{$Vgde#rNs@+(_wcor$Ch57wDosjHga znELQSh2U!B(VovWySZp913V(<&N!|w18JPi@|m9Blc6-;Gwqs;J^bFLS1^c0+loM+ zpmm^smXEgGMs|okGidn4&i%6rYy0FsH#0w%^iv?RrJRexvtCy}q4$ zh*c`O@^3ligx=D%H`L*aJLTK{-B7o$y(C{@d9NCJ%mo9spZeGe@3~0KuFp@$A97?Q zS4dNll>MdXyOHv3ZC0xP(`eBs-6@@^?0s&TdBrGcQ-0i3MRJZ#DxdBxSTbHY!h6*V zo4!9rzpc%>>X++one^4N=~kL58-FBM5snqg$72RfbwYK{JQBF?*yuB(SLDyov!k=F z)GgQcKkoV5v1{xr_3TA*ErP}{NW*2imv(9~fR#!87MmN)_q^FtHyqCGHbzk%9u)gLudHu{wBL|wdmku;v^YHCC zbFlfO*AVks{h_8_a46@7nSJ$#n>lj}%rT1#%uD@7ni;c>Heatk+JqX7HG_tZHGg5H z%#o*$Gw<{p&t!JTm=0MJ&FKv$nPxpEnQP}wHRrWG);u_In)!at4AU=goSB?4%lzfc zIp#kNk2m)%I>D@1e1bV~{E6m*UMHE)^G`Czop_R2)_tzYIAX5(Y}Q=UV)Q)o_rm$+ zFS&(g(qW6urCk@Bi#NcCC1&KbW#(tiPBvF}IoUkDewF#6#TxUUl(nYENo&ob@x^9B zzjY=juf#OUSZ`*H-C$OBJ;i*NbDAj~d75c7<}`Eu;!S2;#_1-w>1pr*Ag5ciwEq^xkaVJ7cpM)!{rdZQOaL^TrEI&ZG;?+5s1tMa4fcONU)- z3fEj}F57si`BV3wnVn01W>RKfZrWyEVG285ZKgK6#{6UKHRitDYfYEJYt1z$TxZrd zz21DDeS;Z1?FQ3r_AkxXqkm<7dBRO*z`|dfo15HXvYOvwe&7GMX3zZJnO=?WFdrX& zr&&AoPV>^tJI(mxwwht7cbUFfcbV_U-DQ5d_AZmtIs=7hqJ&BEM&n)QKy znLB6w%Zx7m#5C>pZ}a(xf176~l$oE_`^=2Y`@(FU`=!Y#`O@q?`lCf)nHf+dc6jI z19!kZpds~-!&{&Mv9D0GYk0kPQ0xxgmBtQ?-OcOK*uk-%^F}mwfNTb3c|?KN;4Xdvx%H1;)^_I7vzG^qAI+5#F_`y9Ll z8eqGNLA4sz?;T|ONppLktp+A*Xuk&B9!;kpcF^rlu`Fxg?H1Sx8i2c}r9HeqKm*(z zj9Z^}L+pUu?z9|Y2jv#Dwg={FQ0@cpM{pOXjvb);5xut9LArmZw$wmfO&9PrXu$4s zL3_~d%k1BTcVKHjfxVY?um|^QN`aR^ zgM4r8Xb<##jQwk%0lzPH!W|lRrOgH%pd)CKJ`Di=2tEdPAn<+NxHsSq2tKbn1A4(7 z7`%u!RS{@_uqNNrAmPrS$@er+crSbp?ttOPY1M24ci`}?y^#^z0mSF@VX{AP2NEyn z%hV0v4k+&3kAcGA4lLGWq?zCjF#e9?z2FWs_AW%NLC1$fcjy6{NKb>18w{jggodEO z$Zx^hpo#M|Vcui#IB3E=4Nkrit^#+Ea$Q=4S_7X`MlpaKazGQ?X(05g@ET}BI}M1w z9&P{)jMfBp8XSEBXaYM8kj^`rSMtybH1xJL1fe~2g09dF+(FcDaJ&oNgx&B@@D8dr z45X%7wgyydx(96(XBL{e%;iSUvCdWW`)aOHIIe$pAM4LAtmHXcZ#B_X0{y4D_rl#1 zPpv*jT2f>4Qmk%%Y`^{P-;XVg6{Y7u=s;m=(=L{Z@|d4II=8PNCls(ICeq|Y<1X!x zHk3)Xb*xSMg3a4DrO-07Hq8)7+_|OzubNbl(ecMIE8fYl+L|>_XC;ig*;nam3I^+c z^fB#BGq%NL1eKDKUN0>*Eu~)S1*e%Hr$cTyRz#eb!Q6c-o!Ry#vp2DX`e^dIOU${0s+q|B_tX^cbTaS|YV;5JXntHkF zbVZ-l8Evn0G}eTl_OImss%hYs^lcgUoBMeX`!T0aF01A(A^>_?W)w|EQIpNNMFi0> z|J=2@Pj9^woAotwC}8V$V8%z-h^jUrm|-t)ydX8K@-WD znu|2Z(MbMJ=eXF(t17dU>x;#S=g^W5m_b!7YaZVJ0GrO67bEGfpvYC;}OOhM+- zFCx|z9Ivj_H3}s*sq(iDdw{&v9tM3I-4gVoAM(Y_iRf1Y)bfS=0wS6Ho|OX zBh0q`8uGspFt-Z#H5)mydDW6_nnE*Z4lUpi$b*)U+^VO6|5BS$&6V>U;LN+{{p#~? zrYz09{qjuHz4LvVTFY$10jml36w?aGXDR5}*bZcS^Dd~4*bB-Byiw#{Gw&9A)x=%c zXR#m6USUmTuiASJdn`ldboRQV7qVCJeHD9I^Gn%d?J--}t17;meN*-ivzHut=CFX6 zAS{`yuB}#~AAgO_*2L5+75U>BQ{&dRDKkvMu*P*#r z{(}C0k8ie)=3H9LIV`MZBB+1Pjx}uTzIcee`s$^i{^%b-Hi4%=Hh~v_FEY#yI0W7X z_5D8p^~?VS>f3(_EkL#e*#c6DM1AdE?7e+{^`YIq{G!!`>sJ=7Dp^pnZ1pP6yM6I7 zW5chXzi+_=$Q}|5$ce^^;|})m}D4>vvuQOEz6E8MVdk+aR>k zuecK19DxB*u2 zCtG|k?CJJuNIF`|6$^Qzu!QS+vjW#*j#qL1DD1DYzAwObDEp!8kSk56@XTD4!~Ly1qxgNZXf-ScwBnrJsZSgW0v*RLz@f9i<5-N_-!2VcaI z_u$v7N1$1?UCQg$m9?x6$l8H7Zqn-~wMJHz2zF~QwoGtk{YM>;wLQHR>Gi`}Bdc<2 zJ|#l={OZc8zLsBEd+?vFM6%{tGQL-7P#{6sw46qYI<0D-C3*T&8PjP9!z=ty7InSN91jWWkLD&rCKDf*0i>J-sSb{ z$}789ZF$}j$=lonEjgd9Me?eZ5Kq6ZywB7Td7JWmsq(>-wMt%lm32faSN^*4ZmT2m zwljxX`u)E+@*ey)&JkAa=GSg;Wqq^`$l4aWwesylwMbT#3x54FSJwOMkgWIAGFkol z53XLf)*)GMuVu3O*^ynnZm9#ZHaG38a^RLYvi=bLhyL`+^5fXQTzPM6USKp6GZf)BCkl!ig)7ptA zZ?5zHcfBKLZIQQcoc4n&Z*iTG*ZzJ%vHC zmJx%(>S<;&cf|~zz+U7Rp)dz?UT2mOvc53t#o0A{FR3l|IX#Kl3G{sO>AmlBx`6Yw zK__c09j+i{W6-F66{3e;R=Vue>e=o|+AEjtbt#tRPbh>9+=^j&u(p_kcsjzc?b<;f>Eh?XnjFWEFskI@WujGEO;dxz6 zEnspNegM{ZGihsR0pyjqgp72*!d6b8PIHQp?t0?_8 za=eWGM@3~>fm6P#ZQkmubB^8c6183WJG#;L4}Q8ir4H*x?M96})RUw6$X0oDlwSoM^+4~^joR9NI+D$? zF61AzeF~`yRC1PBHRA@fV&|y^XlWTK)N`j&R4rb8Pummxp0e0B@MPzEscvy}bVe=F zk!A-~xnhq)jr141&sljrd7rpKD<>^RTT2{Wsn?)(v-IW-KhbkHnNiKkOP%BB>(pAJ zFSiVdS0&n^i>UFBduEA+TeWK+%}HR>Pmg5`6X5BsRf`MWZM81 zqd{q{r==S`b8f4^&8vx?yR|%}dhRrO-mfgLTe^wv&1xRuRcJ=~vY)d^xl|e5G-Rd( z>4cRfe03x1M_s7r?0gfg8|4$V7pqe5H+O8Bc|Qt$tRQzR;ZOFD=(1S4sZ9Q;=ZsNn z{-e-`%G#Cu+3iBRcTu(HCEz?SO@1``SjB7{cDtrJ<;O<)I4VChZ;M~qT37lKcKH!) zG237DPcilx=|=Of`01#w)IZCu_FeqCS!Ie_H&?c;H`JVI=|pq;`st>G^L3&Av2_z& z|3sHIwq_EwTw?oI$2xW@&G_S|8_iQxcXT7`tX5D^Pb^}gO;q~E>LY`hX`}}i4y|MN zd!M?}RqI zf!9EQC^Vm#@*dNNS>M~KjM9AVnyX!9d414)XR7lWLL*QcAr~}bt2t2!i^!?Vvr#M$i#Df$S<>pex8G)g5|(YBqhK`Xo#4?h7W7_pJWK$+8=eT0 zK=00{z*NwC{b?{A^gY6HFcW6MY?uT3{^JBV5%m6LF3f}ZumBc9AuNI-SPV;GDJ+BK za5Ag_m5Zt?R35B>wNMOdcc^|{4;w&jwT&P<)M>B@P6yfX&V;id1ZTrJa4u|y^Wc2A z04{`!;J++l@l*B}!zFMj{0uIG%i#*R60U-u!`1K$xCX9;>)?900e%TL!mpqdZi1WP z*YF#-1%3;+!WOsuAeV{M& zgM8=@17IK=0fS&L90@~UC>#aDU^o5kJ zY~On*an9+ysLZBSue4@NkdjXpI<@Djvb7+`xbf7(V|rGK<$aqS$kF!B{$Kjw?}urP ziVesaavVle0&334>TdPPy>9&4S0kMYRjFPW*1Hx)qfzE4=X}kAEB*2ypl7)wiFY*s}X@ w@`mraM8VO{49iy6VA6E0Rm3UlnbvVH*S*&u^X1@s_h(*r^KEj!e>Cv_0j>YZv;Y7A literal 267264 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 - - - - - - -
- -

gLite Logging & Bookkeeping Server

- -

1. Release Description

- -

This release contains the gLite Logging & Bookkeeping -Server module v. 1.2.3. The following sections provide additional information about -the release content, the module dependencies, the know bugs and issues and a -list of bugs closed since the previous release. For information about -installing and using the gLite Logging & Bookkeeping Server, please refer -to the gLite Installation and User Guides.

- -

2. Changes in this Release

- -

This release introduces the following changes:

- -

 

- -
    -
  • All R-GMA service publishing - instances in the configuration template now have default values
  • -
  • Bug fixes (see below for the complete lists)
  • -
- -

3. Release contents

- -

The gLite Logging & Bookkeeping Server v. 1.2.3 is -composed of the following gLite components:

- -

 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Component name

-
-

Version

-
-

File

-
-

org.glite.deployment.lb

-
-

1.2.3

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/installers/glite-lb_installer.sh -

-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/noarch/RPMS/glite-lb-config-1.2.3-1.noarch.rpm

-

apt-get install - glite-lb-config

-
-

org.glite.deployment.config

-
-

1.1.1

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/noarch/RPMS/glite-config-1.1.1-3.noarch.rpm

-
-

org.glite.lb.client-interface

-
-

1.0.3

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/glite-lb-client-interface-1.0.3-1.i386.rpm

-
-

org.glite.lb.common

-
-

1.1.4

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/glite-lb-common-1.1.4-1.i386.rpm

-
-

org.glite.lb.logger

-
-

1.0.1

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/glite-lb-logger-1.0.1-1.i386.rpm

-
-

org.glite.lb.server

-
-

1.0.1

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/glite-lb-server-1.0.1-1.i386.rpm

-
-

org.glite.lb.server-bones

-
-

1.0.0

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/glite-lb-server-bones-1.0.0-1.i386.rpm

-
-

org.glite.lb.ws-interface

-
-

1.0.1

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/glite-lb-ws-interface-1.0.1-1.i386.rpm

-
-

org.glite.security.proxyrenewal

-
-

1.0.13

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/glite-security-proxyrenewal-1.0.13-1.i386.rpm

-
-

org.glite.wms-utils.exception

-
-

1.0.1

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/glite-wms-utils-exception-1.0.1-1.i386.rpm

-
-

org.glite.wms-utils.jobid

-
-

1.0.0

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/glite-wms-utils-jobid-1.0.0-1.i386.rpm

-
-

org.glite.security.voms

-
-

1.2.32

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/glite-security-voms-1.2.32-1.i386.rpm

-
-

org.gridsite.core

-
-

1.1.5

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/bin/rhel30/i386/RPMS/gridsite-1.1.5-1.i386.rpm

-
- -

 

- -

4. Dependencies

- -

The gLite Logging & Bookkeeping Server v. 1.2.2 module -has the following dependencies:

- -

 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Component name

-
-

Version

-
-

RPM file name

-
-

gLite Security Utilities

-
-

1.0.1

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/installers/glite-security-utils_installer.sh

-
-

gLite R-GMA Service Publisher

-
-

4.2.0

-
-

http://glite.web.cern.ch/glite/packages/R1.1/R20050430/installers/glite-rgma-servicetool_installer.sh

-
-

GPT

-
-

VDT 1.2.2

-
-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gpt-VDT1.2.2rh9-1.i386.rpm

-
-

VDT Globus Essentials

-
-

VDT 1.2.2

-
-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/vdt_globus_essentials-VDT1.2.2rh9-1.i386.rpm

-
-

MySQL-server

-
-

4.0.20

-
-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-server-4.0.20-0.i386.rpm

-
-

MySQL-client

-
-

4.0.20

-
-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-client-4.0.20-0.i386.rpm

-
-

ares

-
-

1.1.1

-
-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/ares-1.1.1-EGEE.i386.rpm

-
-

myproxy

-
-

1.14

-
-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/myproxy-1.14-EGEE.i386.rpm

-
-

perl-Expect.pm

-
-

1.01

-
-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/per-Expect.pm-1.01-9.i386.rpm

-
-

Java SDK/JRE

-
-

1.4.2

-
-

http://java.sun.com/j2se/1.4.2/download.html

-
- -

 

+ margin-left:54.0pt; + text-align:justify; + text-indent:-18.0pt; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoListNumber4, li.MsoListNumber4, div.MsoListNumber4 + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:72.0pt; + text-align:justify; + text-indent:-18.0pt; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoListNumber5, li.MsoListNumber5, div.MsoListNumber5 + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:90.0pt; + text-align:justify; + text-indent:-18.0pt; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoTitle, li.MsoTitle, div.MsoTitle + {margin-top:12.0pt; + margin-right:0mm; + margin-bottom:3.0pt; + margin-left:0mm; + text-align:center; + font-size:16.0pt; + font-family:Arial; + font-weight:bold;} +p.MsoClosing, li.MsoClosing, div.MsoClosing + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:216.0pt; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoSignature, li.MsoSignature, div.MsoSignature + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:216.0pt; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoBodyText, li.MsoBodyText, div.MsoBodyText + {margin-top:3.0pt; + margin-right:0mm; + margin-bottom:3.0pt; + margin-left:0mm; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:18.0pt; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoListContinue, li.MsoListContinue, div.MsoListContinue + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:18.0pt; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoListContinue2, li.MsoListContinue2, div.MsoListContinue2 + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:36.0pt; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoListContinue3, li.MsoListContinue3, div.MsoListContinue3 + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:54.0pt; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoListContinue4, li.MsoListContinue4, div.MsoListContinue4 + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:72.0pt; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoListContinue5, li.MsoListContinue5, div.MsoListContinue5 + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:90.0pt; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoMessageHeader, li.MsoMessageHeader, div.MsoMessageHeader + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:54.0pt; + text-align:justify; + text-indent:-54.0pt; + background:#CCCCCC; + border:none; + padding:0mm; + font-size:12.0pt; + font-family:Arial;} +p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:3.0pt; + margin-left:0mm; + text-align:center; + font-size:12.0pt; + font-family:Arial;} +p.MsoSalutation, li.MsoSalutation, div.MsoSalutation + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoDate, li.MsoDate, div.MsoDate + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoBodyTextFirstIndent, li.MsoBodyTextFirstIndent, div.MsoBodyTextFirstIndent + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:0mm; + text-align:justify; + text-indent:10.5pt; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoBodyTextFirstIndent2, li.MsoBodyTextFirstIndent2, div.MsoBodyTextFirstIndent2 + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:18.0pt; + text-align:justify; + text-indent:10.5pt; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoNoteHeading, li.MsoNoteHeading, div.MsoNoteHeading + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoBodyText2, li.MsoBodyText2, div.MsoBodyText2 + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:0mm; + text-align:justify; + line-height:200%; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoBodyText3, li.MsoBodyText3, div.MsoBodyText3 + {margin-top:2.5pt; + margin-right:0mm; + margin-bottom:2.5pt; + margin-left:0mm; + text-align:justify; + page-break-after:avoid; + font-size:10.0pt; + font-family:Arial;} +p.MsoBodyTextIndent2, li.MsoBodyTextIndent2, div.MsoBodyTextIndent2 + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:18.0pt; + text-align:justify; + line-height:200%; + font-size:11.0pt; + font-family:"Times New Roman";} +p.MsoBodyTextIndent3, li.MsoBodyTextIndent3, div.MsoBodyTextIndent3 + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:18.0pt; + text-align:justify; + font-size:8.0pt; + font-family:"Times New Roman";} +p.MsoBlockText, li.MsoBlockText, div.MsoBlockText + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + text-indent:17.0pt; + font-size:11.0pt; + font-family:"Times New Roman";} +a:link, span.MsoHyperlink + {color:blue; + text-decoration:underline;} +a:visited, span.MsoHyperlinkFollowed + {color:purple; + text-decoration:underline;} +p.MsoDocumentMap, li.MsoDocumentMap, div.MsoDocumentMap + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + background:navy; + font-size:11.0pt; + font-family:Tahoma;} +p.MsoPlainText, li.MsoPlainText, div.MsoPlainText + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + font-size:10.0pt; + font-family:"Courier New";} +p.MsoAutoSig, li.MsoAutoSig, div.MsoAutoSig + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman";} +p + {margin-top:5.0pt; + margin-right:0mm; + margin-bottom:5.0pt; + margin-left:0mm; + text-align:justify; + font-size:12.0pt; + font-family:"Times New Roman";} +address + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + font-size:11.0pt; + font-family:"Times New Roman"; + font-style:italic;} +pre + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + font-size:10.0pt; + font-family:"Courier New";} +tt + {font-family:"Courier New";} +p.MsoCommentSubject, li.MsoCommentSubject, div.MsoCommentSubject + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + font-size:10.0pt; + font-family:"Times New Roman"; + font-weight:bold;} +p.MsoAcetate, li.MsoAcetate, div.MsoAcetate + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + font-size:8.0pt; + font-family:Tahoma;} +p.3eretraitnormal, li.3eretraitnormal, div.3eretraitnormal + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:3.0pt; + margin-left:102.9pt; + text-align:justify; + text-indent:-17.85pt; + font-size:12.0pt; + font-family:"Times New Roman";} +p.2eretraitjustifi, li.2eretraitjustifi, div.2eretraitjustifi + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:3.0pt; + margin-left:40.0mm; + text-align:justify; + text-indent:-7.1pt; + line-height:12.0pt; + font-size:11.0pt; + font-family:"Times New Roman";} +p.2eretraitnormal, li.2eretraitnormal, div.2eretraitnormal + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:3.0pt; + margin-left:18.0pt; + text-align:justify; + text-indent:-18.0pt; + font-size:12.0pt; + font-family:"Times New Roman";} +p.1erretraitnormal, li.1erretraitnormal, div.1erretraitnormal + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:12.0pt; + margin-left:0mm; + text-align:justify; + font-size:12.0pt; + font-family:"Times New Roman";} +p.titrebloc, li.titrebloc, div.titrebloc + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + font-size:11.0pt; + font-family:Arial; + font-weight:bold;} +p.TitreTable, li.TitreTable, div.TitreTable + {margin-top:6.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:center; + font-size:12.0pt; + font-family:Arial; + font-weight:bold;} +p.form, li.form, div.form + {margin-top:6.0pt; + margin-right:7.05pt; + margin-bottom:0mm; + margin-left:0mm; + margin-bottom:.0001pt; + text-align:justify; + background:black; + border:none; + padding:0mm; + font-size:14.0pt; + font-family:"Univers \(W1\)"; + color:white; + text-transform:uppercase; + font-weight:bold;} +p.HB, li.HB, div.HB + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:12.0pt; + margin-left:0mm; + text-align:justify; + page-break-after:avoid; + font-size:12.0pt; + font-family:"Times New Roman"; + color:black; + font-weight:bold;} +p.reference, li.reference, div.reference + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:justify; + page-break-after:avoid; + font-size:9.0pt; + font-family:Arial;} +p.1erretraitjustifi, li.1erretraitjustifi, div.1erretraitjustifi + {margin-top:6.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:14.2pt; + text-align:justify; + text-indent:-14.2pt; + font-size:11.0pt; + font-family:"Times New Roman";} +p.ZonetatEnTte, li.ZonetatEnTte, div.ZonetatEnTte + {margin-top:2.0pt; + margin-right:2.85pt; + margin-bottom:2.0pt; + margin-left:2.85pt; + text-align:center; + page-break-after:avoid; + font-size:36.0pt; + font-family:Arial; + text-transform:uppercase; + font-weight:bold;} +p.DocTitle, li.DocTitle, div.DocTitle + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:center; + font-size:22.0pt; + font-family:Arial; + font-variant:small-caps; + color:gray; + letter-spacing:4.0pt; + font-weight:bold;} +p.DocDate, li.DocDate, div.DocDate + {margin-top:6.0pt; + margin-right:0mm; + margin-bottom:6.0pt; + margin-left:0mm; + text-align:justify; + font-size:11.0pt; + font-family:Arial; + layout-grid-mode:line; + font-weight:bold;} +p.DocSubTitle, li.DocSubTitle, div.DocSubTitle + {margin-top:2.0pt; + margin-right:0mm; + margin-bottom:2.0pt; + margin-left:0mm; + text-align:center; + line-height:12.0pt; + font-size:12.0pt; + font-family:Arial; + font-variant:small-caps; + color:gray; + letter-spacing:4.0pt; + font-weight:bold;} + /* Page Definitions */ + @page Section1 + {size:595.3pt 841.9pt; + margin:70.85pt 70.85pt 70.85pt 70.85pt;} +div.Section1 + {page:Section1;} + /* List Definitions */ + ol + {margin-bottom:0mm;} +ul + {margin-bottom:0mm;} +--> + -

5. Known bugs and issues

+ -

This release has the -following bugs and issues. Bug numbers refer to the gLite Bug Tracking system -database hosted on the CERN Savannah system at https://savannah.cern.ch/bugs/?group=jra1mdw -.

+ -

 

+
-
    -
  • If the mysql root password is set - and it is not specified in the mysql.conf file, the configuration script - fails. This bug will be fixed in the next release
  • -
  • No removal procedure is provided - with this release apart from the removal of the RPMS. Any account, group - or other resource created during the module configuration must be manually - cleaned.
  • -
+

gLite Logging & Bookkeeping Server

-

 

+

1. Release Description

-

Known open bugs:

+

This release contains the gLite Logging & Bookkeeping +Server module v. 2.1.1. The following sections provide additional information about +the release content, the module dependencies, the know bugs and issues and a +list of bugs closed since the previous release. For information about +installing and using the gLite Logging & Bookkeeping Server, please refer +to the gLite Installation and User Guides.

-

 

+

2. Changes in this release

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Bug number

-
-

Description

-
-

 

-
-

 #7053

-
-

LB configuration fails if the - mysql root pwd is set 

-
-

 

-
-

 #7237

-
-

Intermittent errors with job - submission 

-
-

 

-
-

 #7300

-
-

update of the lb instructions - at the end of the installer script  

-
-

 

-
-

 #7305

-
-

lb.database.username paramenter - in config file 

-
-

 

-
-

 #7307

-
-

lb config script does _not_ - fail if mysql root password is set 

-
-

 

-
-

 #7324

-
-

lb-bkserver is running with no - pid 

-
-

 

-
-

 #7389

-
-

LB server and WMS local logger - related issues 

-
-

 

-
+

2.1. Changes in functionality

-

 

+

There are no functional changes in this +release.

-

Bugs fixed in this or previous releases, but not yet officially -tested:

+

2.2. Changes in Configuration

-

 

+

The following new parameters have been +added to the glite-lb.cfg.xml file:

- - - - - - - - - - - - - - - - - - - - - +

 

+ +
-

Bug number

-
-

Description

-
-

 

-
-

 #6412

-
-

--start and --stop options not - documented in glite-ce-config.py, glite-lb-config.py 

-
-

 

-
-

 #6722

-
-

glite-job-status -all doesn't - work 

-
-

 

-
-

 #7151

-
-

There are conflicts when - installing WMS and LB on the same node 

-
-

 

-
- - - - - - - - - - - -
-

 #7180

+

Parameter name

-

Logging & Bookkeping UI  

+
+

Default value

-

 

+
+

Description

-

 #7321

+
+

rgma.servicetool.activate

-

creation of indices fails - randomly 

+

true

-

 

+

Turn on/off servicetool for the node.

+

[Example: true ] [Type: 'boolean']

-

 #7884

+
+

set.mysql.root.password

-

local header files distributed - in RPMs.  

+

false

-

 

+

If this parameter is true, then the root + password of the mysql database is set to the value specified in + mysql.root.password if it not yet set. This parameter has       no effect if + the database root password is already set. It can be used to ease automated installation + and configuration of the service, if mysql is not managed in some other way.

+

[Example: false][Type: boolean]

-

 #7910

+
+

mysql.max_allowed_packet

-

Duplicate apostroph in MySQL - calls 

+

17

-

 

+

This parameter allows to set the + max_allowed_packet parameter in the mysql configuration file /etc/my.cnf. The + default recommended value for the LB server is 17MB.

+

[Example: 17][Type: Integer][Unit: MB]

-

 

+

 

-

6. Bugs closed since last release

+

The R-GMA Service Publisher (aka R-GMA +servicetool) parameters are now automatically handled by the configuration +script and do not need to be explicitly set anymore in the configuration file. +The parameters can be set in the configuration file to override the default +values.

-

This release fixes the -following bugs and issues. Bug numbers refer to the gLite Bug Tracking system -database hosted on the CERN Savannah system at https://savannah.cern.ch/bugs/?group=jra1mdw

+

 

-

 

+

3. Release contents

- +

3.1. Glite sub-deployment modules

+ +

The gLite Logging and Bookkeeping module requires the +following sub-modules:

+ +

 

+ +

-          +gLite Security Utilities

+ +

-          +gLite R-GMA Servicetool

+ +

 

+ +

The sub-modules are automatically installed with the LB +module. For more information about these sub-modules please refer to the +specific release notes and installation instructions.

+ +

3.2. Glite RPMS

+ +

The gLite Logging & Bookkeeping Server v. 2.1.1 is +composed of the following gLite components:

+ +

 

+ +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Bug number

+

Component name

-

Description

+

Description

-

 #5850

+
+

Version

-

glite-lb-config.py has - glite.location and globus.location not set in params[] 

+
+

File

-

 #5901

+

glite-config

-

mysqlaccess command fails with - Broken pipe if mysql socket file is in /tmp  

+

gLite configuration scripts

-

 #5908

-
-

Environment variables set via - the configuration script are not passed to daemon startup scripts 

+

1.6.22

-

 #6057

-
-

glite-lb configuration scripts - has missing dependency (CGI.pm) 

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/noarch/RPMS/glite-config-1.6.22-1.noarch.rpm

-

 #6075

-
-

glite-lb-config.py crashes with - KeyError: GLITE_CERT_DIR 

+
+

glite-jp-common

-

 #6190

-
-

LB local logger doesn't start - on the CE node 

+

 

-

 #6366

-
-

LB install script:: Fails but - no error reported 

+

1.1.0

-

 #6415

-
-

glite-lb-bkserver does not - start and blocks execution of glite-lb-config.py 

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-common-1.1.0-1.i386.rpm

-

 #7296

+
+

glite-jp-primary

-

glite-lb-config.py crashes with - a TypeError exception 

+
+

 

-

 #7753

+

1.1.1

-

glite-lb-config.py fails with - an indentation error 

+
+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-primary-1.1.1-1.i386.rpm

-

 #7976

+
+

glite-jp-server-common

-

edg-job-status not working with - voms proxies 

+
+

 

-

 #8094

+

1.0.0

-

interlogd on the WMS doesn't - restart 

+
+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-server-common-1.0.0-1.i386.rpm

- -

 

- -
-
- -

7. Previous Releases

- -

7.1. Release 1.2.2

- -

7.1.1. Release Description

- -

This release contains the gLite Logging & Bookkeeping -Server module v. 1.2.2. The following sections provide additional information -about the release content, the module dependencies, the know bugs and issues -and a list of bugs closed since the previous release. For information about -installing and using the gLite Logging & Bookkeeping Server, please refer -to the gLite Installation and User Guides.

- -

7.1.2. Changes in this Release

- -

This release introduces the following changes:

- -

 

- -
    -
  • Implemented status method
  • -
  • Added definition of PERL5LIB env var
  • -
  • Stopping and starting the database before the index - creation (just after the database is created and the user granted) to fix - access denied error
  • -
  • Moved creation of indices inside database creation (if - database exists indices must not be recreated)
  • -
  • GLITE_USER parameter is not exposed anymore in the - configuration file; instead the module uses the same user parameters as - WMS to allow installation on same node
  • -
  • LB admin tools are now installed in sbin, not in bin
  • -
  • Bug fixes (see below for the complete lists)
  • -
- -

7.1.3. Release contents

- -

The gLite Logging & Bookkeeping Server v. 1.2.2 is -composed of the following gLite components:

- -

 

- - - + - - - + - - - + - - - + - - - + - - - + - - - + - - - + - - - + - - - + - - - + - - - + - - - + - - - + - -
+

glite-jp-ws-interface

+
-

Component name

+

 

-

Version

+
+

1.1.0

-

File

+
+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-jp-ws-interface-1.1.0-0.i386.rpm

-

org.glite.deployment.lb

+

glite-lb-client-interface

+
+

L&B client library header files

-

1.2.2

+

2.1.0

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/installers/glite-lb_installer.sh -

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/noarch/RPMS/glite-lb-config-1.2.2-1.noarch.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-client-interface-2.1.0-1.i386.rpm

-

org.glite.deployment.config

+

glite-lb-config

+
+

gLite LB Configuration files

-

1.0.0

+

2.1.1

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/noarch/RPMS/glite-config-1.0.0-1.noarch.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-config-2.1.1-1.i386.rpm

-

org.glite.lb.client-interface

+

glite-lb-common

+
+

L&B common subroutines library

-

1.0.2

+

3.0.1

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/glite-lb-client-interface-1.0.2-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-common-3.0.1-1.i386.rpm

-

org.glite.lb.common

+

glite-lb-logger

+
+

L&B local logger

-

1.1.4

+

1.2.1

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/glite-lb-common-1.1.4-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-logger-1.2.1-1.i386.rpm

-

org.glite.lb.logger

+

glite-lb-server

+
+

L&B bookkeeping server

-

1.0.1

+

1.3.3

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/glite-lb-logger-1.0.1-1.i386.rpm

+ href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-server-1.3.3-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-server-1.3.3-1.i386.rpm

-

org.glite.lb.server

+

glite-lb-server-bones

+
+

L&B server bones

-

1.0.1

+

2.1.1

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/glite-lb-server-1.0.1-1.i386.rpm

+ href="http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-server-bones-2.1.1-1.i386.rpm">http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-server-bones-2.1.1-1.i386.rpm

-

org.glite.lb.server-bones

+

glite-lb-ws-interface

+
+

 

-

1.0.0

+

2.1.0

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/glite-lb-server-bones-1.0.0-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-lb-ws-interface-2.1.0-1.i386.rpm

-

org.glite.lb.ws-interface

+

glite-rgma-servicetool-config

+
+

gLite R-GMA servicetool installation

-

1.0.1

+

5.2.2

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/glite-lb-ws-interface-1.0.1-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/noarch/RPMS/glite-rgma-servicetool-config-5.2.2-1.noarch.rpm

-

org.glite.security.proxyrenewal

+

glite-security-gsoap-plugin

+
+

gSOAP plugin and gss libraries

-

1.0.11

+

1.2.1

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/glite-security-proxyrenewal-1.0.11-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-security-gsoap-plugin-1.2.1-0.i386.rpm

-

org.glite.wms-utils.exception

+

glite-security-utils-config

+
+

gLite Security Utilities configuration files

-

1.0.1

+

1.2.1

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/glite-wms-utils-exception-1.0.1-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/noarch/RPMS/glite-security-utils-config-1.2.1-1.noarch.rpm

-

org.glite.wms-utils.jobid

+

glite-security-voms-api-c

+
+

 

-

1.0.0

+

1.6.10

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/glite-wms-utils-jobid-1.0.0-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-security-voms-api-c-1.6.10-0.i386.rpm

-

org.glite.security.voms

+

glite-wms-utils-exception

+
+

 

-

1.2.32

+

1.0.3

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/glite-security-voms-1.2.32-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-wms-utils-exception-1.0.3-1.i386.rpm

-

org.gridsite.core

+

glite-wms-utils-jobid

+
+

 

-

1.1.5

+

1.0.2

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/bin/rhel30/i386/RPMS/gridsite-1.1.5-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/R1.5/R20051130/bin/rhel30/i386/RPMS/glite-wms-utils-jobid-1.0.2-1.i386.rpm

-

 

- -

7.1.4. Dependencies

+

4. Dependencies

-

The gLite Logging & Bookkeeping Server v. 1.2.2 module +

The gLite Logging & Bookkeeping Server v. 2.1.1 module has the following dependencies:

 

@@ -1896,232 +1619,276 @@ has the following dependencies:

- - + - - + - - - + - - - - + - - - + - - + - - - - - - - - - - - + - - - - + - - - + -

Component name

+

Description

+

Version

RPM file name

-

gLite Security Utilities

+

c-ares

+
+

A library that performs asynchronous DNS operations

-

1.0.0

+

1.3.0

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/installers/glite-security-utils_installer.sh

+

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/c-ares-1.3.0-1.slc3.i386.rpm

-

gLite R-GMA Service Publisher

+

gpt

+
+

The Grid Packaging Toolkit (GPT)

-

4.1.5

+

VDT1.2.2rh9

-

http://glite.web.cern.ch/glite/packages/R1.0/R20050331/installers/glite-rgma-servicetool_installer.sh

+

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gpt-VDT1.2.2rh9-1.i386.rpm

GPT

+ 8.0pt'>gridsite

-

VDT 1.2.2

+

GridSite

+
+

1.1.15

-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gpt-VDT1.2.2rh9-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/gridsite-1.1.15-1.i386.rpm

VDT Globus Essentials

+ 8.0pt'>j2re

-

VDT 1.2.2

+

Java JRE

+
+

1.4.2

-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/vdt_globus_essentials-VDT1.2.2rh9-1.i386.rpm

+

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/j2re-1_4_2_08-linux-i586.rpm

MySQL-server

+ 8.0pt'>myproxy

+
+

Credential repository for the Grid.

-

4.0.20

+

1.14

-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-server-4.0.20-0.i386.rpm

+

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/myproxy-1.14-EGEE.i386.rpm

MySQL-client

-

4.0.20

-
-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-client-4.0.20-0.i386.rpm

-

ares

+ 8.0pt'>MySQL - Client

-

1.1.1

+

4.1.11

-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/ares-1.1.1-EGEE.i386.rpm

+

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-client-4.1.11-0.i386.rpm

myproxy

+ 8.0pt'>MySQL-server

+
+

MySQL

-

1.14

+

4.1.11

-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/myproxy-1.14-EGEE.i386.rpm

+

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/MySQL-server-4.1.11-0.i386.rpm

perl-Expect.pm

+

Expect.pm module for perl (./id/A/AU/AUSCHUTZ)

+
-

1.01

+

1.01

-

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/per-Expect.pm-1.01-9.i386.rpm

+

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/perl-Expect.pm-1.01-9.i386.rpm

Java SDK/JRE

+ 8.0pt'>vdt_globus_essentials

-

1.4.2

+

Virtual Data Toolkit

+
+

VDT1.2.2rh9

-

http://java.sun.com/j2se/1.4.2/download.html

+

http://glite.web.cern.ch/glite/packages/externals/bin/rhel30/RPMS/vdt_globus_essentials-VDT1.2.2rh9-1.i386.rpm

 

-

7.1.5. Known bugs and issues

+

5. Known bugs and issues

-

This release has the -following bugs and issues. Bug numbers refer to the gLite Bug Tracking system -database hosted on the CERN Savannah system at https://savannah.cern.ch/bugs/?group=jra1mdw -.

+

This +release has the following bugs and issues. Bug numbers refer to the gLite Bug +Tracking system database hosted on the CERN Savannah system at Hhttps://savannah.cern.ch/bugs/?group=jra1mdwH .