source: main/trunk/greenstone2/gsicontrol.sh@ 24392

Last change on this file since 24392 was 24392, checked in by ak19, 13 years ago

Slight change to echo statements since bash script doesn't use newline and tab chars.

  • Property svn:executable set to *
File size: 11.0 KB
Line 
1#!/bin/bash
2
3storedir="`pwd`"
4thisdir="`dirname \"$0\"`"
5thisdir="`cd \"$thisdir\" && pwd`"
6cd "$thisdir"
7source setup.bash
8
9testdone=0
10
11cgibin="cgi-bin"
12if [ -d "cgi-bin/$GSDLOS$GSDLARCH" ] ; then
13 cgibin="cgi-bin/$GSDLOS$GSDLARCH"
14fi
15
16
17function test-gsdlhome {
18 if [ $testdone == "0" ] ; then
19 if test -z "$GSDLHOME" ; then
20 echo "" ;
21 echo "Environment variable GSDLHOME not set." ;
22 echo " This needs to be set to run this gsicontrol command." ;
23 echo " Have you run 'source setup.bash'?" ;
24 echo "" ;
25 exit 1
26 else
27 echo "Using: " ;
28 echo " GSDLHOME = $GSDLHOME" ;
29 echo " GSDLOS = $GSDLOS" ;
30 fi
31 testdone=1
32 fi
33}
34
35function configure-cgi {
36 test-gsdlhome
37 if test ! -e "$GSDLHOME/$cgibin/gsdlsite.cfg" ; then
38 echo "Configuring $cgibin/gsdlsite.cfg" ;
39 echo "# **** This file is automatically generated, do not edit ****" > "$cgibin/gsdlsite.cfg" ;
40 echo "# For local customization of Greenstone, edit gsdlsite.cfg.in" >> "$cgibin/gsdlsite.cfg" ;
41 echo "" >> "$cgibin/gsdlsite.cfg" ;
42 sed "s@\*\*GSDLHOME\*\*@$GSDLHOME@g" "$cgibin/gsdlsite.cfg.in" >> "$cgibin/gsdlsite.cfg" ;
43 else
44 echo "WARNING: Nothing done for make configure-cgi." ;
45 echo " If you wish to regenerate the file " ;
46 echo " $GSDLHOME/$cgibin/gsdlsite.cfg" ;
47 echo " from scratch, delete the existing file first." ;
48 fi
49}
50
51function configure-admin {
52 test-gsdlhome
53 echo "" ;
54 echo "Configuring admin user password:" ;
55 encrypted_password=`getpw` ;
56 if [ $? = "0" ] ; then
57 echo -e "[admin]\n<enabled>true\n<groups>administrator,colbuilder,all-collections-editor\n<password>$encrypted_password\n<username>admin" \
58 | txt2db -append "$GSDLHOME/etc/users.gdb" ;
59 else
60 echo "Did not set password" ;
61 fi
62 echo ""
63}
64
65
66function configure-port-and-connection {
67 test-gsdlhome
68
69 echo "Enter port number to use:"
70 read port ;
71 echo "Enter host IP to allow (127.0.0.1 is included by default):"
72 read hostIP ;
73 echo "Enter hostname or list of hosts to allow (localhost included by default):"
74 read hosts ;
75 echo "Allow external connections [yes/no]:"
76 read connection ;
77 if [ "x$connection" = "xyes" ] || [ "x$connection" = "xy" ] ; then
78 allowfromall="Allow"
79 else
80 allowfromall="Deny"
81 fi
82
83 lib_path_var="LD_LIBRARY_PATH" ;
84 if [ $GSDLOS = "darwin" ] ; then
85 lib_path_var="DYLD_LIBRARY_PATH"
86 fi
87
88 if test -e "$GSDLHOME/$cgibin/gsdlsite.cfg" ; then
89 collecthome=`egrep "^collecthome" "$GSDLHOME/$cgibin/gsdlsite.cfg" | awk '{print $2}'` ;
90 fi
91 if test -z $collecthome ; then
92 collecthome="$GSDLHOME/collect" ;
93 fi
94
95 if test ! -z $port ; then
96 echo "Port: $port" ;
97# if called by reset-gsdlhome, then httpd.conf file was regenerated by install-bindist.sh script and
98# contains placeholder strings, including for Listen port. So can't stop web-server in such a case.
99 if test -e "$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf" ; then
100 confport=`egrep "^Listen" $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf | awk '{print $2}'` ;
101 if [ "$confport" != "**PORT**" ] ; then
102 echo "Stopping web server (if running)" ;
103 web-stop-tested ;
104 fi
105 fi
106 echo "Setting config file to use port $port";
107 cat "$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf.in" \
108 | sed "s@\*\*PORT\*\*@$port@g" \
109 | sed "s@\*\*CONNECTPERMISSION\*\*@$allowfromall@g" \
110 | sed "s@\*\*HOST_IP\*\*@$hostIP@g" \
111 | sed "s@\*\*HOSTS\*\*@$hosts@g" \
112 | sed "s@\*\*COLLECTHOME\*\*@$collecthome@g" \
113 | sed "s@\*\*GSDLHOME\*\*@$GSDLHOME@g" \
114 | sed "s@\*\*APACHE_HOME_OS\*\*@$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH@g" \
115 | sed "s@\*\*LIBRARY_PATH_VAR\*\*@$lib_path_var@g" \
116 > "$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf" ;
117 echo "Type '$0 web-start' to start the web server running on port $port" ;
118 fi ;
119 echo "Done" ;
120}
121
122
123MONITOR_SUCCESS="MAKE SUCCESSFUL"
124MONITOR_FAILED="MAKE FAILED"
125MONITOR_FINISHED="MAKE DONE"
126
127function configure-apache {
128 test-gsdlhome
129 configfile=$1 ;
130# if no configfile given, launch it with llssite.cfg. Create it from the template if needed.
131 if [ "x$configfile" = "x" ]; then
132 if test ! -e "$GSDLHOME/llssite.cfg" && test -e "$GSDLHOME/llssite.cfg.in" ; then
133 cp "$GSDLHOME/llssite.cfg.in" "$GSDLHOME/llssite.cfg" ;
134 fi
135 configfile="$GSDLHOME/llssite.cfg";
136 fi ;
137 echo "Configuring the apache webserver..." ;
138 port=`egrep "^portnumber" $configfile | awk -F= '{print $2}'` ;
139 hostIP=`egrep "^hostIP" $configfile | awk -F= '{print $2}'` ;
140 hosts=`egrep "^hosts" $configfile | awk -F= '{print $2}'` ;
141
142 externalaccess=`egrep "^externalaccess" $configfile | awk -F= '{print $2}'` ;
143 if [ "x$externalaccess" = "x1" ] ; then
144 externalaccess="yes"
145 else
146 externalaccess="no"
147 fi
148
149 echo -e "$port\n$hostIP\n$hosts\n$externalaccess" | configure-port-and-connection ;
150 if test -e "$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf" ; then
151 echo $MONITOR_SUCCESS;
152 else
153 echo $MONITOR_FAILED;
154 fi
155 echo $MONITOR_FINISHED
156}
157
158function configure-web {
159 for one_file in gs2-server.app gli.app client-gli.app gems.app ; do
160 if test ! -e "$one_file/Contents/document.wflow" ; then
161 sed "s@\*\*GSDLHOME\*\*@$GSDLHOME@g" "$one_file/Contents/document.wflow.in" > "$one_file/Contents/document.wflow"
162 fi
163 done ;
164
165 configure-cgi
166 configure-apache $1
167}
168
169# Forces configure-cgi by renaming gsdlsite.cfg
170# but only if we actually *need* to relocate gsdlhome.
171# We relocate at all times, except when there is a gsdlsite.cfg file with its
172# gsdlhome property the same as the current (greenstone installation) directory
173function reset-gsdlhome {
174 echo "" ;
175 relocate=yes ;
176 if test -e "$GSDLHOME/$cgibin/gsdlsite.cfg" ; then
177 stored_gsdlhome=`egrep "^gsdlhome" "$cgibin/gsdlsite.cfg" | awk '{print $2}'` ;
178 if [ "x$stored_gsdlhome" != "x$GSDLHOME" ]; then
179 /bin/mv "$GSDLHOME/$cgibin/gsdlsite.cfg" "$GSDLHOME/$cgibin/gsdlsite.cfg.bak" ;
180 echo "**** Regenerating $GSDLHOME/$cgibin/gsdlsite.cfg" ;
181 echo "**** Previous version of file now $GSDLHOME/$cgibin/gsdlsite.cfg.bak" ;
182 else
183 relocate=
184 fi
185 fi
186
187 if [ "x$relocate" = "xyes" ]; then
188 apache_home_os="$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH"
189
190 if test ! -e "$apache_home_os/bin/apachectl.in" ; then
191 make apache-for-dist
192 fi
193
194 replace_list="conf/extra/httpd-dav.conf \
195 conf/extra/httpd-manual.conf \
196 conf/extra/httpd-autoindex.conf \
197 conf/extra/httpd-vhosts.conf \
198 conf/extra/httpd-ssl.conf \
199 conf/extra/httpd-multilang-errordoc.conf \
200 conf/original/extra/httpd-dav.conf \
201 conf/original/extra/httpd-manual.conf \
202 conf/original/extra/httpd-autoindex.conf \
203 conf/original/extra/httpd-vhosts.conf \
204 conf/original/extra/httpd-ssl.conf \
205 conf/original/extra/httpd-multilang-errordoc.conf \
206 conf/original/httpd.conf\
207 lib/apr-util-1/apr_dbd_odbc.la \
208 lib/apr-util-1/apr_dbd_sqlite3.la \
209 lib/pkgconfig/apr-util-1.pc \
210 lib/pkgconfig/apr-1.pc \
211 lib/libaprutil-1.la \
212 lib/libapr-1.la \
213 build/config_vars.mk \
214 build/config.nice \
215 build/apr_rules.mk \
216 bin/dbmmanage \
217 bin/apu-1-config \
218 bin/apr-1-config \
219 include/ap_config_auto.h \
220 include/ap_config_layout.h"
221
222 for one_file in apachectl envvars envvars-std ; do
223 /bin/cp "$apache_home_os/bin/$one_file.in" "$apache_home_os/bin/$one_file"
224 done
225
226 for one_file in $replace_list ; do
227 /bin/cp "$apache_home_os/$one_file.in" "$apache_home_os/$one_file"
228 done
229
230 /bin/cp "$apache_home_os/bin/apr-1-config.in" "$apache_home_os/bin/apr-1-config"
231
232 /bin/cp "$apache_home_os/bin/apu-1-config.in" "$apache_home_os/bin/apu-1-config"
233
234 /bin/cp "$apache_home_os/build/config_vars.mk.in" "$apache_home_os/build/config_vars.mk"
235
236# replace template files with active versions. The following will generate a httpd.conf
237# file with placeholder strings, all of which we'll replace shortly hereafter.
238 bash "$apache_home_os/install-bindist.sh" "$apache_home_os"
239
240 log4jprop=$GSDLHOME/lib/java/log4j.properties
241 sed "s^@gsdl2home@^$GSDLHOME^g" "$log4jprop.in" > "$log4jprop"
242
243 for one_file in gs2-server.app gli.app client-gli.app gems.app ; do
244 if test -e "$one_file/Contents/document.wflow" ; then
245 rm -f "$one_file/Contents/document.wflow"
246 fi
247 done
248
249 configure-web $1
250 fi
251}
252
253function web-status {
254 test-gsdlhome
255 $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl status
256}
257
258function web-start {
259 test-gsdlhome
260 $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl start
261 if [ $? = 0 ] ; then
262 echo $MONITOR_SUCCESS;
263 else
264 echo $MONITOR_FAILED;
265 fi
266 echo $MONITOR_FINISHED;
267}
268
269function web-restart {
270 test-gsdlhome
271 $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl restart
272 if [ $? = 0 ] ; then
273 echo $MONITOR_SUCCESS;
274 else
275 echo $MONITOR_FAILED;
276 fi
277 echo $MONITOR_FINISHED;
278}
279
280function web-graceful {
281 test-gsdlhome
282 $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl graceful
283 if [ $? = 0 ] ; then
284 echo $MONITOR_SUCCESS;
285 else
286 echo $MONITOR_FAILED;
287 fi
288 echo $MONITOR_FINISHED;
289}
290
291function web-stop-tested {
292# This version runs without testing for GSDLHOME
293# Useful to be run as a target when we know test-gsdlhome has already
294# been done. This avoids an unnecessary repetition of printing
295# out the values of GSDLHOME and GSDLOS
296 if test -e "$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf" ; then
297 $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl stop ;
298 fi
299}
300
301function web-stop {
302 test-gsdlhome
303 web-stop-tested
304 if [ $? = 0 ] ; then
305 echo $MONITOR_SUCCESS;
306 else
307 echo $MONITOR_FAILED;
308 fi
309 echo $MONITOR_FINISHED;
310}
311
312function usage {
313 echo ""
314 echo " Usage: $0 <command>"
315 echo " where <command> is any of the following: "
316 echo " web-start"
317 echo " web-stop"
318 echo " web-restart"
319 echo " web-status"
320 echo " web-graceful"
321 echo " configure-admin"
322 echo " configure-web [config-filename]"
323 echo " configure-apache [config-filename]"
324 echo " configure-cgi"
325 echo " reset-gsdlhome [config-filename]"
326 echo " (Save a copy of $cgibin/gsdlsite.cfg to preserve any customisations)"
327 echo " test-gsdlhome"
328 echo " web-stop-tested"
329 echo ""
330}
331
332
333if [[ $# < 1 || $# > 2 ]] ; then
334 usage
335 exit 0
336fi
337
338target=$1
339configfile=$2
340
341# remove any extraneous double quotes
342configfile=${configfile//\"/}
343
344case $target in
345 web-start)
346 web-start;;
347 web-stop)
348 web-stop;;
349 web-restart)
350 web-restart;;
351 web-status)
352 web-status;;
353 web-graceful)
354 web-graceful;;
355 configure-admin)
356 configure-admin;;
357 configure-web)
358 configure-web $configfile;;
359 configure-apache)
360 configure-apache $configfile;;
361 configure-cgi)
362 configure-cgi;;
363 set-port)
364 configure-port-and-connection;;
365 reset-gsdlhome)
366 reset-gsdlhome;;
367 test-gsdlhome)
368 test-gsdlhome;;
369 web-stop-tested)
370 web-stop-tested;;
371 *)
372 echo
373 echo "Command unrecognised: $target"
374 usage;;
375
376esac
377
378# jump back to directory we originally got called from
379cd "$storedir"
380exit;
Note: See TracBrowser for help on using the repository browser.