Changeset 30574


Ignore:
Timestamp:
2016-06-16T19:20:23+12:00 (5 years ago)
Author:
ak19
Message:

Improving dispersed GS3: changes to util.pm fix the bug whereby the perl code always write to gs2build\tmp when building, even if the Greenstone folder is not writable. Now the TMP env var location is used and the tmp files get written to TMP\greenstone\web when the GS folder is not writable. Further tidied up bat and cmd files to remove extra variables, to break out of loop reading in build.properties file when the necessary properties are found.

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • gs3-extensions/solr/trunk/src/gs3-setup.bat

    r30532 r30574  
    1414set SOLR_PORT=8983
    1515set SOLR_HOST=localhost
     16
     17setlocal enabledelayedexpansion
     18set FOUNDPROPS=
    1619:: Loosely based on
    1720:: http://stackoverflow.com/questions/7708681/how-to-read-from-a-properties-file-using-batch-script
    1821FOR /F "tokens=1,2 delims==" %%G IN (%GSDL3SRCHOME%\build.properties) DO (
    19     if "%%G"=="tomcat.server" set SOLR_HOST=%%H
    20     if "%%G"=="tomcat.port" set SOLR_PORT=%%H
     22    if "%%G"=="tomcat.server" set SOLR_HOST=%%H& set FOUNDPROPS=!FOUNDPROPS!found
     23    if "%%G"=="tomcat.port" set SOLR_PORT=%%H& set FOUNDPROPS=!FOUNDPROPS!found
     24    :: break out of the loop as soon as both properties are found
     25    if "!FOUNDPROPS!" == "foundfound" goto foundall
    2126)
     27endlocal
     28
     29:foundall
    2230echo Tomcat host: %SOLR_HOST%
    2331echo Tomcat port: %SOLR_PORT%
  • main/trunk/gli/gli.bat

    r30573 r30574  
    167167
    168168    rem In a web-dispersed GS3 set up like in the labs, gsdl3home.isreadonly would be true and
    169     rem we need to run the web server in read-only mode. This section of code borrowed from gs3-server.bat.
    170     set USE_TMPDIR_FOR_TOMCAT=
     169    rem we need to run the web server in read-only mode. This section of code borrowed from gs3-server.bat.
    171170    for /F "tokens=1,2 delims==" %%G in (%GSDL3SRCHOME%\build.properties) do (
    172         if "%%G"=="gsdl3home.isreadonly" set USE_TMPDIR_FOR_TOMCAT=%%H
    173     )   
    174     if "%USE_TMPDIR_FOR_TOMCAT%" == "true" (
    175         set gsdl3_writablehome=%TMP%\greenstone\web
    176         set opt_properties="-Dgsdl3home.isreadonly=true" -Dgsdl3.writablehome="%gsdl3_writablehome%"
    177         echo Setting Greenstone3 web home writable area to be: %gsdl3_writablehome%
    178         pushd %GSDL3SRCHOME%
    179         cmd /c ant.bat %opt_properties% configure-web
    180         popd
     171        if "%%G"=="gsdl3home.isreadonly" if "%%H" == "true" (
     172            set gsdl3_writablehome=%TMP%\greenstone\web
     173            :: not used
     174            set opt_properties="-Dgsdl3home.isreadonly=true" -Dgsdl3.writablehome="%gsdl3_writablehome%"
     175            echo Setting Greenstone3 web home writable area to be: %gsdl3_writablehome%
     176            pushd %GSDL3SRCHOME%
     177            :: passing opt_properties is no longer necessary because ant.bat is unmodified (doesn't make use of it)
     178            :: and because build.xml already contains the properties with the correct values
     179            cmd /c ant.bat %opt_properties% configure-web
     180            popd
     181        )
    181182    )
    182183   
  • main/trunk/greenstone2/perllib/util.pm

    r30561 r30574  
    234234
    235235
     236# works out the temporary directory, including in the case where Greenstone is not writable
     237# In that case, gs3-setup.bat would already have set the GS_TMP_OUTPUT_DIR temp variable
     238sub determine_tmp_dir
     239{
     240    my $try_collect_dir = shift(@_) || 0;
     241
     242    my $tmp_dirname;
     243    if(defined $ENV{'GS_TMP_OUTPUT_DIR'}) {
     244        $tmp_dirname = $ENV{'GS_TMP_OUTPUT_DIR'};
     245    } elsif($try_collect_dir && defined $ENV{'GSDLCOLLECTDIR'}) {
     246        $tmp_dirname = $ENV{'GSDLCOLLECTDIR'};
     247    } elsif(defined $ENV{'GSDLHOME'}) {
     248        $tmp_dirname = $ENV{'GSDLHOME'};
     249    } else {
     250        return undef;
     251    }
     252   
     253    if(!defined $ENV{'GS_TMP_OUTPUT_DIR'}) {
     254        # test the tmp_dirname folder is writable, by trying to write out a file
     255        # Unfortunately, cound not get if(-w $dirname) to work on directories on Windows
     256            ## http://alvinalexander.com/blog/post/perl/perl-file-test-operators-reference-cheat-sheet (test file/dir writable)
     257            ## http://www.makelinux.net/alp/083 (real and effective user IDs)
     258       
     259        my $tmp_test_file = &FileUtils::filenameConcatenate($tmp_dirname, "writability_test.tmp");
     260        if (open (FOUT, $tmp_test_file)) {
     261            close(FOUT);
     262            &FileUtils::removeFiles($tmp_test_file);
     263        } else { # location not writable, use TMP location
     264            $tmp_dirname = &FileUtils::filenameConcatenate($ENV{'TMP'}, "greenstone");
     265            $ENV{'GS_TMP_OUTPUT_DIR'} = $tmp_dirname; # store for next time
     266        }
     267    }
     268   
     269    $tmp_dirname = &FileUtils::filenameConcatenate($tmp_dirname, "tmp");
     270    &FileUtils::makeAllDirectories ($tmp_dirname) unless -e $tmp_dirname;
     271
     272    return $tmp_dirname;
     273}
     274
    236275sub get_tmp_filename
    237276{
     
    251290    }
    252291
    253     my $tmpdir = &FileUtils::filenameConcatenate($ENV{'GSDLHOME'}, "tmp");
    254     &FileUtils::makeAllDirectories ($tmpdir) unless -e $tmpdir;
     292    my $tmpdir = &util::determine_tmp_dir(0);
    255293
    256294    my $count = 1000;
     
    274312sub get_timestamped_tmp_folder
    275313{
    276    
    277     my $tmp_dirname;
    278     if(defined $ENV{'GSDLCOLLECTDIR'}) {
    279     $tmp_dirname = $ENV{'GSDLCOLLECTDIR'};
    280     } elsif(defined $ENV{'GSDLHOME'}) {
    281     $tmp_dirname = $ENV{'GSDLHOME'};
    282     } else {
    283     return undef;
    284     }
    285 
    286     $tmp_dirname = &FileUtils::filenameConcatenate($tmp_dirname, "tmp");
    287     &FileUtils::makeDirectory($tmp_dirname) if (!-e $tmp_dirname);
    288 
     314    my $tmp_dirname = &util::determine_tmp_dir(1);
     315   
    289316    # add the timestamp into the path otherwise we can run into problems
    290317    # if documents have the same name
  • main/trunk/greenstone3/gs3-server.bat

    r30568 r30574  
    5353
    5454set GSDL3PATH=
     55set USE_TMPDIR_FOR_TOMCAT=
    5556
    5657"%RUNJAVA%" -cp "%CLASSPATH%" %opt_properties% org.greenstone.server.Server3 "%GSDL3SRCHOME%"
  • main/trunk/greenstone3/gs3-setup.bat

    r30568 r30574  
    3636:: set GSDL3HOME to the 'web' subdirectory
    3737set GSDL3HOME=!GSDL3SRCHOME!\web
    38 set TOMCATWEB=!GSDL3SRCHOME!\web
     38set WEB_CONTAINING_CLASSES=!GSDL3SRCHOME!\web
    3939:: set GSDL3HOME to any web.home property provided, and create that folder if it doesn't exist
    4040:: Replace forward slashes in web.home with back slashes
     
    4444        set GSDL3HOME=%%H
    4545        set GSDL3HOME=!GSDL3HOME:/=\!
    46         set TOMCATWEB=!GSDL3HOME!
     46        set WEB_CONTAINING_CLASSES=!GSDL3HOME!     
    4747        if not exist "!GSDL3HOME!" cmd /c "!GSDL3SRCHOME!\userweb.cmd"
    48     )
    49 )
    50 
     48        goto foundwebhome
     49    )   
     50)
     51
     52:foundwebhome
    5153:: Whatever the web directory is, it should contain the WEB-INF\classes folder, else go back to using default for this
    5254:: The WEB-INF\classes folder will be absent in a userweb folder, but will be present if GSDL3HOME=GSDL3SRCHOME\web
    5355:: or if web.home points to GS3 as a webapp inside tomcat
    54 if not exist "!GSDL3HOME!\WEB-INF\classes" set TOMCATWEB=!GSDL3SRCHOME!\web
     56if not exist "!GSDL3HOME!\WEB-INF\classes" set WEB_CONTAINING_CLASSES=!GSDL3SRCHOME!\web
    5557
    5658:: change if using external tomcat or ant
     
    6365:: ---- Set the CLASSPATH and PATH environment variables ----
    6466if "!GS_CP_SET!" == "yes" goto skipSetCp
    65 set CLASSPATH=!TOMCATWEB!\WEB-INF\classes;!GSDL3SRCHOME!\resources\java;!GSDL3SRCHOME!\cp.jar;!CLASSPATH!;
     67set CLASSPATH=!WEB_CONTAINING_CLASSES!\WEB-INF\classes;!GSDL3SRCHOME!\resources\java;!GSDL3SRCHOME!\cp.jar;!CLASSPATH!;
    6668set PATH=!GSDL3SRCHOME!\bin;!GSDL3SRCHOME!\bin\script;!GSDL3SRCHOME!\lib\jni;!ANT_HOME!\bin;!PATH!
    6769
  • main/trunk/greenstone3/userweb.cmd

    r30568 r30574  
    1414set INSTALLDIR=!GSDL3SRCHOME!
    1515set USERWEB=
    16 set IS_TMP_TOMCAT=
    1716
    1817:: Loosely based on http://stackoverflow.com/questions/7708681/how-to-read-from-a-properties-file-using-batch-script
     
    2019:: http://scripts.dragon-it.co.uk/scripts.nsf/docs/batch-search-replace-substitute!OpenDocument&ExpandSection=3&BaseTarget=East&AutoFramed
    2120for /F "tokens=1,2 delims==" %%G in (!GSDL3SRCHOME!\build.properties) do (
    22     if "%%G"=="web.home" set USERWEB=%%H& set USERWEB=!USERWEB:/=\!
    23     if "%%G"=="gsdl3home.isreadonly" set IS_TMP_TOMCAT=%%H
     21    if "%%G"=="web.home" set USERWEB=%%H& set USERWEB=!USERWEB:/=\!& goto found
    2422)
     23
     24:found
    2525echo USERWEB: !USERWEB!
    26 echo IS_TMP_TOMCAT: !IS_TMP_TOMCAT!
    2726
    2827if "!USERWEB!" == "" echo No userweb directory provided & echo. & goto done
Note: See TracChangeset for help on using the changeset viewer.