mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
162 lines
3.8 KiB
Bash
162 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 ] || [ "$have_dir" = 0 ] || [ "$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"
|
|
|