From c042941290e017e54dd40786bda07ebc58befdf0 Mon Sep 17 00:00:00 2001 From: Alain Takoudjou <talino@tiolive.com> Date: Mon, 17 Dec 2012 17:07:25 +0100 Subject: [PATCH] Add BonjourGrid-Master software release --- software/bonjourgrid/boinc-app.cfg | 52 ++++++ .../bonjourgrid.src/bonjourgrid.tar.gz | Bin 0 -> 21143 bytes software/bonjourgrid/condor_job/simple | Bin 0 -> 8531 bytes software/bonjourgrid/condor_job/submit | 13 ++ software/bonjourgrid/input/input_file | 1 + software/bonjourgrid/instance-bonjourgrid.cfg | 75 +++++++++ software/bonjourgrid/instance-condor.cfg | 96 +++++++++++ software/bonjourgrid/instance-redis.cfg | 53 ++++++ software/bonjourgrid/instance.cfg | 12 ++ software/bonjourgrid/software.cfg | 151 ++++++++++++++++++ .../bonjourgrid/templates/template_result | 13 ++ software/bonjourgrid/templates/template_wu | 10 ++ 12 files changed, 476 insertions(+) create mode 100644 software/bonjourgrid/boinc-app.cfg create mode 100644 software/bonjourgrid/bonjourgrid.src/bonjourgrid.tar.gz create mode 100755 software/bonjourgrid/condor_job/simple create mode 100644 software/bonjourgrid/condor_job/submit create mode 100644 software/bonjourgrid/input/input_file create mode 100644 software/bonjourgrid/instance-bonjourgrid.cfg create mode 100644 software/bonjourgrid/instance-condor.cfg create mode 100644 software/bonjourgrid/instance-redis.cfg create mode 100644 software/bonjourgrid/instance.cfg create mode 100644 software/bonjourgrid/software.cfg create mode 100644 software/bonjourgrid/templates/template_result create mode 100644 software/bonjourgrid/templates/template_wu diff --git a/software/bonjourgrid/boinc-app.cfg b/software/bonjourgrid/boinc-app.cfg new file mode 100644 index 000000000..d57390c3b --- /dev/null +++ b/software/bonjourgrid/boinc-app.cfg @@ -0,0 +1,52 @@ +[buildout] + +parts = + boinc-server + certificate-authority + ca-stunnel + logrotate + logrotate-entry-apache + logrotate-entry-stunnel + cron + cron-entry-logrotate + cron-entry-boinc + promise + slapmonitor + slapreport + frontend-promise + content-promise + publish-connection-informations +#User application + boinc-app +#slap application + slap-application + +extends = + ${template-boinc:output} + +[boincdirectory] +recipe = slapos.cookbook:mkdirectory +boinc = $${rootdirectory:etc}/boinc/ + +#Override Boinc server part with custom variables for BonjourGrid +#Change the wrapper directory to /bin/boinc/ +[boinc-server] +wrapper-dir = $${boincdirectory:boinc} + +#Deploy a Boinc application in existing boinc server instance. do the same thing for another boinc app instance +[boinc-app] +<= boinc-server +recipe = slapos.cookbook:boinc.app +binary = ${boinc-application:location}/${boinc-application:filename} +#app-name should be unique (for all app deployed an boinc instance) +app-name = ${boinc-application:app-name} +version = ${boinc-application:version} +platform = ${boinc-application:platform} +extension = ${boinc-application:exec-extension} +#templates +template-result = ${template_result:location}/${template_result:filename} +template-wu = ${template_wu:location}/${template_wu:filename} +#Work Unit +wu-number = ${boinc-application:wu-number} +input-file = ${template_input:location}/${template_input:filename} + diff --git a/software/bonjourgrid/bonjourgrid.src/bonjourgrid.tar.gz b/software/bonjourgrid/bonjourgrid.src/bonjourgrid.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..904cbd300407ea74a96418b133463068c9bd6f37 GIT binary patch literal 21143 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%0AX< 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 literal 0 HcmV?d00001 diff --git a/software/bonjourgrid/condor_job/simple b/software/bonjourgrid/condor_job/simple new file mode 100755 index 0000000000000000000000000000000000000000..c1888e1b29dbd790f2d1d260b658b25b9f4a5b73 GIT binary patch literal 8531 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 literal 0 HcmV?d00001 diff --git a/software/bonjourgrid/condor_job/submit b/software/bonjourgrid/condor_job/submit new file mode 100644 index 000000000..eda31d62a --- /dev/null +++ b/software/bonjourgrid/condor_job/submit @@ -0,0 +1,13 @@ +Universe = vanilla +Executable = simple +Arguments = 4 10 +Log = simple.log +Output = simple.$(Process).out +Error = simple.$(Process).error +Queue + +Arguments = 4 11 +Queue + +Arguments = 4 12 +Queue \ No newline at end of file diff --git a/software/bonjourgrid/input/input_file b/software/bonjourgrid/input/input_file new file mode 100644 index 000000000..f500b146d --- /dev/null +++ b/software/bonjourgrid/input/input_file @@ -0,0 +1 @@ +test string \ No newline at end of file diff --git a/software/bonjourgrid/instance-bonjourgrid.cfg b/software/bonjourgrid/instance-bonjourgrid.cfg new file mode 100644 index 000000000..f9b239e1b --- /dev/null +++ b/software/bonjourgrid/instance-bonjourgrid.cfg @@ -0,0 +1,75 @@ +[buildout] + +parts = + redis + bonjourgrid + boinc-server + certificate-authority + ca-stunnel + logrotate + logrotate-entry-apache + logrotate-entry-stunnel + cron + cron-entry-logrotate + cron-entry-boinc + promise + slapmonitor + slapreport + frontend-promise + content-promise + publish-connection-informations +#User application + boinc-app +#slap application + slap-application + condor + app-submit + +extends = + ${template-condor:output} + ${boinc-instance:output} + ${template-redis:output} + +[basedirectory] +recipe = slapos.cookbook:mkdirectory +log = $${rootdirectory:var}/log/ +run = $${rootdirectory:var}/run/ +backup = $${rootdirectory:srv}/backup/ +promises = $${rootdirectory:etc}/promise/ +bonjourgrid = $${rootdirectory:etc}/bonjourgrid.d/ +bg_base = $${rootdirectory:srv}/bonjourgrid/ + +[bonjourgrid] +recipe = slapos.cookbook:bonjourgrid +master_script = ${bonjourgrid:location}/BonjourGridMaster.py +work_dir = $${basedirectory:bg_base} +install_dir = ${bonjourgrid:location} +condor-wrapper = $${condor:wrapper-dir} +boinc-wrapper = $${boinc-server:wrapper-dir} +boinc_condor_wrapper = $${basedirectory:bonjourgrid}/bonjourGrid +wrapper = $${basedirectory:services}/bonjourGrid +log_file = $${basedirectory:log}/bonjourgrid.log +pid_file = $${basedirectory:run}/bonjourgrid.pid +nworkers = $${slap-parameter:worker-number} +redis-url = $${slap-parameter:server-url} +redis-port = $${slap-parameter:server-port} +redis-passwd = $${slap-parameter:server-password} +type = $${slap-parameter:project-type} +python-bin = ${buildout:executable} + +url-boinc = $${boinc-app:url-base}$${slap-application:project}/ +condor_host = $${slap-parameter:condor_host} +ipv6 = $${condor:ip} + +[publish-connection-informations] +bg_instance_type = $${slap-parameter:project-type} + +[slap-parameter] +project = bonjourgrid +server-url = $${redis:ipv6} +server-port = $${redis:port} +server-password = $${redis:passwd} +worker-number = 1 +#specified if we want to run BOINC or Condor project: +#project-type = boinc | condor | both +project-type = boinc \ No newline at end of file diff --git a/software/bonjourgrid/instance-condor.cfg b/software/bonjourgrid/instance-condor.cfg new file mode 100644 index 000000000..c75fc1463 --- /dev/null +++ b/software/bonjourgrid/instance-condor.cfg @@ -0,0 +1,96 @@ +[buildout] +parts = + condor + app-submit + publish-connection-informations + +eggs-directory = ${buildout:eggs-directory} +develop-eggs-directory = ${buildout:develop-eggs-directory} +#Enable download +newest = false +offline = false + +# Create all needed directories +[rootdirectory] +recipe = slapos.cookbook:mkdirectory +etc = $${buildout:directory}/etc/ +var = $${buildout:directory}/var/ +condor = $${buildout:directory}/condor/ +job = $${buildout:directory}/jobs/ +bin = $${buildout:directory}/bin/ +sbin = $${buildout:directory}/sbin/ +srv = $${buildout:directory}/srv/ + +[basedirectory] +recipe = slapos.cookbook:mkdirectory +log = $${rootdirectory:var}/log/ +run = $${rootdirectory:var}/run/ +backup = $${rootdirectory:srv}/backup/ +promises = $${rootdirectory:etc}/promise/ +condor = $${rootdirectory:etc}/condor/ + +[wrapperdirectory] +recipe = slapos.cookbook:mkdirectory +wrapper = $${basedirectory:run}/condor + +[condor] +recipe = slapos.cookbook:condor +#Change default wrapper dir to /etc/condor/ +wrapper-dir = $${basedirectory:condor} +ip = $${slap-network-information:global-ipv6} +package = ${condor:location} +rootdirectory = $${buildout:directory} +local-dir = $${rootdirectory:condor} +job-dir = $${rootdirectory:job} +java-bin = ${java:location}/bin +bin = $${wrapperdirectory:wrapper}/bin/ +sbin = $${wrapperdirectory:wrapper}/sbin/ +dash = ${dash:location}/bin/dash + +environment = + LD_LIBRARY_PATH=${libexpat:location}/lib:${kerberos:location}/lib:${openldap:location}/lib:${zlib:location}/lib + PATH=${perl:location}/bin:${java:location}/bin:${kerberos:location}/bin:${openldap:location}/bin:%(PATH)s + HOME=$${rootdirectory:condor} + HOSTNAME=$${slap-parameter:condor_host} + +#Condor user parameter +condor_host = $${slap-parameter:condor_host} +collector_name = $${slap-parameter:condor_collector_name} +#Condor machine role: worker=submit,execute manager=manager,submit +machine-role = $${slap-parameter:condor_role} +disk-space = $${slap-parameter:condor_diskspace} +allowed-write = $${slap-parameter:condor_allowed-write} +admin-email = $${slap-parameter:condor_admin-email} + +[app-submit] +<= condor +recipe = slapos.cookbook:condor.submit +app-name = $${slap-parameter:condor_app-name} +#user can specifie a list files to use in application, one per line +files = $${slap-parameter:condor_files} +description-file = $${slap-parameter:condor_description-file} +executable = $${slap-parameter:condor_executable} +executable-name = $${slap-parameter:condor_executable-name} + +# Publish all instance parameters (url of instance) +[publish-connection-informations] +recipe = slapos.cookbook:publish +condor_ipv6_address = $${condor:ip} +condor_instance_type = $${condor:machine-role} +condor_host = $${condor:condor_host} + +[slap-parameter] +# Default values if not specified +condor_host = [$${slap-network-information:global-ipv6}] +condor_collector_name = SLAPOS-CONDOR-POOL +condor_role = manager +condor_diskspace = 5 +condor_admin-email = +condor_allowed-write = $${:condor_host} +#submit application +condor_app-name = condor_test +condor_description-file = ${description-file:location}/${description-file:filename} +condor_executable = ${executable:location}/${executable:filename} +condor_executable-name = ${executable:filename} +#user can specifie a list of input file, one per line +condor_files = diff --git a/software/bonjourgrid/instance-redis.cfg b/software/bonjourgrid/instance-redis.cfg new file mode 100644 index 000000000..81c8dfe1b --- /dev/null +++ b/software/bonjourgrid/instance-redis.cfg @@ -0,0 +1,53 @@ +[buildout] + +eggs-directory = ${buildout:eggs-directory} +develop-eggs-directory = ${buildout:develop-eggs-directory} +offline = true + +parts = + publish-connection-informations + redis + + +[rootdirectory] +recipe = slapos.cookbook:mkdirectory +etc = $${buildout:directory}/etc/ +srv = $${buildout:directory}/srv/ +var = $${buildout:directory}/var/ +bin = $${buildout:directory}/bin/ + + +[basedirectory] +recipe = slapos.cookbook:mkdirectory +services = $${rootdirectory:etc}/run/ +run = $${rootdirectory:var}/run/ +log = $${rootdirectory:var}/log/ + +[master-passwd] +recipe = slapos.cookbook:generate.password +storage-path = $${rootdirectory:etc}/.passwd +bytes = 4 + +[redis] +recipe = slapos.cookbook:redis.server +server_bin = ${redis:location}/bin/redis-server +ipv6 = $${slap-network-information:global-ipv6} +port = 6379 +use_passwd = $${slap-parameter:use_passwd} +pid_file = $${basedirectory:run}/redis.pid +server_dir = $${rootdirectory:srv} +passwd = $${master-passwd:passwd} +config_file = $${rootdirectory:etc}/redis.conf +log_file = $${basedirectory:log}/redis.log +wrapper = $${basedirectory:services}/redis_server + +# Send informations to SlapOS Master +[publish-connection-informations] +recipe = slapos.cookbook:publish +redis_url = $${redis:ipv6} +redis_port = $${redis:port} +redis_passwd = $${redis:passwd} +redis_password = $${redis:use_passwd} + +[slap-parameter] +use_passwd = false \ No newline at end of file diff --git a/software/bonjourgrid/instance.cfg b/software/bonjourgrid/instance.cfg new file mode 100644 index 000000000..8632133da --- /dev/null +++ b/software/bonjourgrid/instance.cfg @@ -0,0 +1,12 @@ +[buildout] +parts = + switch_softwaretype + +eggs-directory = ${buildout:eggs-directory} +develop-eggs-directory = ${buildout:develop-eggs-directory} +offline = true + +[switch_softwaretype] +recipe = slapos.cookbook:softwaretype +default = ${bonjourgrid-instance:output} +mariadb = ${template-mariadb:output} \ No newline at end of file diff --git a/software/bonjourgrid/software.cfg b/software/bonjourgrid/software.cfg new file mode 100644 index 000000000..9c1bc9608 --- /dev/null +++ b/software/bonjourgrid/software.cfg @@ -0,0 +1,151 @@ +[buildout] + +# Local development - to be remove +develop = + ${:parts-directory}/slapos.cookbook-repository + +parts = + boinc-instance + template + boinc-application + template_wu + template_result + template_input + template-redis + slapos-cookbook + instance-egg + condor + redis + template-condor + description-file + executable + bonjourgrid-instance + bonjourgrid + slapos.cookbook-repository + check-recipe + +extends = + ../../stack/boinc/buildout.cfg + ../../component/condor/buildout.cfg + ../../component/redis/buildout.cfg + ../../component/git/buildout.cfg + ../../stack/slapos.cfg + +#Generate All instances templates +[bonjourgrid-instance] +recipe = slapos.recipe.template +url = ${:_profile_base_location_}/instance-bonjourgrid.cfg +output = ${buildout:directory}/template-bonjourgrid.cfg +mode = 0644 +md5sum = c1334a8564d5ddbd6f18e06995d8f5ca + +[bonjourgrid] +recipe = hexagonit.recipe.download +url = ${:_profile_base_location_}/bonjourgrid.src/bonjourgrid.tar.gz +md5sum = 50f6da04e9cd203a886a9cb4658f8e03 + +[template-redis] +recipe = slapos.recipe.template +url = ${:_profile_base_location_}/instance-redis.cfg +output = ${buildout:directory}/template-redis.cfg +mode = 0644 +md5sum = d46047a3b6285b12843572b8101e955a + +[boinc-instance] +recipe = slapos.recipe.template +url = ${:_profile_base_location_}/boinc-app.cfg +output = ${buildout:directory}/template-boinc-app.cfg +mode = 0644 +md5sum = 6522c134cbdc52daf0f8983a45153100 + +[template] +recipe = slapos.recipe.template +url = ${:_profile_base_location_}/instance.cfg +output = ${buildout:directory}/template.cfg +mode = 0644 +md5sum = 2f23572c39bfcedcdebdb5963aeefc38 + +#Download Boinc Application Binary and configure project +[boinc-application] +recipe = hexagonit.recipe.download +url = ${boinc:location}/libexec/examples/upper_case +download-only = true +filename = upper_case +#Application configuration +app-name = upper_case +version = 1.00 +exec-extension = +#Please read Boinc platform before update platform value: http://boinc.berkeley.edu/trac/wiki/BoincPlatforms +platform = x86_64-pc-linux-gnu +#Work Unit number number of work unit +wu-number = 2 + +[template-base] +recipe = slapos.recipe.download +download-only = true +mode = 0644 + +[template_result] +<= template-base +url = ${:_profile_base_location_}/templates/template_result +filename = template_result +location = ${buildout:parts-directory}/${:_buildout_section_name_} +#md5sum = + +[template_wu] +<= template-base +url = ${:_profile_base_location_}/templates/template_wu +filename = template_wu +location = ${buildout:parts-directory}/${:_buildout_section_name_} +#md5sum = + +[template_input] +<= template-base +url = ${:_profile_base_location_}/input/input_file +filename = input_file +location = ${buildout:parts-directory}/${:_buildout_section_name_} +#md5sum = + +###Condor description #### + +[template-condor] +recipe = slapos.recipe.template +url = ${:_profile_base_location_}/instance-condor.cfg +output = ${buildout:directory}/template-condor.cfg +md5sum = 8bb788d39cbfa8a7473f25cd2e2a6104 +mode = 0644 + +[description-file] +recipe = slapos.recipe.download +mode = 0644 +url = ${:_profile_base_location_}/condor_job/submit +filename = submit +location = ${buildout:parts-directory}/${:_buildout_section_name_} +md5sum = 8180d88348b89b55216f8dd4475a9eea + +[executable] +recipe = slapos.recipe.download +mode = 0774 +url = ${:_profile_base_location_}/condor_job/simple +filename = simple +location = ${buildout:parts-directory}/${:_buildout_section_name_} +md5sum = c512f495cdd112bceb04feab7c909a10 + +# Local development +[slapos.cookbook-repository] +recipe = plone.recipe.command +stop-on-error = true +branch = grid-computing +revision = +location = ${buildout:parts-directory}/${:_buildout_section_name_} +command = "${git:location}/bin/git" clone --branch "${:branch}" --quiet http://git.erp5.org/repos/slapos.git "${:location}" && if [ -n "${:revision}" ]; then cd "${:location}" && "${git:location}/bin/git" reset --quiet --hard "${:revision}" ; fi +update-command = cd "${:location}" && "${git:location}/bin/git" fetch --quiet && if [ -n "${:revision}" ]; then "${git:location}/bin/git" reset --hard "${:revision}"; else "${git:location}/bin/git" reset --quiet --hard @{upstream} ; fi + +[check-recipe] +recipe = plone.recipe.command +stop-on-error = true +update-command = ${:command} +command = grep parts ${buildout:develop-eggs-directory}/slapos.cookbook.egg-link + +[versions] +lxml = 2.3.6 \ No newline at end of file diff --git a/software/bonjourgrid/templates/template_result b/software/bonjourgrid/templates/template_result new file mode 100644 index 000000000..653ae9446 --- /dev/null +++ b/software/bonjourgrid/templates/template_result @@ -0,0 +1,13 @@ +<file_info> + <name><OUTFILE_0/></name> + <generated_locally/> + <upload_when_present/> + <max_nbytes>5000000</max_nbytes> + <url><UPLOAD_URL/></url> +</file_info> +<result> + <file_ref> + <file_name><OUTFILE_0/></file_name> + <open_name>out</open_name> + </file_ref> +</result> \ No newline at end of file diff --git a/software/bonjourgrid/templates/template_wu b/software/bonjourgrid/templates/template_wu new file mode 100644 index 000000000..603d03139 --- /dev/null +++ b/software/bonjourgrid/templates/template_wu @@ -0,0 +1,10 @@ +<file_info> + <number>0</number> +</file_info> +<workunit> + <file_ref> + <file_number>0</file_number> + <open_name>in</open_name> + </file_ref> + <command_line>-cpu_time 10</command_line> +</workunit> \ No newline at end of file -- 2.30.9