FoldingAtHome
Differences between revisions 1 and 29 (spanning 28 versions)
Size: 8464
Comment:
|
Size: 60
Comment: move to help.u.c/c
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
== Overview == When proteins are created, they undergo a complex process known as folding, so-called because the protein molecule transforms from a long chain of amino acids to a complex shape (it "folds up"). The final shape of the protein is absolutely critical to determining its properties and function. Scientists have created software to simulate the folding process to better understand how proteins work, which in turn makes it possible to develope new drugs, cure diseases, etc. Folding@Home is a project from Stanford University that uses millions of networked PCs to form a supercomputer for protein folding simulations. The client software is loaded on a PC, it contacts the central servers, and receives "work units". The client then runs on spare CPU time, and uploads finished work units to the server. Folding@Home is a great way to make your computer do useful work even when you're not using it. Since it runs at a very low priority, you should never realize it's running when you're using the computer to do your work. Note that "using the computer" refers to doing heavy computations. Generally, tasks like web browsing and word processing involve very little CPU usage, so the Folding@Home client will be running at near 100% even when doing those kinds of tasks. == Installation == The following script will download the latest client from the Folding@Home website, and install it to /opt/foldingathome. It will ask you to set up the client (the defaults are usually sufficient), and copy that configuration for every CPU in your machine. It is not possible to provide a .deb package for Folding@Home, because the client must be downloaded from Stanford's website. This is to ensure the integrity of the research. Download these scripts to the same directory, and name them folding_install.sh and foldingathome, respectively. Then do {{{ chmod 500 foldingathome folding_install }}} to make them executable. Finally, do {{{ sudo ./folding_install.sh }}} to install the client. === Install Script === {{{ #!/bin/sh # to do: # add foldingathome user # no password, shell /bin/true, only has access to fah_dir # add option of running from $HOME # uninstall fah_dir=/opt/foldingathome this_dir=$PWD #fah_dir=$HOME/opt/foldingathome config_dir=$fah_dir/config executable=FAH502-Linux.exe # check if installed if [[ ! -d $fah_dir || ! -d $config_dir || ! -x $config_dir/$executable ]] ; then echo echo "Creating directory structure..." test -d $fah_dir || /bin/mkdir $fah_dir test -d $config_dir || /bin/mkdir $config_dir cd $config_dir echo echo "It appears that you have not installed Folding@Home yet. Would you like me to download it for you?" select resp in {yes,no} ; do if [[ $resp == "yes" ]] ; then if ! wget http://www.stanford.edu/group/pandegroup/release/$executable ; then echo "Downloading Folding@Home failed." exit 1 else /bin/chmod 555 $executable fi else echo echo "Please download the executable and save it to $config_dir." echo "Then re-run this script." exit 1 fi break done fi cd $config_dir if [[ -x $executable ]] ; then ./$executable -configonly else # should never get here echo echo "Could not find $executable!" echo "If you have already downloaded it, put it in $config_dir." echo "If it is in $config_dir, check that it is named $executable. If not, modify $0." exit 1 fi # setup a client for each processor num_cpus=`/bin/grep '^processor[[:space:]]*:' /proc/cpuinfo | wc -l` echo echo "Found $num_cpus cpus. I will create one client for every cpu." for cpu_num in `seq -w 1 $num_cpus`; do echo debug echo cpu_num = $cpu_num client_dir=$fah_dir/$cpu_num test -d $client_dir || /bin/mkdir $client_dir /bin/cp -f $config_dir/* $client_dir /bin/sed -i -e "s/machineid=.*/machineid=$cpu_num/" $client_dir/client.cfg cpu_num=$((++cpu_num)) done # install the startup scripts echo echo "How do you want to run Folding@Home?" echo " Daemon = Run at boot up" echo " Manual = Copy the startup script to the Folding@Home directory ($fah_dir)." select resp in {daemon,manual} ; do if [[ $resp == "daemon" ]] ; then if [[ $UID != 0 ]] ; then echo echo "You must be root to install as a daemon." exit 1 fi echo echo "Adding startup script to /etc/init.d" if ! /bin/cp -vf $this_dir/foldingathome /etc/init.d/ ; then echo "Could not copy startup script to /etc/init.d" exit 1 fi # hopefully 2 is the default runlevel runlevel=2 echo echo "Adding foldingathome to runlevel $runlevel." if ! /bin/ln -sf /etc/init.d/foldingathome /etc/rc${runlevel}.d/S99foldingathome ; then echo echo "Could not add to runlevel $runlevel." exit 1 fi echo echo "To start folding right now, run /etc/init.d/foldingathome as root." break elif [[ $resp == "manual" ]] ; then echo "Copying startup script to $fah_dir" if ! /bin/cp -fv $this_dir/foldingathome $fah_dir ; then echo "Could not copy startup script to $fah_dir" exit 1 fi echo "To start folding right now, run `$fah_dir/foldingathome start`" break fi done }}} === Startup Script === {{{ #!/bin/sh # TO DO: # a foldingathome user PATH=/sbin:/bin:/usr/bin . /lib/lsb/init-functions fah_dir=/opt/foldingathome config_dir=$fah_dir/config executable=FAH502-Linux.exe # check if folding at home has been configured yet cd $fah_dir if [[ ! -d 1 ]] ; then # there will always be at least one client log_error_msg "Could not find client directory." fi num_cpu=`grep '^processor[[:space:]]*:' /proc/cpuinfo | wc --lines` function kill_clients() { for cpu_num in `seq -w 1 $num_cpu` ; do client_dir=$fah_dir/$cpu_num if [[ ! -d $client_dir ]] ; then continue elif [[ $client_dir == $config_dir ]] ; then continue fi cd $client_dir log_begin_msg "Stopping Client $cpu_num." for client in FahCore*.exe ; do killall -q $client >& /dev/null done killall -q $client_dir/$executable >& /dev/null sleep 1 if ps -ef | grep "$client_dir[/]$executable" >& /dev/null ; then # failed log_end_msg 1 else # success log_end_msg 0 fi done } function start_clients() { for cpu_num in `seq -w 1 $num_cpu` ; do client_dir=$fah_dir/$cpu_num if [[ ! -d $client_dir ]] ; then continue elif [[ $client_dir == $config_dir ]] ; then continue fi cd $client_dir log_begin_msg "Starting Client $cpu_num." nice -n 19 $client_dir/$executable >& /dev/null & log_end_msg $? done } case "$1" in start|force-reload) log_begin_msg "Starting Folding@Home" start_clients log_end_msg $? ;; restart|reload) log_begin_msg "Restarting Folding@Home" kill_clients && start_clients log_end_msg $? ;; stop) log_begin_msg "Stopping Folding@Home" kill_clients log_end_msg $? ;; *) log_success_msg "Usage: /etc/init.d/foldingathome {start|stop|restart}" exit 1 ;; esac exit 0 }}} === Future Plans === Some people don't have root access to their computers. To accomodate them, a way to install to the $HOME directory should be added. There should be a way to easily uninstall the client. Folding@Home is secure. The Stanford team has gone to great lengths to ensure security, both for the integrity of their research and the safety of donors' computers. However, the more secure the better. The Gentoo ebuild for Folding@Home creates a new user foldingathome whose sole purpose is to run the client. I will add this feature in the future. == Links == http://folding.stanford.edu/ |
#REFRESH 0 https://help.ubuntu.com/community/FoldingAtHome |
FoldingAtHome (last edited 2008-08-06 17:00:30 by localhost)