*** empty log message ***

svn path=/trunk/boinc/; revision=6197
This commit is contained in:
David Anderson 2005-05-20 00:48:52 +00:00
parent 1c7d2e6bec
commit 2224431435
12 changed files with 910 additions and 9 deletions

View File

@ -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;
}
}
}

View File

@ -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);

View File

@ -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

View File

@ -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&);

View File

@ -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).

View File

@ -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) {

View File

@ -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) {

382
doc/bashford_cookbook.txt Normal file
View File

@ -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?]

View File

@ -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:

415
doc/mac_build.html Normal file
View File

@ -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.

35
doc/screensaver.php Normal file
View File

@ -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();
?>

22
doc/stats_sites.php Normal file
View File

@ -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();
?>