Hi Satomi-san,

On Wed, Oct 08, 2008 at 02:55:57PM +0900, Satomi TANIGUCHI wrote:
> Hi lists,
> 
> I'm posting a STONITH plugin which checks whether the target node is kdumping
> or not.
> There are some steps to use this, but I believe this plugin is helpful for
> failure analysis.
> See attached README for details about how to use this.
> 
> There are 2 patches.
> The patch named "kdumpcheck.patch" is for Linux-HA-dev(1eae6aaf1af8).
> And the patch named "mkdumprd_for_kdumpcheck.patch" is
> for mkdumprd version 5.0.39.

This patch has to go elsewhere, to whoever maintains mkdumprd.

> If you're interested in, please give me your comments.
> Any comments and suggestions are really appreciated.

Many thanks for the plugin. I'll review it.

Cheers,

Dejan

> 
> Best Regards,
> Satomi TANIGUCHI
> 
> 

> diff -urN org/configure.in mod/configure.in
> --- org/configure.in  2008-10-07 20:22:06.000000000 +0900
> +++ mod/configure.in  2008-10-08 12:29:36.000000000 +0900
> @@ -2665,6 +2665,7 @@
>               lib/plugins/stonith/external/riloe              \
>               lib/plugins/stonith/external/ssh                \
>               lib/plugins/stonith/external/hmchttp            \
> +             lib/plugins/stonith/external/kdumpcheck         \
>               lib/plugins/stonith/external/xen0-ha            \
>               lib/plugins/stonith/external/drac5              \
>               lib/plugins/HBcompress/Makefile                 \
> diff -urN org/lib/plugins/stonith/external/Makefile.am 
> mod/lib/plugins/stonith/external/Makefile.am
> --- org/lib/plugins/stonith/external/Makefile.am      2008-10-07 
> 20:22:06.000000000 +0900
> +++ mod/lib/plugins/stonith/external/Makefile.am      2008-10-08 
> 12:30:57.000000000 +0900
> @@ -20,13 +20,13 @@
>  MAINTAINERCLEANFILES = Makefile.in
>  
>  EXTRA_DIST           = drac5 ibmrsa-telnet ipmi rackpdu vmware xen0 \
> -                     xen0-ha-dom0-stonith-helper sbd
> +                     xen0-ha-dom0-stonith-helper sbd kdumpcheck
>  
>  extdir                    = $(stonith_ext_plugindir)
>  
>  helperdir         = $(stonith_plugindir)
>  
>  ext_SCRIPTS       = drac5 ibmrsa ibmrsa-telnet ipmi riloe ssh vmware rackpdu 
> xen0 hmchttp \
> -                     xen0-ha sbd
> +                     xen0-ha sbd kdumpcheck
>  
>  helper_SCRIPTS            = xen0-ha-dom0-stonith-helper
> diff -urN org/lib/plugins/stonith/external/kdumpcheck.in 
> mod/lib/plugins/stonith/external/kdumpcheck.in
> --- org/lib/plugins/stonith/external/kdumpcheck.in    1970-01-01 
> 09:00:00.000000000 +0900
> +++ mod/lib/plugins/stonith/external/kdumpcheck.in    2008-10-08 
> 12:29:36.000000000 +0900
> @@ -0,0 +1,288 @@
> +#!/bin/sh
> +#
> +# External STONITH module to check kdump.
> +#
> +# Copyright (c) 2008 NIPPON TELEGRAPH AND TELEPHONE CORPORATION
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of version 2 of the GNU General Public License as
> +# published by the Free Software Foundation.
> +#
> +# This program is distributed in the hope that it would be useful, but
> +# WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> +#
> +# Further, this software is distributed without any warranty that it is
> +# free of the rightful claim of any third person regarding infringement
> +# or the like.  Any license provided herein, whether implied or
> +# otherwise, applies only to this software file.  Patent licenses, if
> +# any, provided herein do not apply to combinations of this program with
> +# other software, or any other product whatsoever.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write the Free Software Foundation,
> +# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
> +#
> +
> +SSH_COMMAND="@SSH@ -q -x -o PasswordAuthentication=no -o 
> StrictHostKeyChecking=no -n"
> +#Set default user name.
> +USERNAME="kdumpchecker"
> +
> +#For debug print.
> +DEBUG=1
> +if [ -n "${DEBUG}" ]; then
> +    DEBUG_FILE=/var/log/ha-kdumpcheck.log
> +    touch ${DEBUG_FILE}
> +    chmod 600 ${DEBUG_FILE}
> +
> +    exec 2>> ${DEBUG_FILE}
> +    OUTPUT='>&2'
> +fi
> +
> +print_debug() {
> +    if [ -n "${DEBUG}" ]; then
> +        cat >&2
> +    else
> +        cat > /dev/null 2>&1
> +    fi
> +}
> +
> +#Rewrite the hostlist to accept "," as a delimeter for hostnames too.
> +hostlist=`echo ${hostlist} | tr ',' ' '`
> +
> +##
> +# Check the parameter hostlist is set or not.
> +# If not, exit with 6 (ERR_CONFIGURED).
> +##
> +function check_hostlist() {
> +    if [ -z "${hostlist}" ]; then
> +        echo "`date`::ERROR: hostlist is empty." | print_debug
> +        exit 6 #ERR_CONFIGURED
> +    fi
> +}
> +
> +##
> +# Set kdump check user name to USERNAME.
> +#   always return 0.
> +##
> +function get_username() {
> +    KDUMP_CONFIG_FILE="/etc/kdump.conf"
> +    CONFIG_NAME="kdump_check_user"
> +
> +    if [ ! -f "${KDUMP_CONFIG_FILE}" ]; then
> +        echo "`date`::DEBUG: ${KDUMP_CONFIG_FILE} doesn't exist." | 
> print_debug
> +        return 0
> +    fi
> +
> +    TMP=`grep "^\s*${CONFIG_NAME}\>" ${KDUMP_CONFIG_FILE} | awk '{print $2}'`
> +    if [ -n "${TMP}" ]; then
> +        USERNAME="${TMP}"
> +    fi
> +
> +    echo "`date`::DEBUG: kdump check user name is ${USERNAME}." | print_debug
> +}
> +
> +##
> +# Check the specified or default identity file exists or not.
> +# If not, exit with 6 (ERR_CONFIGURED).
> +##
> +function check_identity_file() {
> +    local USERNAME="$1"
> +    IDENTITY_SETTINGS=""
> +    if [ -n "${identity_file}" ]; then
> +        if [ ! -f "${identity_file}" ]; then
> +            echo "`date`::ERROR: ${identity_file} doesn't exist." | 
> print_debug
> +            exit 6 #ERR_CONFIGURED
> +        fi
> +        IDENTITY_SETTINGS="-i ${identity_file}"
> +    else
> +        FLG_DEFFILE_EXISTS=0
> +        USERHOMEDIR=`eval echo "~${USERNAME}"`
> +        for FILENAME in "${USERHOMEDIR}/.ssh/id_rsa" \
> +                        "${USERHOMEDIR}/.ssh/id_dsa" \
> +                        "${USERHOMEDIR}/.ssh/identity"
> +        do
> +            if [ -f "${FILENAME}" ]; then
> +                FLG_DEFFILE_EXISTS=1
> +                IDENTITY_SETTINGS="${IDENTITY_SETTINGS} -i ${FILENAME}"
> +            fi
> +        done
> +        if [ ${FLG_DEFFILE_EXISTS} -eq 0 ]; then
> +            echo "`date`::ERROR: ${USERNAME}'s identity file for ssh 
> command" \
> +                " doesn't exist." | print_debug
> +            exit 6 #ERR_CONFIGURED
> +        fi
> +    fi
> +}
> +
> +##
> +# Check the user to check doing kdump exists or not.
> +# If not, exit with 6 (ERR_CONFIGURED).
> +##
> +function check_user_existence() {
> +    local USERNAME="$1"
> +
> +    # Get kdump check user name and check whether he exists or not.
> +    grep -q "^${USERNAME}\>" /etc/passwd > /dev/null 2>&1
> +    RET=$?
> +    if [ ${RET} != 0 ]; then
> +        echo "`date`::ERROR: user ${USERNAME} doesn't exist." \
> +            "please confirm \"kdump_check_user\" setting in 
> /etc/kdump.conf." \
> +            "(default user name is \"kdumpchecker\")" | print_debug
> +        exit 6 #ERR_CONFIGURED
> +    fi
> +}
> +
> +##
> +# Check the target node is kdumping or not.
> +#   arg1 : target node name.
> +#   ret  : 0 -> the target is kdumping.
> +#        : 1 -> the target is _not_ kdumping.
> +#        : else -> failed to check.
> +##
> +function check_kdump() {
> +    TARGET_NODE="$1"
> +
> +    # Get kdump check user name.
> +    get_username
> +    check_user_existence ${USERNAME}
> +    EXEC_COMMAND="${SSH_COMMAND} -l ${USERNAME}"
> +
> +    # Specify kdump check user's identity file for ssh command.
> +    check_identity_file "${USERNAME}"
> +    EXEC_COMMAND="${EXEC_COMMAND} ${IDENTITY_SETTINGS}"
> +
> +    # Now, check the target!
> +    # In advance, Write the following setting at the head of
> +    # kdump_check_user's public key in authorized_keys file on target node.
> +    #    command="test -s /proc/vmcore", \
> +    #    no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
> +    echo "`date`::DEBUG: execute the command" \
> +            "[${EXEC_COMMAND} ${TARGET_NODE}]." | print_debug
> +    ${EXEC_COMMAND} ${TARGET_NODE} > /dev/null 2>&1
> +    RET=$?
> +    echo "`date`::DEBUG: the command's result is ${RET}." | print_debug
> +
> +    #RET ->   0 : vmcore file's size is not zero. the node is kdumping.
> +    #RET ->   1 : the node is _not_ kdumping (vmcore didn't exist or
> +    #             its size is zero). It still needs to be STONITH'ed.
> +    #RET -> 255 : ssh command is failed.
> +    #      else : Maybe command strings in authorized_keys is wrong...
> +    return ${RET}
> +}
> +
> +###
> +#
> +#  Main function.
> +#
> +###
> +case $1 in
> +gethosts)
> +    check_hostlist
> +    for REMOTE_HOSTNAME in ${hostlist} ; do
> +        echo "${REMOTE_HOSTNAME}"
> +    done
> +    exit 0
> +    ;;
> +on)
> +    # This plugin does only check whether a target node is kdumping or not.
> +    exit 1
> +    ;;
> +reset|off)
> +    check_hostlist
> +    RET=1
> +    for REMOTE_HOSTNAME in ${hostlist}
> +    do
> +        if [ "${REMOTE_HOSTNAME}" != "$2" ]; then
> +            continue
> +        fi
> +        while [ 1 ]
> +        do
> +            check_kdump "$2"
> +            RET=$?
> +            if [ ${RET} -ne 255 ]; then
> +                exit ${RET}
> +            fi
> +            #255 means ssh command itself is failed.
> +            #For example, connection failure as if network doesn't start yet
> +            #in 2nd kernel on the target node.
> +            #So, retry to check after a little while.
> +            sleep 1
> +        done
> +    done
> +    exit ${RET}
> +    ;;
> +status)
> +    check_hostlist
> +    for REMOTE_HOSTNAME in ${hostlist}
> +    do
> +        if ping -w1 -c1 "${REMOTE_HOSTNAME}" 2>&1 | grep "unknown host"
> +        then
> +            exit 1
> +        fi
> +    done
> +    get_username
> +    check_user_existence "${USERNAME}"
> +    check_identity_file "${USERNAME}"
> +    exit 0
> +    ;;
> +getconfignames)
> +    echo "hostlist identity_file"
> +    exit 0
> +    ;;
> +getinfo-devid)
> +    echo "kdump check STONITH device"
> +    exit 0
> +    ;;
> +getinfo-devname)
> +    echo "kdump check STONITH external device"
> +    exit 0
> +    ;;
> +getinfo-devdescr)
> +    echo "ssh-based kdump checker"
> +    echo "To check whether a target node is dumping or not."
> +    exit 0
> +    ;;
> +getinfo-devurl)
> +    echo "kdump -> http://lse.sourceforge.net/kdump/";
> +    echo "ssh   -> http://openssh.org";
> +    exit 0
> +    ;;
> +getinfo-xml)
> +    cat << SSHXML
> +<parameters>
> +<parameter name="hostlist" unique="1" required="1">
> +<content type="string" />
> +<shortdesc lang="en">
> +Hostlist
> +</shortdesc>
> +<longdesc lang="en">
> +The list of hosts that the STONITH device controls
> +</longdesc>
> +</parameter>
> +
> +<parameter name="identity_file" unique="1" required="0">
> +<content type="string" />
> +<shortdesc lang="en">
> +Identity file's full path for kdump check user
> +</shortdesc>
> +<longdesc lang="en">
> +The full path of kdump check user's identity file for ssh command.
> +The identity in the specified file have to be restricted to execute
> +only the following command.
> +"test -s /proc/vmcore"
> +Default: kdump check user's default identity file path.
> +NOTE: You can specify kdump check user name in /etc/kdump.conf.
> +      The parameter name is "kdump_check_user".
> +      Default user is "kdumpchecker".
> +</longdesc>
> +</parameter>
> +
> +</parameters>
> +SSHXML
> +    exit 0
> +    ;;
> +*)
> +    exit 1
> +    ;;
> +esac

> --- mkdumprd  2008-04-11 08:51:17.000000000 +0900
> +++ mkdumprd.v2       2008-10-07 22:20:44.000000000 +0900
> @@ -72,6 +72,10 @@
>  bin=""
>  KDUMP_POST=""
>  extra_kdump_mods=""
> +KDUMP_CHECK_USER="kdumpchecker"
> +NETDUMP_FLG=false
> +NETWORK_DEVICE=""
> +UDEV_RULES=""
>  
>  vecho()
>  {
> @@ -910,6 +914,7 @@
>  
>              #load nfs modules, if needed 
>              echo $config_val | grep -v "@" > /dev/null && findmodule nfs
> +            NETDUMP_FLG=true
>              ;;
>          raw)
>              USING_METHOD="raw"
> @@ -972,6 +977,18 @@
>          extra_bins)
>              bin="$bin $config_val"
>              ;;
> +        network_device)
> +            NETWORK_DEVICE=$config_val
> +            bin="$bin /usr/sbin/sshd"
> +            ;;
> +        kdump_check_user)
> +            KDUMP_CHECK_USER=$config_val
> +            [ $KDUMP_CHECK_USER = "root" ] && echo Please specify non-root 
> user to kdump_check_user. && exit 1
> +            ;;
> +        udev_rules)
> +            UDEV_RULES=$config_val
> +            bin="$bin /sbin/udevd"
> +            ;;
>          extra_modules)
>              extra_kdump_mods="$extra_kdump_mods $config_val"
>              ;;
> @@ -1004,6 +1021,12 @@
>      done < $KDUMP_CONFIG_FILE
>  fi
>  
> +if [ $NETDUMP_FLG = "false" -a "x$NETWORK_DEVICE" != "x" ]; then
> +    [ ! -f /etc/sysconfig/network-scripts/ifcfg-$NETWORK_DEVICE ] && echo 
> Device $NETWORK_DEVICE does not exist. && exit 1
> +    handlenetdev $NETWORK_DEVICE
> +    echo $NETWORK_DEVICE >> $MNTIMAGE/etc/iface_to_activate
> +fi
> +
>  #if we are using makedumpfile here, then generate the config file
>  #also only build this config if we don't have vmcoreinfo on this kernel
>  if [ -n "$CORE_COLLECTOR" -a ! -e /sys/kernel/vmcoreinfo ]; then
> @@ -1492,6 +1515,12 @@
>  emit "  done"
>  emit "fi"
>  
> +if [ "x$NETWORK_DEVICE" != "x" -a "x$UDEV_RULES" != "x" -a $NETDUMP_FLG = 
> "false" ]; then
> +    emit "if [ -f /etc/udev/udev.conf ]; then"
> +    emit "    /sbin/udevd -d"
> +    emit "fi"
> +fi
> +
>  if [ -n "$vg_list" ]; then
>      emit "echo Making device-mapper control node"
>      emit "DM_MAJ=\`cat /proc/devices | grep misc | cut -d\" \" -f2\`"
> @@ -1821,6 +1850,12 @@
>                      ;;
>                  extra_modules)
>                      ;;
> +                network_device)
> +                    ;;
> +                kdump_check_user)
> +                    ;;
> +                udev_rules)
> +                    ;;
>                  default)
>                      ;;
>                  link_delay)
> @@ -1828,6 +1863,59 @@
>                  path)
>                      ;;
>                  *)
> +                    if [ "x$NETWORK_DEVICE" != "x" -a $NETDUMP_FLG = "false" 
> ]; then
> +                        mkdir -p $MNTIMAGE/etc/network/
> +                        mkdir -p $MNTIMAGE/etc/sysconfig
> +                        mkdir -p $MNTIMAGE/sys/class
> +                        mkdir -p $MNTIMAGE/proc/mounts
> +                        mkdir -p $MNTIMAGE/var/empty/sshd/etc
> +                        mkdir -p $MNTIMAGE/home/$KDUMP_CHECK_USER/.ssh
> +
> +                        grep "^\s*sshd" /etc/passwd >> $MNTIMAGE/etc/passwd
> +                        KDUMP_CHECK_USER_PASSWD=`grep 
> "^\s*$KDUMP_CHECK_USER" /etc/passwd`
> +                        [ $? != 0 ] && echo User $KDUMP_CHECK_USER does not 
> exist. && exit 1
> +                        echo $KDUMP_CHECK_USER_PASSWD | sed -e "s/bash/msh/" 
> >> $MNTIMAGE/etc/passwd
> +                        KDUMP_CHECK_USER_HOME=`awk -F: 
> /^\s*$KDUMP_CHECK_USER/'{print $6}' $MNTIMAGE/etc/passwd`
> +
> +                        cp -a $KDUMP_CHECK_USER_HOME/.ssh/authorized_keys 
> $MNTIMAGE/$KDUMP_CHECK_USER_HOME/.ssh/.
> +                        cp -a /etc/ssh $MNTIMAGE/etc
> +                        [ ! -f /etc/ssh/sshd_config ] && echo 
> /etc/ssh/sshd_config: No such file or directory. && exit 1
> +                        sed -e "{s/^\s*UsePAM/#UsePAM/}" 
> /etc/ssh/sshd_config > $MNTIMAGE/etc/ssh/sshd_config
> +                        if [ "x$UDEV_RULES" != "x" ]; then
> +                            cp -a /lib/udev $MNTIMAGE/lib
> +                            cp -a /etc/udev $MNTIMAGE/etc
> +                            cp -a /etc/sysconfig/modules 
> $MNTIMAGE/etc/sysconfig
> +                            rm -fr $MNTIMAGE/etc/udev/rules.d/*
> +                            UDEV_RULES_LIST=`echo $UDEV_RULES | tr ',' ' '`
> +                            for UDEV_RULE in $UDEV_RULES_LIST; do
> +                                [ ! -f /etc/udev/rules.d/$UDEV_RULE ] && 
> echo /etc/udev/rules.d/$UDEV_RULE: No such file or directory. && exit 1
> +                                cp -a /etc/udev/rules.d/$UDEV_RULE 
> $MNTIMAGE/etc/udev/rules.d/$UDEV_RULE
> +                            done
> +                            MPATH_WAIT_PATH=`which mpath_wait`
> +                            [ $? != 0 ] && echo mpath_wait: No such file or 
> directory. && exit 1
> +                            sed -e {s/bash/msh/} $MPATH_WAIT_PATH > 
> $MNTIMAGE$MPATH_WAIT_PATH
> +                            chmod 755 $MNTIMAGE/$MPATH_WAIT_PATH
> +                        fi
> +                        NETWORK_DEVICE=""
> +
> +                        # bring up the network
> +                        emit "for i in \`ls /etc/ifcfg-*\`"
> +                        emit "do"
> +                        emit "   NETDEV=\`echo \$i | cut -d\"-\" -f2\`"
> +                        emit "   map_interface \$NETDEV"
> +                        emit "done"
> +                        emit "rename_interfaces"
> +                        emit "IFACE=\`cat /etc/iface_to_activate\`"
> +                        emit "ifup \$IFACE"
> +                        #lets make sure we're up
> +                        emit "IFADDR=\`ifconfig \$IFACE | awk '/inet addr/ 
> {print \$2}' | cut -d\":\" -f 2\`"
> +                        emit "if [ -z \"\$IFADDR\" ]"
> +                        emit "then"
> +                        emit "  echo \"\$IFACE failed to come up\""
> +                        emit "fi"
> +                        emit "/usr/sbin/sshd"
> +                    fi
> +
>                      #test filesystem and directory creation
>                      kdump_chk "test -f /sbin/fsck.$config_opt" "Unsupported 
> type $config_opt"
>                      tmnt=`mktemp -dq`
> @@ -1893,6 +1981,7 @@
>                      fi
>                      emit "fi"
>                      emit "umount /mnt"
> +                    emit "sync"
>                      emit "[ \$exitcode == 0 ] && $FINAL_ACTION"
>                      ;;
>              esac

>                      Kdump check STONITH plugin "kdumpcheck"
> 1. Introduction
>     This plugin's purpose is to avoid STONITH for a node which is doing kdump.
>     It confirms whether the node is doing kdump or not when STONITH reset or
>     off operation is executed.
>     If the target node is doing kdump, this plugin considers that STONITH
>     succeeded. If not, it considers that STONITH failed.
> 
>     NOTE: This plugin has no ability to shutdown or startup a node.
>           So it has to be used with other STONITH plugin.
>           Then, when this plugin failed, the next plugin which can kill a node
>           is executed.
> 
> 2. The way to check
>    When STONITH reset or off is executed, kdumpcheck connects to the target
>    node, and checks the size of /proc/vmcore.
>    It judges that the target node is _not_ doing kdump when the size of
>    /proc/vmcore on the node is zero, or the file doesn't exist.
>    Then kdumpcheck returns "STONITH failed" to stonithd, and the next plugin
>    is executed.
> 
> 3. Expanding mkdumprd
>     This plugin requires non-root user and ssh connection even on 2nd kernel.
>     So, you need to apply mkdumprd_for_kdumpcheck.patch to /sbin/mkdumprd.
>     This patch is tested with mkdumprd version 5.0.39.
>     The patch adds the following functions:
>       i) Start udevd with specified .rules files.
>      ii) Bring the specified network interface up.
>     iii) Start sshd.
>      iv) Add the specified user to the 2nd kernel.
>          The user is to check whether the node is doing kdump or not.
>       v) Execute sync command after dumping.
> 
>      NOTE: i) to iv) expandings are only for the case that filesystem 
> partition
>            is specified as the location where the vmcore should be dumped.
> 
> 4. Parameters
>     kdumpcheck's parameters are the following.
>       hostlist     : The list of hosts that the STONITH device controls.
>                      delimiter is "," or " ".
>                      indispensable setting. (default:none)
>       identity_file: a full-path of the private key file for the user
>                      who checks doing kdump.
>                      (default: $HOME/.ssh/id_rsa, $HOME/.ssh/id_dsa and
>                                $HOME/.ssh/identity)
> 
>     NOTE: To execute this plugin first, set the highest priority to this 
> plugin
>           in all STONITH resources.
> 
> 5. How to Use
>     To use this tool, do the following steps at all nodes in the cluster.
>       1) Add an user to check doing kdump.
>          ex.)
>            # useradd kdumpchecker
>            # passwd kdumpchecker
>       2) Allow passwordless login from the node which will do STONITH to all
>          target nodes for the user added at step 1).
>          ex.)
>            $ cd
>            $ mkdir .ssh
>            $ chmod 700 .ssh
>            $ cd .ssh
>            $ ssh-keygen (generate authentication  keys with empty passphrase)
>            $ scp id_rsa.pub [EMAIL PROTECTED]:"~/.ssh/."
>            $ ssh [EMAIL PROTECTED]
>            $ cd ~/.ssh
>            $ cat id_rsa.pub >> authorized_keys
>            $ chmod 600 autorized_keys
>            $ rm id_rsa.pub
>       3) Limit the command that the user can execute.
>          Describe the following commands in a line at the head of the user's
>          public key in target node's authorized_keys file.
>          [command="test -s /proc/vmcore"]
>          And describe some options (like no-pty, no-port-forwarding and so on)
>          according to your security policy.
>          ex.)
>            $ vi ~/.ssh/authorized_keys
>            command="test -s 
> /proc/vmcore",no-port-forwarding,no-X11-forwarding,
>            no-agent-forwarding,no-pty ssh-rsa AAA..snip..== [EMAIL PROTECTED]
>       4) Add settings in /etc/kdump.conf.
>            network_device   : network interface name to check doing kdump.
>                               indispensable setting. (default: none)
>            kdump_check_user : user name to check doing kdump.
>                               specify non-root user.
>                               (default: "kdumpchecker")
>            udev_rules       : .rules files' names.
>                               specify if you use udev for mapping devices.
>                               specified files have to be in 
> /etc/udev/rules.d/.
>                               you can specify two or more files.
>                               delimiter is "," or " ". (default: none)
>          ex.)
>            # vi /etc/kdump.conf
>            ext3 /dev/sda1
>            network_device eth0
>            kdump_check_user kdumpchecker
>            udev_rules 10-if.rules
>       5) Apply the patch to /sbin/mkdumprd.
>            # cd /sbin
>            # patch -p 1 < mkdumprd_for_kdumpcheck.patch
>       6) Restart kdump service.
>            # service kdump restart
>       7) Describe cib.xml to set STONITH plugin.
>          (See "2. Parameters" and "6. Appendix")
> 
> 6. Appendix
>     A sample cib.xml.
>     <clone id="clnStonith">
>       <instance_attributes id="instance_attributes.id238245a">
>         <nvpair id="clone0_clone_max" name="clone_max" value="2"/>
>         <nvpair id="clone0_clone_node_max" name="clone_node_max" value="1"/>
>       </instance_attributes>
>       <group id="grpStonith">
>         <instance_attributes id="instance_attributes.id2382455"/>
>         <primitive id="grpStonith-kdumpcheck" class="stonith" 
> type="external/kd
>     umpcheck">
>           <instance_attributes id="instance_attributes.id238240a">
>             <nvpair id="nvpair.id238240b" name="hostlist" 
> value="node1,node2"/>
>             <nvpair id="nvpair.id238240c" name="priority" value="1"/>
>           <nvpair id="nvpair.id2382408b" name="stonith-timeout" value="30s"/>
>           </instance_attributes>
>           <operations>
>             <op id="grpStonith-kdumpcheck-start" name="start" interval="0"  
> tim
>     eout="300" on-fail="restart"/>
>             <op id="grpStonith-kdumpcheck-monitor" name="monitor" 
> interval="10"
>      timeout="60" on-fail="restart"/>
>             <op id="grpStonith-kdumpcheck-stop" name="stop" interval="0" 
> timeou
>     t="300" on-fail="block"/>
>           </operations>
>           <meta_attributes id="primitive-grpStonith-kdump-check.meta"/>
>         </primitive>
>         <primitive id="grpStonith-ssh" class="stonith" type="external/ssh">
>           <instance_attributes id="instance_attributes.id2382402a">
>             <nvpair id="nvpair.id2382408a" name="hostlist" 
> value="node1,node2"/
>     >
>             <nvpair id="nvpair.id238066b" name="priority" value="2"/>
>             <nvpair id="nvpair.id2382408c" name="stonith-timeout" 
> value="60s"/>
>           </instance_attributes>
>           <operations>
>             <op id="grpStonith-ssh-start" name="start" interval="0" 
> timeout="30
>     0" on-fail="restart"/>
>             <op id="grpStonith-ssh-monitor" name="monitor" interval="10" 
> timeou
>     t="60" on-fail="restart"/>
>             <op id="grpStonith-ssh-stop" name="stop" interval="0" 
> timeout="300"
>      on-fail="block"/>
>           </operations>
>           <meta_attributes id="primitive-grpStonith-ssh.meta"/>
>         </primitive>
>       </group>
>     </clone>
> 

> _______________________________________________________
> Linux-HA-Dev: [email protected]
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/

_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to