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

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

Undoing previous commit to gsdlsite.cfg.in and gsicontrol.bat where a tab separated gsdlhome property key from its value, so that spaces in the filepath could be preserved on Windows. The new method first puts back gsicontrol.bat to how it used to read the gsdlhome property line and parse it differently in order to get the gsdlhome value correctly if there are spaces in it.

File size: 12.8 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
199set gshome=
200
201:relocate
202for /F "delims=*" %%T in ('"echo %GSDLHOME%| %_sed% s@\\@\/@g"') do set safepath=%%T
203
204:: Also re-initialise the log4j.properties and force regeneration of
205:: Mac .app files since cfgweb will generate these if they don't exist
206type "lib\java\log4j.properties.in" | %_sed% "s\@gsdl2home@\%safepath%\g" > "lib\java\log4j.properties"
207:: No use for Mac .app files on Windows, so they're not there in Windows binaries including caveat
208::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"
209goto cfgweb
210
211:: Subroutine used to glue parts of a filepath that contains spaces back together again
212:: http://www.computing.net/answers/programming/batch-for-loop-tokens/16727.html
213:concat
214:: first remove any quotes around this part of the filepath
215set suffix=%~1
216if not "%suffix%" == "gsdlhome" set gshome=%gshome%%suffix%
217shift
218if not "%~1"=="" goto concat
219goto :eof
220
221
222::configure-web
223::configure-cgi
224:cfgweb
225:: first set up Mac's .app files if that's not already been done (if this is the first time we're running GS3)
226:: No use for Mac .app files on Windows, so they're not there in Windows binaries including caveat
227:: 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"
228
229:cfgcgi
230:: Need to preserve the user-assigned collecthome property, if any
231if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" goto cgimsg
232echo Configuring %cgibin%\gsdlsite.cfg
233echo # **** This file is automatically generated, do not edit **** > "%cgibin%\gsdlsite.cfg"
234echo # For local customization of Greenstone, edit gsdlsite.cfg.in >> "%cgibin%\gsdlsite.cfg"
235echo. >> "%cgibin%\gsdlsite.cfg"
236
237for /F "delims=*" %%T in ('"echo %GSDLHOME%| %_sed% s@\\@\\\\@g"') do set safepath=%%T
238%_sed% "s@\*\*GSDLHOME\*\*@\"%safepath%\"@g" "%cgibin%\gsdlsite.cfg.in" >> "%cgibin%\gsdlsite.cfg"
239set safepath=
240
241goto cgifin
242
243:cgimsg
244echo WARNING: Nothing done for configure-cgi.
245echo If you wish to regenerate the file
246echo %GSDLHOME%\%cgibin%\gsdlsite.cfg
247echo from scratch, delete the existing file first.
248echo.
249
250:cgifin
251if "%target%" == "configure-cgi" goto exit
252if "%target%" == "configure-web" goto cfgapach
253
254::configure-apache
255:cfgapach
256if not "%configfile%" == "" if exist "%configfile%" (goto cfgport) else (echo Config file %configfile% does not exist. Using default llssite.cfg)
257
258if exist "%GSDLHOME%\llssite.cfg" (
259 set configfile=%GSDLHOME%\llssite.cfg
260 goto cfgport
261)
262if not exist "%GSDLHOME%\llssite.cfg.in" (
263 echo Unable to proceed as neither %GSDLHOME%\llssite.cfg nor %GSDLHOME%\llssite.cfg.in could be found
264 goto exit
265)
266copy "%GSDLHOME%\llssite.cfg.in" "%GSDLHOME%\llssite.cfg"
267set configfile=%GSDLHOME%\llssite.cfg
268
269:cfgport
270echo Configuring the apache webserver...
271:: See http://ss64.com/nt/for_cmd.html, http://ss64.com/nt/findstr.html (and http://ss64.com/nt/find.html)
272FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^portnumber "%configfile%"') do set port=%%G
273FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^hostIP "%configfile%"') do set hostIP=%%G
274FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^hosts "%configfile%"') do set hosts=%%G
275FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^externalaccess "%configfile%"') do set allowfromall=%%G
276
277if "%allowfromall%" == "1" set allowfromall="Allow"& goto portcon
278set allowfromall="Deny"
279
280:: Using CALL to jump to labels means we can return from them. BUT need to ensure
281:: that command extensions are enabled to call labels. So just use GOTO instead.
282::http://ss64.com/nt/call.html
283goto portcon
284
285
286::configure-port-and-connection
287:setport
288set /p port=Enter port number to use:
289set /p hostIP=Enter host IP to allow (127.0.0.1 is included by default):
290set /p hosts=Enter hostname or list of hosts to allow (localhost included by default):
291set /p allowfromall=Allow external connections [yes/no]:
292
293if "%allowfromall%" == "yes" set allowfromall="Allow"& goto portcon
294if "%allowfromall%" == "y" set allowfromall="Allow"& goto portcon
295set allowfromall="Deny"
296goto portcon
297
298:portcon
299if "%port%" == "" (
300 echo Done
301 goto exit
302)
303if "%safepath%" == "" for /F "delims=*" %%T in ('"echo %GSDLHOME%| %_sed% s@\\@\/@g"') do set safepath=%%T
304
305:: Doesn't work if there are spaces in the collecthome path in gsdlsite.cfg
306::if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" FOR /F "tokens=2" %%G IN ('findstr /R ^collecthome "%GSDLHOME%\%cgibin%\gsdlsite.cfg"') do set COLLECTHOME=%%G
307
308:: variable in subroutine concat is called gshome,
309:: so forced to use it here for collecthome
310set gshome=
311if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" FOR /F "tokens=*" %%G IN ('findstr /R ^gsdlhome "%GSDLHOME%\%cgibin%\gsdlsite.cfg"') do (call :concat %%G)
312set COLLECTHOME=%gshome%
313set gshome=
314
315if "%COLLECTHOME%" == "" set COLLECTHOME=%GSDLHOME%\collect
316for /F "delims=*" %%T in ('"echo %COLLECTHOME%| %_sed% s@\\@\/@g"') do set safecollectpath=%%T
317
318
319echo Port: %port%
320echo Stopping web server (if running)
321if not exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" echo Missing conf file
322if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" "%GSDLHOME%\bin\windows\stophttpd.exe" %GS2_APACHE_HTTPD_SIGNAL% SILENT
323echo Setting config file to use port %port%
324type "%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"
325echo Type '%0 web-start' to start the web server running on port %port%
326echo Done
327
328set allowfromall=
329set _sed=
330set safepath=
331set port=
332
333:: Extra processing for configure-web and configure-cgi command targets
334if not "%target%" == "configure-web" if not "%target%" == "configure-cgi" goto exit
335if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" (echo %MONITOR_SUCCESS%) else (echo %MONITOR_FAILED%)
336echo %MONITOR_FINISHED%
337goto exit
338
339:exit
340cd "%startdir%"
341set startdir=
342endlocal
Note: See TracBrowser for help on using the repository browser.