blob: 5897b50c8c4080361ba5699d688bdee9cf5f7b99 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#!/sbin/runscript
opts="${opts} attach"
depend() {
# we can use dns and net, but we can also in most cases live without them
use dns net
}
create_work_directory() {
if [[ ! -d $RUNTIMEDIR ]]; then
einfo "Directory $RUNTIMEDIR not existing, creating now."
mkdir $RUNTIMEDIR
chown ${USER}:${GROUP} $RUNTIMEDIR
if [[ ! -d $RUNTIMEDIR ]]; then
eeror "Directory $RUNTIMEDIR could not be created!"
return 1
fi
ln -s /etc/ssl/certs/ca-certificates.crt $RUNTIMEDIR/ca-bundle.crt
fi
}
generate_logs() {
if [[ ! -f $LOGFILE ]]; then
einfo "No $LOGFILE around. Creating new..."
einfo "For good log rotation is great tool app-admin/logrotate"
touch $LOGFILE
chown ${USER}:${GROUP} $LOGFILE
fi
}
cuda_check() {
if [[ -f /opt/cuda/lib/libcudart.so ]]; then
# symlink wont harm :]
ln -snf /opt/cuda/lib/libcudart.so $RUNTIMEDIR/libcudart.so
fi
}
start() {
ebegin "Starting BOINC"
create_work_directory
cuda_check
cd $RUNTIMEDIR
if [[ ! -f lockfile ]]; then
einfo "File $RUNTIMEDIR/lockfile does not exist, assuming first run."
einfo "You need to setup an account on the BOINC project homepage beforehand!"
einfo "Go to http://boinc.berkeley.edu/ and locate your project."
einfo "Then either run /etc/init.d/boinc attach or connect with a gui client"
einfo "and attach to a project with that."
echo
ewarn "Note that for attaching to some project you need your network up and running."
ewarn "network is needed only for jobs fetching afterwards"
fi
generate_logs
if [[ ${ALLOW_REMOTE_RPC} = "yes" ]]; then
ARGS="${ARGS} -allow_remote_gui_rpc"
fi
# sys-apps/util-linux
CHRT="/usr/bin/chrt ${SCHED_PARAM}"
# check for baselayout version
if [[ -n "${RC_UNAME}" ]]; then
PARAMS="--background --stdout ${LOGFILE} --stderr ${LOGFILE} -- ${ARGS}"
else
PARAMS="-- ${ARGS} >> ${LOGFILE} 2>&1 &"
fi
eval ${CHRT} start-stop-daemon \
--quiet --start --chdir ${RUNTIMEDIR} \
--exec ${BOINCBIN} --chuid ${USER}:${GROUP} \
--nicelevel ${NICELEVEL} \
${PARAMS}
RESULT=$?
if [ "${CPU_SHARE}" -a -d /sys/kernel/uids ]; then
BUID=`id -u ${USER}`
# It might take a moment for start-stop-daemon to chuid
[[ -d /sys/kernel/uids/${BUID} ]] || sleep 5 # 5 was working always here
if [[ -w /sys/kernel/uids/${BUID}/cpu_share ]]; then
echo ${CPU_SHARE} > /sys/kernel/uids/${BUID}/cpu_share
fi
fi
eend $RESULT
}
attach() {
printf " Enter the Project URL: "
read url
printf " Enter your Account Key: "
read key
RC_QUIET_STDOUT="yes" svc_status
if [[ $? = 1 ]]; then
svc_start
fi
ebegin "Attaching to project"
# we have to work in runtime directory
cd $RUNTIMEDIR
# boinc does not return 1 when it fails currently
$BOINCBIN --chuid ${USER}:${GROUP} --attach_project $url $key &> /dev/null
eend $?
sleep 10
tail $LOGFILE
}
stop() {
ebegin "Stopping BOINC"
start-stop-daemon --stop --retry 3 --quiet --exec $BOINCBIN
eend $?
}
restart() {
svc_stop
svc_start
}
|