Home | History | Annotate | Line # | Download | only in scripts
      1  1.1  haad #!/bin/sh
      2  1.1  haad #
      3  1.1  haad # Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
      4  1.1  haad #
      5  1.1  haad # This file is part of the lvm2-cluster package.
      6  1.1  haad #
      7  1.1  haad # This copyrighted material is made available to anyone wishing to use,
      8  1.1  haad # modify, copy, or redistribute it subject to the terms and conditions
      9  1.1  haad # of the GNU General Public License v.2.
     10  1.1  haad #
     11  1.1  haad # You should have received a copy of the GNU General Public License
     12  1.1  haad # along with this program; if not, write to the Free Software Foundation,
     13  1.1  haad # Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     14  1.1  haad 
     15  1.1  haad #
     16  1.1  haad # Edit an lvm.conf file to adjust various properties
     17  1.1  haad #
     18  1.1  haad 
     19  1.1  haad function usage
     20  1.1  haad {
     21  1.1  haad     echo "usage: $0 <command>"
     22  1.1  haad     echo ""
     23  1.1  haad     echo "Commands:"
     24  1.1  haad     echo "Enable clvm:  --enable-cluster [--lockinglibdir <dir>] [--lockinglib <lib>]"
     25  1.1  haad     echo "Disable clvm: --disable-cluster"
     26  1.1  haad     echo "Set locking library: --lockinglibdir <dir> [--lockinglib <lib>]"
     27  1.1  haad     echo ""
     28  1.1  haad     echo "Global options:"
     29  1.1  haad     echo "Config file location: --file <configfile>"
     30  1.1  haad     echo ""
     31  1.1  haad }
     32  1.1  haad 
     33  1.1  haad 
     34  1.1  haad function parse_args
     35  1.1  haad {
     36  1.1  haad     while [ -n "$1" ]; do
     37  1.1  haad         case $1 in
     38  1.1  haad             --enable-cluster)
     39  1.1  haad                 LOCKING_TYPE=2
     40  1.1  haad                 shift
     41  1.1  haad                 ;;
     42  1.1  haad             --disable-cluster)
     43  1.1  haad                 LOCKING_TYPE=1
     44  1.1  haad                 shift
     45  1.1  haad                 ;;
     46  1.1  haad             --lockinglibdir)
     47  1.1  haad                 if [ -n "$2" ]; then
     48  1.1  haad                     LOCKINGLIBDIR=$2
     49  1.1  haad                     shift 2
     50  1.1  haad                 else
     51  1.1  haad                     usage
     52  1.1  haad                     exit 1
     53  1.1  haad                 fi
     54  1.1  haad                 ;;
     55  1.1  haad             --lockinglib)
     56  1.1  haad                 if [ -n "$2" ]; then
     57  1.1  haad                     LOCKINGLIB=$2
     58  1.1  haad                     shift 2
     59  1.1  haad                 else
     60  1.1  haad                     usage
     61  1.1  haad                     exit 1
     62  1.1  haad                 fi
     63  1.1  haad                 ;;
     64  1.1  haad             --file)
     65  1.1  haad                 if [ -n "$2" ]; then
     66  1.1  haad                     CONFIGFILE=$2
     67  1.1  haad                     shift 2
     68  1.1  haad                 else
     69  1.1  haad                     usage
     70  1.1  haad                     exit 1
     71  1.1  haad                 fi
     72  1.1  haad                 ;;
     73  1.1  haad             *)
     74  1.1  haad                 usage
     75  1.1  haad                 exit 1
     76  1.1  haad         esac
     77  1.1  haad     done
     78  1.1  haad }
     79  1.1  haad 
     80  1.1  haad function validate_args
     81  1.1  haad {
     82  1.1  haad     [ -z "$CONFIGFILE" ] && CONFIGFILE="/etc/lvm/lvm.conf"
     83  1.1  haad 
     84  1.1  haad     if [ ! -f "$CONFIGFILE" ]
     85  1.1  haad             then
     86  1.1  haad             echo "$CONFIGFILE does not exist"
     87  1.1  haad             exit 10
     88  1.1  haad     fi
     89  1.1  haad 
     90  1.1  haad     if [ -z "$LOCKING_TYPE" ] && [ -z "$LOCKINGLIBDIR" ]; then
     91  1.1  haad         usage
     92  1.1  haad         exit 1
     93  1.1  haad     fi
     94  1.1  haad 
     95  1.1  haad     if [ -n "$LOCKINGLIBDIR" ]; then
     96  1.1  haad 
     97  1.1  haad         [ -z "$LOCKINGLIB" ] && LOCKINGLIB="liblvm2clusterlock.so"
     98  1.1  haad             
     99  1.1  haad         if [ "${LOCKINGLIBDIR:0:1}" != "/" ]
    100  1.1  haad             then
    101  1.1  haad             echo "Prefix must be an absolute path name (starting with a /)"
    102  1.1  haad             exit 12
    103  1.1  haad         fi
    104  1.1  haad     
    105  1.1  haad         if [ ! -f "$LOCKINGLIBDIR/$LOCKINGLIB" ]
    106  1.1  haad             then
    107  1.1  haad             echo "$LOCKINGLIBDIR/$LOCKINGLIB does not exist, did you do a \"make install\" ?"
    108  1.1  haad             exit 11
    109  1.1  haad         fi
    110  1.1  haad         
    111  1.1  haad     fi
    112  1.1  haad 
    113  1.1  haad     if [ "$LOCKING_TYPE" = "1" ] && [ -n "$LOCKINGLIBDIR" -o -n "$LOCKINGLIB" ]; then
    114  1.1  haad 	echo "Superfluous locking lib parameter, ignoring"
    115  1.1  haad     fi
    116  1.1  haad }
    117  1.1  haad 
    118  1.1  haad umask 0077
    119  1.1  haad 
    120  1.1  haad parse_args "$@"
    121  1.1  haad 
    122  1.1  haad validate_args
    123  1.1  haad 
    124  1.1  haad 
    125  1.1  haad SCRIPTFILE=/etc/lvm/.lvmconf-script.tmp
    126  1.1  haad TMPFILE=/etc/lvm/.lvmconf-tmp.tmp
    127  1.1  haad 
    128  1.1  haad 
    129  1.1  haad # Flags so we know which parts of the file we can replace and which need
    130  1.1  haad # adding. These are return codes from grep, so zero means it IS present!
    131  1.1  haad have_type=1
    132  1.1  haad have_dir=1
    133  1.1  haad have_library=1
    134  1.1  haad have_global=1
    135  1.1  haad 
    136  1.1  haad grep -q '^[[:blank:]]*locking_type[[:blank:]]*=' $CONFIGFILE
    137  1.1  haad have_type=$?
    138  1.1  haad 
    139  1.1  haad grep -q '^[[:blank:]]*library_dir[[:blank:]]*=' $CONFIGFILE
    140  1.1  haad have_dir=$?
    141  1.1  haad 
    142  1.1  haad grep -q '^[[:blank:]]*locking_library[[:blank:]]*=' $CONFIGFILE
    143  1.1  haad have_library=$?
    144  1.1  haad 
    145  1.1  haad # Those options are in section "global {" so we must have one if any are present.
    146  1.1  haad if [ "$have_type" = "0" -o "$have_dir" = "0" -o "$have_library" = "0" ]
    147  1.1  haad then
    148  1.1  haad 
    149  1.1  haad     # See if we can find it...
    150  1.1  haad     grep -q '^[[:blank:]]*global[[:blank:]]*{' $CONFIGFILE
    151  1.1  haad     have_global=$?
    152  1.1  haad     
    153  1.1  haad     if [ "$have_global" = "1" ] 
    154  1.1  haad 	then
    155  1.1  haad 	echo "global keys but no 'global {' found, can't edit file"
    156  1.1  haad 	exit 13
    157  1.1  haad     fi
    158  1.1  haad fi
    159  1.1  haad 
    160  1.1  haad if [ "$LOCKING_TYPE" = "2" ] && [ -z "$LOCKINGLIBDIR" ] && [ "$have_dir" = "1" ]; then
    161  1.1  haad 	echo "no library_dir specified in $CONFIGFILE"
    162  1.1  haad 	exit 16
    163  1.1  haad fi
    164  1.1  haad 
    165  1.1  haad # So if we don't have "global {" we need to create one and 
    166  1.1  haad # populate it
    167  1.1  haad 
    168  1.1  haad if [ "$have_global" = "1" ]
    169  1.1  haad then
    170  1.1  haad     if [ -z "$LOCKING_TYPE" ]; then
    171  1.1  haad 	LOCKING_TYPE=1
    172  1.1  haad     fi
    173  1.1  haad     if [ "$LOCKING_TYPE" = "2" ]; then
    174  1.1  haad         cat $CONFIGFILE - <<EOF > $TMPFILE
    175  1.1  haad global {
    176  1.1  haad     # Enable locking for cluster LVM
    177  1.1  haad     locking_type = $LOCKING_TYPE
    178  1.1  haad     library_dir = "$LOCKINGLIBDIR"
    179  1.1  haad     locking_library = "$LOCKINGLIB"
    180  1.1  haad }
    181  1.1  haad EOF
    182  1.1  haad     fi # if we aren't setting cluster locking, we don't need to create a global section
    183  1.1  haad 
    184  1.1  haad     if [ $? != 0 ]
    185  1.1  haad     then
    186  1.1  haad 	echo "failed to create temporary config file, $CONFIGFILE not updated"
    187  1.1  haad 	exit 14
    188  1.1  haad     fi
    189  1.1  haad else
    190  1.1  haad     #
    191  1.1  haad     # We have a "global {" section, so add or replace the
    192  1.1  haad     # locking entries as appropriate
    193  1.1  haad     #
    194  1.1  haad 
    195  1.1  haad     if [ -n "$LOCKING_TYPE" ]; then
    196  1.1  haad 	if [ "$have_type" = "0" ] 
    197  1.1  haad 	then
    198  1.1  haad 	    SEDCMD=" s/^[[:blank:]]*locking_type[[:blank:]]*=.*/\ \ \ \ locking_type = $LOCKING_TYPE/g"
    199  1.1  haad 	else
    200  1.1  haad 	    SEDCMD=" /global[[:blank:]]*{/a\ \ \ \ locking_type = $LOCKING_TYPE"
    201  1.1  haad 	fi
    202  1.1  haad     fi
    203  1.1  haad     
    204  1.1  haad     if [ -n "$LOCKINGLIBDIR" ]; then
    205  1.1  haad         if [ "$have_dir" = "0" ] 
    206  1.1  haad             then
    207  1.1  haad             SEDCMD="${SEDCMD}\ns'^[[:blank:]]*library_dir[[:blank:]]*=.*'\ \ \ \ library_dir = \"$LOCKINGLIBDIR\"'g"
    208  1.1  haad         else
    209  1.1  haad             SEDCMD="${SEDCMD}\n/global[[:blank:]]*{/a\ \ \ \ library_dir = \"$LOCKINGLIBDIR\""
    210  1.1  haad         fi
    211  1.1  haad 
    212  1.1  haad         if [ "$have_library" = "0" ] 
    213  1.1  haad             then
    214  1.1  haad             SEDCMD="${SEDCMD}\ns/^[[:blank:]]*locking_library[[:blank:]]*=.*/\ \ \ \ locking_library = \"$LOCKINGLIB\"/g"
    215  1.1  haad         else
    216  1.1  haad             SEDCMD="${SEDCMD}\n/global[[:blank:]]*{/a\ \ \ \ locking_library = \"$LOCKINGLIB\""
    217  1.1  haad         fi
    218  1.1  haad     fi
    219  1.1  haad 
    220  1.1  haad     if [ "$LOCKING_TYPE" = "1" ]; then
    221  1.1  haad         # if we're not using cluster locking, remove the library dir and locking library name
    222  1.1  haad         if [ "$have_dir" = "0" ] 
    223  1.1  haad             then
    224  1.1  haad             SEDCMD="${SEDCMD}\n/^[[:blank:]]*library_dir[[:blank:]]*=.*/d"
    225  1.1  haad         fi
    226  1.1  haad 
    227  1.1  haad         if [ "$have_library" = "0" ] 
    228  1.1  haad             then
    229  1.1  haad             SEDCMD="${SEDCMD}\n/^[[:blank:]]*locking_library[[:blank:]]*=.*/d"
    230  1.1  haad         fi
    231  1.1  haad     fi
    232  1.1  haad 
    233  1.1  haad     echo -e $SEDCMD > $SCRIPTFILE
    234  1.1  haad     sed  <$CONFIGFILE >$TMPFILE -f $SCRIPTFILE
    235  1.1  haad     if [ $? != 0 ]
    236  1.1  haad     then
    237  1.1  haad 	echo "sed failed, $CONFIGFILE not updated"
    238  1.1  haad 	exit 15
    239  1.1  haad     fi
    240  1.1  haad fi
    241  1.1  haad 
    242  1.1  haad # Now we have a suitably editted config file in a temp place,
    243  1.1  haad # backup the original and copy our new one into place.
    244  1.1  haad 
    245  1.1  haad cp $CONFIGFILE $CONFIGFILE.lvmconfold
    246  1.1  haad if [ $? != 0 ]
    247  1.1  haad     then
    248  1.1  haad     echo "failed to backup old config file, $CONFIGFILE not updated"
    249  1.1  haad     exit 2
    250  1.1  haad fi
    251  1.1  haad 
    252  1.1  haad cp $TMPFILE $CONFIGFILE
    253  1.1  haad if [ $? != 0 ]
    254  1.1  haad     then
    255  1.1  haad     echo "failed to copy new config file into place, check $CONFIGFILE is still OK"
    256  1.1  haad     exit 3
    257  1.1  haad fi
    258  1.1  haad 
    259  1.1  haad rm -f $SCRIPTFILE $TMPFILE
    260