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