[rescue] application version control

Christian J Hedemark chris at yonderway.com
Sun Jan 27 00:48:00 CST 2002


Mr. Bill asks:
> Am I the *only* person on here who prefers to get a base OS install,
> and then build EVERYTHING else from scratch?
[snip]

OK here is another way of doing things.  This works really well in a shop
with two or maybe three well represented combinations of *NIX and hardware
architecture.

At one shop I worked for, we had a NetApp filer.  On the filer we had
something that looked like this:

/export/
    /solaris/
        /sparc/
    /linux-2.2/
        /i386/
    /linux-2.4/
        /i386/

Underneath of each of those, we had an identical:

./bin/
./info/
./lib/
./man/
./sbin/
./tools/
(and some more)

All of the above would be visible on all *NIX machines under a filesystem
which, to hide the name of the company, we'll call "foo".  So you'd have
/foo/bin on all Linux and Solaris systems, but the actual exports that were
mounted were different for each architecture.

Stay with me now.  Here's how we would install, for example, widget v2.0.2:

cd ~/src
tar -xzvf ~/downloads/widget-2.0.2.tar.gz
cd widget-2.0.2.tar.gz
[often we would compile static binaries if possible]
./configure --prefix=/foo/tools/widget-2.0.2 && make && make install
ln -s /foo/tools/widget-2.0.2 /foo/tools/widget
ln -s /foo/tools/widget/bin/widget /foo/bin/widget
[move any of the manpages, infopages, etc. as necessary]

Seems like a lot of work.  But when you have 300 *NIX workstations to deal
with, this isn't so bad.  Here's where it gets cool.

Widget 2.1.0 has been announced.  It's a pretty significant upgrade, and
will probably break some of the other processes we already have in place.
We follow the same procedure to install it into its own
/foo/tools/widget-2.1.0 directory but don't link it to /foo/tools/widget
yet.  Now anyone who wants to use widget 2.1.0 can explicitly use it.  Once
QA is done and we're ready to standardize on this, we simply "ln -s
/foo/tools/widget-2.1.0 /foo/tools/widget".  The link in /foo/bin was
automatically adjusted to point to the new version of widget.  But we still
have 2.0.2 installed in /foo/tools/widget-2.0.2 for anyone who still needs
to use the older version.    /foo/bin was put into everyonese path.

This made it really easy in a development environment to manage the build
environment to assure consistent results, and roll back patches to older
software that had different dependencies than the current versions do.

I hope all that came out coherently.  I need some sleep bad.



More information about the rescue mailing list