= 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. Alternatively, create an account within the BOINC client by choosing Tools, Attach Project, http://hostname/myproject, and new user. If account creation is disabled, then change the entry in "config.xml" from "1" to "0".
* 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.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