bff9cea4fe24fec7576806de2acddc0d1295bd52
[pkg-boinc/boinc-server-autodock.git] / bin / install.sh
1 #!/bin/bash
2
3 set -e
4
5 version=
6 if [ "-version" = "$1" -o "--version" = "$1" ]; then
7    echo "$version"
8    exit 1
9 fi
10
11 ## Set configuration parameters
12 if [ -z "$BOINC_SOURCEDIR" ]; then BOINC_SOURCEDIR=$(dirname $(realpath $0)); fi
13
14 ## Set configuration parameters
15 if [ -r "$BOINC_SOURCEDIR"/autodockvina_set_config.sh ]; then
16    . "$BOINC_SOURCEDIR"/autodockvina_set_config.sh
17 fi
18
19 if [ "-h" = "$1" -o "-help" = "$1" -o "--help" = "$1" ]; then
20
21    cat <<EOHELP
22 $(basename $0|tr "a-z" "A-Z")                   BOINC-SERVER-AUTODOCK                   $(basename $0|tr "a-z" "A-Z")
23
24 NAME
25
26   $(basename $0) - installation of complete BOINC Server for AutoDock Vina Drug Screening
27
28 SYNOPSIS
29
30   $(basename $0) [--help] 
31
32 DESCRIPTION
33
34   This script prepares the database, installs, configures and launches the BOINC server 
35   for virtual drug screening using AutoDock Vina. For commands in demand of root privileges
36   it will invoke sudo.
37
38   All parameters are specified by environment variables.
39
40      BOINC_PROJECTNAME   defines the unique short name of the project,
41                          which also serves as the database name. It is currently set
42                          to '$BOINC_PROJECTNAME'.
43      BOINC_SOURCEDIR     defines the path to a directory with intermediate
44                          scripts to install and configure the BOINC project. It is
45                          currently set to '$BOINC_SOURCEDIR'.
46      BOINC_USER          defines the user name under which the BOINC project will be run,
47                          currently set to '$BOINC_USER'.
48      BOINC_WWWGROUP      defines the users group that will have HTTP access to download/upload
49                          files on the server. If \$BOINC_USER currently does not belong to the 
50                          \$BOINC_WWWGROUP, the script adds them.
51                          currently set to '$BOINC_WWWGROUP'.
52      BOINC_DBUSER        defines the user name that will have access to MySQL database.
53                          currently set to '$BOINC_DBUSER'.
54      BOINC_DBPASS        defines the password for access to MySQL database.
55                          currently set to '$BOINC_DBPASS'.
56      BOINC_INSTALLROOT   directory at which to install the complete project,
57                          which will also have the public web pages. Currently
58                          set to '$BOINC_INSTALLROOT.
59
60   Please be aware that the script deletes the previous installation of any BOINC project with
61   the same BOINC_PROJECTNAME.
62
63 SEE ALSO
64
65   http://wiki.debian.org/BOINC
66   http://mgltools.scripps.edu
67   http://autodock.scripps.edu
68 EOHELP
69
70 if [ -n "$BOINC_SOURCEDIR" ]; then
71   cat <<EOHELP
72   file://$(dirname $BOINC_SOURCEDIR)/autodockvina_install_project.sh
73   file://$(dirname $BOINC_SOURCEDIR)/autodockvina_install_apps.sh
74 EOHELP
75 fi
76
77 cat <<EOHELP
78
79 COPYRIGHT
80
81   This script is released under the same license as BOINC.
82
83 AUTHORS
84
85   The script was crafted by Natasha Nikitina, based on the Wiki pages
86   of the Debian Med BOINC project.
87
88 EOHELP
89         exit 1
90 fi
91
92
93 if [ ! -r "$BOINC_SOURCEDIR"/autodockvina_set_config.sh ]; then
94    echo "E: Could not read '$BOINC_SOURCEDIR/autodockvina_set_config.sh'"
95    exit 1
96 fi
97
98 if [ -z "$BOINC_INSTALLROOT" ]; then
99    echo "E: specify 'BOINC_INSTALLROOT' variable."
100    exit 1
101 fi
102
103 if [ -z "$BOINC_PROJECTNAME" ]; then
104    echo "E: specify 'BOINC_PROJECTNAME' variable."
105    eixt 1
106 fi
107
108 if ! (( ypcat passwd | grep -q "$BOINC_USER" ) || grep -q $BOINC_USER /etc/passwd )  ; then
109    sudo useradd $BOINC_USER -d "$BOINC_INSTALLROOT" -s "/bin/bash"
110 fi
111
112 if ! groups "$BOINC_USER" | grep -q "$BOINC_WWWGROUP"; then 
113    echo "I: User '$BOINC_USER' is not in '$BOINC_WWWGROUP' group, adding..."
114    echo "I: Executing with sudo: usermod -aG '$BOINC_WWWGROUP' '$BOINC_USER'"
115    sudo usermod -aG "$BOINC_WWWGROUP" "$BOINC_USER"
116 fi
117
118 if ! [ -d "$BOINC_INSTALLROOT" ]; then
119    echo "I: Creating '$BOINC_INSTALLROOT' directory"
120    sudo mkdir "$BOINC_INSTALLROOT"
121    sudo chmod 777 $BOINC_INSTALLROOT
122 fi
123
124
125 ## Prepare MySQL database, deleting the previous one with the same name if it existed
126 echo "I: Preparing MySQL database... enter MySQL password for root upon request"
127
128 cat <<EOMYSQL | mysql -u root -p;
129 DROP DATABASE IF EXISTS ${BOINC_PROJECTNAME};
130 GRANT ALL PRIVILEGES ON ${BOINC_PROJECTNAME}.* TO '${BOINC_DBUSER}'@'localhost' IDENTIFIED BY '${BOINC_DBPASS}';
131 EOMYSQL
132
133 ## removing project of same name at same installroot
134 if [ -d "$BOINC_INSTALLROOT"/"$BOINC_PROJECTNAME" ]; then
135    echo "I: Removing '$BOINC_INSTALLROOT'/'$BOINC_PROJECTNAME'"
136    sudo rm -r "$BOINC_INSTALLROOT"/"$BOINC_PROJECTNAME"
137 fi
138
139 ## Create the BOINC project
140 . ${BOINC_SOURCEDIR}/autodockvina_install_project.sh
141
142 ## Install AutoDock Vina application
143 . ${BOINC_SOURCEDIR}/autodockvina_install_apps.sh
144
145 echo "I: Changing ownership of '$BOINC_INSTALLROOT' directory to '$BOINC_USER'"
146 sudo chown -R $BOINC_USER $BOINC_INSTALLROOT
147 sudo chmod 775 $BOINC_INSTALLROOT
148 sudo chgrp -R www-data $BOINC_INSTALLROOT/$BOINC_PROJECTNAME/html
149
150 ## Start the BOINC project
151 echo "I: The project has been successfully created. Starting..."
152 sudo -u ${BOINC_USER} ./bin/start