a103c2d79d6f3075e58ae862c7aa98425c1260c7
[pkg-boinc/boinc-server-autodock.git] / bin / autodockvina_install_project.sh
1 #!/bin/bash
2
3 set -e
4
5 version=0.0.0
6 if [ "-version" = "$1" -o "--version" = "$1" ]; then
7    echo "$version"
8    exit 1
9 fi
10
11 if [ -z "$BOINC_SOURCEDIR" ]; then BOINC_SOURCEDIR=$(dirname $(realpath $0)); fi
12
13 ## Set configuration parameters
14 if [ -r "$BOINC_SOURCEDIR"/autodockvina_set_config.sh ]; then
15    . "$BOINC_SOURCEDIR"/autodockvina_set_config.sh
16 fi
17
18 if [ "-h" = "$1" -o "-help" = "$1" -o "--help" = "$1" ]; then
19         cat <<EOHELP
20 $(basename $0|tr "a-z" "A-Z")                   BOINC-SERVER-AUTODOCK                   $(basename $0|tr "a-z" "A-Z")
21
22 NAME
23
24   $(basename $0) - installation of a BOINC project
25
26 SYNOPSIS
27
28   $(basename $0) [--help]
29
30 DESCRIPTION
31
32   This script makes the BOINC project with specified name, basing on the prepared database,
33   and prepares the web pages to access or administrate the project. 
34
35   All parameters are specified by environment variables.
36
37     BOINC_PROJECTNAME      defines the unique short name of the project, which also serves
38                            as the database name.
39     BOINC_PROJECTNICENAME  defines the full name of the project, which will be displayed on
40                            the project webpages and in the BOINC clients software.
41     BOINC_SOURCEDIR        defines the path to directory with intermediate scripts to install
42                            and configure the BOINC project.
43     BOINC_INSTALLROOT      defines the path to the directory where to install the BOINC project.
44     BOINC_USER             defines the user name under which the BOINC project will be run.
45     BOINC_WWWGROUP         defines the users group that will have HTTP access to download/upload
46                            files on the server. 
47     BOINC_DBUSER           defines the user name that has access to the project's MySQL database.
48     BOINC_DBPASS           defines the password for access to MySQL database.
49     PYTHONPATH             defines the path to search for the Python executable
50
51 SEE ALSO
52
53   http://wiki.debian.org/BOINC
54   http://mgltools.scripps.edu
55   http://autodock.scripps.edu
56
57 COPYRIGHT
58
59   This script is released under the same license as BOINC.
60
61 AUTHORS
62
63   Natalia Nikitina
64
65 EOHELP
66         exit
67 fi
68
69 if [ ! -r "$BOINC_SOURCEDIR"/autodockvina_set_config.sh ]; then
70    echo "E: Could not read '$BOINC_SOURCEDIR/autodockvina_set_config.sh'"
71    exit 1
72 fi
73
74 ## Create the BOINC project
75 echo "I: Creating the project..."
76 hostip=`hostname -I | head -n 1`              #IP address of the server
77 hosturl=`echo "http://${hostip}" | tr -d ' '` #trim whitespaces
78 echo -n "I: Basic configuration test: "
79 if [ -z "$BOINC_INSTALLROOT" -o -z "$hosturl" -o -z "$BOINC_PROJECTNAME" -o -z "$BOINC_DBPASS" \
80   -o -z "$BOINC_PROJECTNICENAME" -o -z "$BOINC_PROJECTNAME" ] ; then
81   echo "E: Missing a configuration parameter. Please check the configuration."
82   exit 1
83 else
84   echo "[ok]"
85 fi
86
87 ## Call make_project utility to register the BOINC project
88 if ! PYTHONPATH=$PYTHONPATH:/usr/share/pyshared/Boinc/ \
89  /usr/share/boinc-server-maker/tools/make_project \
90   --url_base "$BOINC_PROJECTURL" \
91   --db_name "$BOINC_PROJECTNAME" \
92   --db_user "$BOINC_DBUSER" \
93   --db_passwd "$BOINC_DBPASS" \
94   --delete_prev_inst --drop_db_first  \
95   --project_root "$BOINC_INSTALLROOT"/"$BOINC_PROJECTNAME" \
96   --srcdir /usr/share/boinc-server-maker/ \
97    "$BOINC_PROJECTNAME" "$BOINC_PROJECTNICENAME"
98 then
99   echo "E: Error making project! Please make sure that the configuration parameters 
100         are correct and try again." 
101   exit 1
102 fi
103
104 ## Add automated restart upon failure
105 crontabfile=$(mktemp /tmp/boinc_crontab_XXXXXX)
106 echo "I: Adding automated restart upon failure... executing sudo crontab -u $BOINC_USER"
107 if ! sudo crontab -u $BOINC_USER -l | grep -v "$BOINC_INSTALLROOT/$BOINC_PROJECTNAME/bin/start" > $crontabfile; then
108   echo "W: ignore crontab error if this indicates not to have previous entries"
109 fi
110 echo "*/5 * * * * $BOINC_INSTALLROOT/$BOINC_PROJECTNAME/bin/start --cron" >> $crontabfile
111 echo "I: executing sudo crontab -u $BOINC_USER"
112 sudo crontab -u $BOINC_USER "$crontabfile"
113 rm "$crontabfile"
114
115 ## Set access to administrative web interface (will ask to enter the new password)
116 echo "I: Setting access to administrative web interface..."
117 cd "${BOINC_INSTALLROOT}"/"${BOINC_PROJECTNAME}"
118 htpasswd -c html/ops/.htpasswd $BOINC_USER
119
120 ## Configure Apache to call BOINC server
121 if ! grep -q Require ${BOINC_PROJECTNAME}.httpd.conf; then
122   # Apache 2.4 needs this but the regular BOINC code is still at 2.2
123   sed -i '/Order/i\ \ \ \ \ \ \ \ Require all granted' ${BOINC_PROJECTNAME}.httpd.conf
124   echo "I: Added 'Require' statement for Apache 2.4 compliance of ${BOINC_PROJECTNAME}.httpd.conf"
125 fi
126
127 echo "I: executing sudo ${BOINC_PROJECTNAME}.httpd.conf /etc/apache2/sites-available/"
128 sudo cp "${BOINC_PROJECTNAME}.httpd.conf"  /etc/apache2/sites-available/
129 echo "I: executing sudo a2ensite ${BOINC_PROJECTNAME}.httpd.conf"
130 sudo a2ensite  "${BOINC_PROJECTNAME}.httpd.conf"
131 echo "I: executing sudo a2enmod cgi"
132 sudo a2enmod cgi
133 echo "I: executing sudo a2enmod php5"
134 sudo a2enmod php5
135 echo "I: executing sudo apache reload"
136 sudo /etc/init.d/apache2 reload
137
138 ## Make html pages look nice and create the forums
139 echo "I: Adjusting HTML pages for project in '$BOINC_INSTALLROOT/$BOINC_PROJECTNAME"
140 cd "${BOINC_INSTALLROOT}"/"${BOINC_PROJECTNAME}"
141 sed -i "s/REPLACE WITH PROJECT NAME/$BOINC_PROJECTNICENAME/" html/project/project.inc
142 sed -i "s/REPLACE WITH COPYRIGHT HOLDER/The Debian Community/" html/project/project.inc
143 if ! cp "${BOINC_SOURCEDIR_ABS}/html/user/index.php" "html/user/index.php"; then
144   echo "E: Error copying ${BOINC_SOURCEDIR_ABS}/html/user/index.php to html/user/index.php"
145   echo "E: Please report."
146   echo "E:    BOINC_SOURCEDIR:     $BOINC_SOURCEDIR"
147   echo "E:    BOINC_SOURCEDIR_ABS: $BOINC_SOURCEDIR_ABS"
148   echo "E:    BOINC_INSTALLROOT:   $BOINC_INSTALLROOT"
149   echo "E:    BOINC_PROJECTNAME:   $BOINC_PROJECTNAME"
150   echo "E:    PWD:                 $(pwd)"
151   exit 1
152 fi
153 sed -i 's/PROJECT/"AutoDockVina@Home"/g' html/user/index.php
154 # The following may be something for upstream to consider
155 sed -i 's%/etc/httpd/run/httpd.pid%/var/run/apache2/apache2.pid%' html/user/server_status.php
156 #sed -i 's/URL_BASE/therightURL/g' html/user/index.php              # to be added
157 #sed -i 's/STYLESHEET/additionalStylesheet/g' html/user/index.php   # to be added
158
159 cd "${BOINC_INSTALLROOT}"/"${BOINC_PROJECTNAME}"/html/ops
160 sed -i '/remove the die/d' create_forums.php
161 php5 create_forums.php
162
163 ## Set permissions for upload directory, logs directory and html pages hierarchy
164
165 echo "I: Setting permissions..."
166 cd "${BOINC_INSTALLROOT}"/"${BOINC_PROJECTNAME}"
167 echo "I: not changing ownerships of ${BOINC_INSTALLROOT}/${BOINC_PROJECTNAME} at this point"
168 #echo "I: executing sudo chown -R $BOINC_USER:$BOINC_WWWGROUP in $(pwd)"
169 #sudo chown -R $BOINC_USER:$BOINC_WWWGROUP .
170 echo "I: executing sudo chmod g+w -R $(pwd)"
171 sudo chmod g+w -R .
172 echo "I: executing sudo chmod 02770 -R upload etc."
173 sudo chmod 02770 -R upload html/cache html/inc html/languages html/languages/compiled html/user_profile
174 echo -n "I: executing sudo chgrp www-data, log, upload: "
175 sudo chgrp -R www-data log_"$BOINC_HOSTNAME" upload && echo "[ok]" || echo "[failed]"
176 if [ -d html/inc -a -d cgi-bin ]; then
177   echo -n "html/inc: "
178   chmod o+x html/inc && chmod -R o+r html/inc && echo "[ok]" || echo "[failed]"
179   echo -n "html/languages: "
180   chmod o+x html/languages/ html/languages/compiled && echo "[ok]" || echo "[failed]"
181 else
182   echo "E: Error setting permissions: you are not in your project directory."
183   exit 1
184 fi
185
186 echo "I:
187       The Apache server has been configured to call BOINC server.
188       Please check that the project website is displayed correctly.
189       Make any necessary changes to the start page by editing 
190       $BOINC_INSTALLROOT/$BOINC_PROJECTNAME/html/project/project.inc
191       and $BOINC_INSTALLROOT/$BOINC_PROJECTNAME/html/user/index.php"