Many texts on Linux/Unix system administration advise you to have a diary and write down everything you do. I have finally realized the wisdom of this advice.

I use a simple shell script /usr/local/sbin/new-changelog-entry. This script adds the current date and time to a file /root/Changelog and opens it in a text editor. I usually have two terminals (or two tabs in GNOME Terminal): one has a root shell where I do things, the other has vi with /root/Changelog. I write down everything I change, and usually copy the exact commands I executed. This lets me redo the same thing very easily after OS upgrades, or on a different server.

Here are a couple of sample entries from my laptop:

2005-09-23 11:44 +0300: mg
  # Overcoming the 2 GB limit with Samba:
  vi /etc/auto.misc
    added 'lfs' to the options of all smbfs filesystems
  /etc/init.d/autofs reload

2006-02-17 10:48 +0200: mg
  # Installing Firefox 1.5 (from Dapper) on Ubuntu Breezy
  # (I do not want to upgrade half of my system, so I'll compile the Dapper
  # debs from source)
  sudo -u mg -s
    cd /home/mg/src/apt-sources/
    apt-get source firefox
    cd firefox-1.5.dfsg+
    dpkg-buildpackage -uc -us -b -rfakeroot
    # ...45 minutes later...
  cd /home/mg/src/apt-sources/
  dpkg -i firefox_1.5.dfsg+ \
          firefox-dev_1.5.dfsg+ \
          firefox-dom-inspector_1.5.dfsg+ \
          firefox-gnome-support_1.5.dfsg+ \
          libnspr4_1.firefox1.5.dfsg+ \
          libnspr-dev_1.firefox1.5.dfsg+ \
          libnss3_1.firefox1.5.dfsg+ \

Update: here's a similar idea that goes further (not just changelogs, but also description pages for each machine): My electronic sysadmin notebook for an entire fleet by Rachel Kroll.

Update 2: I packaged new-changelog-entry with a few other tools into a Debian package pov-admin-tools.