mirror of https://github.com/BOINC/boinc.git
*** empty log message ***
svn path=/trunk/boinc/; revision=6197
This commit is contained in:
parent
1c7d2e6bec
commit
2224431435
|
@ -521,6 +521,9 @@ static void handle_process_control_msg() {
|
|||
boinc_exit(0);
|
||||
}
|
||||
}
|
||||
if (match_tag(buf, "<reread_app_info/>")) {
|
||||
boinc_status.reread_init_data_file = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@ struct BOINC_STATUS {
|
|||
bool no_heartbeat;
|
||||
bool suspended;
|
||||
bool quit_request;
|
||||
bool reread_init_data_file;
|
||||
};
|
||||
|
||||
extern int boinc_init(void);
|
||||
|
|
|
@ -6764,3 +6764,15 @@ Charlie 18 May 2005
|
|||
boinc.pbproj/
|
||||
project.pbxproj
|
||||
|
||||
David 19 May 2005
|
||||
- Core client: When proxy info is updated (via RPC) send a
|
||||
<reread_app_info/> message to the process_control channel,
|
||||
telling the app to reread the app_info file (for Folding@home)
|
||||
|
||||
api/
|
||||
boinc_api.C,h
|
||||
client/
|
||||
app.h
|
||||
app_control.C
|
||||
cs_scheduler.C
|
||||
gui_rpc_server.C
|
||||
|
|
|
@ -137,6 +137,7 @@ public:
|
|||
GRAPHICS_MSG graphics_msg;
|
||||
void request_graphics_mode(GRAPHICS_MSG&);
|
||||
int request_reread_prefs();
|
||||
int request_reread_app_info();
|
||||
void check_graphics_mode_ack();
|
||||
int link_user_files();
|
||||
int get_shmem_seg_name();
|
||||
|
@ -220,6 +221,7 @@ public:
|
|||
void graphics_poll();
|
||||
void process_control_poll();
|
||||
void request_reread_prefs(PROJECT*);
|
||||
void request_reread_app_info();
|
||||
|
||||
int write(MIOFILE&);
|
||||
int parse(MIOFILE&);
|
||||
|
|
|
@ -590,9 +590,22 @@ int ACTIVE_TASK::request_reread_prefs() {
|
|||
|
||||
retval = write_app_init_file();
|
||||
if (retval) return retval;
|
||||
if (!app_client_shm.shm) return 0;
|
||||
app_client_shm.shm->graphics_request.send_msg(
|
||||
xml_graphics_modes[MODE_REREAD_PREFS]
|
||||
graphics_request_queue.msg_queue_send(
|
||||
xml_graphics_modes[MODE_REREAD_PREFS],
|
||||
app_client_shm.shm->graphics_request
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// tell a running app to reread the app_info file
|
||||
// (e.g. because proxy settings have changed: this is for F@h)
|
||||
//
|
||||
int ACTIVE_TASK::request_reread_app_info() {
|
||||
int retval = write_app_init_file();
|
||||
if (retval) return retval;
|
||||
process_control_queue.msg_queue_send(
|
||||
"<reread_app_info/>",
|
||||
app_client_shm.shm->process_control_request
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
@ -611,6 +624,14 @@ void ACTIVE_TASK_SET::request_reread_prefs(PROJECT* project) {
|
|||
}
|
||||
}
|
||||
|
||||
void ACTIVE_TASK_SET::request_reread_app_info() {
|
||||
for (unsigned int i=0; i<active_tasks.size(); i++) {
|
||||
ACTIVE_TASK* atp = active_tasks[i];
|
||||
if (!atp->process_exists()) continue;
|
||||
atp->request_reread_app_info();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// send quit signal to all tasks in the project
|
||||
// (or all tasks, if proj==0).
|
||||
|
|
|
@ -143,7 +143,7 @@ PROJECT* CLIENT_STATE::next_project_sched_rpc_pending() {
|
|||
//
|
||||
PROJECT* CLIENT_STATE::next_project_need_work(PROJECT* old, int urgency) {
|
||||
PROJECT *p, *p_prospect = NULL;
|
||||
double work_on_prospect;
|
||||
double work_on_prospect=0;
|
||||
double now = dtime();
|
||||
unsigned int i;
|
||||
bool found_old = (old == 0);
|
||||
|
@ -162,11 +162,15 @@ PROJECT* CLIENT_STATE::next_project_need_work(PROJECT* old, int urgency) {
|
|||
if (p->long_term_debt < 0 && !cpu_idle) continue;
|
||||
if (p->work_request_urgency == WORK_FETCH_DONT_NEED) continue;
|
||||
|
||||
// if we don't really need work, and we don't really need work from this project, pass.
|
||||
// if we don't really need work,
|
||||
// and we don't really need work from this project, pass.
|
||||
//
|
||||
if (urgency <= WORK_FETCH_OK && p->work_request_urgency <= WORK_FETCH_OK) continue;
|
||||
|
||||
// if there is a project for which a work request is OK and one that has a higher priority, take the one
|
||||
// with the higher priority.
|
||||
// if there is a project for which a work request is OK
|
||||
// and one that has a higher priority,
|
||||
// take the one with the higher priority.
|
||||
//
|
||||
if (p_prospect && p->work_request_urgency == WORK_FETCH_OK &&
|
||||
p_prospect->work_request_urgency > p->work_request_urgency) {
|
||||
|
||||
|
|
|
@ -258,6 +258,10 @@ static void handle_set_proxy_settings(char* buf, MIOFILE& fout) {
|
|||
gstate.proxy_info.parse(in);
|
||||
gstate.set_client_state_dirty("Set proxy settings RPC");
|
||||
fout.printf("<success/>\n");
|
||||
|
||||
// tell running apps to reread app_info file (for F@h)
|
||||
//
|
||||
gstate.active_tasks.request_reread_app_info();
|
||||
}
|
||||
|
||||
static void handle_get_proxy_settings(char* , MIOFILE& fout) {
|
||||
|
|
|
@ -0,0 +1,382 @@
|
|||
How I, a BOINC neophyte, set up a trivial test.
|
||||
|
||||
I won't cover building the software except to say that I found it
|
||||
necessary to use CVS versions rather than the tarballs. I used the
|
||||
version with the CVS tag, boinc_core_release_4_56, which was the
|
||||
highest numbered tag at the time (mid December 2004).
|
||||
|
||||
This was a strictly internal test on a machine behind a firewall and
|
||||
not visible to the outside world. This is important, because I don't
|
||||
follow proper procedures with keys. Doing this on a publicly visible
|
||||
project would be a bad thing. (see
|
||||
http://boinc.berkeley.edu/code_signing.php).
|
||||
|
||||
The machine was an i686-pc running Red Hat version 9. It had mySQL
|
||||
version 3.23, Apache 2.0 already running, and python 2.2, as well as
|
||||
the necessary build software for a non-graphical client and API.
|
||||
|
||||
The objective is to host a project on this machine using the upper_case
|
||||
test app that comes with boinc, and then volunteer the same machine
|
||||
to do computations as a client. I did this as an ordinary user (mostly).
|
||||
On this machine, ordinary users can run crontab jobs.
|
||||
|
||||
./make_project --delete_prev_inst --drop_db_first --base TESTDIR SHORTNAME LONGNAME
|
||||
|
||||
where TESTDIR is the absolute pathname of a directory the project's
|
||||
files will be set up,
|
||||
SHORNAME is a short, white-space-free name for the project,
|
||||
LONGNAME is a user-friendly name, which can contain whitespace.
|
||||
|
||||
This creates directory TESTDIR/projects/SHORTNAME, that I'll refer to
|
||||
as the "project directory" or PROJDIR. It several subdirs, including
|
||||
bin, containing utility programs and daemons that will be for this
|
||||
particular project; html, contianing the files for the project's web
|
||||
site, including PHP scripts than run on the web server (in my case,
|
||||
the same machine as the project host) in response to user/manager
|
||||
actions through a browser; and cgi-bin, which contain binary exectuables
|
||||
that run on the web server side in response to http communications from
|
||||
the core-client running on volunteer machines.
|
||||
|
||||
It also creates TESTDIR/keys, a world readable (!) directory
|
||||
containing the project's encryption keys. In a real, publicly visible
|
||||
project, these should be removed from here and kept in a secret place,
|
||||
but I didn't do this.
|
||||
|
||||
It also creates a file, PROJDIR/SHORTNAME.httpd.conf, and tells you
|
||||
you should append this to your httpd config file. Go ahead and do this.
|
||||
For me it was, from PROJDIR,
|
||||
|
||||
su
|
||||
cd PROJDIR
|
||||
cat SHORTNAME.httpd.conf >> /etc/httpd/conf/httpd.conf
|
||||
|
||||
exit
|
||||
|
||||
[It migth also be necessary to restart the web server? I don't think
|
||||
it was in my case.]
|
||||
|
||||
Edit the defines at the top of PROJDIR/html/project/project.inc.
|
||||
PROJECT, will be used in title banners on the web site.
|
||||
MASTER_URL, should be http://HOSTNAME/SHORTNAME and URL_BASE
|
||||
should be http://HOSTNAME/SHORTNAME/ (note the trailing slash).
|
||||
[There must also be some requirements on IMAGE_* and PROFILE_*
|
||||
values, but I haven't played around with this feature. Anyone?]
|
||||
|
||||
[The project_cookbook page says to protect the html/ops directory
|
||||
by putting .htaccess and .htpasswd files there, but doesn't tell
|
||||
what to PUT in those files. I don't know, so I didn't do it.
|
||||
Dave?]
|
||||
|
||||
|
||||
|
||||
The make_project script also emits a line something like,
|
||||
|
||||
0,5,10,15,20,25,30,35,40,45,50,55 * * * * PROJDIR/bin/start --cron
|
||||
|
||||
and tells you to put in a crontab file. For now, just store this line
|
||||
in a file called, say CRONENTRY, but dont run crontab on it yet.
|
||||
The start --cron command is supposed to start various other daemons
|
||||
but it depends information in config.xml on how to do this, and we
|
||||
haven't properly set that file up yet. [Note, this contradicts
|
||||
project_cookbook.]
|
||||
|
||||
Now the Project's public web site should be visible through a browser
|
||||
as http://HOSTNAME/SHORTNAME, and the project management site should be
|
||||
http://HOSTNAME/SHORTNAME_ops. Go ahead and look around, but don't
|
||||
try taking any actions yet.
|
||||
|
||||
The next steps prepare information to be put in the mySQL databse by
|
||||
the programs bin/xadd and bin/update_versions, and by the daemons.
|
||||
|
||||
Take a look at PROJDIR/config.xml, which make_project has generated.
|
||||
You'll see that it has some info about the location of the site, and so
|
||||
on. It also tells how to run some daemons, feeder, transitioner
|
||||
and file_deleter. This isn't a complete set of daemons, and we'll
|
||||
need to come back to this file; but it's good enough for now.
|
||||
|
||||
Copy projext.xml from the tools dir of the source tree to PROJDIR and
|
||||
edit it to tell about the apps to run and the platforms on which they
|
||||
run. Here's my version:
|
||||
|
||||
<boinc>
|
||||
<platform>
|
||||
<name>i686-pc-linux-gnu</name>
|
||||
<user_friendly_name>Linux/x86</user_friendly_name>
|
||||
</platform>
|
||||
<platform>
|
||||
<name>windows-intelx86</name>
|
||||
<user_friendly_name>Windows/x86</user_friendly_name>
|
||||
</platform>
|
||||
<platform>
|
||||
<name>powerpc-apple-darwin</name>
|
||||
<user_friendly_name>Mac OS X</user_friendly_name>
|
||||
</platform>
|
||||
<platform>
|
||||
<name>anonymous</name>
|
||||
<user_friendly_name>anonymous</user_friendly_name>
|
||||
</platform>
|
||||
<app>
|
||||
<name>upper_case</name>
|
||||
<user_friendly_name>Convert to Upper Case</user_friendly_name>
|
||||
</app>
|
||||
</boinc>
|
||||
|
||||
The only thing I changed is the app part.
|
||||
The app part tells about the application(s) to be run on the client
|
||||
machines and the platform part tells what kind of client architectures
|
||||
we might have application versions for. The exact text of the "name"
|
||||
elements is important (see below). Now cd to PROJDIR/bin and do
|
||||
|
||||
./xadd
|
||||
|
||||
This puts information from project.xml into the mySQL database. You should
|
||||
now be able to see some entries under "Platforms" and "Applications"
|
||||
on the project management page.
|
||||
|
||||
[BUGLET! Trying to view platforms in the projectect management site
|
||||
gives: "Fatal error: Call to undefined function:
|
||||
mysql_real_escape_string() in
|
||||
/home/bashford/boinctest/projects/cplan/html/inc/util_ops.inc" I find
|
||||
that if I change "if(1)" to "if(0)" this goes away. Probably
|
||||
something to do with PHP version dependence.]
|
||||
|
||||
Now copy the upper_case executable from the apps dir of the build
|
||||
directory to the proper place in PROJDIR/apps. In this case, "proper place"
|
||||
means:
|
||||
|
||||
1) It must be in a subdir under apps with the same name as given
|
||||
for the "name" of the "app" in project.xml.
|
||||
2) The name of the copied executable must be of the form
|
||||
APPNAME_VERSION_PLATFORM
|
||||
where
|
||||
APPNAME matches the "name" of the "app", as with the subdir name
|
||||
VERSION must be of the form MAJOR.MINOR where MAJOR must match
|
||||
the major version number of the boinc software! (In effect, it
|
||||
must be 4.0 these days.
|
||||
PLATFORM must match the "name" of the "platform" in project.xml
|
||||
for which this is an executable.
|
||||
In our case, the executables name must therefore be,
|
||||
|
||||
upper_case_4.0_i686-pc-linux-gnu
|
||||
|
||||
the "0" being the only part that's a free choice.
|
||||
Clients will download this and run it. If you want, you can gzip it
|
||||
and leave the .gz extension on.
|
||||
|
||||
Now cd to PROJDIR/bin and run
|
||||
|
||||
./update_versions
|
||||
|
||||
This scans the app dir and creates AppVersions (info about which Apps
|
||||
have really-existing versions for which platforms), and puts them in
|
||||
the mySQL database. You'll get a dialog about signing apps with keys
|
||||
to authenticate them. I just said yes, and went on, ignoring the
|
||||
warning that this is a security hole. Now on the project management
|
||||
site, you should see some entries under Application Versions. (You
|
||||
need to push the OK button.) Also, a copy of the app will be put
|
||||
in PROJDIR/downloads
|
||||
|
||||
Now let's start those daemons and the project itself, although it
|
||||
won't really do anything much. Go ahead and add and start your
|
||||
cron job by doing
|
||||
|
||||
crontab CRONENTRY
|
||||
|
||||
and cd to PROJDIR/bin and do
|
||||
|
||||
./start
|
||||
|
||||
You might get an email from cron telling you it's starting the
|
||||
daemons. Using ps you should be able to see the feeder, transitioner
|
||||
and file_deleter daemons running. Look under PROJDIR/log_* for these
|
||||
deamon's log files to see that they aren't giving error messages, etc.
|
||||
After 5 minutes or so, do
|
||||
|
||||
./stop
|
||||
|
||||
to shut down the project. This stops the daemons and sets up files
|
||||
under PROJDIRs that prevent the daemons from getting started again by
|
||||
cron. Make sure the log files reflect that they have stopped, and that
|
||||
they stay stopped.
|
||||
|
||||
[MAYBE-BUG? At this point the feeder log not only contains the
|
||||
"No results added; sleeping 1 sec" type lines but between these,
|
||||
"restarting enumeration
|
||||
enumeration restart returned nothing"
|
||||
and then 99 repititions of
|
||||
"already restarted enum on this array scan"
|
||||
Is it a mistake to start the feeder daemon before any work units or
|
||||
results
|
||||
are created? Maybe this cookbook should say to defer the crontab
|
||||
command and the first run of ./start to a later step?]
|
||||
|
||||
At this point, you should take care of some permission/ownership
|
||||
problems that would bite you later. Under PROJDIR, the directories,
|
||||
cgi-bin, log_*, upload, and html/cache must be writable by the httpd
|
||||
daemon. I did this by chmoding them to be world writable. I suppose
|
||||
it could be done more safely with ownership and group changes, but the
|
||||
wrinkle is that the log directory needs to be writable by both the
|
||||
httpd daemon and the user under which the project's cron daemons run
|
||||
(in my case apache and bashford, respectively). Since files will be
|
||||
created in these places that will be owned by apache (or whatever the
|
||||
httpd user id is), it may be awkward deleting them once the project
|
||||
has been up and running. In particular, a future run run of
|
||||
make_project with the --delete_prev_inst flag may fail. [Is that
|
||||
right?].
|
||||
|
||||
|
||||
Next we need to create "Work Units" and "Results" (see
|
||||
http://boinc.berkeley.edu/work.php and
|
||||
http://boinc.berkeley.edu/result.php). The upper_case app takes a
|
||||
file called "in" (filenames are hardwired in this particular app)
|
||||
converts it all to upper case, and writes the result to "out". The
|
||||
system can be told about this using the utility program create_work
|
||||
(see http://boinc.berkeley.edu/tools_work.php). It needs template
|
||||
files for the work units and results. Check the above-cited
|
||||
docs for an explanation of the content, I'll just give what I used:
|
||||
|
||||
in PROJDIR/templates/work_unit_template:
|
||||
|
||||
<file_info>
|
||||
<number>0</number>
|
||||
</file_info>
|
||||
<workunit>
|
||||
<file_ref>
|
||||
<file_number>0</file_number>
|
||||
<open_name>in</open_name>
|
||||
</file_ref>
|
||||
</workunit>
|
||||
|
||||
in PROJDIR/templates/result_template
|
||||
|
||||
<file_info>
|
||||
<name><OUTFILE_0/></name>
|
||||
<generated_locally/>
|
||||
<upload_when_present/>
|
||||
<max_nbytes>100000</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>
|
||||
|
||||
Copy the file test/input from the source directory to PROJDIR/download/in
|
||||
Now from PROJDIR do
|
||||
|
||||
./bin/create_work -appname upper_case -wu_name ucwu -wu_template templates/work_unit_template -result_template templates/result_template in
|
||||
|
||||
This adds one workunit, called ucwu, and five results to the
|
||||
database. In other words. The project wants five different clients
|
||||
to try to calculate a result, and it will compare them for validation
|
||||
before declaring this work unit done.
|
||||
|
||||
For testing's sake, make another one a bit differently,
|
||||
keeping the same template files, do
|
||||
|
||||
./bin/create_work -appname upper_case -wu_name easywu -wu_template templates/work_unit_template -result_template templates/result_template -min_quorum 1 -target_nresults 1 in
|
||||
|
||||
This creates a workunit, easywu, that only wants one result (i.e. no
|
||||
validation via redundancy). This makes it easier to test with one
|
||||
user and machine volunteering as a client.
|
||||
|
||||
More daemons are needed to create a continuing stream of work,
|
||||
carry out the validation and assimilate completed work units.
|
||||
Obviously, these depend on the nature of the project and it's apps,
|
||||
but for testing purposes, boinc supplies some we can use. The executables
|
||||
are in PROJDIR/bin
|
||||
The utility, make_work just make endless copies of some existing
|
||||
work unit, so put into the daemons section of config.xml
|
||||
|
||||
<daemon>
|
||||
<cmd>
|
||||
make_work -wu_name easywu -cusion 5
|
||||
</cmd>
|
||||
</daemon>
|
||||
|
||||
Note that "easywu" is what we called the work unit made before. The option
|
||||
"-cusion 5" says make sure there are at least 5 unsent results at any time.
|
||||
|
||||
Now arrange to run the boinc supplied, sample_trivial_validator and
|
||||
sample_dummy_assimilator. Let's see if these daemon entries in
|
||||
config.xml will work: [Help, I don't really understand this, and I'm
|
||||
not sure it's working for me!]
|
||||
|
||||
<daemon>
|
||||
<cmd>
|
||||
sample_trivial_validator -d 3 -app upper_case
|
||||
</cmd>
|
||||
</daemon>
|
||||
<daemon>
|
||||
<cmd>
|
||||
sample_dummy_assimilator -d 3 -app upper_case
|
||||
</cmd>
|
||||
</daemon>
|
||||
|
||||
Now start up the project [again?]. From PROJDIR/bin,
|
||||
|
||||
./start
|
||||
|
||||
The project site should be fully functional now. If you look at
|
||||
the workunites and pending results in the project management site, you
|
||||
should see that more workunits and (pending) results have been created.
|
||||
Check to see that all the daemons listed in config.xml are really running
|
||||
and that their log files look okay.
|
||||
|
||||
[Re the above MAYBE-BUG, the feeder log looks more sensible now.]
|
||||
|
||||
The project is ready for volunteers. To become one, go to the project's
|
||||
public website, http://HOSTNAME/SHORTNAME, and follow Create account
|
||||
directions. If you encounter an offer to download the boinc_client software,
|
||||
don't do it if it's coming from the project site. Only do it if it's coming
|
||||
from BOINC's site, http://boinc.berkeley.edu/download.php.
|
||||
You should get an email with your account key. Then
|
||||
follow the "Getting Started" link and Download and install BOINC
|
||||
from the Berkeley site. For a linux client, you make a clean directory
|
||||
for the client to make files in, and into download a file with a name
|
||||
like boinc_client_4.56_i686-pc-linux-gnu.gz. The gunzip it and run
|
||||
it from the command line. It will prompt for the project website
|
||||
and your account id code. It should produce output indicating that it is contacting the project's site, validating your account id, downloading the app,
|
||||
asking for results to calculate, doing the calculation and sending results
|
||||
back. This all goes to standard output. You'll probably want to kill
|
||||
it with CTRL-C [this is harmless, no?] and restart it as a background
|
||||
job using something like (for bash shell),
|
||||
|
||||
./boinc_4.13_i686-pc-linux-gnu >> boinc.log 2>> error.log &
|
||||
|
||||
or for csh shell,
|
||||
|
||||
./boinc_4.13_i686-pc-linux-gnu >>boinc.log &) >>&error.log
|
||||
|
||||
There is more information about running the boinc client software
|
||||
at http://noether.vassar.edu/~myers/help/boinc/unix.html
|
||||
and http://boinc.berkeley.edu/client_unix.php.
|
||||
|
||||
[NOTE to web doc maintainers: There should be a link to one of
|
||||
these (and equivs for other platforms) from the download page.
|
||||
The documentation in http://noether.vassar.edu/~myers/help/boinc/unix.html
|
||||
on putting a client invocation in the .profile
|
||||
or .login seems odd. It then would run when your logged out! How about a
|
||||
nohup?]
|
||||
|
||||
|
||||
The output produced on the client should show work getting done,
|
||||
and the project management web site should show this user getting "credit"
|
||||
for results.
|
||||
|
||||
[Problem? I see evidence of completed results only on the project
|
||||
management site, not on the public site. On the Results page of
|
||||
the management site, it looks like I'm getting sucessful output, but
|
||||
0.0 credit is claimed and "---" is granted. Can I set up this demo
|
||||
differently so that credit is given and the public site shows it?
|
||||
Some features of the public site show up as "temporarily disabled".
|
||||
|
||||
[BIGGER PROBLEM: result uploads are all failing! The log info of the
|
||||
boinc_client (version 4.13, linux executable from berkeley website)
|
||||
says "Error on file upload: invalid signature" file_upload_handler.log
|
||||
shows "Returning error to client 199.76.2.44: invalid signature (permanent)"
|
||||
I didn't do much with keys but take the defaults, and I did not have
|
||||
this problem on a previous attempt when I used the 4.56 client I had
|
||||
compiled myself. Is there a version skew problem?]
|
|
@ -17,8 +17,8 @@ Other Unix-like systems should work without too much configuration.
|
|||
<th>Server</th>
|
||||
<th>Core client<br>(non-graphical)</th>
|
||||
<th>Core client<br>(graphical)</th>
|
||||
<th>API<br>(non-graphical)</th>
|
||||
<th>API<br>(graphical)</th>
|
||||
<th>Applications<br>(non-graphical)</th>
|
||||
<th>Applications<br>(graphical)</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GNU tools:
|
||||
|
|
|
@ -0,0 +1,415 @@
|
|||
<center>
|
||||
<h2>Building BOINC Manager with embedded Core Client plus libraries libboinc.a and libboinc_graphics_api.a</h2>
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
Written by Charlie Fenton
|
||||
|
||||
<p>
|
||||
Last updated 5/17/05
|
||||
|
||||
</center>
|
||||
|
||||
|
||||
NOTE: Substitute the appropriate path for [wxpath] and [boincpath] throughout this document. Typically, [boincpath] will end in "/boinc" or /boinc_public", and [wxpath] will end in "/wxMac-2.6.0".
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
These directions are for building under OS X version 10.4 (Tiger) using XCode Developer Tools version 2.0, or OS X version 10.3 (Panther) using XCode 1.5.
|
||||
|
||||
<p>
|
||||
|
||||
XCode 1.5 installs autoconf version 2.57 and automake 1.63. XCode 2.0 installs autoconf 2.59 and automake 1.63. To determine the version number, type "autoconf --version" or "automake --version" . Building BOINC requires autoconf 2.59 and automake 1.93 or later.
|
||||
|
||||
<p>
|
||||
Upgrades for autoconf and automake are available from www.gnu.org. XCode installed these utilities in the /usr/bin/ directory, but the upgrades by default will install in /usr/local/bin/. If you install there, you must also set your PATH environment variable to include that location before proceeding with any of the steps below; type the following at the start of your terminal session:
|
||||
|
||||
<pre>
|
||||
export PATH=/usr/local/bin:$PATH
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
If you are building under OS 10.4, you must first install XCode's optional Cross-Development SDK for system 10.3.9 from the XCode Tools CD. This guarantees that all builds are backward compatible to OS 10.3.9. This is not necessary for building under OS 10.3.
|
||||
|
||||
|
||||
|
||||
<h2>ONE_TIME SETUP for BOINC Manager and embedded Core Client</h2>
|
||||
|
||||
|
||||
|
||||
(1) First download wxMac-2.6.0 from www.wxwidgets.org and build it:
|
||||
|
||||
<p>
|
||||
You will need to set the environment variables CPPFLAGS and LDFLAGS as described below. These commands are for the bash shell; use the equivalent commands if you are running a different UNIX shell. Some of these environment variables allow the application to be built using the OS 10.3.9 compatibility SDK.
|
||||
|
||||
<p>
|
||||
First set the CPPFlags environment variable. If you are building under OS 10.4:
|
||||
|
||||
<pre>
|
||||
export CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.3.9.sdk -DMAC_OS_X_VERSION_MAX_ALLOWED=1030 -I../jpeglib"
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
If you are building under OS 10.3:
|
||||
|
||||
<pre>
|
||||
export CPPFLAGS="-DMAC_OS_X_VERSION_MAX_ALLOWED=1030 -I../jpeglib"
|
||||
</pre>
|
||||
|
||||
Then continue building wxMac-2.6.0:
|
||||
|
||||
|
||||
<pre>
|
||||
cd [wxpath]
|
||||
autoconf
|
||||
mkdir osx-build
|
||||
cd osx-build
|
||||
../configure --disable-shared --with-opengl --disable-webkit
|
||||
make
|
||||
</pre>
|
||||
If you are building under OS 10.4, set the LDFlags environment variable
|
||||
<b>after</b> the configure but <b>before</b> the make:
|
||||
<pre>
|
||||
export LDFLAGS="-isysroot /Developer/SDKs/MacOSX10.3.9.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.3.9.sdk"
|
||||
|
||||
make
|
||||
</pre>
|
||||
|
||||
|
||||
(2) Open a new terminal window to reset your session environment variables and set the working directory:
|
||||
|
||||
<pre>
|
||||
cd [boincpath]
|
||||
</pre>
|
||||
|
||||
(3) Create a symbolic link [boincpath]/wx_lib pointing to
|
||||
[wxpath]/osx-build/lib/
|
||||
|
||||
<p>
|
||||
(4) Create a symbolic link [boincpath]/wxinclude pointing to
|
||||
[wxpath]/include
|
||||
|
||||
<p>
|
||||
(5) Create a symbolic link [boincpath]/jpeglib pointing to
|
||||
your jpeg-6b directory (or whatever directory contains the jpeglib source files).
|
||||
|
||||
<p>
|
||||
For example, if the boinc, wxMac-2.6.0 directory is at [wxpath] and the jpeg-6b directory is at [jpegpath] then the commands would be:
|
||||
|
||||
<pre>
|
||||
ln -s [wxpath]/osx-build/lib wx_lib
|
||||
ln -s [wxpath]/include wxinclude
|
||||
ln -s [jpegpath] jpeglib
|
||||
</pre>
|
||||
|
||||
(6) Run Configure to create the correct config.h file for BOINC:
|
||||
|
||||
|
||||
<p>
|
||||
Add the path to wx-config to the standard search path. Either:
|
||||
|
||||
<pre>
|
||||
export PATH=[wxpath]/osx-build:$PATH
|
||||
</pre>
|
||||
|
||||
or (if your autoconf and automake are in /usr/local/bin/):
|
||||
|
||||
<pre>
|
||||
export PATH=/usr/local/bin:[wxpath]/osx-build:$PATH;
|
||||
</pre>
|
||||
|
||||
Set the CPPFlags environment variable. If you are building under OS 10.4:
|
||||
|
||||
<pre>
|
||||
export CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.3.9.sdk -DMAC_OS_X_VERSION_MAX_ALLOWED=1030 -I../jpeglib -I../wxinclude -L../wx_lib"
|
||||
</pre>
|
||||
|
||||
If you are building under OS 10.3:
|
||||
|
||||
<pre>
|
||||
export CPPFLAGS="-DMAC_OS_X_VERSION_MAX_ALLOWED=1030 -I../jpeglib -I../wxinclude -L../wx_lib"
|
||||
</pre>
|
||||
|
||||
Then continue configuring BOINC:
|
||||
|
||||
<pre>
|
||||
./_autosetup
|
||||
./configure --disable-server --with-apple-opengl-framework --build=powerpc-apple-darwin
|
||||
</pre>
|
||||
|
||||
|
||||
(7) Since we have an XCode project, you don't normally need to build BOINC from the command line. But if you wish to do so:
|
||||
|
||||
<p>
|
||||
Set the LDFlags environment variable after the configure but before the make. If you are building under OS 10.4:
|
||||
|
||||
<pre>
|
||||
export LDFLAGS="-isysroot /Developer/SDKs/MacOSX10.3.9.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.3.9.sdk -L../wx_lib -F/Developer/SDKs/MacOSX10.3.9.sdk/System/Library/Frameworks"
|
||||
</pre>
|
||||
|
||||
If you are building under OS 10.3:
|
||||
|
||||
<pre>
|
||||
export LDFLAGS="-L../wx_lib"
|
||||
make
|
||||
</pre>
|
||||
|
||||
<h2>Building the BOINC Manager with embedded Core Client, plus
|
||||
|
||||
BOINC libraries, screensaver and helper applications</h2>
|
||||
|
||||
|
||||
<p>
|
||||
(1) Double-click on [boincpath]/mac_build/boinc.pbproj to launch the XCode development IDE with the BOINC project.
|
||||
|
||||
|
||||
<p>
|
||||
(2) Select the appropriate cross-development sdk as follows:
|
||||
<ul>
|
||||
<li>
|
||||
select the boinc project icon at the top of the Groups & Files column
|
||||
<li>
|
||||
press command-i to open the Project "boinc" info window.
|
||||
<li>
|
||||
In the "General" tab, set the popup menu "Cross-Develop Using Target SDK." For OS 10.4, select "MacOSX10.3.9.sdk"; for OS 10.3 select "current Mac OS".
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
(3) In the Active Target popup, select mgr_boinc or Build_All. Build_All also builds the three libraries libboinc_api.a, libboinc_graphics_api.a and libboinc.a, which are used to build science applications such as SETI@home. These libraries are not needed by the BOINC Manager or Core Client. In addition, Build_All builds the screensaver BOINCSaver.saver and the installer halper application Postinstall.app.
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
(4) In the Active Build Style popup, choose Development (for debugging) or Deployment (for release builds.)
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
(5) If you have switched Build Style, be sure to do a "Clean All Targets" from the Build menu; otherwise object files from the old build style will not be rebuilt in the new build style.
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
(6) If you are building the screensaver, be sure to unstuff the file:
|
||||
|
||||
[boincpath]/clientgui/mac/BOINCSaver.nib.sit
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
(7) Select Build from the Build menu. I suggest you also open the Detailed Build Results window from the Build menu. Wait a long time while it compiles.
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
(8) In addition to the BOINC Manager BOINC.app and Core Client boinc, the mgr_boinc target will also build the SystemMenu.bundle framework and a small helper utility SetVersion.
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
(9) SetVersion is run automatically as part of the build process to update the following Mac version information files using the contents of version.h:
|
||||
<pre>
|
||||
InfoPlist.strings,
|
||||
Info.plist (under the resources group)
|
||||
SystemMenu-Info.plist
|
||||
ScreenSaver-Info.plist
|
||||
Installer-Info.plist
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
|
||||
(10) The boinc-client, SystemMenu.bundle and InfoPlist.strings will all be embedded automatically inside the BOINC.app application bundle as part of the build process.
|
||||
|
||||
<h2>Building the installer</h2>
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
After creating the deployment build of all targets using Build_All, use the Finder to do the following:
|
||||
|
||||
<p>
|
||||
(1) In a convenient place on disk, create a directory "Installer_Resources". Copy the following items into this directory:
|
||||
<pre>
|
||||
[boincpath]/mac_installer/License.rtf
|
||||
[boincpath]/mac_installer/ReadMe.rtf
|
||||
[boincpath]/mac_installer/postinstall
|
||||
[boincpath]/mac_installer/postupgrade
|
||||
[boincpath]/mac_build/build/Postinstall.app
|
||||
</pre>
|
||||
|
||||
NOTE: the file extensions (such as .app and .saver) may be hidden by the Finder. You can check an item's extension by selecting it in the Finder and using Get Info function from the Finder's File menu.
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
(2) Create another directory "Pkg_Root", and inside that create two more directories "Applications" and"Library". Create:
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
a "Screen Savers" directory inside your new Library directory,
|
||||
|
||||
<li> an "Application Support" directory inside your new Library directory,
|
||||
|
||||
<li> a "BOINC Data" directory inside your new Application Support directory,
|
||||
|
||||
<li> a "locale" directory inside your new BOINC Data directory
|
||||
|
||||
</ul>
|
||||
Correct spelling of these names is critical.
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
(3) Copy [boincpath]/mac_build/build/BOINCManager.app into your
|
||||
|
||||
"Pkg_Root/Applications" directory.
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
(4) Copy [boincpath]/mac_build/build/BOINCSaver.saver into your
|
||||
|
||||
"Pkg_Root/Library/Screen Savers" directory.
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
(5) Copy the contents of boincpath]/locale/client/ into your
|
||||
|
||||
"Pkg_Root/Library/Application Support/BOINC Data/locale" directory. (You may optionally exclude the CVS subdirectories to save space.)
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
You will now have the following directory structure:
|
||||
<pre>
|
||||
Pkg_Root
|
||||
Applications
|
||||
BOINCManager.app
|
||||
Library
|
||||
Application Support
|
||||
BOINC Data
|
||||
locale
|
||||
de
|
||||
en_US
|
||||
it
|
||||
etc.....
|
||||
Screen Savers
|
||||
BOINCSaver.saver
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
(6) From the Finder, open [boincpath]/mac_installer/BOINC.pmproj (if running OS 10.3, use BOINC.pmsp).
|
||||
It will open in the PackageMaker application. In the Files tab, set the path to your Pkg_Root directory. in the Resources tab, set the path to your Installer_Resources directory. Update the version number in multiple places in the Description and Version tabs.
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
(7) Select "Create Package" from PackageMaker's File menu. You can give any name you wish to the installer package when you create it, but do not change the package name after it is created.
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
(8) Quit PackageMaker.
|
||||
|
||||
|
||||
|
||||
<h2>Package BOINC installer for distribution</h2>
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
(1) Create a directory and name it appropriately, e.g. "boinc_4.37_macOSX". Copy the installer package and the ReadMe file into the directory.
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
(2)After selecting the directory you just created and populated, select Create archive from the Finder's File menu. This will zip the file. (Note: if you want to stuff the file instead of zipping it, be sure to uncheck "stuff originals instead of aliases" in DropStuff's preferences.)
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
(3) Rename the zip file as appropriate to show the version number;
|
||||
for example, boinc_4.37_maxOSX.zip.
|
||||
|
||||
|
||||
|
||||
|
||||
<h1>BOINC SETI client application</h1>
|
||||
|
||||
|
||||
|
||||
<h2>ONE_TIME SETUP for BOINC SETI client application</h2>
|
||||
|
||||
|
||||
<i>This section needs more work</i>
|
||||
|
||||
<p>
|
||||
(1) Open a new terminal window to reset your session environment variables and set the working directory:
|
||||
|
||||
<pre>
|
||||
cd [setipath]
|
||||
</pre>
|
||||
|
||||
(2) You will need to set some environment variables as described below. These commands are for the bash shell; use the equivalent commands if you are running a different UNIX shell. Some of these environment variables allow the application to be built using the OS 10.3.9 compatibility SDK.
|
||||
|
||||
<p>
|
||||
First set the CPPFlags environment variable. If you are building under OS 10.4:
|
||||
<pre>
|
||||
export CPPFLAGS="-isysroot /Developer/SDKs/MacOSX10.3.9.sdk -DMAC_OS_X_VERSION_MAX_ALLOWED=1030 -L[setipath]/jpeglib -ljpeg"
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
If you are building under OS 10.3:
|
||||
|
||||
<pre>
|
||||
export CPPFLAGS="-DMAC_OS_X_VERSION_MAX_ALLOWED=1030 -L[setipath]/jpeglib -ljpeg"
|
||||
|
||||
export PROJECTDIR=[setipath]
|
||||
|
||||
export BOINCDIR=[boincpath]
|
||||
</pre>
|
||||
|
||||
If your autoconf and automake are in /usr/local/bin/:
|
||||
|
||||
<pre>
|
||||
export PATH=/usr/local/bin:$PATH
|
||||
</pre>
|
||||
|
||||
(2) Run Configure to create the correct config.h file:
|
||||
|
||||
|
||||
<pre>
|
||||
./_autosetup
|
||||
./configure --disable-server --with-apple-opengl-framework --disable-dynamic-graphics
|
||||
</pre>
|
||||
|
||||
|
||||
<p>
|
||||
(3) Copy the correct jpebglib.a into [path]/seti_boinc/jpeg/ ?????
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
(4)Create a symbolic link [path]/seti_boinc/boinc pointing to the boinc directory
|
||||
|
||||
|
||||
<pre>
|
||||
cd [boincpath]/seti_boinc
|
||||
ln -s [boincpath] ./boinc
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>Building the BOINC SETI client application</h2>
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
The XCODE project for building the BOINC SETI@home client application is
|
||||
|
||||
[boincpath]/seti_boinc/mac_build/seti_boinc.xcode.
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
require_once("docutil.php");
|
||||
page_head("The BOINC screensaver");
|
||||
echo "
|
||||
The BOINC client software includes a screensaver program.
|
||||
When active, the screensaver does the following:
|
||||
|
||||
<ul>
|
||||
<li> If a graphics-capable application is running,
|
||||
the screensaver causes that application to
|
||||
provide full-screen graphics.
|
||||
If more than one is running (e.g. on a multiprocessor)
|
||||
the screensaver cycles between them every few minutes.
|
||||
|
||||
<li> If applications are running but non are graphics-capable,
|
||||
the screensaver shows the names of the applications
|
||||
and their fraction done.
|
||||
|
||||
<li> If the core client is running but no applications are running,
|
||||
the screensaver shows that.
|
||||
|
||||
<li> If the core client is not running,
|
||||
the screensaver shows that.
|
||||
</ul>
|
||||
<p>
|
||||
Normally, if you press a key or mouse the mouse
|
||||
while the screensaver is active,
|
||||
the screensaver will exit.
|
||||
Some BOINC applications handle keyboard/mouse input.
|
||||
If you hold down the control key,
|
||||
any additional input will be passed to the application,
|
||||
and your computer will remain in screensaver mode.
|
||||
";
|
||||
page_tail();
|
||||
?>
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
require_once("docutil.php");
|
||||
|
||||
page_head("Web sites for BOINC statistics");
|
||||
echo "
|
||||
<p>
|
||||
The following web sites show statistics for one or more BOINC projects:
|
||||
";
|
||||
stats_sites();
|
||||
echo "
|
||||
These sites use XML-format data exported by BOINC projects.
|
||||
The format is described
|
||||
<a href=http://boinc.berkeley.edu/db_dump.php>here</a>.
|
||||
If you are interested in running your own site or
|
||||
participating in the development efforts,
|
||||
please contact the people listed above.
|
||||
";
|
||||
|
||||
page_tail();
|
||||
|
||||
?>
|
Loading…
Reference in New Issue