root/main/trunk/greenstone2/gsicontrol.bat @ 24788

Revision 24788, 13.3 KB (checked in by ak19, 8 years ago)

Fixed oversight due to copy and paste in previous commit that broke greenstone.

Line 
1@echo off
2
3setlocal
4::set testdone=0
5set startdir=%CD%
6cd /d "%~dp0"
7::we're now in the "%GSDLHOME%" folder
8call setup.bat
9
10::set _sed="%GSDLHOME%\bin\windows\sed.exe"
11:: NOTE: no quotes allowed around the following, since it's used inside
12:: a FOR statement executing a command already embedded in quotes
13set _sed=bin\windows\sed.exe
14
15set cgibin=cgi-bin
16::set cgibin=cgi-bin\windows
17
18set target=%1
19set configfile=%2
20:: remove any quotes around configfile, if we were given parameter configfile
21:: To test for the existence of a cmdline parameter: http://ss64.com/nt/if.html
22if not [%2] == [] set configfile=%configfile:"=%
23
24:: Construct the signal using the unique GS2 installation
25:: directory (after replacing spaces, colons and backslashes)
26set signal=%GSDLHOME: =_%
27for /F "delims=*" %%T in ('"echo %signal%| %_sed% s@[\\:]@_@g"') do set signal=%%T
28set GS2_APACHE_HTTPD_SIGNAL=GS2_APACHE_HTTPD_%signal%
29set signal=
30rem echo Signal is: %GS2_APACHE_HTTPD_SIGNAL%
31
32:: Need to get greenstone installation directory
33:: set cwd=%CD%
34
35set MONITOR_SUCCESS=MAKE SUCCESSFUL
36set MONITOR_FAILED=MAKE FAILED
37set MONITOR_FINISHED=MAKE DONE
38
39:: check that we have >=1 and <=2 arguments
40:chkargs
41if "%target%" == "" goto usage
42if not "%3" == "" goto usage
43    goto begincmd
44
45
46:usage
47echo.
48echo    Usage: %0 command
49echo           where command is any of the following:
50echo    web-start
51echo    web-stop
52echo    web-restart
53::echo    web-status
54::echo    web-graceful
55echo    configure-admin
56echo    configure-web    [config-filename]
57echo    configure-apache [config-filename]
58echo    configure-cgi
59echo    reset-gsdlhome [config-filename]
60echo    set-port
61echo    test-gsdlhome
62echo    web-stop-tested
63echo.
64goto exit
65
66
67:begincmd
68:: web-stop-tested command assumes GSDLHOME/greenstone environment is already set
69if "%target%" == "web-stop-tested" goto stoptest
70
71:: For all other commands, the greenstone environment needs to be set first before they can be run
72:testgsdl
73if NOT "%GSDLHOME%" == "" if NOT "%GSDLOS%" == "" goto commands
74echo.
75echo Environment variable GSDLHOME (or GSDLOS) not set.
76echo   This needs to be set to run the gsicontrol command %target%.
77echo   Have you run setup.bat?
78echo.
79goto exit
80
81
82::MAIN MENU
83:commands
84echo.
85echo Using:
86echo   GSDLHOME = %GSDLHOME%
87echo   GSDLOS = %GSDLOS%
88echo.
89
90if "%target%" == "web-start" goto start
91if "%target%" == "web-stop" goto stop
92if "%target%" == "web-restart" goto restart
93if "%target%" == "configure-admin" goto cfgadmin
94if "%target%" == "configure-web" goto cfgweb
95if "%target%" == "configure-apache" goto cfgapach
96if "%target%" == "configure-cgi" goto cfgcgi
97if "%target%" == "reset-gsdlhome" goto resethome
98:: already tested gsdlhome (and web-stop-tested) above, don't want to keep looping on it
99if "%target%" == "test-gsdlhome" goto exit
100rem if "%target%" == "web-stop-tested" goto exit
101rem if "%target%" == "web-status" goto status
102rem if "%target%" == "web-graceful" goto graceful
103if "%target%" == "set-port" goto setport
104:: unknown command
105echo Command unrecognised: %target%
106goto usage
107
108
109:start
110:: START starts the app in a new console named by the string following immediately thereafter
111:: then we start up apache-httpd and pass the signal that the stop command will respond to
112START "%GSDLHOME%\apachectl" "%GSDLHOME%\bin\windows\starthttpd.exe" %GS2_APACHE_HTTPD_SIGNAL% "%GSDLHOME%\apache-httpd\windows\bin\httpd.exe"
113:: if the return value is >= 0, it's succeeded:
114if ERRORLEVEL 0 (echo %MONITOR_SUCCESS%) else (echo %MONITOR_FAILED%)
115echo %MONITOR_FINISHED%
116goto exit
117
118:stop
119:stoptest
120if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" "%GSDLHOME%\bin\windows\stophttpd.exe" %GS2_APACHE_HTTPD_SIGNAL% SILENT
121if "%target%" == "web-stop-tested" goto exit
122:: if the return value is >= 0, it's succeeded:
123if ERRORLEVEL 0 (echo %MONITOR_SUCCESS%) else (echo %MONITOR_FAILED%)
124echo %MONITOR_FINISHED%
125goto exit
126
127
128:restart
129:: Need to stop server, wait and start it again.
130:: We're using Ping to implement batch file Wait
131if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" "%GSDLHOME%\bin\windows\stophttpd.exe" %GS2_APACHE_HTTPD_SIGNAL%
132
133:: Wait 5 seconds and then start. See http://ss64.com/nt/sleep.html (and http://malektips.com/dos0017.html)
134:: if loopback IP address (127.0.0.1) does not exist, we ask them to manually start it up again
135ping -n 1 -w 1000 127.0.0.1 |find "TTL=">nul || goto failmsg
136echo Waiting for re-start....
137ping -n 5 -w 1000 127.0.0.1> nul
138goto start
139
140:failmsg
141echo Unable to wait for restart. Manually run %0 web-start
142goto exit
143
144
145::status
146::graceful
147::echo Command %target% is not operational on this operating system
148::goto exit
149
150
151::configure-admin
152:cfgadmin
153echo.
154echo Configuring admin user password:
155for /F %%T in ('getpw') do set encrypted_password=%%T
156
157:: Have to create an intermediate file in the following, because echoing
158:: lines straight into a pipe adds spaces before the end of each line.
159:: When piping, need to double-escape the angle brackets with three hat signs,
160:: but when redirecting to a file, need to escape only once (one hat sign).
161if ERRORLEVEL 0 (
162    (
163    echo [admin]
164    echo ^<enabled^>true
165    echo ^<groups^>administrator,colbuilder,all-collections-editor
166    echo ^<password^>%encrypted_password%
167    echo ^<username^>admin
168    ) > "%GSDLHOME%\etc\users.txt"
169    type "%GSDLHOME%\etc\users.txt" | txt2db -append "%GSDLHOME%\etc\users.gdb"
170    del "%GSDLHOME%\etc\users.txt" 
171) else (
172    echo Did not set password
173)
174echo.
175goto exit
176
177
178:: reset-gsdlhome forces configure-cgi by renaming any
179:: existing gsdlsite.cfg and by deleting Mac .app files
180:: However, we only relocate if there is a gsdlsite.cfg file with its gsdlhome
181:: property the same as the current (greenstone installation) directory
182:resethome
183echo.
184if not exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" goto relocate
185
186set gshome=
187FOR /F "tokens=*" %%G IN ('findstr /R ^gsdlhome "%GSDLHOME%\%cgibin%\gsdlsite.cfg"') do (call :concat %%G)
188
189:: The following doesn't work if there are spaces in the gsdlhome filepath
190::FOR /F "tokens=2" %%G IN ('findstr /R ^gsdlhome "%GSDLHOME%\%cgibin%\gsdlsite.cfg"') do set gshome=%%G
191:: before string comparison, remove any quotes around gsdlhome value defined in config file
192:: if not [%gshome%] == [] set gshome=%gshome:"=%
193
194if "%gshome%" == "%GSDLHOME%" set gshome=& goto exit
195 
196move "%GSDLHOME%\%cgibin%\gsdlsite.cfg" "%GSDLHOME%\%cgibin%\gsdlsite.cfg.bak"
197echo **** Regenerating %GSDLHOME%\%cgibin%\gsdlsite.cfg
198echo **** Previous version of file now %GSDLHOME%\%cgibin%\gsdlsite.cfg.bak
199
200:relocate
201:: The path to the included perl at the top of gliserver.pl needs to use the new gsdlhome
202:: On windows, the path in gliserver.pl uses backslashes
203for /F "delims=*" %%T in ('"echo %gshome%| %_sed% s@\\@\\\\@g"') do set safeoldhome=%%T
204for /F "delims=*" %%T in ('"echo %gsdlhome%| %_sed% s@\\@\\\\@g"') do set safenewhome=%%T
205type "%cgibin%\gliserver.pl.bak" | %_sed% "s@%safeoldhome%@%safenewhome%@g" > "%cgibin%\gliserver.pl"
206del "%cgibin%\gliserver.pl.bak"
207set safenewhome=
208set safeoldhome=
209set gshome=
210
211for /F "delims=*" %%T in ('"echo %GSDLHOME%| %_sed% s@\\@\/@g"') do set safepath=%%T
212
213:: Also re-initialise the log4j.properties and force regeneration of
214:: Mac .app files since cfgweb will generate these if they don't exist
215type "lib\java\log4j.properties.in" | %_sed% "s\@gsdl2home@\%safepath%\g" > "lib\java\log4j.properties"
216:: No use for Mac .app files on Windows, so they're not there in Windows binaries including caveat
217::for %%G in (gs2-server.app gli.app client-gli.app gems.app) do if exist "%%G\Contents\document.wflow" del "%%G\Contents\document.wflow"
218goto cfgweb
219
220:: Subroutine used to glue parts of a filepath that contains spaces back together again
221:: http://www.computing.net/answers/programming/batch-for-loop-tokens/16727.html
222:concat
223:: first remove any quotes around this part of the filepath
224set suffix=%~1
225if not "%suffix%" == "gsdlhome" set gshome=%gshome%%suffix%
226shift
227if not "%~1"=="" goto concat
228goto :eof
229
230
231::configure-web
232::configure-cgi
233:cfgweb
234:: first set up Mac's .app files if that's not already been done (if this is the first time we're running GS3)
235:: No use for Mac .app files on Windows, so they're not there in Windows binaries including caveat
236:: for %%G in (gs2-server.app gli.app client-gli.app gems.app) do if not exist "%%G\Contents\document.wflow" type "%%G\Contents\document.wflow.in" | %_sed% "s@\*\*GSDLHOME\*\*@%safepath%@g" > "%%G\Contents\document.wflow"
237
238:cfgcgi
239:: Need to preserve the user-assigned collecthome property, if any
240if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" goto cgimsg
241echo Configuring %cgibin%\gsdlsite.cfg
242echo # **** This file is automatically generated, do not edit **** > "%cgibin%\gsdlsite.cfg"
243echo # For local customization of Greenstone, edit gsdlsite.cfg.in >> "%cgibin%\gsdlsite.cfg"
244echo. >> "%cgibin%\gsdlsite.cfg"
245
246for /F "delims=*" %%T in ('"echo %GSDLHOME%| %_sed% s@\\@\\\\@g"') do set safepath=%%T
247%_sed% "s@\*\*GSDLHOME\*\*@\"%safepath%\"@g" "%cgibin%\gsdlsite.cfg.in" >> "%cgibin%\gsdlsite.cfg"
248set safepath=
249
250goto cgifin
251
252:cgimsg
253echo WARNING: Nothing done for configure-cgi.
254echo    If you wish to regenerate the file
255echo    %GSDLHOME%\%cgibin%\gsdlsite.cfg
256echo    from scratch, delete the existing file first.
257echo.
258
259:cgifin
260if "%target%" == "configure-cgi" goto exit
261if "%target%" == "configure-web" goto cfgapach
262
263::configure-apache
264:cfgapach
265if not "%configfile%" == "" if exist "%configfile%" (goto cfgport) else (echo Config file %configfile% does not exist. Using default llssite.cfg)
266
267if exist "%GSDLHOME%\llssite.cfg" (
268  set configfile=%GSDLHOME%\llssite.cfg
269  goto cfgport
270)
271if not exist "%GSDLHOME%\llssite.cfg.in" (
272  echo Unable to proceed as neither %GSDLHOME%\llssite.cfg nor %GSDLHOME%\llssite.cfg.in could be found
273  goto exit
274)
275copy "%GSDLHOME%\llssite.cfg.in" "%GSDLHOME%\llssite.cfg"
276set configfile=%GSDLHOME%\llssite.cfg
277
278:cfgport
279echo Configuring the apache webserver...
280:: See http://ss64.com/nt/for_cmd.html, http://ss64.com/nt/findstr.html (and http://ss64.com/nt/find.html)
281FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^portnumber "%configfile%"') do set port=%%G
282FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^hostIP "%configfile%"') do set hostIP=%%G
283FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^hosts "%configfile%"') do set hosts=%%G
284FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^externalaccess "%configfile%"') do set allowfromall=%%G
285
286if "%allowfromall%" == "1" set allowfromall="Allow"& goto portcon
287set allowfromall="Deny"
288
289:: Using CALL to jump to labels means we can return from them. BUT need to ensure
290:: that command extensions are enabled to call labels. So just use GOTO instead.
291::http://ss64.com/nt/call.html
292goto portcon
293
294
295::configure-port-and-connection
296:setport
297set /p port=Enter port number to use:
298set /p hostIP=Enter host IP to allow (127.0.0.1 is included by default):
299set /p hosts=Enter hostname or list of hosts to allow (localhost included by default):
300set /p allowfromall=Allow external connections [yes/no]:
301
302if "%allowfromall%" == "yes" set allowfromall="Allow"& goto portcon
303if "%allowfromall%" == "y" set allowfromall="Allow"& goto portcon
304set allowfromall="Deny"
305goto portcon
306
307:portcon
308if "%port%" == "" (
309   echo Done
310   goto exit
311)
312if "%safepath%" == "" for /F "delims=*" %%T in ('"echo %GSDLHOME%| %_sed% s@\\@\/@g"') do set safepath=%%T
313
314:: Doesn't work if there are spaces in the collecthome path in gsdlsite.cfg
315::if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" FOR /F "tokens=2" %%G IN ('findstr /R ^collecthome "%GSDLHOME%\%cgibin%\gsdlsite.cfg"') do set COLLECTHOME=%%G
316
317:: variable in subroutine concat is called gshome,
318:: so forced to use it here for collecthome
319set gshome=
320if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" FOR /F "tokens=*" %%G IN ('findstr /R ^collecthome "%GSDLHOME%\%cgibin%\gsdlsite.cfg"') do (call :concat %%G)
321set COLLECTHOME=%gshome%
322set gshome=
323
324if "%COLLECTHOME%" == "" set COLLECTHOME=%GSDLHOME%\collect
325for /F "delims=*" %%T in ('"echo %COLLECTHOME%| %_sed% s@\\@\/@g"') do set safecollectpath=%%T
326
327
328echo Port: %port%
329echo Stopping web server (if running)
330if not exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" echo Missing conf file
331if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" "%GSDLHOME%\bin\windows\stophttpd.exe" %GS2_APACHE_HTTPD_SIGNAL% SILENT
332echo Setting config file to use port %port%
333type "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf.in" | %_sed% "s@\*\*PORT\*\*@%port%@g" | %_sed% "s@\*\*CONNECTPERMISSION\*\*@%allowfromall%@g" | %_sed% "s@\*\*HOST_IP\*\*@%hostIP%@g" | %_sed% "s@\*\*HOSTS\*\*@%hosts%@g" | %_sed% "s@\*\*COLLECTHOME\*\*@%safecollectpath%@g" | %_sed% "s@\*\*GSDLHOME\*\*@%safepath%@g" | %_sed% "s@\*\*APACHE_HOME_OS\*\*@%safepath%\/apache-httpd\/%GSDLOS%@g" > "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf"
334echo Type '%0 web-start' to start the web server running on port %port%
335echo Done
336
337set allowfromall=
338set _sed=
339set safepath=
340set port=
341
342:: Extra processing for configure-web and configure-cgi command targets
343if not "%target%" == "configure-web" if not "%target%" == "configure-cgi" goto exit
344if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" (echo %MONITOR_SUCCESS%) else (echo %MONITOR_FAILED%)
345echo %MONITOR_FINISHED%
346goto exit
347
348:exit
349cd "%startdir%"
350set startdir=
351endlocal
Note: See TracBrowser for help on using the browser.