xref: /dflybsd-src/contrib/lvm2/dist/scripts/lvmconf.sh (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino#!/bin/sh
286d7f5d3SJohn Marino#
386d7f5d3SJohn Marino# Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
486d7f5d3SJohn Marino#
586d7f5d3SJohn Marino# This file is part of the lvm2-cluster package.
686d7f5d3SJohn Marino#
786d7f5d3SJohn Marino# This copyrighted material is made available to anyone wishing to use,
886d7f5d3SJohn Marino# modify, copy, or redistribute it subject to the terms and conditions
986d7f5d3SJohn Marino# of the GNU General Public License v.2.
1086d7f5d3SJohn Marino#
1186d7f5d3SJohn Marino# You should have received a copy of the GNU General Public License
1286d7f5d3SJohn Marino# along with this program; if not, write to the Free Software Foundation,
1386d7f5d3SJohn Marino# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
1486d7f5d3SJohn Marino
1586d7f5d3SJohn Marino#
1686d7f5d3SJohn Marino# Edit an lvm.conf file to adjust various properties
1786d7f5d3SJohn Marino#
1886d7f5d3SJohn Marino
1986d7f5d3SJohn Marinofunction usage
2086d7f5d3SJohn Marino{
2186d7f5d3SJohn Marino    echo "usage: $0 <command>"
2286d7f5d3SJohn Marino    echo ""
2386d7f5d3SJohn Marino    echo "Commands:"
2486d7f5d3SJohn Marino    echo "Enable clvm:  --enable-cluster [--lockinglibdir <dir>] [--lockinglib <lib>]"
2586d7f5d3SJohn Marino    echo "Disable clvm: --disable-cluster"
2686d7f5d3SJohn Marino    echo "Set locking library: --lockinglibdir <dir> [--lockinglib <lib>]"
2786d7f5d3SJohn Marino    echo ""
2886d7f5d3SJohn Marino    echo "Global options:"
2986d7f5d3SJohn Marino    echo "Config file location: --file <configfile>"
3086d7f5d3SJohn Marino    echo ""
3186d7f5d3SJohn Marino}
3286d7f5d3SJohn Marino
3386d7f5d3SJohn Marino
3486d7f5d3SJohn Marinofunction parse_args
3586d7f5d3SJohn Marino{
3686d7f5d3SJohn Marino    while [ -n "$1" ]; do
3786d7f5d3SJohn Marino        case $1 in
3886d7f5d3SJohn Marino            --enable-cluster)
3986d7f5d3SJohn Marino                LOCKING_TYPE=2
4086d7f5d3SJohn Marino                shift
4186d7f5d3SJohn Marino                ;;
4286d7f5d3SJohn Marino            --disable-cluster)
4386d7f5d3SJohn Marino                LOCKING_TYPE=1
4486d7f5d3SJohn Marino                shift
4586d7f5d3SJohn Marino                ;;
4686d7f5d3SJohn Marino            --lockinglibdir)
4786d7f5d3SJohn Marino                if [ -n "$2" ]; then
4886d7f5d3SJohn Marino                    LOCKINGLIBDIR=$2
4986d7f5d3SJohn Marino                    shift 2
5086d7f5d3SJohn Marino                else
5186d7f5d3SJohn Marino                    usage
5286d7f5d3SJohn Marino                    exit 1
5386d7f5d3SJohn Marino                fi
5486d7f5d3SJohn Marino                ;;
5586d7f5d3SJohn Marino            --lockinglib)
5686d7f5d3SJohn Marino                if [ -n "$2" ]; then
5786d7f5d3SJohn Marino                    LOCKINGLIB=$2
5886d7f5d3SJohn Marino                    shift 2
5986d7f5d3SJohn Marino                else
6086d7f5d3SJohn Marino                    usage
6186d7f5d3SJohn Marino                    exit 1
6286d7f5d3SJohn Marino                fi
6386d7f5d3SJohn Marino                ;;
6486d7f5d3SJohn Marino            --file)
6586d7f5d3SJohn Marino                if [ -n "$2" ]; then
6686d7f5d3SJohn Marino                    CONFIGFILE=$2
6786d7f5d3SJohn Marino                    shift 2
6886d7f5d3SJohn Marino                else
6986d7f5d3SJohn Marino                    usage
7086d7f5d3SJohn Marino                    exit 1
7186d7f5d3SJohn Marino                fi
7286d7f5d3SJohn Marino                ;;
7386d7f5d3SJohn Marino            *)
7486d7f5d3SJohn Marino                usage
7586d7f5d3SJohn Marino                exit 1
7686d7f5d3SJohn Marino        esac
7786d7f5d3SJohn Marino    done
7886d7f5d3SJohn Marino}
7986d7f5d3SJohn Marino
8086d7f5d3SJohn Marinofunction validate_args
8186d7f5d3SJohn Marino{
8286d7f5d3SJohn Marino    [ -z "$CONFIGFILE" ] && CONFIGFILE="/etc/lvm/lvm.conf"
8386d7f5d3SJohn Marino
8486d7f5d3SJohn Marino    if [ ! -f "$CONFIGFILE" ]
8586d7f5d3SJohn Marino            then
8686d7f5d3SJohn Marino            echo "$CONFIGFILE does not exist"
8786d7f5d3SJohn Marino            exit 10
8886d7f5d3SJohn Marino    fi
8986d7f5d3SJohn Marino
9086d7f5d3SJohn Marino    if [ -z "$LOCKING_TYPE" ] && [ -z "$LOCKINGLIBDIR" ]; then
9186d7f5d3SJohn Marino        usage
9286d7f5d3SJohn Marino        exit 1
9386d7f5d3SJohn Marino    fi
9486d7f5d3SJohn Marino
9586d7f5d3SJohn Marino    if [ -n "$LOCKINGLIBDIR" ]; then
9686d7f5d3SJohn Marino
9786d7f5d3SJohn Marino        [ -z "$LOCKINGLIB" ] && LOCKINGLIB="liblvm2clusterlock.so"
9886d7f5d3SJohn Marino
9986d7f5d3SJohn Marino        if [ "${LOCKINGLIBDIR:0:1}" != "/" ]
10086d7f5d3SJohn Marino            then
10186d7f5d3SJohn Marino            echo "Prefix must be an absolute path name (starting with a /)"
10286d7f5d3SJohn Marino            exit 12
10386d7f5d3SJohn Marino        fi
10486d7f5d3SJohn Marino
10586d7f5d3SJohn Marino        if [ ! -f "$LOCKINGLIBDIR/$LOCKINGLIB" ]
10686d7f5d3SJohn Marino            then
10786d7f5d3SJohn Marino            echo "$LOCKINGLIBDIR/$LOCKINGLIB does not exist, did you do a \"make install\" ?"
10886d7f5d3SJohn Marino            exit 11
10986d7f5d3SJohn Marino        fi
11086d7f5d3SJohn Marino
11186d7f5d3SJohn Marino    fi
11286d7f5d3SJohn Marino
11386d7f5d3SJohn Marino    if [ "$LOCKING_TYPE" = "1" ] && [ -n "$LOCKINGLIBDIR" -o -n "$LOCKINGLIB" ]; then
11486d7f5d3SJohn Marino	echo "Superfluous locking lib parameter, ignoring"
11586d7f5d3SJohn Marino    fi
11686d7f5d3SJohn Marino}
11786d7f5d3SJohn Marino
11886d7f5d3SJohn Marinoumask 0077
11986d7f5d3SJohn Marino
12086d7f5d3SJohn Marinoparse_args "$@"
12186d7f5d3SJohn Marino
12286d7f5d3SJohn Marinovalidate_args
12386d7f5d3SJohn Marino
12486d7f5d3SJohn Marino
12586d7f5d3SJohn MarinoSCRIPTFILE=/etc/lvm/.lvmconf-script.tmp
12686d7f5d3SJohn MarinoTMPFILE=/etc/lvm/.lvmconf-tmp.tmp
12786d7f5d3SJohn Marino
12886d7f5d3SJohn Marino
12986d7f5d3SJohn Marino# Flags so we know which parts of the file we can replace and which need
13086d7f5d3SJohn Marino# adding. These are return codes from grep, so zero means it IS present!
13186d7f5d3SJohn Marinohave_type=1
13286d7f5d3SJohn Marinohave_dir=1
13386d7f5d3SJohn Marinohave_library=1
13486d7f5d3SJohn Marinohave_global=1
13586d7f5d3SJohn Marino
13686d7f5d3SJohn Marinogrep -q '^[[:blank:]]*locking_type[[:blank:]]*=' $CONFIGFILE
13786d7f5d3SJohn Marinohave_type=$?
13886d7f5d3SJohn Marino
13986d7f5d3SJohn Marinogrep -q '^[[:blank:]]*library_dir[[:blank:]]*=' $CONFIGFILE
14086d7f5d3SJohn Marinohave_dir=$?
14186d7f5d3SJohn Marino
14286d7f5d3SJohn Marinogrep -q '^[[:blank:]]*locking_library[[:blank:]]*=' $CONFIGFILE
14386d7f5d3SJohn Marinohave_library=$?
14486d7f5d3SJohn Marino
14586d7f5d3SJohn Marino# Those options are in section "global {" so we must have one if any are present.
14686d7f5d3SJohn Marinoif [ "$have_type" = "0" -o "$have_dir" = "0" -o "$have_library" = "0" ]
14786d7f5d3SJohn Marinothen
14886d7f5d3SJohn Marino
14986d7f5d3SJohn Marino    # See if we can find it...
15086d7f5d3SJohn Marino    grep -q '^[[:blank:]]*global[[:blank:]]*{' $CONFIGFILE
15186d7f5d3SJohn Marino    have_global=$?
15286d7f5d3SJohn Marino
15386d7f5d3SJohn Marino    if [ "$have_global" = "1" ]
15486d7f5d3SJohn Marino	then
15586d7f5d3SJohn Marino	echo "global keys but no 'global {' found, can't edit file"
15686d7f5d3SJohn Marino	exit 13
15786d7f5d3SJohn Marino    fi
15886d7f5d3SJohn Marinofi
15986d7f5d3SJohn Marino
16086d7f5d3SJohn Marinoif [ "$LOCKING_TYPE" = "2" ] && [ -z "$LOCKINGLIBDIR" ] && [ "$have_dir" = "1" ]; then
16186d7f5d3SJohn Marino	echo "no library_dir specified in $CONFIGFILE"
16286d7f5d3SJohn Marino	exit 16
16386d7f5d3SJohn Marinofi
16486d7f5d3SJohn Marino
16586d7f5d3SJohn Marino# So if we don't have "global {" we need to create one and
16686d7f5d3SJohn Marino# populate it
16786d7f5d3SJohn Marino
16886d7f5d3SJohn Marinoif [ "$have_global" = "1" ]
16986d7f5d3SJohn Marinothen
17086d7f5d3SJohn Marino    if [ -z "$LOCKING_TYPE" ]; then
17186d7f5d3SJohn Marino	LOCKING_TYPE=1
17286d7f5d3SJohn Marino    fi
17386d7f5d3SJohn Marino    if [ "$LOCKING_TYPE" = "2" ]; then
17486d7f5d3SJohn Marino        cat $CONFIGFILE - <<EOF > $TMPFILE
17586d7f5d3SJohn Marinoglobal {
17686d7f5d3SJohn Marino    # Enable locking for cluster LVM
17786d7f5d3SJohn Marino    locking_type = $LOCKING_TYPE
17886d7f5d3SJohn Marino    library_dir = "$LOCKINGLIBDIR"
17986d7f5d3SJohn Marino    locking_library = "$LOCKINGLIB"
18086d7f5d3SJohn Marino}
18186d7f5d3SJohn MarinoEOF
18286d7f5d3SJohn Marino    fi # if we aren't setting cluster locking, we don't need to create a global section
18386d7f5d3SJohn Marino
18486d7f5d3SJohn Marino    if [ $? != 0 ]
18586d7f5d3SJohn Marino    then
18686d7f5d3SJohn Marino	echo "failed to create temporary config file, $CONFIGFILE not updated"
18786d7f5d3SJohn Marino	exit 14
18886d7f5d3SJohn Marino    fi
18986d7f5d3SJohn Marinoelse
19086d7f5d3SJohn Marino    #
19186d7f5d3SJohn Marino    # We have a "global {" section, so add or replace the
19286d7f5d3SJohn Marino    # locking entries as appropriate
19386d7f5d3SJohn Marino    #
19486d7f5d3SJohn Marino
19586d7f5d3SJohn Marino    if [ -n "$LOCKING_TYPE" ]; then
19686d7f5d3SJohn Marino	if [ "$have_type" = "0" ]
19786d7f5d3SJohn Marino	then
19886d7f5d3SJohn Marino	    SEDCMD=" s/^[[:blank:]]*locking_type[[:blank:]]*=.*/\ \ \ \ locking_type = $LOCKING_TYPE/g"
19986d7f5d3SJohn Marino	else
20086d7f5d3SJohn Marino	    SEDCMD=" /global[[:blank:]]*{/a\ \ \ \ locking_type = $LOCKING_TYPE"
20186d7f5d3SJohn Marino	fi
20286d7f5d3SJohn Marino    fi
20386d7f5d3SJohn Marino
20486d7f5d3SJohn Marino    if [ -n "$LOCKINGLIBDIR" ]; then
20586d7f5d3SJohn Marino        if [ "$have_dir" = "0" ]
20686d7f5d3SJohn Marino            then
20786d7f5d3SJohn Marino            SEDCMD="${SEDCMD}\ns'^[[:blank:]]*library_dir[[:blank:]]*=.*'\ \ \ \ library_dir = \"$LOCKINGLIBDIR\"'g"
20886d7f5d3SJohn Marino        else
20986d7f5d3SJohn Marino            SEDCMD="${SEDCMD}\n/global[[:blank:]]*{/a\ \ \ \ library_dir = \"$LOCKINGLIBDIR\""
21086d7f5d3SJohn Marino        fi
21186d7f5d3SJohn Marino
21286d7f5d3SJohn Marino        if [ "$have_library" = "0" ]
21386d7f5d3SJohn Marino            then
21486d7f5d3SJohn Marino            SEDCMD="${SEDCMD}\ns/^[[:blank:]]*locking_library[[:blank:]]*=.*/\ \ \ \ locking_library = \"$LOCKINGLIB\"/g"
21586d7f5d3SJohn Marino        else
21686d7f5d3SJohn Marino            SEDCMD="${SEDCMD}\n/global[[:blank:]]*{/a\ \ \ \ locking_library = \"$LOCKINGLIB\""
21786d7f5d3SJohn Marino        fi
21886d7f5d3SJohn Marino    fi
21986d7f5d3SJohn Marino
22086d7f5d3SJohn Marino    if [ "$LOCKING_TYPE" = "1" ]; then
22186d7f5d3SJohn Marino        # if we're not using cluster locking, remove the library dir and locking library name
22286d7f5d3SJohn Marino        if [ "$have_dir" = "0" ]
22386d7f5d3SJohn Marino            then
22486d7f5d3SJohn Marino            SEDCMD="${SEDCMD}\n/^[[:blank:]]*library_dir[[:blank:]]*=.*/d"
22586d7f5d3SJohn Marino        fi
22686d7f5d3SJohn Marino
22786d7f5d3SJohn Marino        if [ "$have_library" = "0" ]
22886d7f5d3SJohn Marino            then
22986d7f5d3SJohn Marino            SEDCMD="${SEDCMD}\n/^[[:blank:]]*locking_library[[:blank:]]*=.*/d"
23086d7f5d3SJohn Marino        fi
23186d7f5d3SJohn Marino    fi
23286d7f5d3SJohn Marino
23386d7f5d3SJohn Marino    echo -e $SEDCMD > $SCRIPTFILE
23486d7f5d3SJohn Marino    sed  <$CONFIGFILE >$TMPFILE -f $SCRIPTFILE
23586d7f5d3SJohn Marino    if [ $? != 0 ]
23686d7f5d3SJohn Marino    then
23786d7f5d3SJohn Marino	echo "sed failed, $CONFIGFILE not updated"
23886d7f5d3SJohn Marino	exit 15
23986d7f5d3SJohn Marino    fi
24086d7f5d3SJohn Marinofi
24186d7f5d3SJohn Marino
24286d7f5d3SJohn Marino# Now we have a suitably editted config file in a temp place,
24386d7f5d3SJohn Marino# backup the original and copy our new one into place.
24486d7f5d3SJohn Marino
24586d7f5d3SJohn Marinocp $CONFIGFILE $CONFIGFILE.lvmconfold
24686d7f5d3SJohn Marinoif [ $? != 0 ]
24786d7f5d3SJohn Marino    then
24886d7f5d3SJohn Marino    echo "failed to backup old config file, $CONFIGFILE not updated"
24986d7f5d3SJohn Marino    exit 2
25086d7f5d3SJohn Marinofi
25186d7f5d3SJohn Marino
25286d7f5d3SJohn Marinocp $TMPFILE $CONFIGFILE
25386d7f5d3SJohn Marinoif [ $? != 0 ]
25486d7f5d3SJohn Marino    then
25586d7f5d3SJohn Marino    echo "failed to copy new config file into place, check $CONFIGFILE is still OK"
25686d7f5d3SJohn Marino    exit 3
25786d7f5d3SJohn Marinofi
25886d7f5d3SJohn Marino
25986d7f5d3SJohn Marinorm -f $SCRIPTFILE $TMPFILE
260