Sick of the endlessly growing search PATH?

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Envy           RmpO  Shell independent environment variable mgmt  JPRIT


1. Easy and safe upgrade from any other dot-file configuration.
Tested with sh, ksh, bash, zsh, csh, and tcsh.

2. A mechanism is provided for setting and prepending environment
variables in a variety of flexible ways.  All modifications are fully
reversible.

3. Machine generated .profile, .login, and crontab wrapper with
centrally specified essential environment variables.  Everything else
can be dependent on search paths.

Get it from http://www.perl.com/CPAN/authors/id/JPRIT/!
  (Also see LinkTree & Manifest)


##################
# RE@ENT CHAN@ES #
##################


** 12-13-97 Released 2.07

- Slightly better dependency tracking.  Avoids unloading ETOP during
'unload all'.

- envy load/unload now accept multiple targets on the command line

- More whitespace stricture in envy files.

- Slightly improved error messages.

- Factored 'wrapper' to use INITIAL_ENV.


** 11-24-97 Released 2.06

- Initial public release.


----------------------------------------------------------------------

Here's what it looks like:

[joshua@grdevl137] ~% envy
   dailydb-dev                          imag-dbo-testdb
 x dev                                  imag-dev-2513
   dev-area-setup                       imag-dev-2519
   fame                                 imag-prod
   framemaker                           java
 x fvwm95-2.0.43a                       objstore
   gcc                                x openwin
   gems-1.9.1-dev                       printing
   gems-2.0-dev                         prod
   gems-2.0.alpha.14                    prod-new
   gems-dev                             research
   gems-intl-rpts                     x reuters
   gems-prod                            solaris
   imag-2519                            sunpro
   imag-batch-hilarydb                x sybase
   imag-batch-proddb                    tcltk
   imag-batch-testdb                    tcltk-7.6
   imag-dbo-hilarydb                    tcltk-8.0
   imag-dbo-proddb                   

The 'x' means 'loaded'.

[joshua@grdevl137] ~% envy list
All envys currently available (2.06):
 
   dailydb-dev         /nw/dev/usr/etc/envy/dailydb-dev.env
 x dev                 /nw/dev/usr/etc/envy/dev.env
   dev-area-setup      /nw/dev/usr/mo/dev-area-setup.mo
   fame                /nw/dist/prod/mo/fame.mo
   framemaker          /nw/dist/prod/etc/framemaker.mo
 x fvwm95-2.0.43a      /nw/dev/usr/mo/fvwm95-2.0.43a.mo
   gcc                 /nw/dev/usr/etc/envy/gcc.env
   gems-1.9.1-dev      /nw/dev/usr/etc/envy/gems-1.9.1-dev.env
   gems-2.0-dev        /nw/dev/usr/mo/gems-2.0-dev.mo
   gems-2.0.alpha.14   /nw/dev/usr/etc/envy/gems-2.0.alpha.14.env
   gems-dev            /nw/dev/usr/etc/envy/gems-dev.env
   gems-intl-rpts      /nw/dist/prod/mo/gems-intl-rpts.mo
   gems-prod           /nw/dist/prod/mo/gems-prod.mo
   imag-2519           /nw/dev/usr/etc/envy/imag-2519.env
   imag-batch-hilarydb /nw/dev/usr/etc/envy/imag-batch-hilarydb.env
   imag-batch-proddb   /nw/dist/prod/etc/imag-batch-proddb.mo
   imag-batch-testdb   /nw/dev/usr/etc/envy/imag-batch-testdb.env
   imag-dbo-hilarydb   /nw/dev/usr/etc/envy/imag-dbo-hilarydb.env
   imag-dbo-proddb     /nw/dev/usr/etc/envy/imag-dbo-proddb.env
   imag-dbo-testdb     /nw/dev/usr/etc/envy/imag-dbo-testdb.env
   imag-dev-2513       /nw/dist/prod/etc/imag-dev-2513.mo
   imag-dev-2519       /nw/dist/prod/etc/imag-dev-2519.mo
   imag-prod           /nw/dev/usr/etc/envy/imag-prod.env
   java                /nw/dist/prod/etc/java.mo
   objstore            /nw/dist/prod/etc/objstore.mo
 x openwin             /nw/dev/usr/mo/openwin.mo
   ...

[joshua@grdevl137] ~% cat /nw/dev/usr/mo/openwin.mo
# X11 and Motif
#
PATH+=/usr/dt/bin:/usr/openwin/bin
MANPATH+=/usr/dt/man:/usr/openwin/man
LD_LIBRARY_PATH+=/usr/dt/lib:/usr/openwin/lib
OPENWINHOME=/usr/openwin

This means that when 'openwin' is loaded, two components are prepended
to the PATH, MANPATH, and LD_LIBRARY_PATH; and OPENWINHOME is set to
/usr/openwin.  What makes envy unique is that YOU CAN ALSO UNLOAD
'openwin' to unprepend and unset each of the variables modified during
the load.

----------------------------------------------------------------------

* How does a typical install work?

First, edit envy_config.pm and install envy.  Then you need to setup
the initial production & development (& test?) environments.  $ETOP
needs to be set to the top of your production tree such that:

  $ETOP/(bin|etc|include|lib|man|share|var)

You'll need an prod.env that looks like this:

  ETOP=/nw/prod/usr
  PATH+=/nw/prod/usr/bin
  LD_LIBRARY_PATH+=/nw/prod/usr/lib
  PERL5LIB+=/nw/prod/usr/lib/perl5
  MANPATH+=/nw/prod/usr/man:/nw/prod/usr/lib/perl5/man
  ENVY_PATH+=/nw/prod/usr/etc/envy

You can also create a dev.env file for development:

  ETOP=/nw/dev/usr
  PATH+=/nw/dev/usr/bin
  LD_LIBRARY_PATH+=/nw/dev/usr/lib
  PERL5LIB+=/nw/dev/usr/lib/perl5
  MANPATH+=/nw/dev/usr/man:/nw/dev/usr/lib/perl5/man
  ENVY_PATH+=/nw/dev/usr/etc/envy

Put both of these files in /nw/prod/usr/etc/envy/.  To set up a
particular user for envy, all you have to do is replace $HOME/.profile
or $HOME/.login with symlinks:

  ln -s /nw/prod/usr/etc/login/dot.profile $HOME/.profile
  ln -s /nw/prod/usr/etc/login/dot.login $HOME/.login

Any old $HOME/dot files will be renamed if necessary (and not
deleted).

----------------------------------------------------------------------

Credits:
  Sergei Poliakoff - Global Technology Architect
  Alexander Shugayev - System Administrator
  Devine Kerr - Developer
  Ken Nawyn - Senior System Administrator
  Joshua Pritikin - Coder

-------------------------------------------------------------------
Copyright (c) 1997 Joshua Nathaniel Pritikin.  All rights reserved.
This software is provided "as is" without express or implied warranty.
This package is free software; you can redistribute it and/or modify
it under the same terms as perl itself.
