|
|
1.1 ! root 1: # Shell version of something similar to the System V 'idtune' command ! 2: ! 3: ##################### FUNCTION DEFINITIONS ####################### ! 4: ! 5: # Call with the $0 of the script as a parameter; this commands writes the ! 6: # name of the directory containing the script to standard output. ! 7: # Example: ! 8: # conf_path $0 ! 9: ! 10: conf_path () { ! 11: set `which $1 2>/dev/null` X ! 12: if [ $# -ne 2 ]; then ! 13: echo . # Assume the current directory. ! 14: return 1 ! 15: fi ! 16: set `expr $1 : '\(.*\)/.*'` X ! 17: if [ $# -ne 2 ]; then ! 18: echo . # Must be in the current directory. ! 19: else ! 20: echo $1 ! 21: fi ! 22: return 0 ! 23: } ! 24: ! 25: # Report a usage message to standard output, with the name of the script ! 26: # passed as the argument to this function. ! 27: ! 28: usage () { ! 29: echo $1 ": Change values of configurable parameters" ! 30: echo "usage :\t[-f] [-m] param value [param value] ..." ! 31: echo "\t-f suppresses interactive confirmation of the change" ! 32: echo "\t-m specifies that the current value be raised to the given minimum" ! 33: } ! 34: ! 35: # Read the mtune/stune parameters for a variable into shell globals ! 36: ! 37: read_mstune () { ! 38: ggrep ^"$1$WHITESPACE" $CONF_DIR/[ms]tune 2>/dev/null 1>&2 ! 39: if [ $? -ne 0 ]; then ! 40: echo There is no installed tunable parameter called $1 1>&2 ! 41: return 1 ! 42: fi ! 43: set `grep "^$1$WHITESPACE" $CONF_DIR/mtune 2>/dev/null` \ ! 44: `grep "^$1$WHITESPACE" $CONF_DIR/stune 2>/dev/null` ! 45: MTUNE_MIN=$2 ! 46: MTUNE_DEFAULT=$3 ! 47: MTUNE_MAX=$4 ! 48: if [ $# -gt 4 ]; then ! 49: STUNE_VALUE=$6 ! 50: else ! 51: STUNE_VALUE=$3 ! 52: fi ! 53: OLD_STUNE_VALUE=$STUNE_VALUE ! 54: } ! 55: ! 56: # Update the value of a tunable parameter ! 57: ! 58: write_mstune () { ! 59: if [ $OLD_STUNE_VALUE -eq $2 ]; then ! 60: return 0 ! 61: fi ! 62: if [ $2 -lt $MTUNE_MIN -o $2 -gt $MTUNE_MAX ]; then ! 63: echo The new value is not within the legal range of values. \ ! 64: 1>&2 ! 65: return 1 ! 66: fi ! 67: ! 68: $HOME_DIR/devadm -I $CONF_DIR -s"$1 $2" -W ! 69: } ! 70: ! 71: # Confirm the parameter change ! 72: ! 73: ask () { ! 74: echo Tunable parameter $1 is currently set to $2. ! 75: echo -n Is it OK to change it to $3"? (y/n) " ! 76: read yesno ! 77: [ "$yesno" = "y" ] ! 78: return $? ! 79: } ! 80: ! 81: HOME_DIR=`conf_path $0` ! 82: CONF_DIR=$HOME_DIR/.. ! 83: WHITESPACE=" " : A space and a tab ! 84: ! 85: if [ $# -lt 1 ]; then ! 86: usage $0 1>&2 ! 87: exit 100 ! 88: fi ! 89: ! 90: while [ $# -gt 1 ]; do ! 91: ARG=$1; shift ! 92: case $ARG in ! 93: -f) FORCE=1 ! 94: ;; ! 95: ! 96: -m) MINIMUM=1 ! 97: ;; ! 98: ! 99: *) read_mstune $ARG || exit 1 ! 100: ! 101: # If there is no change, do nothing. If there is a minimum and ! 102: # the current value is large enough, do nothing. Otherwise, ! 103: # make the change if forced or the user confirms. ! 104: ! 105: if [ $STUNE_VALUE -ne $1 -a \ ! 106: \( -z "$MINIMUM" -o $STUNE_VALUE -lt $1 \) ] && ! 107: ([ -n "$FORCE" ] || ask $ARG $STUNE_VALUE $1) then ! 108: write_mstune $ARG $1 ! 109: fi ! 110: shift ! 111: ;; ! 112: esac ! 113: done ! 114: ! 115: if [ $# -ne 0 ]; then ! 116: usage $0 1>&2 ! 117: exit 100 ! 118: fi
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.