BOINC Platform sem Daemon Stuttar leiðbeiningar sem fjalla um það hvernig á að setja upp BOINC client á RHEL 5/CentOs 5/Fedora í daemon ham, örugglega hægt að adapta leiðbeiningarnar fyrir önnur distro án mikilla vandkvæða.
Hvað er BOINC?
BOINC er platform til að gefa CPU vinnslutíma til ýmissa verkefna, Svosem SETI@home.

upplýsingabútur fyrir þá forvitnu.
Þegar verið er að gefa upp skipanir sem á að fylgja eftir þá eru oft # og $ tákn fyrir framan þær, hvað merkja þessi tákn ?
$ fyrir venjulega skel
# fyrir rótar skel

ef stæði til dæmis :
“# service squid start”
þá er meiningin sú að þú keyrir skipunina sem rót, ef $ væri fyrir framan þá væri það sem venjulegur notandi, en ef $ væri fyrir framan í þessu tilviki þá myndi skipunin skila villu.

En áfram með smjörið, við þurfum að byrja á því að búa til user sem mun keyra daemon tólið.

#	useradd -d /var/lib/boinc boinc 

því næst þurfum við að ná í BOINC tólið:
(Nýjustu útgáfuna er að finna á http://boinc.berkeley.edu/download.php , Ég nota nýjustu útgáfuna sem dæmi þegar þetta er skrifað.)

#	wget http://boincdl.ssl.berkeley.edu/dl/boinc_ubuntu_5.10.45_i686-pc-linux-gnu.sh

Skráin sem við náðum í er sjálfvirk uppblástrunarskrá (self extracting) svo það er nóg að keyra hana til að afpakka henni.

#	sh boinc_ubuntu_5.10.45_i686-pc-linux-gnu.sh

þá eru komnar nokkrar skrár í BOINC undirmöppu, en þar sem við ætlum að keyra þetta sem daemon þá er gott að færa skrárnar á betri stað.

byrjum á því að chowna skrárnar svo notandinn sem við bjuggum til áðan hefur réttindi til að eiga við þær

#	chown -R boinc:boinc BOINC/

Við ætlum að planta executable skránum á nokkra staði

#	cd BOINC
#	cp boincmgr /usr/local/bin/
#	cp boinc /usr/local/bin/boinc_client
#	mv * /var/lib/boinc
#	cd /var/lib/boinc

takið eftir að ég endurskýrði boinc í boinc_client, þetta er helst til að aðskilja betur managerinn og clientinn.

Ef við viljum virkja remote RPC aðgang þá er gott að búa til password sem er auðveldara að muna en random 32 bita hexadecimal runa sem er búin til þegar clientinn er keyrður í fyrsta skipti. en Remote RPC gefur þér kost á því að tengjast þessum BOINC Client frá Manager á annarri vél.

#	echo <password> > gui_rpc_auth.cfg
#	chown boinc:boinc gui_rpc_auh.cfg

það sem er eftir er að búa til startup scriptu sem við notum svo til að kveikja og slökkva á clientinum þegar tölvan fer í gang

#	vim /etc/init.d/boinc

og pasteaðu þessa runu þangað

#!/bin/sh
#
# BOINC - start and stop the BOINC client daemon on Unix
#
# Unix start/stop script to run the BOINC client as a daemon at
# system startup, as the ‘boinc’ user (not root!).
#
# This version works on Red Hat Linux, Fedora Core, Mandrake, Debian,
# and Slackware Linux, and should work on generic Linux systems
# provided that they have ‘pidof’ (most do).
# Metadata for chkconfig and the SUSE equivalent INIT info are included below.
#
# Usage: boinc { start | stop | status | restart }
#
###
# chkconfig: 345 98 03
# description: This script starts the local BOINC client as a daemon
# For more information about BOINC (the Berkeley Open Infrastructure
# for Network Computing) see http://boinc.berkeley.edu
# processname: boinc
# config: /etc/sysconfig/boinc
#
### BEGIN INIT INFO
# Provides: boinc
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Description: This script starts the local BOINC client as a daemon
# For more information about BOINC (the Berkeley Open Infrastructure
# for Network Computing) see http://boinc.berkeley.edu
### END INIT INFO
#
# Eric Myers <myers@vassar.edu> - 27 July 2004
# Department of Physics and Astronomy, Vassar College, Poughkeepsie NY
# Eric Myers <myers@spy-hill.net>
# Spy Hill Research, Poughkeepsie, New York
# @(#) $Id: boinc,v 1.9 2007/12/18 13:36:59 myers Exp $
########################################################################

##########
# Defaults, which can be overridden by putting new NAME=value lines
# in /etc/sysconfig/boinc (for Red Hat/Fedora Linux and variants)
# or /etc/default/boinc (for Debian/Ubuntu and variants)

# Name of user to run as:
#
BOINCUSER=boinc

# Working directory. Could be /home/boinc, /var/lib/boinc, etc..
# The reason I prefer /var/lib/boinc is that this works best for a
# cluster of computers where /home/anything might be shared between machines
#
BOINCDIR=/var/lib/boinc

# Name of the client executable. This is the file “boinc” if you
# unpacked the download file boinc_M.mm.rr_i686-pc-linux-gnu.sh,
# but I like to rename it and put it in a public place.
# (Hint: move boincmgr to /usr/local/bin too so anyone can easily use it).
#
BOINCEXE=/usr/local/bin/boinc_client

# Deprecated. Was used to construct the executable name in days of old.
# (Still here just as a last ditch to find an old executable, but
# probably should be removed.)
#
BUILD_ARCH=i686-pc-linux-gnu


# Log and error files (you should rotate these occasionally)
#
LOGFILE=boinc.log
ERRORLOG=error.log

# BOINC options: for the command line when running the client.
# Be aware that -allow_remote_gui_rpc opens up your machine to the world!
#
#BOINCOPTS=“-allow_remote_gui_rpc”
BOINCOPTS=“”


# Mandrake 10.1 really wants a subsys lock file …
if [ -d /var/lock/subsys ]; then
LOCKDIR=/var/lock/subsys
elif [ -d /var/lock ]; then
LOCKDIR=/var/lock
fi

# su on Linux seems to need this to be set to work properly in a script
export TERM dumb


##
# Init script function library. This stuff is Red Hat specific,
# but if the functions are not found we create our own simple replacements.
# (The idea for replacing the functions comes from OpenAFS. Thanks guys!)

if [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
export PATH=/sbin:/bin:/usr/sbin:/usr/bin
function echo_success () { echo -n " [ OK ] “ ; }
function echo_failure () { echo -n ” [FAILED] “ ; }
function echo_warning () { echo -n ” [WARNING] " ; }
function killproc() {
PID=`pidof -s -x -o $$ -o $PPID -o %PPID $1`
[ $PID ] && kill $PID ; }
fi


## Look for any local configuration settings which override all above

if [ -f /etc/sysconfig/boinc ]; then
. /etc/sysconfig/boinc
elif [ -f /etc/default/boinc ]; then
. /etc/default/boinc
fi


## Verify the working directory exists:

if [ ! -d $BOINCDIR ]; then
echo -n “Cannot find BOINC directory $BOINCDIR ”
echo_failure
echo
exit 7
fi


# Some additional places to look for the client executable
# (Should do this after init.d/functions and sysconfig/boinc, which sets PATH)

export PATH=$BOINCDIR:/usr/local/bin:$PATH


## Locate the executable, either boinc_client, boinc,
## or boinc_M.mm_…. with highest version number
## We only do this if BOINCEXE set above isn't found or is not executable.

if [ ! -x $BOINCEXE ]; then
BOINCEXE=`/usr/bin/which boinc_client 2>/dev/null`
if [ ! -x "$BOINCEXE" ]; then
BOINCEXE=`/usr/bin/which boinc 2>/dev/null`
if [ ! -x "$BOINCEXE" ]; then
BOINCEXE=`/bin/ls -1 $BOINCDIR/boinc_*_$BUILD_ARCH 2>/dev/null | tail -1 `
fi
fi
fi

if [ ! -x "$BOINCEXE" ]; then
echo -n “Cannot find an executable for the BOINC client.”
echo_failure
echo
exit 2
fi



## Functions: $1 is one of start|stop|status|restart

case “$1” in
start)
cd $BOINCDIR

if [ -f lockfile ] ; then
echo -n “Another instance of BOINC is running (lockfile exists).”
echo_failure
echo
exit 4
fi

if [ ! -d projects ] ; then
echo -n “The BOINC client requires initialization.”
echo_warning
echo
fi

echo -n “Starting BOINC client as a daemon: ”
su $BOINCUSER -c “$BOINCEXE $BOINCOPTS” >>$LOGFILE 2>>$ERRORLOG &
sleep 1
PID=`pidof -s -x -o $$ -o $PPID -o %PPID $BOINCEXE`
if [ $PID ]; then
[ -d $LOCKDIR ] && touch $LOCKDIR/boinc
echo_success
else
echo_failure
fi
echo
;;

stop)
cd $BOINCDIR
if [ ! -f lockfile -a ! -f $LOCKDIR/boinc ] ; then
echo -n “BOINC is not running (no lockfiles found).”
echo_success
else
echo -n “Stopping BOINC client daemon: ”
killproc $BOINCEXE && echo_success || echo_failure
# clean up in any case
rm -f $BOINCDIR/lockfile
rm -f $LOCKDIR/boinc
fi
echo
;;

restart)
$0 stop
$0 start
;;

status)
PID=`pidof -x -o $$ -o $PPID -o %PPID boinc_client`
if [ "$PID" == "" ]; then
PID=`pidof -x -o $$ -o $PPID -o %PPID $BOINCEXE`
fi
if [ "$PID" != "" ]; then
echo “BOINC client is running (pid $PID).”
else
if [ -f $BOINCDIR/lockfile -o -f $LOCKDIR/boinc ]; then
echo “BOINC is stopped but lockfile(s) exist.”
else
echo “BOINC client is stopped.”
fi
fi
;;

*)
echo “Usage: boinc {start|stop|restart|status}”
exit 1
esac

exit

#EOF#

Helst er að athuga hvort þessar breytur séu ekki réttar, þær eru allar skilgreindar í byrjunni og eru :
BOINCUSER=boinc
BOINCDIR=/var/lib/boinc
BOINCEXE=/usr/local/bin/boinc_client
BOINCOPTS=“”
BOINCUSER skilgreinir hvaða notandi á að keyra daemoninn.
BOINCDIR segir hvar “working directoryið” sé
BOINCEXE segir til um hvar client executable skráin er
BOINCOPTS auka arguments sem executable skráin fær við boot.

Helst að nefna varðandi BOINCOPTS er að ef þú vilt virkja remote RPC aðgang þá þarftu að breyta henni í :

BOINCOPTS=“–allow_remote_gui_rpc”

bætum svo við executable réttindum :

#	chmod +x /etc/init.d/boinc

þá er bara að prófa hvort þetta virki, ef allt virkar þá ætti þetta að koma fram :

#	[root@placebo BOINC]# /etc/init.d/boinc start
#	The BOINC client requires initialization.                  [WARNING]
#	Starting BOINC client as a daemon:                         [  OK  ]
#	[root@placebo BOINC]# 

Þá er bara að stilla þannig að daemoninn fari í gang þegar vélin kveikir á sér og slökkva á honum þegar vélin er að slökkva á sér. Til að gera það þá þurfum við að linka startup skránna á nokkur runlevel

persónulega þá er ég bara með þetta í gangi í runlevel 3 en ég bætti runlevel 5 við fyrir þá sem eru með gluggaumhverfi.

#	ln -s /etc/init.d/boinc /etc/rc0.d/K03boinc
#	ln -s /etc/init.d/boinc /etc/rc3.d/S98boinc
#	ln -s /etc/init.d/boinc /etc/rc5.d/S98boinc
#	ln -s /etc/init.d/boinc /etc/rc6.d/K03boinc

Þá er bara að tengjast honum með manager, annaðhvort CLI útgáfunni (/var/lib/boinc/boinc_cmd) eða GUI útgáfunni (/usr/local/bin/boincmgr).

Ég er með þetta þannig að ég hef BOINC keyrandi á báðum serverunum mínum og svo tengist ég clientunum í gegnum GUI managerinn á borðvélinni minni.

Í grunnatriðum þá er ferlið svona til að byrja.

Á GUI:
Kveiktu á BOINC Managernum, tengstu annaðhvort við localhost (default) eða farðu í advanced ham og svo advanced á toolbarnum og veldu “select computer” og skrifaðu þar inn upplýsingar um tölvuna sem þú vilt tengjast.

Svo er farið í Tools, og valið “attach to project”,
þá ætti að koma upp wizard, Project URL er : http://setiathome.berkeley.edu , ýttu svo á next
þá ætti hún að spyrja um user information,
-ef þú ert þegar með account hjá SETI@home þá velurðu “yes, existing user”, slærð svo inn tölvupóstinn þinn og lykilorð til að tengjast,
-ef þú ert ekki með account hjá þeim þá er einfalt að stofna hann, einfaldlega hakar í “no, new user”, slærð inn tölvupóstfangið þitt og það lykilorð sem þú vilt og ýtir á next, þá ertu tekinn á vefsíðu hjá SETI@home þar sem þú skráir þig inn og getur skrifað inn frekari upplýsingar um þig og gengið til liðs við einhvern SETI hóp, en það er frjálst, ef þú vilt þá er ekki nauðsynlegt að fara til einhvers hóps.

Aftur í wizardinum þá ýtirðu á finish og búið.

Núna er Clientinn í sambandi við SETI@home og nær í ný verkefni og vinnur þau þegar tölvan er idle (default stillingin er þannig að ef það er eitthvað input device activity (lyklaborð/mús) á síðustu 3 mín þá er tölvan “active” og forritið vinnur ekkert, svo þegar þú skreppur frá í meira en 3 mín þá fer forritið af stað og hamast á gögnunum frá SETI.

Það þarf ekkert að stilla neitt frekar í clientinum, hann er stilltur á sjálfkrafa resume, t.d. þegar þú slekkur á tölvunni og kveikir á henni aftur þá þarf ekkert að tengjast clientinum og fara í gegnum ferlið aftur.

Í gegnum CLI:
Það er aðeins flóknara, ég lagði ekki útí það sjálfur en skrefin eru í grunninn eins og í gegnum wizardinn, get bent ykkur á “–help” argumentið við boinc_cmd til að fá upp lista yfir aðgerðir.

Hægt er að stilla hvernig clientinn hagar sér, sjálfgefin stilling er að fara eftir þeim stillingum sem eru tengdar við accountinn þinn. til að breyta þeim þá þarftu að fara á SETI@home síðuna og skrá þig inn og í Account Preference geturðu breytt sjálfgefnu stillingunum. Hægt er t.d. að stilla hvað BOINC notar mikið vinnsluminni, hvað hann notar mörg % af örgjörvarnum og á hvaða tímum dags það á að keyra, getur valið hvenær forritið á að tengjast netinu til að ná í fleiri verkefni eða skila af sér verkefnum sem það er búið með og fleira og fleira.


Gagnlegar heimasíður :
SETI@home heimasíðan http://setiathome.berkeley.edu/index.php
BOINC platforminn http://boinc.berkeley.edu/
Auto start leiðbeiningar fyrir fleiri stýrikerfi : http://boinc.berkeley.edu/trac/wiki/AutoStart