Linux Home Office Tips

Here are some things i've learned while using Linux for my software consulting business.  Perhaps others will find this useful.

Updated: 2011-10-23, Ted Merrill.

Linux Distribution

I used Debian "unstable" for years and found it to be mostly stable. Lately i've been using Ubuntu; perhaps i'll return to Debian sometime.
My biggest problems have been with the desktop environments, which keep changing in undesireable ways. After using more primivitive desktop environments, i switched to Gnome some years ago but got fed up with poorly thought out and intrusive changes they kept introducing. I then used KDE for some years; the 3.x series i really liked, and i could customize it to put a panel on the right edge of the screen, freeing up valuable vertical screen real estate. The KDE 4.x series was a massive dissapointment (fortunately i never actually installed it... just tried it from CD and from spare partition without committing)... more intrusive elements, poor reliability, and i really hated their new panel. I stuck with my KDE 3.5 desktop for a few years although this resulted in not being able to get new updates of software (from Debian) and eventually not being able to add new software at all. Although KDE 4.x mellowed some with new releases, i eventually gave up hope on it and switched to Ubuntu 11.04 , customized to use "Ubuntu classic with no effects" flavor (i hate their new panel). At this writing, i'm puzzling over upgrading to Ubuntu 11.10 which is said to do away with the "classic" flavor.
Be prepared to completely re-install your Linux distribution every few years...
It is not really feasible to switch back and forth between distributions (or releases thereof) and have them still work properly with your personal data. This is because every major software program makes extensive use of configuration files, caches, and data formats that are at best upward convertible. At the point where you let a new distribution / release loose on your personal data, it is difficult to go back (except perhaps by restoring from backup, losing anything new).

Disk Partitioning

Be sure to partition your hard disk in such a way that your personal files are on separate partition(s) from Linux distribution files. Also leave multiple partitions (at least 2, but 3 is better) for Linux distributions, using one at a time; this will greatly simplify switching between or reinstalling distributions, while being able to fall back to the previous one in case something goes wrong.

Computer Replacability

In case of the death of a computer (apart from disk drive failure), ideally one can simply move the disk drives and some peripherals into another computer at hand. This is simplified if (1) the available computers are as alike as possible, and (2) the software on the computers is customized to the current computer as little as possible.
Fortunately a single linux 32-bit kernel image as provided by e.g. ubuntu distributions will work on any CPU using the i86 instruction set. Problems are most likely to occur due to graphics hardware; this can be mitigated by ensuring that all the computers use graphics hardware from the same manufacturer (in my case, NVidia).

Central Computer

I've had pretty good luck with keeping all my personal (as versus system software) files on a central computer, sharing with other computers using NFS. The other computers need only a relatively small disk containing mostly files from the linux distribution. [In theory, you could do everything over NFS but the performance would suffer]. By keeping all my personal data hosted on a single computer, the data is transparently accessible to me regardless of which computer i'm on, and backups are greatly simplified.
All of your computers must be kept up to date with the same distribution release, otherwise your per-application configuration files, and data stores are likely to suffer major version compatibility problems!


The importance of making backup copies of important data, particularly client data, cannot be overestimated... it can also be a big pain and time killer.  I use three levels of backup.

My first level of backup is to nightly make a copy of my main hard disk to my secondary hard disk using a script disksync that I wrote (using that wonderfull tool, rsync).  I syncronize at the file level; copying entire partitions has a number of issues, especially that one can't reliably copy from a partition in use. This script relies upon the fact that i created matching ext3 partitions on my backup disks and have carefully labelled each ext3 partition with a unique name; each name consists of the disk name (tm01, tm02, tm03 etc.) followed by a hyphen and a logical use name (root, home, etc.). The first disk (tm01 in my case) is assumed to have the latest, and the goal is to syncronize each relevent partition on that disk to another disk (e.g. tm02) ; thus tm02-home is syncronized from tm01-home etc. This is complicated by the fact that some of the partitions on the first disk are already mounted, meaning that i need to copy from where they are mounted already and not remount them. Two other complications: (1) although /dev is an in-memory file system under linux, a runt /dev must be present in the root partition in order for booting to work. (2) You'll need to copy the boot blocks of the disk in order for the secondary disk to be bootable.
The second hard disk i use soley for backups, and is partitioned the same way as the first hard disk. The idea is that, should my primary disk suddenly fail, i can simply swap disks on the IDE cable (the disks i left at their factory default, to be cable selected) and boot up again as if nothing had happened... except perhaps i've lost a days work, received email, etc.  Using rsync, the backup goes remarkably fast most of the time.  After bad luck with Maxtor in 2004/2005, i switched to Seagate and now to Western Digital; meanwhile Maxtor has been bought by Seagate.   The disksync scheme doesn't require that the two disks be identically partitioned (although the partitions should be close in size).
The problem with the backup disk scheme is that i might accidently delete something from my primary drive, not notice it, and then propogate the problem to the second drive when i do my nightly sync (i also sometimes sync more often if i've done something especially important)... and of course, both disks might die.  So my second level of backup is to periodically sync to a third hard disk that i connect via USB. (Backing up to CD long ago became impractical due to their small size and loss of data on CDs after a few years).
Finally, i try to make sure that the client gets updates of their data on a regular basis, so their data becomes their problem...