You are hereupdate_machine (update the config files on a machine)
update_machine (update the config files on a machine)
Note: this is super old, use puppet instead these days...
Script: update_machine update_file
We use this simple script (no error checking as usual) to update our machine configuration.
We keep the configuration files in cvs and download them to a new machine.
Usage: update_machine directory root
- directory
- subdirectory to apply
- root
- where to apply the files (filesystem root, useful when doing this at kickstart, you can specify root as /mnt/sysimage)
Files are named according to how they are applied to the host system.
- .append
- contents of file are appended to host system file
- .insert
- file is created on host filesystem.
- .link
- a symlink is created on the host filesystem, the link will point to the contents of this file (we put the location we wish to link to in the file
- .patch
- the file contains patch information that will be applied to the host system file. (we use -p1)
- .remove
- the host system file is "removed"*
- .replace
- the host system file is replaced with this one
* We never remove a file, we move file.name to .file.name.original, this way the file will not be read but will still exist if we screwed up.
Example:
[root@surrey scripts]# <strong>./update_machine auth /</strong> /mnt/2WS/scripts/local-2-math/auth /mnt/2WS/scripts/local-2-math REPLACE /etc/ldap.conf INSERT /etc/openldap/cacerts/IAS.crt REPLACE /etc/openldap/ldap.conf REPLACE /etc/nsswitch.conf REPLACE /etc/pam.d/system-auth /mnt/2WS/scripts/local-2-math
#!/bin/sh #variation of rdist, but for use with CVS and for the root filesystem... # Josko Plazonic <plazonic at math dot princeton dot edu> # Kristina Plazonic <kris at math dot princeton dot edu> # -- start # Thomas Uphill <uphill at ias dot edu> # -- add patch and insert types, do directory checking ROOTFILES=$1 #Must be absolute FILESYSTEM=$2 pushd $ROOTFILES for i in `find . -type f -not -path '*CVS*'`; do # d will be the filename+path without the action suffix d=`echo $i | cut -b2- | awk -F'.' '{OFS="."; NF=NF-1; print $0}'` # bd is the base directory of the file bd=`dirname $d` # bf is the base filename bf=`echo $d | awk -F'/' '{print $NF;}'` case `basename $i` in *.append) ACTION=APPEND ;; *.insert) ACTION=INSERT ;; *.link) ACTION=LINK ;; *.patch) ACTION=PATCH ;; *.remove) ACTION=REMOVE ;; *.replace) ACTION=REPLACE ;; *) ACTION= echo "WARNING! File $d is invalid!" ;; esac #Copies of the originals should be called .filename.original #there are some directories where you don't want to see the originals if [ "$ACTION" ]; then #move the original back into location if it exists if [ -e $FILESYSTEM/$bd/.$bf.original ]; then rm -f $FILESYSTEM/$d mv $FILESYSTEM/$bd/.$bf.original $FILESYSTEM/$d fi #make the container directory if it doesn't exist if [ ! -e $FILESYSTEM/$bd ]; then echo creating $FILESYSTEM/$bd mkdir -p $FILESYSTEM/$bd fi echo "$ACTION $d" case $ACTION in APPEND) cp -a $FILESYSTEM/$d $FILESYSTEM/$bd/.$bf.original cat $i >> $FILESYSTEM/$d ;; INSERT) if [ -e $FILESYSTEM/$d ]; then echo $INSERT over existing $d, use force fi cp -a $i $FILESYSTEM/$d ;; PATCH) cp -a $FILESYSTEM/$d $FILESYSTEM/$bd/.$bf.original patch $FILESYSTEM/$d $i ;; REMOVE) mv $FILESYSTEM/$d $FILESYSTEM/$bd/.$bf.original >/dev/null 2>&1 ;; REPLACE) mv $FILESYSTEM/$d $FILESYSTEM/$bd/.$bf.original >/dev/null 2>&1 cp -a $i $FILESYSTEM/$d ;; LINK) if [ -e $FILESYSTEM/$d ]; then echo link over existing $d backup first mv $FILESYSTEM/$d $FILESYSTEM/$bd/.$bf.original fi ln -sf `cat $i` $FILESYSTEM/$d ;; esac fi done if [ -f "postinstall" ]; then echo Executing postinstall bash -x postinstall fi popd
Trackback URL for this post:
http://ramblings.narrabilis.com/wp/trackback/163