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

Last change on this file since 31688 was 27521, checked in by ak19, 11 years ago

Resetting gsdlhome (reset-gsdlhome command) should not just update the perl shebang for gliserver.pl but also checksum.pl and metadata-server.pl

File size: 14.5 KB
RevLine 
[19278]1@echo off
2
[24829]3setlocal enabledelayedexpansion
4
[20262]5::set testdone=0
[23966]6set startdir=%CD%
[23987]7cd /d "%~dp0"
8::we're now in the "%GSDLHOME%" folder
9call setup.bat
[23949]10
[23966]11::set _sed="%GSDLHOME%\bin\windows\sed.exe"
12:: NOTE: no quotes allowed around the following, since it's used inside
13:: a FOR statement executing a command already embedded in quotes
14set _sed=bin\windows\sed.exe
15
[19278]16set target=%1
17set configfile=%2
[20906]18:: remove any quotes around configfile, if we were given parameter configfile
19:: To test for the existence of a cmdline parameter: http://ss64.com/nt/if.html
20if not [%2] == [] set configfile=%configfile:"=%
[19278]21
[20262]22:: Construct the signal using the unique GS2 installation
[20906]23:: directory (after replacing spaces, colons and backslashes)
24set signal=%GSDLHOME: =_%
[24829]25for /F "delims=*" %%T in ('"echo !signal!| !_sed! s@[\\:]@_@g"') do set signal=%%T
[20262]26set GS2_APACHE_HTTPD_SIGNAL=GS2_APACHE_HTTPD_%signal%
[20906]27set signal=
[20262]28rem echo Signal is: %GS2_APACHE_HTTPD_SIGNAL%
29
[19970]30:: Need to get greenstone installation directory
31:: set cwd=%CD%
[19278]32
[19970]33set MONITOR_SUCCESS=MAKE SUCCESSFUL
34set MONITOR_FAILED=MAKE FAILED
35set MONITOR_FINISHED=MAKE DONE
36
[19278]37:: check that we have >=1 and <=2 arguments
38:chkargs
[20262]39if "%target%" == "" goto usage
40if not "%3" == "" goto usage
[19278]41 goto begincmd
42
43
44:usage
45echo.
46echo Usage: %0 command
47echo where command is any of the following:
[19970]48echo web-start
49echo web-stop
50echo web-restart
[20262]51::echo web-status
52::echo web-graceful
[19278]53echo configure-admin
54echo configure-web [config-filename]
55echo configure-apache [config-filename]
56echo configure-cgi
[23945]57echo reset-gsdlhome [config-filename]
[20637]58echo set-port
[20262]59echo test-gsdlhome
60echo web-stop-tested
[19278]61echo.
62goto exit
63
64
65:begincmd
66:: web-stop-tested command assumes GSDLHOME/greenstone environment is already set
67if "%target%" == "web-stop-tested" goto stoptest
68
69:: For all other commands, the greenstone environment needs to be set first before they can be run
70:testgsdl
[20159]71if NOT "%GSDLHOME%" == "" if NOT "%GSDLOS%" == "" goto commands
[20338]72echo.
73echo Environment variable GSDLHOME (or GSDLOS) not set.
74echo This needs to be set to run the gsicontrol command %target%.
75echo Have you run setup.bat?
76echo.
77goto exit
[19278]78
79
80::MAIN MENU
81:commands
[20262]82echo.
83echo Using:
84echo GSDLHOME = %GSDLHOME%
85echo GSDLOS = %GSDLOS%
86echo.
87
[24902]88:: If %PROCESSOR_ARCHITECTURE% is x86, default the architecture to 32 bits, else 64.
89:: (Can't test for x64, since the 64 bit Win 7 here returns "AMD64" instead of "x64".)
90:: Then, if the svn version already uses just %GSDLOS% not %GSDLOS%%GSDLARCH%,
91:: set GSDLARCH to the empty string. Same if %PROCESSOR_ARCHITECTURE% is empty.
92if "%PROCESSOR_ARCHITECTURE%" == "x86" (set GSDLARCH=32) else (set GSDLARCH=64)
93if "%PROCESSOR_ARCHITECTURE%" == "" set GSDLARCH=
94if exist "bin\windows" set GSDLARCH=
95set cgibin=cgi-bin\%GSDLOS%%GSDLARCH%
96::set cgibin=cgi-bin ::set cgibin=cgi-bin\windows
[24874]97
[19278]98if "%target%" == "web-start" goto start
99if "%target%" == "web-stop" goto stop
100if "%target%" == "web-restart" goto restart
101if "%target%" == "configure-admin" goto cfgadmin
102if "%target%" == "configure-web" goto cfgweb
103if "%target%" == "configure-apache" goto cfgapach
104if "%target%" == "configure-cgi" goto cfgcgi
[23945]105if "%target%" == "reset-gsdlhome" goto resethome
[20262]106:: already tested gsdlhome (and web-stop-tested) above, don't want to keep looping on it
107if "%target%" == "test-gsdlhome" goto exit
108rem if "%target%" == "web-stop-tested" goto exit
[20338]109rem if "%target%" == "web-status" goto status
110rem if "%target%" == "web-graceful" goto graceful
111if "%target%" == "set-port" goto setport
112:: unknown command
113echo Command unrecognised: %target%
114goto usage
[19278]115
[20338]116
[19278]117:start
[20159]118:: START starts the app in a new console named by the string following immediately thereafter
119:: then we start up apache-httpd and pass the signal that the stop command will respond to
[20262]120START "%GSDLHOME%\apachectl" "%GSDLHOME%\bin\windows\starthttpd.exe" %GS2_APACHE_HTTPD_SIGNAL% "%GSDLHOME%\apache-httpd\windows\bin\httpd.exe"
[20639]121:: if the return value is >= 0, it's succeeded:
122if ERRORLEVEL 0 (echo %MONITOR_SUCCESS%) else (echo %MONITOR_FAILED%)
[19970]123echo %MONITOR_FINISHED%
124goto exit
125
[19278]126:stop
[20262]127:stoptest
[20435]128if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" "%GSDLHOME%\bin\windows\stophttpd.exe" %GS2_APACHE_HTTPD_SIGNAL% SILENT
[20262]129if "%target%" == "web-stop-tested" goto exit
[20639]130:: if the return value is >= 0, it's succeeded:
131if ERRORLEVEL 0 (echo %MONITOR_SUCCESS%) else (echo %MONITOR_FAILED%)
[20262]132echo %MONITOR_FINISHED%
[19970]133goto exit
134
[20637]135
[19278]136:restart
[20637]137:: Need to stop server, wait and start it again.
138:: We're using Ping to implement batch file Wait
[20262]139if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" "%GSDLHOME%\bin\windows\stophttpd.exe" %GS2_APACHE_HTTPD_SIGNAL%
[20637]140
141:: Wait 5 seconds and then start. See http://ss64.com/nt/sleep.html (and http://malektips.com/dos0017.html)
142:: if loopback IP address (127.0.0.1) does not exist, we ask them to manually start it up again
143ping -n 1 -w 1000 127.0.0.1 |find "TTL=">nul || goto failmsg
144echo Waiting for re-start....
145ping -n 5 -w 1000 127.0.0.1> nul
[19970]146goto start
147
[20637]148:failmsg
149echo Unable to wait for restart. Manually run %0 web-start
150goto exit
151
152
[20338]153::status
154::graceful
155::echo Command %target% is not operational on this operating system
156::goto exit
[19278]157
158
159::configure-admin
160:cfgadmin
161echo.
[19288]162echo Configuring admin user password:
163for /F %%T in ('getpw') do set encrypted_password=%%T
[19290]164
165:: Have to create an intermediate file in the following, because echoing
166:: lines straight into a pipe adds spaces before the end of each line.
[19970]167:: When piping, need to double-escape the angle brackets with three hat signs,
[19290]168:: but when redirecting to a file, need to escape only once (one hat sign).
[19288]169if ERRORLEVEL 0 (
170 (
171 echo [admin]
[19290]172 echo ^<enabled^>true
173 echo ^<groups^>administrator,colbuilder,all-collections-editor
[24829]174 echo ^<password^>!encrypted_password!
[19290]175 echo ^<username^>admin
[24829]176 ) > "!GSDLHOME!\etc\users.txt"
177 type "!GSDLHOME!\etc\users.txt" | txt2db -append "!GSDLHOME!\etc\users.gdb"
178 del "!GSDLHOME!\etc\users.txt"
[19288]179) else (
180 echo Did not set password
181)
[20262]182echo.
[19288]183goto exit
[19278]184
[20338]185
[23974]186:: reset-gsdlhome forces configure-cgi by renaming any
187:: existing gsdlsite.cfg and by deleting Mac .app files
[24297]188:: However, we only relocate if there is a gsdlsite.cfg file with its gsdlhome
189:: property the same as the current (greenstone installation) directory
[23945]190:resethome
191echo.
[24297]192if not exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" goto relocate
[23963]193
[24765]194set gshome=
[24829]195FOR /F "tokens=*" %%G IN ('findstr /R ^gsdlhome "!GSDLHOME!\!cgibin!\gsdlsite.cfg"') do call :concat %%G
[24765]196
197:: The following doesn't work if there are spaces in the gsdlhome filepath
[24829]198::FOR /F "tokens=2" %%G IN ('findstr /R ^gsdlhome "!GSDLHOME!\!cgibin!\gsdlsite.cfg"') do set gshome=%%G
[24300]199:: before string comparison, remove any quotes around gsdlhome value defined in config file
[24765]200:: if not [%gshome%] == [] set gshome=%gshome:"=%
201
[24300]202if "%gshome%" == "%GSDLHOME%" set gshome=& goto exit
[24297]203
204move "%GSDLHOME%\%cgibin%\gsdlsite.cfg" "%GSDLHOME%\%cgibin%\gsdlsite.cfg.bak"
205echo **** Regenerating %GSDLHOME%\%cgibin%\gsdlsite.cfg
206echo **** Previous version of file now %GSDLHOME%\%cgibin%\gsdlsite.cfg.bak
[24786]207
208:relocate
[27521]209:: The path to the included perl at the top of gliserver.pl and other cgi-bin perl files needs to use the new gsdlhome
210:: On windows, the path in gliserver.pl and the others uses backslashes
[24829]211for /F "delims=*" %%T in ('"echo !gshome!| !_sed! s@\\@\\\\@g"') do set safeoldhome=%%T
212for /F "delims=*" %%T in ('"echo !gsdlhome!| !_sed! s@\\@\\\\@g"') do set safenewhome=%%T
[24819]213if exist "%GSDLHOME%\bin\%GSDLOS%\perl" (
[24829]214 copy "!cgibin!\gliserver.pl" "!cgibin!\gliserver.pl.bak"
215 type "!cgibin!\gliserver.pl.bak" | !_sed! "s@!safeoldhome!@!safenewhome!@g" > "!cgibin!\gliserver.pl"
216 del "!cgibin!\gliserver.pl.bak"
[27521]217
218 copy "!cgibin!\metadata-server.pl" "!cgibin!\metadata-server.pl.bak"
219 type "!cgibin!\metadata-server.pl.bak" | !_sed! "s@!safeoldhome!@!safenewhome!@g" > "!cgibin!\metadata-server.pl"
220 del "!cgibin!\metadata-server.pl.bak"
221
222 copy "!cgibin!\checksum.pl" "!cgibin!\checksum.pl.bak"
223 type "!cgibin!\checksum.pl.bak" | !_sed! "s@!safeoldhome!@!safenewhome!@g" > "!cgibin!\checksum.pl"
224 del "!cgibin!\checksum.pl.bak"
[24819]225)
[24786]226set safenewhome=
227set safeoldhome=
[24297]228set gshome=
229
[24829]230for /F "delims=*" %%T in ('"echo !GSDLHOME!| !_sed! s@\\@\/@g"') do set safepath=%%T
[23963]231
[23974]232:: Also re-initialise the log4j.properties and force regeneration of
233:: Mac .app files since cfgweb will generate these if they don't exist
[23966]234type "lib\java\log4j.properties.in" | %_sed% "s\@gsdl2home@\%safepath%\g" > "lib\java\log4j.properties"
[24006]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 exist "%%G\Contents\document.wflow" del "%%G\Contents\document.wflow"
[23945]237goto cfgweb
238
[24765]239:: Subroutine used to glue parts of a filepath that contains spaces back together again
240:: http://www.computing.net/answers/programming/batch-for-loop-tokens/16727.html
241:concat
242:: first remove any quotes around this part of the filepath
243set suffix=%~1
[24904]244if not "%suffix%" == "gsdlhome" if not "%suffix%" == "collecthome" set gshome=%gshome%%suffix%
[24765]245shift
246if not "%~1"=="" goto concat
247goto :eof
[23963]248
[24765]249
[20338]250::configure-web
251::configure-cgi
252:cfgweb
[23974]253:: 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]254:: No use for Mac .app files on Windows, so they're not there in Windows binaries including caveat
255:: 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]256
[20338]257:cfgcgi
[24295]258:: Need to preserve the user-assigned collecthome property, if any
[23949]259if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" goto cgimsg
260echo Configuring %cgibin%\gsdlsite.cfg
[23987]261echo # **** This file is automatically generated, do not edit **** > "%cgibin%\gsdlsite.cfg"
262echo # For local customization of Greenstone, edit gsdlsite.cfg.in >> "%cgibin%\gsdlsite.cfg"
263echo. >> "%cgibin%\gsdlsite.cfg"
[24295]264
[24829]265for /F "delims=*" %%T in ('"echo !GSDLHOME!| !_sed! s@\\@\\\\@g"') do set safepath=%%T
[23987]266%_sed% "s@\*\*GSDLHOME\*\*@\"%safepath%\"@g" "%cgibin%\gsdlsite.cfg.in" >> "%cgibin%\gsdlsite.cfg"
[20338]267set safepath=
[24295]268
[20338]269goto cgifin
270
271:cgimsg
272echo WARNING: Nothing done for configure-cgi.
273echo If you wish to regenerate the file
[23949]274echo %GSDLHOME%\%cgibin%\gsdlsite.cfg
[20338]275echo from scratch, delete the existing file first.
276echo.
277
278:cgifin
279if "%target%" == "configure-cgi" goto exit
280if "%target%" == "configure-web" goto cfgapach
281
282::configure-apache
283:cfgapach
[24829]284if not "%configfile%" == "" if exist "%configfile%" (goto cfgport) else (echo Config file !configfile! does not exist. Using default llssite.cfg)
[20338]285
286if exist "%GSDLHOME%\llssite.cfg" (
[24829]287 set configfile=!GSDLHOME!\llssite.cfg
[20338]288 goto cfgport
289)
290if not exist "%GSDLHOME%\llssite.cfg.in" (
[24829]291 echo Unable to proceed as neither !GSDLHOME!\llssite.cfg nor !GSDLHOME!\llssite.cfg.in could be found
[20338]292 goto exit
293)
294copy "%GSDLHOME%\llssite.cfg.in" "%GSDLHOME%\llssite.cfg"
[20906]295set configfile=%GSDLHOME%\llssite.cfg
[20338]296
297:cfgport
298echo Configuring the apache webserver...
299:: See http://ss64.com/nt/for_cmd.html, http://ss64.com/nt/findstr.html (and http://ss64.com/nt/find.html)
[24829]300FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^portnumber "!configfile!"') do set port=%%G
301FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^hostIP "!configfile!"') do set hostIP=%%G
302FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^hosts "!configfile!"') do set hosts=%%G
303FOR /F "tokens=2 delims==" %%G IN ('findstr /R ^externalaccess "!configfile!"') do set allowfromall=%%G
[20338]304
[20637]305if "%allowfromall%" == "1" set allowfromall="Allow"& goto portcon
306set allowfromall="Deny"
[20615]307
[20338]308:: Using CALL to jump to labels means we can return from them. BUT need to ensure
309:: that command extensions are enabled to call labels. So just use GOTO instead.
310::http://ss64.com/nt/call.html
311goto portcon
312
[20637]313
[19970]314::configure-port-and-connection
[20338]315:setport
[19970]316set /p port=Enter port number to use:
[20637]317set /p hostIP=Enter host IP to allow (127.0.0.1 is included by default):
[23252]318set /p hosts=Enter hostname or list of hosts to allow (localhost included by default):
[20637]319set /p allowfromall=Allow external connections [yes/no]:
[20338]320
[20637]321if "%allowfromall%" == "yes" set allowfromall="Allow"& goto portcon
322if "%allowfromall%" == "y" set allowfromall="Allow"& goto portcon
323set allowfromall="Deny"
[20615]324goto portcon
325
[20338]326:portcon
327if "%port%" == "" (
[20505]328 echo Done
329 goto exit
[20338]330)
[24829]331if "%safepath%" == "" for /F "delims=*" %%T in ('"echo !GSDLHOME!| !_sed! s@\\@\/@g"') do set safepath=%%T
[19970]332
[24765]333:: Doesn't work if there are spaces in the collecthome path in gsdlsite.cfg
[24829]334::if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" FOR /F "tokens=2" %%G IN ('findstr /R ^collecthome "!GSDLHOME!\!cgibin!\gsdlsite.cfg"') do set COLLECTHOME=%%G
[24765]335
336:: variable in subroutine concat is called gshome,
337:: so forced to use it here for collecthome
338set gshome=
[24829]339if exist "%GSDLHOME%\%cgibin%\gsdlsite.cfg" FOR /F "tokens=*" %%G IN ('findstr /R ^collecthome "!GSDLHOME!\!cgibin!\gsdlsite.cfg"') do call :concat %%G
[24765]340set COLLECTHOME=%gshome%
341set gshome=
342
[22613]343if "%COLLECTHOME%" == "" set COLLECTHOME=%GSDLHOME%\collect
[24829]344for /F "delims=*" %%T in ('"echo !COLLECTHOME!| !_sed! s@\\@\/@g"') do set safecollectpath=%%T
[22613]345
[20338]346echo Port: %port%
347echo Stopping web server (if running)
348if not exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" echo Missing conf file
349if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" "%GSDLHOME%\bin\windows\stophttpd.exe" %GS2_APACHE_HTTPD_SIGNAL% SILENT
350echo Setting config file to use port %port%
[24902]351type "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf.in" | %_sed% "s@\*\*GSDL_OS_ARCH\*\*@%GSDLOS%%GSDLARCH%@g" | %_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]352echo Type '%0 web-start' to start the web server running on port %port%
353echo Done
[19970]354
[20637]355set allowfromall=
[20338]356set _sed=
357set safepath=
[20637]358set port=
[20338]359
360:: Extra processing for configure-web and configure-cgi command targets
[20637]361if not "%target%" == "configure-web" if not "%target%" == "configure-cgi" goto exit
[20338]362if exist "%GSDLHOME%\apache-httpd\%GSDLOS%\conf\httpd.conf" (echo %MONITOR_SUCCESS%) else (echo %MONITOR_FAILED%)
363echo %MONITOR_FINISHED%
364goto exit
365
[19278]366:exit
[23966]367cd "%startdir%"
368set startdir=
[19970]369endlocal
Note: See TracBrowser for help on using the repository browser.