mirror of
				git://sourceware.org/git/lvm2.git
				synced 2025-10-30 20:23:49 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			163 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # Edit an lvm.conf file to enable cluster locking.
 | |
| #
 | |
| # $1 is the directory where the locking library is installed.
 | |
| # $2 (optional) is the config file
 | |
| # $3 (optional) is the locking library name
 | |
| #
 | |
| #
 | |
| PREFIX=$1
 | |
| LVMCONF=$2
 | |
| LIB=$3
 | |
| 
 | |
| if [ -z "$PREFIX" ]
 | |
| then
 | |
|   echo "usage: $0 <prefix> [<config file>] [<library>]"
 | |
|   echo ""
 | |
|   echo "<prefix>|UNDO  location of the cluster locking shared library. (no default)"
 | |
|   echo "               UNDO will reset the locking back to local"
 | |
|   echo "<config file>  name of the LVM config file (default: /etc/lvm/lvm.conf)"
 | |
|   echo "<library>      name of the shared library (default: liblvm2clusterlock.so)"
 | |
|   echo ""
 | |
|   exit 0
 | |
| fi
 | |
| 
 | |
| [ -z "$LVMCONF" ] && LVMCONF="/etc/lvm/lvm.conf"
 | |
| [ -z "$LIB" ] && LIB="liblvm2clusterlock.so"
 | |
| 
 | |
| if [ "$PREFIX" = "UNDO" ]
 | |
| then
 | |
|   locking_type="1"
 | |
| else
 | |
|   locking_type="2"
 | |
| 
 | |
|   if [ "${PREFIX:0:1}" != "/" ]
 | |
|   then
 | |
|     echo "Prefix must be an absolute path name (starting with a /)"
 | |
|     exit 12
 | |
|   fi
 | |
| 
 | |
|   if [ ! -f "$PREFIX/$LIB" ]
 | |
|   then
 | |
|     echo "$PREFIX/$LIB does not exist, did you do a \"make install\" ?"
 | |
|     exit 11
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| if [ ! -f "$LVMCONF" ]
 | |
| then
 | |
|   echo "$LVMCONF does not exist"
 | |
|   exit 10
 | |
| fi
 | |
| 
 | |
| 
 | |
| SCRIPTFILE=`mktemp -t lvmscript.XXXXXXXXXX`
 | |
| TMPFILE=`mktemp -t lvmtmp.XXXXXXXXXX`
 | |
| 
 | |
| 
 | |
| # Flags so we know which parts of the file we can replace and which need
 | |
| # adding. These are return codes from grep, so zero means it IS present!
 | |
| have_type=1
 | |
| have_dir=1
 | |
| have_library=1
 | |
| have_global=1
 | |
| 
 | |
| grep -q '^[[:blank:]]*locking_type[[:blank:]]*=' $LVMCONF
 | |
| have_type=$?
 | |
| 
 | |
| grep -q '^[[:blank:]]*library_dir[[:blank:]]*=' $LVMCONF
 | |
| have_dir=$?
 | |
| 
 | |
| grep -q '^[[:blank:]]*locking_library[[:blank:]]*=' $LVMCONF
 | |
| have_library=$?
 | |
| 
 | |
| # Those options are in section "global {" so we must have one if any are present.
 | |
| if [ "$have_type" = "0" -o "$have_dir" = "0" -o "$have_library" = "0" ]
 | |
| then
 | |
| 
 | |
|     # See if we can find it...
 | |
|     grep -q '^[[:blank:]]*global[[:blank:]]*{' $LVMCONF
 | |
|     have_global=$?
 | |
|     
 | |
|     if [ "$have_global" = "1" ] 
 | |
| 	then
 | |
| 	echo "global keys but no 'global {' found, can't edit file"
 | |
| 	exit 12
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| # So if we don't have "global {" we need to create one and 
 | |
| # populate it
 | |
| 
 | |
| if [ "$have_global" = "1" ]
 | |
| then
 | |
|     cat $LVMCONF - <<EOF > $TMPFILE
 | |
| global {
 | |
|     # Enable locking for cluster LVM
 | |
|     locking_type = $locking_type
 | |
|     library_dir = "$PREFIX"
 | |
|     locking_library = "$LIB"
 | |
| }
 | |
| EOF
 | |
|     if [ $? != 0 ]
 | |
|     then
 | |
| 	echo "failed to create temporary config file, $LVMCONF not updated"
 | |
| 	exit 1
 | |
|     fi
 | |
| else
 | |
|     #
 | |
|     # We have a "global {" section, so add or replace the
 | |
|     # locking entries as appropriate
 | |
|     #
 | |
| 
 | |
|     if [ "$have_type" = "0" ] 
 | |
|     then
 | |
| 	SEDCMD=" s/^[[:blank:]]*locking_type[[:blank:]]*=.*/\ \ \ \ locking_type = $locking_type/g"
 | |
|     else
 | |
| 	SEDCMD=" /global[[:blank:]]*{/a\ \ \ \ locking_type = 2"
 | |
|     fi
 | |
|     
 | |
|     if [ "$have_dir" = "0" ] 
 | |
|     then
 | |
| 	SEDCMD="${SEDCMD}\ns'^[[:blank:]]*library_dir[[:blank:]]*=.*'\ \ \ \ library_dir = \"$PREFIX\"'g"
 | |
|     else
 | |
| 	SEDCMD="${SEDCMD}\n/global[[:blank:]]*{/a\ \ \ \ library_dir = \"$PREFIX\""
 | |
|     fi
 | |
| 
 | |
|     if [ "$have_library" = "0" ] 
 | |
|     then
 | |
| 	SEDCMD="${SEDCMD}\ns/^[[:blank:]]*locking_library[[:blank:]]*=.*/\ \ \ \ locking_library = \"$LIB\"/g"
 | |
|     else
 | |
| 	SEDCMD="${SEDCMD}\n/global[[:blank:]]*{/a\ \ \ \ locking_library = \"$LIB\""
 | |
|     fi
 | |
| 
 | |
|     echo -e $SEDCMD > $SCRIPTFILE
 | |
|     sed  <$LVMCONF >$TMPFILE -f $SCRIPTFILE
 | |
|     if [ $? != 0 ]
 | |
|     then
 | |
| 	echo "sed failed, $LVMCONF not updated"
 | |
| 	exit 1
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| # Now we have a suitably editted config file in a temp place,
 | |
| # backup the original and copy our new one into place.
 | |
| 
 | |
| cp $LVMCONF $LVMCONF.nocluster
 | |
| if [ $? != 0 ]
 | |
|     then
 | |
|     echo "failed to backup old config file, $LVMCONF not updated"
 | |
|     exit 2
 | |
| fi
 | |
| 
 | |
| cp $TMPFILE $LVMCONF
 | |
| if [ $? != 0 ]
 | |
|     then
 | |
|     echo "failed to copy new config file into place, check $LVMCONF is still OK"
 | |
|     exit 3
 | |
| fi
 | |
| 
 | |
| rm -f $SCRIPTFILE $TMPFILE
 | |
| 
 |