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

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

Bringing the windows scripts up to date with the linux scripts. Changes are still to do with moving resetting the server (and Greenstone) after moving Greenstone home. Now gs2-server can be launched as it is and will run from whichever folder GS is moved to, without having to explicitly call gsicontrol.bat's reset-gsdlhome target first.

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