I use this neat little program called InstallWatch to keep track of everything a package installs. Here's a link to the latest tarball http://asic-linux.com.mx/~izto/check...h-0.6.3.tar.gz
. It is also used by a program called CheckInstall (IIRC) that will allow you to create rpm, deb, and tgz's of what you build.
I run a CLFS box most of the time (no package manager) and use InstallWatch all by itself to create log files in /var/log/CBLFS. I then have a couple of homegrown scripts. One cleans up the InstallWatch generated file and the other uses this information to remove all the files if I want. This approach doesn't take care of dependencies. I use an OOo spreadsheet for that!
Upgrading depends on the scope of the upgrade, IMO. "Big" upgrades like GNOME-2.14 to GNOME-2.16 requires a different strategy than upgrading appres-1.0.0 to appres-1.0.1. I install GNOME-2.14 in /opt/gnome-2.14 and make /opt/gnome a symlink to that directory. GNOME-2.16 then goes into /opt/gnome-2.16 and the symlink is changed. With my high-tech spreadsheet-based dependency tracker, I can figure out what apps depend on GNOME components and then rebuild them against the new GNOME stuff. Usually, I just wait until it pukes and then think, "Oh, yeah, I've got a new version of GNOME."