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!
Backups
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...