source: main/trunk/greenstone2/gsicontrol.bat@ 24788

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

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

File size: 13.3 KB
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 repository browser.