#!/sbin/openrc-run
-# Copyright 1999-2016 Gentoo Foundation
+# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
extra_started_commands="attach resume suspend"
use dns net ntp-client ntpd
}
-
create_work_directory() {
- if [[ ! -d "${RUNTIMEDIR}" ]]; then
+ local sslcrt="/etc/ssl/certs/ca-certificates.crt"
+
+ if [ ! -d "${RUNTIMEDIR}" ]; then
einfo "Directory ${RUNTIMEDIR} does not exist, creating now."
- mkdir -p "${RUNTIMEDIR}"
- if [[ ! -d "${RUNTIMEDIR}" ]]; then
+ if ! mkdir -p "${RUNTIMEDIR}"; then
eeror "Directory ${RUNTIMEDIR} could not be created!"
return 1
fi
# ensure proper ownership
- chown "${USER}:${GROUP}" "${RUNTIMEDIR}"
+ if ! chown "${USER}:${GROUP}" "${RUNTIMEDIR}"; then
+ eeror "Changing ownership of '${RUNTIMEDIR}' to '${USER}:${GROUP}' failed!"
+ return 1
+ fi
fi
- if [[ ! -e "${RUNTIMEDIR}"/ca-bundle.crt ]]; then
- ln -s /etc/ssl/certs/ca-certificates.crt "${RUNTIMEDIR}"/ca-bundle.crt
+ if [ ! -e "${RUNTIMEDIR}"/ca-bundle.crt ]; then
+ if [ ! -f "${sslcrt}" ]; then
+ eerror "'${sslcrt}' does not exist!"
+ return 1
+ fi
+
+ if ! ln -s "${sslcrt}" "${RUNTIMEDIR}"/ca-bundle.crt; then
+ eeror "Symlinking '${sslcrt}' failed!"
+ return 1
+ fi
fi
return 0
}
+fix_lib_symlinks() {
+ local src="$1"
+ local tgt="$2"
-cuda_check() {
- local libtarget="${RUNTIMEDIR}/libcudart.so"
- local libsource="$(ls -t /opt/cuda/lib*/libcudart.so 2>/dev/null | head -n 1)"
+ # If the source does not exist, we can not do anything
+ if [ ! -f "${src}" ] ; then
+ return 1
+ fi
+
+ # Check whether the symlink is already there and in order
+ if [ -L "${tgt}" ] ; then
+ if [ -f "${tgt}" ] ; then
+ return 0
+ fi
- # Remove a broken symlink
- if [[ -h "${libtarget}" ]] \
- && [[ "${libsource}" != "$(readlink "${libtarget}")" ]]; then
- rm -f "${libtarget}"
+ # Remove broken symlink
+ if ! rm -f "${tgt}"; then
+ eeror "Removing '${tgt}' failed!"
+ return 1
+ fi
fi
# symlink the correct path
- if [[ -n "${libsource}" ]] \
- && [[ -f "${libsource}" ]] \
- && [[ ! -h "${libtarget}" ]]; then
- ln -snf "$libsource" "${libtarget}"
+ if ! ln -snf "${src}" "${tgt}"; then
+ eeror "Symlinking '${src}' to '${tgt}' failed!"
+ return 1
fi
+
+ return 0
+}
+
+cuda_check() {
+ local libsource="/opt/cuda/@libdir@/libcudart.so"
+ local libtarget="${RUNTIMEDIR}/libcudart.so"
+
+ fix_lib_symlinks "${libsource}" "${libtarget}" || return 1
+ return 0
}
+opencl_check() {
+ local libsource="/usr/@libdir@/libOpenCL.so"
+ local libtarget="${RUNTIMEDIR}/libOpenCL.so"
+
+ fix_lib_symlinks "${libsource}" "${libtarget}" || return 1
+ return 0
+}
env_check() {
# Make sure the configuration is sane
# to be empty by the user.
# If the client was not found (how?) something is seriously wrong
- if [[ ! -x "$BOINCBIN" ]]; then
+ if [ ! -x "${BOINCBIN}" ]; then
eerror "No boinc_client found!"
return 1
fi
# The boinccmd is crucial, or we can not attach, suspend or resume
# the boinc client
- if [[ ! -x "$BOINCCMD" ]]; then
- eerror "No boinccmd_program found!"
+ if [ ! -x "${BOINCCMD}" ]; then
+ eerror "No boinccmd program found!"
return 1
fi
return 0
}
-
need_passwd_arg() {
local vers=$(${BOINCBIN} --version | tr -d .)
- [ -z "$vers" ] && vers="00"
- [ $(expr substr "$vers" 1 2) -lt 74 ] && return 0
+ [ -z "${vers}" ] && vers="00"
+ [ $(expr substr "${vers}" 1 2) -lt 74 ] && return 0
# From version 7.4 on, the default is to read
# gui_rpc_auth.cfg for the password.
return 1
}
-
start_pre() {
env_check || return 1
create_work_directory || return 1
- cuda_check
+ cuda_check || einfo "CUDA not supported"
+ opencl_check || einfo "OpenCL not supported"
- if [[ ! -f "${RUNTIMEDIR}/lockfile" ]]; then
+ if [ ! -f "${RUNTIMEDIR}/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."
return 0
}
-
start() {
- if [[ "${ALLOW_REMOTE_RPC}" = "yes" ]]; then
+ if [ "${ALLOW_REMOTE_RPC}" = "yes" ]; then
ARGS="${ARGS} --allow_remote_gui_rpc"
fi
ebegin "Starting ${RC_SVCNAME}"
start-stop-daemon --start --nicelevel ${NICELEVEL} \
--user "${USER}:${GROUP}" --quiet --make-pidfile \
- --pidfile "$BOINC_PIDFILE" --background \
+ --pidfile "${BOINC_PIDFILE}" --background \
--exec "${BOINCBIN}" -- ${ARGS}
eend $?
}
-
attach() {
local password=""
local url=""
-- ${password} --project_attach ${url} ${key}
eend $?
- sleep 10s
+ sleep 10
tail "${RUNTIMEDIR}/stdoutdae.txt"
}
-
stop() {
local password=""
local stop_timeout="SIGTERM/60/SIGTERM/30/SIGKILL/30"
ebegin "Stopping ${RC_SVCNAME}"
start-stop-daemon --stop --quiet --progress \
- --retry $stop_timeout \
+ --retry ${stop_timeout} \
--pidfile "${BOINC_PIDFILE}"
eend $?
}
-
resume() {
env_check || return 1
password="--passwd \"$(cat "${RUNTIMEDIR}/gui_rpc_auth.cfg")\""
fi
- local master_urls=( \
- $(cd "${RUNTIMEDIR}" ; \
+ for url in $(cd "${RUNTIMEDIR}" ; \
"${BOINCCMD}" ${password} --get_project_status | \
- sed -n 's/\s*master URL: //p') \
- )
-
- for url in "${master_urls[@]}"; do
- ebegin "Resuming $url"
+ sed -n 's/\s*master URL: //p'); do
+ ebegin "Resuming ${url}"
start-stop-daemon --user "${USER}:${GROUP}" --quiet \
--chdir "${RUNTIMEDIR}" --exec "${BOINCCMD}" \
-- ${password} --project ${url} resume
done
}
-
suspend() {
env_check || return 1
password="--passwd \"$(cat "${RUNTIMEDIR}/gui_rpc_auth.cfg")\""
fi
- local master_urls=( \
- $(cd "${RUNTIMEDIR}" ; \
+ for url in $(cd "${RUNTIMEDIR}" ; \
"${BOINCCMD}" ${password} --get_project_status | \
- sed -n 's/\s*master URL: //p') \
- )
-
- for url in "${master_urls[@]}"; do
- ebegin "Suspending $url"
+ sed -n 's/\s*master URL: //p'); do
+ ebegin "Suspending ${url}"
start-stop-daemon --user "${USER}:${GROUP}" --quiet \
--chdir "${RUNTIMEDIR}" --exec "${BOINCCMD}" \
-- ${password} --project ${url} suspend