Date: Fri, 24 Sep 2010 21:50:48 -0400 (EDT) From: vogelke+unix@pobox.com (Karl Vogel) To: freebsd-questions@freebsd.org Subject: Re: Multiple Machines Message-ID: <20100925015049.38206BF5F@kev.msw.wpafb.af.mil> In-Reply-To: <AANLkTinyKxJUjLARvo64e-BhOvwHzujvjrbsc%2BJegsyp@mail.gmail.com> (message from David Allen on Fri, 24 Sep 2010 15:04:45 -0800) References: <AANLkTinyKxJUjLARvo64e-BhOvwHzujvjrbsc%2BJegsyp@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
>> On Fri, 24 Sep 2010 15:04:45 -0800, >> David Allen <the.real.david.allen@gmail.com> said: D> I'm wondering what folks are doing when setting up multiple (more than D> 1, but less than 10) machines. Consider, for example, some ordinary D> files such as the following: D> /root/.cshrc /home/username/.bashrc The first thing I'd recommend for root and home dotfiles is placing them under revision control. I'm (slowly) moving to GIT, but for now RCS does the trick just fine: me% echo $RCSINIT -zLT me% ident .vimrc .zshrc .vimrc: $Revision: 1.40 $ $Date: 2010-08-16 15:02:52-04 $ $Source: /home/vogelke/RCS/.vimrc,v $ $Host: example.org $ $UUID: a4f4bf9d-514d-37c7-a0e1-04b41434e869 $ .zshrc: $Revision: 1.21 $ $Date: 2010-09-24 20:13:04-04 $ $Source: /home/vogelke/RCS/.zshrc,v $ $Host: example.org $ $UUID: da56ec7f-14be-39b5-8583-d31b5afb80eb $ I use the RCSINIT environment variable to prepend "-zLT" to the argument list for rcs commands so I get dates in localtime with the timezone appended. A short script called "mkrcs" creates the RCS strings shown above; I like including the FQDN of the host on which the file was created, along with a random UUID. After I get a set of dotfiles I'm happy with, I usually make separate tarballs for regular users and root. D> /etc/fstab /etc/resolv.conf /etc files go under revision control with an extra step; just after installation, back up /etc. root# cd /etc root# mkdir /etc.orig root# find . -depth -print | pax -rwd -pe /etc.orig I also get a signature of all installed files: root# cd / root# find . -type f -print | grep -v '^./proc/' | sort | xargs md5 -r This goes in /root/orig.md5 after stripping out /tmp, /var/tmp, /var/log, /var/run, etc. D> Some files are identical, some require different permissions, and some D> (like fstab) consist of customizations that need to be added. Short of D> enabling root ssh logins or writing makefiles, what would be the best D> approach to handing the above? Any system I maintain gets a directory called "/doc/sitelog/hostname". Tarballs, patches, etc. all go under that directory. If I upgrade a system or install a similar one, the tarballs and patches handle most of the gruntwork. I use a script like the one below to figure out what files I've added to (or removed from) /etc and make patches for the modified files. Patches go in their own /tmp/work$$ directory and look like this: root# cat /tmp/work81394/etc-shells *** /etc.orig/shells Sun May 7 00:00:23 2006 --- /etc/shells Wed Sep 9 21:06:04 2009 *************** *** 6,9 **** --- 6,13 ---- /bin/sh /bin/csh + /bin/ksh /bin/tcsh + /bin/bash + /usr/local/bin/ksh + /usr/local/bin/zsh -- Karl Vogel I don't speak for the USAF or my company Hopefully digesting of this tasty post would not cause too much of farting. --Yaroslav Halchenko, after reading a good debian-users message --------------------------------------------------------------------------- #!/bin/sh #<etc-patches: find modified /etc files PATH=/usr/local/bin:/usr/local/sbin:/bin:/usr/bin:/sbin:/usr/sbin export PATH textfiles () { find . -print | xargs file | grep ' text' | cut -f1 -d: } flist=/tmp/flist$$ work=/tmp/work$$ mkdir $work || exit 1 ( cd /etc && textfiles; cd /etc.orig && textfiles ) | cut -c3- | sort -u > $flist echo "results in $work" >$2 for x in `cat $flist` do cur="/etc/$x" orig="/etc.orig/$x" if test -f "$cur" -a -f "$orig"; then patch=`echo $cur | sed -e 's!^/!!' -e 's!/!-!g'` cmp -s $orig $cur || diff -c $orig $cur > $work/$patch elif test -f "$cur"; then echo ADD: $cur elif test -f "$orig"; then echo DEL: $cur fi done rm $flist exit 0
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100925015049.38206BF5F>