1 | #!/bin/bash |
---|
2 | |
---|
3 | storedir="`pwd`" |
---|
4 | thisdir="`dirname \"$0\"`" |
---|
5 | thisdir="`cd \"$thisdir\" && pwd`" |
---|
6 | cd "$thisdir" |
---|
7 | source setup.bash |
---|
8 | |
---|
9 | testdone=0 |
---|
10 | |
---|
11 | cgibin="cgi-bin" |
---|
12 | if [ -d "cgi-bin/$GSDLOS$GSDLARCH" ] ; then |
---|
13 | cgibin="cgi-bin/$GSDLOS$GSDLARCH" |
---|
14 | fi |
---|
15 | |
---|
16 | |
---|
17 | function 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 | |
---|
35 | function 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 | |
---|
51 | function 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 | |
---|
66 | function 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 | # Need to remove extra quotes around $collecthome. ${string//abc/xyz} does a replace all on abc with xyz |
---|
108 | cat "$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf.in" \ |
---|
109 | | sed "s@\*\*GSDL_OS_ARCH\*\*@$GSDLOS$GSDLARCH@g" \ |
---|
110 | | sed "s@\*\*PORT\*\*@$port@g" \ |
---|
111 | | sed "s@\*\*CONNECTPERMISSION\*\*@$allowfromall@g" \ |
---|
112 | | sed "s@\*\*HOST_IP\*\*@$hostIP@g" \ |
---|
113 | | sed "s@\*\*HOSTS\*\*@$hosts@g" \ |
---|
114 | | sed "s@\*\*COLLECTHOME\*\*@${collecthome//\"/}@g" \ |
---|
115 | | sed "s@\*\*GSDLHOME\*\*@$GSDLHOME@g" \ |
---|
116 | | sed "s@\*\*APACHE_HOME_OS\*\*@$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH@g" \ |
---|
117 | | sed "s@\*\*LIBRARY_PATH_VAR\*\*@$lib_path_var@g" \ |
---|
118 | > "$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf" ; |
---|
119 | echo "Type '$0 web-start' to start the web server running on port $port" ; |
---|
120 | fi ; |
---|
121 | echo "Done" ; |
---|
122 | } |
---|
123 | |
---|
124 | |
---|
125 | MONITOR_SUCCESS="MAKE SUCCESSFUL" |
---|
126 | MONITOR_FAILED="MAKE FAILED" |
---|
127 | MONITOR_FINISHED="MAKE DONE" |
---|
128 | |
---|
129 | function configure-apache { |
---|
130 | test-gsdlhome |
---|
131 | configfile=$1 ; |
---|
132 | # if no configfile given, launch it with llssite.cfg. Create it from the template if needed. |
---|
133 | if [ "x$configfile" = "x" ]; then |
---|
134 | if test ! -e "$GSDLHOME/llssite.cfg" && test -e "$GSDLHOME/llssite.cfg.in" ; then |
---|
135 | cp "$GSDLHOME/llssite.cfg.in" "$GSDLHOME/llssite.cfg" ; |
---|
136 | fi |
---|
137 | configfile="$GSDLHOME/llssite.cfg"; |
---|
138 | fi ; |
---|
139 | echo "Configuring the apache webserver..." ; |
---|
140 | port=`egrep "^portnumber" $configfile | awk -F= '{print $2}'` ; |
---|
141 | hostIP=`egrep "^hostIP" $configfile | awk -F= '{print $2}'` ; |
---|
142 | hosts=`egrep "^hosts" $configfile | awk -F= '{print $2}'` ; |
---|
143 | |
---|
144 | externalaccess=`egrep "^externalaccess" $configfile | awk -F= '{print $2}'` ; |
---|
145 | if [ "x$externalaccess" = "x1" ] ; then |
---|
146 | externalaccess="yes" |
---|
147 | else |
---|
148 | externalaccess="no" |
---|
149 | fi |
---|
150 | |
---|
151 | echo -e "$port\n$hostIP\n$hosts\n$externalaccess" | configure-port-and-connection ; |
---|
152 | if test -e "$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf" ; then |
---|
153 | echo $MONITOR_SUCCESS; |
---|
154 | else |
---|
155 | echo $MONITOR_FAILED; |
---|
156 | fi |
---|
157 | echo $MONITOR_FINISHED |
---|
158 | } |
---|
159 | |
---|
160 | function configure-web { |
---|
161 | for one_file in gs2-server.app gli.app client-gli.app gems.app ; do |
---|
162 | if test -e "$one_file/Contents/document.wflow.in" ; then |
---|
163 | if test ! -e "$one_file/Contents/document.wflow" ; then |
---|
164 | sed "s@\*\*GSDLHOME\*\*@$GSDLHOME@g" "$one_file/Contents/document.wflow.in" > "$one_file/Contents/document.wflow" |
---|
165 | fi |
---|
166 | fi |
---|
167 | done ; |
---|
168 | |
---|
169 | configure-cgi |
---|
170 | configure-apache $1 |
---|
171 | } |
---|
172 | |
---|
173 | # Forces configure-cgi by renaming gsdlsite.cfg |
---|
174 | # but only if we actually *need* to relocate gsdlhome. |
---|
175 | # We relocate at all times, except when there is a gsdlsite.cfg file with its |
---|
176 | # gsdlhome property the same as the current (greenstone installation) directory |
---|
177 | function reset-gsdlhome { |
---|
178 | echo "" ; |
---|
179 | relocate=yes ; |
---|
180 | |
---|
181 | # don't just update gsdlsite.cfg, but also the path to perl at the top of gliserver.pl and the other cgi-bin perl files |
---|
182 | # if this is a perl included with the Greenstone distribution |
---|
183 | if test -e "$GSDLHOME/$cgibin/gsdlsite.cfg" ; then |
---|
184 | stored_gsdlhome=`egrep "^gsdlhome" "$cgibin/gsdlsite.cfg" | awk '{print $2}'` ; |
---|
185 | if [ "x$stored_gsdlhome" != "x$GSDLHOME" ]; then |
---|
186 | /bin/mv "$GSDLHOME/$cgibin/gsdlsite.cfg" "$GSDLHOME/$cgibin/gsdlsite.cfg.bak" ; |
---|
187 | echo "**** Regenerating $GSDLHOME/$cgibin/gsdlsite.cfg" ; |
---|
188 | echo "**** Previous version of file now $GSDLHOME/$cgibin/gsdlsite.cfg.bak" ; |
---|
189 | |
---|
190 | if test -d "$GSDLHOME/bin/$GSDLOS/perl" ; then |
---|
191 | gliserverfile=$GSDLHOME/$cgibin/gliserver.pl ; |
---|
192 | /bin/cp "$gliserverfile" "$gliserverfile.bak" ; |
---|
193 | sed "s@$stored_gsdlhome@$GSDLHOME@g" "$gliserverfile.bak" > "$gliserverfile" ; |
---|
194 | rm -f "$gliserverfile.bak" ; |
---|
195 | |
---|
196 | metaserverfile=$GSDLHOME/$cgibin/metadata-server.pl ; |
---|
197 | /bin/cp "$metaserverfile" "$metaserverfile.bak" ; |
---|
198 | sed "s@$stored_gsdlhome@$GSDLHOME@g" "$metaserverfile.bak" > "$metaserverfile" ; |
---|
199 | rm -f "$metaserverfile.bak" ; |
---|
200 | |
---|
201 | checksumfile=$GSDLHOME/$cgibin/checksum.pl ; |
---|
202 | /bin/cp "$checksumfile" "$checksumfile.bak" ; |
---|
203 | sed "s@$stored_gsdlhome@$GSDLHOME@g" "$checksumfile.bak" > "$checksumfile" ; |
---|
204 | rm -f "$checksumfile.bak" ; |
---|
205 | fi |
---|
206 | |
---|
207 | else |
---|
208 | relocate= |
---|
209 | fi |
---|
210 | fi |
---|
211 | |
---|
212 | if [ "x$relocate" = "xyes" ]; then |
---|
213 | apache_home_os="$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH" |
---|
214 | |
---|
215 | if test ! -e "$apache_home_os/bin/apachectl.in" ; then |
---|
216 | make apache-for-dist |
---|
217 | fi |
---|
218 | |
---|
219 | replace_list="conf/extra/httpd-dav.conf \ |
---|
220 | conf/extra/httpd-manual.conf \ |
---|
221 | conf/extra/httpd-autoindex.conf \ |
---|
222 | conf/extra/httpd-vhosts.conf \ |
---|
223 | conf/extra/httpd-ssl.conf \ |
---|
224 | conf/extra/httpd-multilang-errordoc.conf \ |
---|
225 | conf/original/extra/httpd-dav.conf \ |
---|
226 | conf/original/extra/httpd-manual.conf \ |
---|
227 | conf/original/extra/httpd-autoindex.conf \ |
---|
228 | conf/original/extra/httpd-vhosts.conf \ |
---|
229 | conf/original/extra/httpd-ssl.conf \ |
---|
230 | conf/original/extra/httpd-multilang-errordoc.conf \ |
---|
231 | conf/original/httpd.conf\ |
---|
232 | lib/apr-util-1/apr_dbd_odbc.la \ |
---|
233 | lib/apr-util-1/apr_dbd_sqlite3.la \ |
---|
234 | lib/pkgconfig/apr-util-1.pc \ |
---|
235 | lib/pkgconfig/apr-1.pc \ |
---|
236 | lib/libaprutil-1.la \ |
---|
237 | lib/libapr-1.la \ |
---|
238 | build/config_vars.mk \ |
---|
239 | build/config.nice \ |
---|
240 | build/apr_rules.mk \ |
---|
241 | bin/dbmmanage \ |
---|
242 | bin/apu-1-config \ |
---|
243 | bin/apr-1-config \ |
---|
244 | include/ap_config_auto.h \ |
---|
245 | include/ap_config_layout.h" |
---|
246 | |
---|
247 | for one_file in apachectl envvars envvars-std ; do |
---|
248 | /bin/cp "$apache_home_os/bin/$one_file.in" "$apache_home_os/bin/$one_file" |
---|
249 | done |
---|
250 | |
---|
251 | for one_file in $replace_list ; do |
---|
252 | /bin/cp "$apache_home_os/$one_file.in" "$apache_home_os/$one_file" |
---|
253 | done |
---|
254 | |
---|
255 | /bin/cp "$apache_home_os/bin/apr-1-config.in" "$apache_home_os/bin/apr-1-config" |
---|
256 | |
---|
257 | /bin/cp "$apache_home_os/bin/apu-1-config.in" "$apache_home_os/bin/apu-1-config" |
---|
258 | |
---|
259 | /bin/cp "$apache_home_os/build/config_vars.mk.in" "$apache_home_os/build/config_vars.mk" |
---|
260 | |
---|
261 | # replace template files with active versions. The following will generate a httpd.conf |
---|
262 | # file with placeholder strings, all of which we'll replace shortly hereafter. |
---|
263 | bash "$apache_home_os/install-bindist.sh" "$apache_home_os" |
---|
264 | |
---|
265 | log4jprop=$GSDLHOME/lib/java/log4j.properties |
---|
266 | sed "s^@gsdl2home@^$GSDLHOME^g" "$log4jprop.in" > "$log4jprop" |
---|
267 | |
---|
268 | for one_file in gs2-server.app gli.app client-gli.app gems.app ; do |
---|
269 | if test -e "$one_file/Contents/document.wflow" ; then |
---|
270 | rm -f "$one_file/Contents/document.wflow" |
---|
271 | fi |
---|
272 | done |
---|
273 | |
---|
274 | configure-web $1 |
---|
275 | fi |
---|
276 | } |
---|
277 | |
---|
278 | function web-status { |
---|
279 | test-gsdlhome |
---|
280 | $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl status |
---|
281 | } |
---|
282 | |
---|
283 | function web-start { |
---|
284 | test-gsdlhome |
---|
285 | $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl start |
---|
286 | if [ $? = 0 ] ; then |
---|
287 | echo $MONITOR_SUCCESS; |
---|
288 | else |
---|
289 | echo $MONITOR_FAILED; |
---|
290 | fi |
---|
291 | echo $MONITOR_FINISHED; |
---|
292 | } |
---|
293 | |
---|
294 | function web-restart { |
---|
295 | test-gsdlhome |
---|
296 | $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl restart |
---|
297 | if [ $? = 0 ] ; then |
---|
298 | echo $MONITOR_SUCCESS; |
---|
299 | else |
---|
300 | echo $MONITOR_FAILED; |
---|
301 | fi |
---|
302 | echo $MONITOR_FINISHED; |
---|
303 | } |
---|
304 | |
---|
305 | function web-graceful { |
---|
306 | test-gsdlhome |
---|
307 | $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl graceful |
---|
308 | if [ $? = 0 ] ; then |
---|
309 | echo $MONITOR_SUCCESS; |
---|
310 | else |
---|
311 | echo $MONITOR_FAILED; |
---|
312 | fi |
---|
313 | echo $MONITOR_FINISHED; |
---|
314 | } |
---|
315 | |
---|
316 | function web-stop-tested { |
---|
317 | # This version runs without testing for GSDLHOME |
---|
318 | # Useful to be run as a target when we know test-gsdlhome has already |
---|
319 | # been done. This avoids an unnecessary repetition of printing |
---|
320 | # out the values of GSDLHOME and GSDLOS |
---|
321 | if test -e "$GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/conf/httpd.conf" ; then |
---|
322 | $GSDLHOME/apache-httpd/$GSDLOS$GSDLARCH/bin/apachectl stop ; |
---|
323 | fi |
---|
324 | } |
---|
325 | |
---|
326 | function web-stop { |
---|
327 | test-gsdlhome |
---|
328 | web-stop-tested |
---|
329 | if [ $? = 0 ] ; then |
---|
330 | echo $MONITOR_SUCCESS; |
---|
331 | else |
---|
332 | echo $MONITOR_FAILED; |
---|
333 | fi |
---|
334 | echo $MONITOR_FINISHED; |
---|
335 | } |
---|
336 | |
---|
337 | function usage { |
---|
338 | echo "" |
---|
339 | echo " Usage: $0 <command>" |
---|
340 | echo " where <command> is any of the following: " |
---|
341 | echo " web-start" |
---|
342 | echo " web-stop" |
---|
343 | echo " web-restart" |
---|
344 | echo " web-status" |
---|
345 | echo " web-graceful" |
---|
346 | echo " configure-admin" |
---|
347 | echo " configure-web [config-filename]" |
---|
348 | echo " configure-apache [config-filename]" |
---|
349 | echo " configure-cgi" |
---|
350 | echo " reset-gsdlhome [config-filename]" |
---|
351 | echo " (Save a copy of $cgibin/gsdlsite.cfg to preserve any customisations)" |
---|
352 | echo " test-gsdlhome" |
---|
353 | echo " web-stop-tested" |
---|
354 | echo "" |
---|
355 | } |
---|
356 | |
---|
357 | |
---|
358 | if [[ $# < 1 || $# > 2 ]] ; then |
---|
359 | usage |
---|
360 | exit 0 |
---|
361 | fi |
---|
362 | |
---|
363 | target=$1 |
---|
364 | configfile=$2 |
---|
365 | |
---|
366 | # remove any extraneous double quotes |
---|
367 | configfile=${configfile//\"/} |
---|
368 | |
---|
369 | # if there's a libiconv.dylib in gnome-lib-mimimal's lib folder, then apache-httpd would have been compiled dependent on it |
---|
370 | # in such a case, need to add it to the (DY)LD_LIBRARY_PATH. This happens with Mac Lion, may happen with andropid. |
---|
371 | if [ -f $GSDLHOME/ext/gnome-lib-minimal/$GSDLOS/lib/libiconv.dylib ] || [ -f $GSDLHOME/ext/gnome-lib/$GSDLOS/lib/libiconv.dylib ] ; then |
---|
372 | if [ $GSDLOS = "darwin" ] ; then |
---|
373 | DYLD_LIBRARY_PATH=$GSDLHOME/ext/gnome-lib-minimal/$GSDLOS/lib:$DYLD_LIBRARY_PATH |
---|
374 | # DYLD_FALLBACK_LIB_PATH doesn't work with apache-httpd: |
---|
375 | #DYLD_FALLBACK_LIBRARY_PATH=$GSDLHOME/ext/gnome-lib-minimal/$GSDLOS/lib:$DYLD_FALLBACK_LIBRARY_PATH |
---|
376 | elif [ $GSDLOS = "linux" ] ; then |
---|
377 | LD_LIBRARY_PATH=$GSDLHOME/ext/gnome-lib-minimal/$GSDLOS/lib:$LD_LIBRARY_PATH |
---|
378 | fi |
---|
379 | fi |
---|
380 | |
---|
381 | case $target in |
---|
382 | web-start) |
---|
383 | web-start;; |
---|
384 | web-stop) |
---|
385 | web-stop;; |
---|
386 | web-restart) |
---|
387 | web-restart;; |
---|
388 | web-status) |
---|
389 | web-status;; |
---|
390 | web-graceful) |
---|
391 | web-graceful;; |
---|
392 | configure-admin) |
---|
393 | configure-admin;; |
---|
394 | configure-web) |
---|
395 | configure-web $configfile;; |
---|
396 | configure-apache) |
---|
397 | configure-apache $configfile;; |
---|
398 | configure-cgi) |
---|
399 | configure-cgi;; |
---|
400 | set-port) |
---|
401 | configure-port-and-connection;; |
---|
402 | reset-gsdlhome) |
---|
403 | reset-gsdlhome;; |
---|
404 | test-gsdlhome) |
---|
405 | test-gsdlhome;; |
---|
406 | web-stop-tested) |
---|
407 | web-stop-tested;; |
---|
408 | *) |
---|
409 | echo |
---|
410 | echo "Command unrecognised: $target" |
---|
411 | usage;; |
---|
412 | |
---|
413 | esac |
---|
414 | |
---|
415 | # jump back to directory we originally got called from |
---|
416 | cd "$storedir" |
---|
417 | exit; |
---|