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

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

Fixed a bug introduced with the reset-gsdlhome target where any non-standard collecthome value written into the gsdlsite.cfg was lost on startup since reset-gsdlhome always regenerated gsdlsite.cfg from the template file. Now the collecthome property is reinstated when the gsdlsite.cfg is generated, by taking this from the gsdlsite.cfg.bak file.

File size: 11.7 KB
RevLine 
[19278]1@echo off
2
[19970]3setlocal
[20262]4::set testdone=0
[23966]5set startdir=%CD%
[23987]6cd /d "%~dp0"
7::we're now in the "%GSDLHOME%" folder
8call setup.bat
[23949]9
[23966]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
[23949]15set cgibin=cgi-bin
16::set cgibin=cgi-bin\windows
17
[19278]18set target=%1
19set configfile=%2
[20906]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:"=%
[19278]23
[20262]24:: Construct the signal using the unique GS2 installation
[20906]25:: directory (after replacing spaces, colons and backslashes)
26set signal=%GSDLHOME: =_%
[23966]27for /F "delims=*" %%T in ('"echo %signal%| %_sed% s@[\\:]@_@g"') do set signal=%%T
[20262]28set GS2_APACHE_HTTPD_SIGNAL=GS2_APACHE_HTTPD_%signal%
[20906]29set signal=
[20262]30rem echo Signal is: %GS2_APACHE_HTTPD_SIGNAL%
31
[19970]32:: Need to get greenstone installation directory
33:: set cwd=%CD%
[19278]34
[19970]35set MONITOR_SUCCESS=MAKE SUCCESSFUL
36set MONITOR_FAILED=MAKE FAILED
37set MONITOR_FINISHED=MAKE DONE
38
[19278]39:: check that we have >=1 and <=2 arguments
40:chkargs
[20262]41if "%target%" == "" goto usage
42if not "%3" == "" goto usage
[19278]43 goto begincmd
44
45
46:usage
47echo.
48echo Usage: %0 command
49echo where command is any of the following:
[19970]50echo web-start
51echo web-stop
52echo web-restart
[20262]53::echo web-status
54::echo web-graceful
[19278]55echo configure-admin
56echo configure-web [config-filename]
57echo configure-apache [config-filename]
58echo configure-cgi
[23945]59echo reset-gsdlhome [config-filename]
[20637]60echo set-port
[20262]61echo test-gsdlhome
62echo web-stop-tested
[19278]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
[20159]73if NOT "%GSDLHOME%" == "" if NOT "%GSDLOS%" == "" goto commands
[20338]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
[19278]80
81
82::MAIN MENU
83:commands
[20262]84echo.
85echo Using:
86echo GSDLHOME = %GSDLHOME%
87echo GSDLOS = %GSDLOS%
88echo.
89
[19278]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
[23945]97if "%target%" == "reset-gsdlhome" goto resethome
[20262]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
[20338]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
[19278]107
[20338]108
[19278]109:start
[20159]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
[20262]112START "%GSDLHOME%\apachectl" "%GSDLHOME%\bin\windows\starthttpd.exe" %GS2_APACHE_HTTPD_SIGNAL% "%GSDLHOME%\apache-httpd\windows\bin\httpd.exe"
[20639]113:: if the return value is >= 0, it's succeeded:
114if ERRORLEVEL 0 (echo %MONITOR_SUCCESS%) else (echo %MONITOR_FAILED%)
[19970]115echo %MONITOR_FINISHED%
116goto exit
117
[19278]118:stop
[20262]119:stoptest
[20435]120if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" "%GSDLHOME%\bin\windows\stophttpd.exe" %GS2_APACHE_HTTPD_SIGNAL% SILENT
[20262]121if "%target%" == "web-stop-tested" goto exit
[20639]122:: if the return value is >= 0, it's succeeded:
123if ERRORLEVEL 0 (echo %MONITOR_SUCCESS%) else (echo %MONITOR_FAILED%)
[20262]124echo %MONITOR_FINISHED%
[19970]125goto exit
126
[20637]127
[19278]128:restart
[20637]129:: Need to stop server, wait and start it again.
130:: We're using Ping to implement batch file Wait
[20262]131if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" "%GSDLHOME%\bin\windows\stophttpd.exe" %GS2_APACHE_HTTPD_SIGNAL%
[20637]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
[19970]138goto start
139
[20637]140:failmsg
141echo Unable to wait for restart. Manually run %0 web-start
142goto exit
143
144
[20338]145::status
146::graceful
147::echo Command %target% is not operational on this operating system
148::goto exit
[19278]149
150
151::configure-admin
152:cfgadmin
153echo.
[19288]154echo Configuring admin user password:
155for /F %%T in ('getpw') do set encrypted_password=%%T
[19290]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.
[19970]159:: When piping, need to double-escape the angle brackets with three hat signs,
[19290]160:: but when redirecting to a file, need to escape only once (one hat sign).
[19288]161if ERRORLEVEL 0 (
162 (
163 echo [admin]
[19290]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"
[19288]171) else (
172 echo Did not set password
173)
[20262]174echo.
[19288]175goto exit
[19278]176
[20338]177
[23974]178:: reset-gsdlhome forces configure-cgi by renaming any
179:: existing gsdlsite.cfg and by deleting Mac .app files
[23945]180:resethome
181echo.
[23949]182if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" (
[23966]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
[23945]186)
[23963]187
[23966]188for /F "delims=*" %%T in ('"echo %GSDLHOME%| %_sed% s@\\@\/@g"') do set safepath=%%T
[23963]189
[23974]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
[23966]192type "lib\java\log4j.properties.in" | %_sed% "s\@gsdl2home@\%safepath%\g" > "lib\java\log4j.properties"
[24006]193:: No use for Mac .app files on Windows, so they're not there in Windows binaries including caveat
194::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"
[23945]195goto cfgweb
196
[23963]197
[20338]198::configure-web
199::configure-cgi
200:cfgweb
[23974]201:: first set up Mac's .app files if that's not already been done (if this is the first time we're running GS3)
[24006]202:: No use for Mac .app files on Windows, so they're not there in Windows binaries including caveat
203:: 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"
[23974]204
[20338]205:cfgcgi
[24295]206:: Need to preserve the user-assigned collecthome property, if any
[23949]207if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" goto cgimsg
208echo Configuring %cgibin%\gsdlsite.cfg
[23987]209echo # **** This file is automatically generated, do not edit **** > "%cgibin%\gsdlsite.cfg"
210echo # For local customization of Greenstone, edit gsdlsite.cfg.in >> "%cgibin%\gsdlsite.cfg"
211echo. >> "%cgibin%\gsdlsite.cfg"
[24295]212
[23966]213for /F "delims=*" %%T in ('"echo %GSDLHOME%| %_sed% s@\\@\\\\@g"') do set safepath=%%T
[23987]214%_sed% "s@\*\*GSDLHOME\*\*@\"%safepath%\"@g" "%cgibin%\gsdlsite.cfg.in" >> "%cgibin%\gsdlsite.cfg"
[20338]215set safepath=
[24295]216
217if exist "%cgibin%\gsdlsite.cfg.bak" FOR /F "tokens=2" %%G IN ('findstr /R ^collecthome "%cgibin%\gsdlsite.cfg.bak"') do set colhome=%%G
218if not "%colhome%" == "" echo collecthome %colhome% >> "%cgibin%\gsdlsite.cfg"& echo. >> "%cgibin%\gsdlsite.cfg"
219set colhome=
220
[20338]221goto cgifin
222
223:cgimsg
224echo WARNING: Nothing done for configure-cgi.
225echo If you wish to regenerate the file
[23949]226echo %GSDLHOME%\%cgibin%\gsdlsite.cfg
[20338]227echo from scratch, delete the existing file first.
228echo.
229
230:cgifin
231if "%target%" == "configure-cgi" goto exit
232if "%target%" == "configure-web" goto cfgapach
233
234::configure-apache
235:cfgapach
236if not "%configfile%" == "" if exist "%configfile%" (goto cfgport) else (echo Config file %configfile% does not exist. Using default llssite.cfg)
237
238if exist "%GSDLHOME%\llssite.cfg" (
[20906]239 set configfile=%GSDLHOME%\llssite.cfg
[20338]240 goto cfgport
241)
242if not exist "%GSDLHOME%\llssite.cfg.in" (
243 echo Unable to proceed as neither %GSDLHOME%\llssite.cfg nor %GSDLHOME%\llssite.cfg.in could be found
244 goto exit
245)
246copy "%GSDLHOME%\llssite.cfg.in" "%GSDLHOME%\llssite.cfg"
[20906]247set configfile=%GSDLHOME%\llssite.cfg
[20338]248
249:cfgport
250echo Configuring the apache webserver...
251:: See http://ss64.com/nt/for_cmd.html, http://ss64.com/nt/findstr.html (and http://ss64.com/nt/find.html)
[20906]252FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^portnumber "%configfile%"') do set port=%%G
253FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^hostIP "%configfile%"') do set hostIP=%%G
[23252]254FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^hosts "%configfile%"') do set hosts=%%G
[20906]255FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^externalaccess "%configfile%"') do set allowfromall=%%G
[20338]256
[20637]257if "%allowfromall%" == "1" set allowfromall="Allow"& goto portcon
258set allowfromall="Deny"
[20615]259
[20338]260:: Using CALL to jump to labels means we can return from them. BUT need to ensure
261:: that command extensions are enabled to call labels. So just use GOTO instead.
262::http://ss64.com/nt/call.html
263goto portcon
264
[20637]265
[19970]266::configure-port-and-connection
[20338]267:setport
[19970]268set /p port=Enter port number to use:
[20637]269set /p hostIP=Enter host IP to allow (127.0.0.1 is included by default):
[23252]270set /p hosts=Enter hostname or list of hosts to allow (localhost included by default):
[20637]271set /p allowfromall=Allow external connections [yes/no]:
[20338]272
[20637]273if "%allowfromall%" == "yes" set allowfromall="Allow"& goto portcon
274if "%allowfromall%" == "y" set allowfromall="Allow"& goto portcon
275set allowfromall="Deny"
[20615]276goto portcon
277
[20338]278:portcon
279if "%port%" == "" (
[20505]280 echo Done
281 goto exit
[20338]282)
[23966]283if "%safepath%" == "" for /F "delims=*" %%T in ('"echo %GSDLHOME%| %_sed% s@\\@\/@g"') do set safepath=%%T
[19970]284
[23949]285if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" FOR /F "tokens=2" %%G IN ('findstr /R ^collecthome "%GSDLHOME%\%cgibin%\gsdlsite.cfg"') do set COLLECTHOME=%%G
[22613]286if "%COLLECTHOME%" == "" set COLLECTHOME=%GSDLHOME%\collect
[23966]287for /F "delims=*" %%T in ('"echo %COLLECTHOME%| %_sed% s@\\@\/@g"') do set safecollectpath=%%T
[22613]288
289
[20338]290echo Port: %port%
291echo Stopping web server (if running)
292if not exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" echo Missing conf file
293if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" "%GSDLHOME%\bin\windows\stophttpd.exe" %GS2_APACHE_HTTPD_SIGNAL% SILENT
294echo Setting config file to use port %port%
[23252]295type "%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"
[20338]296echo Type '%0 web-start' to start the web server running on port %port%
297echo Done
[19970]298
[20637]299set allowfromall=
[20338]300set _sed=
301set safepath=
[20637]302set port=
[20338]303
304:: Extra processing for configure-web and configure-cgi command targets
[20637]305if not "%target%" == "configure-web" if not "%target%" == "configure-cgi" goto exit
[20338]306if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" (echo %MONITOR_SUCCESS%) else (echo %MONITOR_FAILED%)
307echo %MONITOR_FINISHED%
308goto exit
309
[19278]310:exit
[23966]311cd "%startdir%"
312set startdir=
[19970]313endlocal
Note: See TracBrowser for help on using the repository browser.