= Project creation cookbook = == Make a project == * [ServerIntro Create a BOINC server] (preferably using the Server Virtual Machine). * Run [MakeProject make_project]: {{{ cd boinc/tools/ make_project --test_app myproject }}} * Append the contents of ~projects/myproject/myproject.httpd.conf to httpd.conf and restart Apache. * Use 'crontab' to insert a cron job to run the project's periodic tasks, e.g. 0,5,10,15,20,25,30,35,40,45,50,55 * * * * ~projects/myproject/bin/start --cron * Edit html/project/project.inc, changing the master URL and copyright holder. * Protect the html/ops directory (e.g. use htpasswd to create .htaccess and .htpasswd files). Visible result: the project web site is up at http://hostname/myproject. Troubleshooting: check the Apache access and error logs. == Install and enable test application == * Initialize database and add test application version {{{ cd projects/myproject bin/xadd bin/update_versions }}} * Start the project {{{ bin/start }}} * Create a client directory and copy the core client there, and run it. {{{ mkdir boinc_test cd boinc_test cp ../boinc/client/boinc_client . cp ../boinc/lib/boinc_cmd . boinc_client }}} * Using the web interface, create an account on the project. Get the authenticator via email. * Attach to the account: {{{ cd boinc_test boinc_cmd --project_attach HOSTNAME/myproject/ authenticator }}} Visible result: the client does a stream of work; the web site shows credit accumulating. Troubleshooting: check the log files of all daemon processes. == Add your own application version == * Edit config.xml and remove items related to the test application (uppercase). * Add your application to project.xml and run bin/xadd again. * Write a BOINC application and compile it for your platform of choice. * Copy the executable to HOME/projects/PROJECTNAME/apps/APPNAME * Install the version and restart the project {{{ cd projects/myproject bin/update_versions bin/stop bin/start }}} == Create a work unit == * Using a text editor, create a work unit template file and a result template file. * Run create_work * Edit config.xml to add records for make_work, the trivial validator, and the trivial assimilator. For example {{{ validate_test -app appname validate_test.log validate_test.pid }}} * Restart the project Visible result: the client downloads and runs your application. Troubleshooting: check the log files of all daemon processes. == Develop back end components == * Write a [WorkGeneration work generator]. * Write a [ValidationIntro validator] if needed. * Write an [AssimilateIntro assimilator]. * Edit the [ProjectConfigFile configuration file] to add these daemons. Visible result: client executes a stream of workunits; a stream of completed results is handled by the assimilator. Troubleshooting: check daemon log files == Before public launch == * Create a new project; this time, immediately move the code-signing private key to an isolated code-signing machine. Generate all signatures on that computer. * Add message board categories: see html/ops/create_forums.php