Environments - Re: Disappearing root

From: Christian Holm Christensen (cholm@hehi03.nbi.dk)
Date: Sun May 28 2000 - 11:53:34 EDT

  • Next message: Konstantin Olchanski: "Re: Environments - Re: Disappearing root"

    Hi all, 
    
    It seems that there are a few problems with the environments on the
    pii<x>, so let me offer a possible solution:
    
    Here at NBI, we've set up a set of scripts that let people choose what
    version of the software they want to use. The idea is a follows: 
    
    Each user in the group has a "~/.hehirc" file, where they are free to
    choose the versions needed. If one want's to use another version, then
    all one has to do, is to edit this file. The "~/.hehirc" file can look
    like: 
    
      #
      # Lines beginning with '#' are comments. 
      # 
      use-brat-new 
      use-gbrahms
      use-cern-2000
    
    In addition, each user must have the line 
    
       if ( -f /home/hehi/hehi/etc/hehi.cshrc ) then
         source /home/hehi/hehi/etc/hehi.cshrc
       endif 
    
    in "~/.login" (in case of C-shells)
    
      if test -f /home/hehi/hehi/etc/hehi.shrc ) then 
        source /home/hehi/hehi/etc/hehi.shrc
      fi 
    
    in "~/.profile" (in case of Korn-shells). 
    
    These configuration scripts does all the work needed. Basically, they
    parse the "~/.hehirc" for lines like "use-<feature>[-<version>]",
    using "grep" and "sed": 
    
      setenv HEHI_TOP <out top directory for software> 
    
      # re-configuartin file 
      set rcfile=${HOME}/.hehirc
      # defined features 
      set options=( brat root objy gbrahms na44 qt cern TeXLive msql mysql )
    
      # Loop over defined features 
      foreach opt ($options)
        # Find the line macthing the current feature. Notice, some people
        # like to make "grep" an alias, so we escape it. 
        set version=`\grep ^use-$opt $rcfile | sed -n "s/use-$opt-*\(.*\)/\1_/p"`
        if ($version != "") then 
          # if the line matched contain a version number, we go on 
          if ($version == "_") then
            # if the version is '_', inserted above, then we default to
            # "pro" version, which is asymbolic link to a specific version.  
            set ${opt}Vers=pro
          else
            # otherwise we extract the version number form the matched line
            set ${opt}Vers=`echo $version| sed -n "s/\(.*\)_/\1/p"`
          endif
        endif
        # Remove temp variables 
        unset opt
        unset version
      end
      # Remove temp variables 
      unset options 
      unset rcfile 
    
    Having defined variables <opt>Vers=<version>, we can now do the checks
    for the proper directories, set the environment and so on: 
    
      ### echo %%% Setup for BRAT 
      if ( $?bratVers )  then 
        # if variable "bratVers" is defined, then, we check to see if
        # wanted directory exist. 
        if ( -d ${HEHI_TOP}/brat/${bratVers} ) then
          setenv BRATSYS  ${HEHI_TOP}/brat/${bratVers}
          setenv BRATHOME ${BRATSYS}
          setenv LD_LIBRARY_PATH ${BRATSYS}/lib/${BRAHMS_ARCH}:${LD_LIBRARY_PATH}
          setenv PATH ${BRATSYS}/bin/${BRAHMS_ARCH}:${PATH}
          # If "use-root[-<x>]" wasn't found, enable the default ROOT
          # version, since BRAT needs it.  
          if (! $?rootVers) set rootVers=pro
        else 
          echo "Requested BRAT version doesn't exist" 
        endif
        # remove temp variable. 
        unset bratVers        
      endif 
      ### echo %%%  Setup for ROOT
      if ($?rootVers) then  
        if ( -d ${HEHI_TOP}/root/${rootVers} ) then 
          setenv ROOTSYS ${HEHI_TOP}/root/${rootVers}
          setenv LD_LIBRARY_PATH ${ROOTSYS}/lib:${LD_LIBRARY_PATH}
          setenv PATH  ${ROOTSYS}/bin:${PATH}
        endif
        else 
          echo "Requested ROOT version doesn't exist" 
        unset rootVers
      endif
      ### echo %%%  Setup for CERNLIB  
      if ($?cernVers) then 
        # system may define CERN and CERN_LEVEL, so check those first. 
        if (! $?CERN)       setenv CERN /cern
        if (! $?CERN_LEVEL) setenv CERN_LEVEL $cernVers
        if (! $?CERN_ROOT)  setenv CERN_ROOT ${CERN}/${CERN_LEVEL}
        # if the CERNLIB bin directory already is in the PATH, we shouldn't
        # add it again. 
        if ( ! `echo $PATH | sed -n "s|.*cern.*|1|p"` ) \
          setenv PATH ${CERN_ROOT}/bin:${PATH}
        unset cernVers
      endif
    
    And a simil;ar script should exist for Korn-shells. 
    
    On the pii<x>, we are fortunate to be the only users, so this kind of
    script could be put directly into /etc/csh.cshrc and /etc/profile, if
    so wanted. 
    
    Now, $HEHITOP has a directory layout somewhat like: 
    
     $HEHITOP-+-brat-+-1.5.4
              |      +-1.5.5 
              |      +-1.5.pre6 
              |      +-1.6 
              |      +-1.6.1
              |      +-pro => 1.5.pre6 (1.5.5 is buggy)
              |      +-new => 1.6.1 
              |      +-old => 1.5.4 
    	  +-root-+-2.23.11        
              |      +-2.23.12      
    	  |      +-2.24.02     
    	  |      +-2.24.04      
    	  |      +-pro => 2.23.12 (This is what ROOT calls pro)
    	  |      +-new => 2.24.04 
    	  |      +-old => 2.23.11 
    	  ...
    
    Now a user having a "~/.hehirc" file with the lines:
    
      use-root-2.24.02
      use-brat-new 
    
    while have a (parial) environemnt like 
    
      ROOTSYS $HEHI_TOP/root/2.24.02
      BRATSYS $HEHI_TOP/brat/1.6.1
      BRATHOME $HEHI_TOP/brat/1.6.1
      PATH $ROOTSYS/bin;$BRATSYS/bin;...
      LD_LIBRARY_PATH $ROOTSYS/lib;$BRATSYS/lib/$BRAHMS_ARCH;...
    
    I think this scheme works rather good. At least we're pretty sure what
    version of BRAT/ROOT we're using, and everything is coherent. Also,
    the user is completly free to everride any environment settings they
    may see fit; however, then they can not expect the same level of
    support as if they had used the "~/.hehirc" mechanism. 
    
    I hope this will be useful, 
    
    Christian  -----------------------------------------------------------
    Holm Christensen                             Phone:  (+45) 35 35 96 91 
      Sankt Hansgade 23, 1. th.                  Office: (+45) 353  25 305 
      DK-2200 Copenhagen N                       Web:    www.nbi.dk/~cholm    
      Denmark                                    Email:       cholm@nbi.dk
    



    This archive was generated by hypermail 2b29 : Sun May 28 2000 - 11:57:59 EDT