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

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

Fix for spaces in filepath when launching the apache webserver, since that calls gsicontrol with the reset-gsdlhome target, which needs to retrieve the gsdlhome property from the cgi-bin\gsdlhome. This property being a path value can contain spaces, so the delimiter separating the gsdlhome property key from its value cannot be (or contain) spaces. It's now been made a tab. Need to still test this on Linux.

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