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

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

Can't generate .app document.wflow files (shortcuts for Mac) if no template document.wflow.in files exist. These won't exist when it's a Linux binary. Only in a Mac binary or SVN version do they exist.

  • Property svn:executable set to *
File size: 11.1 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.in" ; then
161 if test ! -e "$one_file/Contents/document.wflow" ; then
162 sed "s@\*\*GSDLHOME\*\*@$GSDLHOME@g" "$one_file/Contents/document.wflow.in" > "$one_file/Contents/document.wflow"
163 fi
164 fi
165 done ;
166
167 configure-cgi
168 configure-apache $1
169}
170
171# Forces configure-cgi by renaming gsdlsite.cfg
172# but only if we actually *need* to relocate gsdlhome.
173# We relocate at all times, except when there is a gsdlsite.cfg file with its
174# gsdlhome property the same as the current (greenstone installation) directory
175function reset-gsdlhome {
176 echo "" ;
177 relocate=yes ;
178 if test -e "$GSDLHOME/$cgibin/gsdlsite.cfg" ; then
179 stored_gsdlhome=`egrep "^gsdlhome" "$cgibin/gsdlsite.cfg" | awk '{print $2}'` ;
180 if [ "x$stored_gsdlhome" != "x$GSDLHOME" ]; then
181 /bin/mv "$GSDLHOME/$cgibin/gsdlsite.cfg" "$GSDLHOME/$cgibin/gsdlsite.cfg.bak" ;
182 echo "**** Regenerating $GSDLHOME/$cgibin/gsdlsite.cfg" ;
183 echo "**** Previous version of file now $GSDLHOME/$cgibin/gsdlsite.cfg.bak" ;
184 else
185 relocate=
186 fi
187 fi
188
189 if [ "x$relocate" = "xyes" ]; then
190 apache_home_os="$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH"
191
192 if test ! -e "$apache_home_os/bin/apachectl.in" ; then
193 make apache-for-dist
194 fi
195
196 replace_list="conf/extra/httpd-dav.conf \
197 conf/extra/httpd-manual.conf \
198 conf/extra/httpd-autoindex.conf \
199 conf/extra/httpd-vhosts.conf \
200 conf/extra/httpd-ssl.conf \
201 conf/extra/httpd-multilang-errordoc.conf \
202 conf/original/extra/httpd-dav.conf \
203 conf/original/extra/httpd-manual.conf \
204 conf/original/extra/httpd-autoindex.conf \
205 conf/original/extra/httpd-vhosts.conf \
206 conf/original/extra/httpd-ssl.conf \
207 conf/original/extra/httpd-multilang-errordoc.conf \
208 conf/original/httpd.conf\
209 lib/apr-util-1/apr_dbd_odbc.la \
210 lib/apr-util-1/apr_dbd_sqlite3.la \
211 lib/pkgconfig/apr-util-1.pc \
212 lib/pkgconfig/apr-1.pc \
213 lib/libaprutil-1.la \
214 lib/libapr-1.la \
215 build/config_vars.mk \
216 build/config.nice \
217 build/apr_rules.mk \
218 bin/dbmmanage \
219 bin/apu-1-config \
220 bin/apr-1-config \
221 include/ap_config_auto.h \
222 include/ap_config_layout.h"
223
224 for one_file in apachectl envvars envvars-std ; do
225 /bin/cp "$apache_home_os/bin/$one_file.in" "$apache_home_os/bin/$one_file"
226 done
227
228 for one_file in $replace_list ; do
229 /bin/cp "$apache_home_os/$one_file.in" "$apache_home_os/$one_file"
230 done
231
232 /bin/cp "$apache_home_os/bin/apr-1-config.in" "$apache_home_os/bin/apr-1-config"
233
234 /bin/cp "$apache_home_os/bin/apu-1-config.in" "$apache_home_os/bin/apu-1-config"
235
236 /bin/cp "$apache_home_os/build/config_vars.mk.in" "$apache_home_os/build/config_vars.mk"
237
238# replace template files with active versions. The following will generate a httpd.conf
239# file with placeholder strings, all of which we'll replace shortly hereafter.
240 bash "$apache_home_os/install-bindist.sh" "$apache_home_os"
241
242 log4jprop=$GSDLHOME/lib/java/log4j.properties
243 sed "s^@gsdl2home@^$GSDLHOME^g" "$log4jprop.in" > "$log4jprop"
244
245 for one_file in gs2-server.app gli.app client-gli.app gems.app ; do
246 if test -e "$one_file/Contents/document.wflow" ; then
247 rm -f "$one_file/Contents/document.wflow"
248 fi
249 done
250
251 configure-web $1
252 fi
253}
254
255function web-status {
256 test-gsdlhome
257 $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl status
258}
259
260function web-start {
261 test-gsdlhome
262 $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl start
263 if [ $? = 0 ] ; then
264 echo $MONITOR_SUCCESS;
265 else
266 echo $MONITOR_FAILED;
267 fi
268 echo $MONITOR_FINISHED;
269}
270
271function web-restart {
272 test-gsdlhome
273 $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl restart
274 if [ $? = 0 ] ; then
275 echo $MONITOR_SUCCESS;
276 else
277 echo $MONITOR_FAILED;
278 fi
279 echo $MONITOR_FINISHED;
280}
281
282function web-graceful {
283 test-gsdlhome
284 $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl graceful
285 if [ $? = 0 ] ; then
286 echo $MONITOR_SUCCESS;
287 else
288 echo $MONITOR_FAILED;
289 fi
290 echo $MONITOR_FINISHED;
291}
292
293function web-stop-tested {
294# This version runs without testing for GSDLHOME
295# Useful to be run as a target when we know test-gsdlhome has already
296# been done. This avoids an unnecessary repetition of printing
297# out the values of GSDLHOME and GSDLOS
298 if test -e "$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf" ; then
299 $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl stop ;
300 fi
301}
302
303function web-stop {
304 test-gsdlhome
305 web-stop-tested
306 if [ $? = 0 ] ; then
307 echo $MONITOR_SUCCESS;
308 else
309 echo $MONITOR_FAILED;
310 fi
311 echo $MONITOR_FINISHED;
312}
313
314function usage {
315 echo ""
316 echo " Usage: $0 <command>"
317 echo " where <command> is any of the following: "
318 echo " web-start"
319 echo " web-stop"
320 echo " web-restart"
321 echo " web-status"
322 echo " web-graceful"
323 echo " configure-admin"
324 echo " configure-web [config-filename]"
325 echo " configure-apache [config-filename]"
326 echo " configure-cgi"
327 echo " reset-gsdlhome [config-filename]"
328 echo " (Save a copy of $cgibin/gsdlsite.cfg to preserve any customisations)"
329 echo " test-gsdlhome"
330 echo " web-stop-tested"
331 echo ""
332}
333
334
335if [[ $# < 1 || $# > 2 ]] ; then
336 usage
337 exit 0
338fi
339
340target=$1
341configfile=$2
342
343# remove any extraneous double quotes
344configfile=${configfile//\"/}
345
346case $target in
347 web-start)
348 web-start;;
349 web-stop)
350 web-stop;;
351 web-restart)
352 web-restart;;
353 web-status)
354 web-status;;
355 web-graceful)
356 web-graceful;;
357 configure-admin)
358 configure-admin;;
359 configure-web)
360 configure-web $configfile;;
361 configure-apache)
362 configure-apache $configfile;;
363 configure-cgi)
364 configure-cgi;;
365 set-port)
366 configure-port-and-connection;;
367 reset-gsdlhome)
368 reset-gsdlhome;;
369 test-gsdlhome)
370 test-gsdlhome;;
371 web-stop-tested)
372 web-stop-tested;;
373 *)
374 echo
375 echo "Command unrecognised: $target"
376 usage;;
377
378esac
379
380# jump back to directory we originally got called from
381cd "$storedir"
382exit;
Note: See TracBrowser for help on using the repository browser.