Blame contrib/log_bmc.sh

Packit Service ed0f68
#!/bin/sh
Packit Service ed0f68
#############################################################################
Packit Service ed0f68
#
Packit Service ed0f68
# log_bmc.sh: Add SEL entries to indicate OS Boot/Install status.
Packit Service ed0f68
#
Packit Service ed0f68
# version:      0.1
Packit Service ed0f68
#
Packit Service ed0f68
# Authors:      Charles Rose <charles_rose@dell.com>
Packit Service ed0f68
#               Jordan Hargrave <jordan_hargrave@dell.com>
Packit Service ed0f68
#
Packit Service ed0f68
# Description:  Script to log OS boot/install status to the BMC. Primarily
Packit Service ed0f68
#		meant for use in automated installs and start up scripts.
Packit Service ed0f68
#		Will provide administrators with OS boot/install status in
Packit Service ed0f68
#		BMC and aid with debugging.
Packit Service ed0f68
#
Packit Service ed0f68
#               Example usage:
Packit Service ed0f68
#               # ./log_bmc.sh inst_start
Packit Service ed0f68
#               # ipmitool sel list
Packit Service ed0f68
#		b | 05/07/2014 | 12:07:32 | OS Boot | Installation started
Packit Service ed0f68
#
Packit Service ed0f68
#               See here for details:
Packit Service ed0f68
#               https://fedoraproject.org/wiki/Features/AgentFreeManagement
Packit Service ed0f68
#
Packit Service ed0f68
#############################################################################
Packit Service ed0f68
IPMI_CMD="/usr/bin/ipmitool"
Packit Service ed0f68
Packit Service ed0f68
#############################################################################
Packit Service ed0f68
# SEL Event types from ipmi_sel.h
Packit Service ed0f68
OS_STOP="0x20"
Packit Service ed0f68
OS_BOOT="0x1f"
Packit Service ed0f68
# SEL Event data from ipmi_sel.h
Packit Service ed0f68
GRACEFUL_SHUTDOWN="0x03" # OS Stop/Shutdown: Installation started
Packit Service ed0f68
BOOT_COMPLETED="0x01" # OS Boot: Installation started
Packit Service ed0f68
INSTALL_STARTED="0x07" # OS Boot: Installation started
Packit Service ed0f68
INSTALL_COMPLETED="0x08" # OS Boot: Installation completed
Packit Service ed0f68
INSTALL_ABORTED="0x09" # OS Boot: Installation aborted
Packit Service ed0f68
INSTALL_FAILED="0x0a" # OS Boot: Installation failed
Packit Service ed0f68
Packit Service ed0f68
##########################################################################
Packit Service ed0f68
Packit Service ed0f68
# check for ipmi functionality.
Packit Service ed0f68
check_ipmi()
Packit Service ed0f68
{
Packit Service ed0f68
	# ensures presence of ipmitool and /dev/ipmi*
Packit Service ed0f68
	${IPMI_CMD} mc info > /dev/null 2>&1
Packit Service ed0f68
	[ $? -ne 0 ] && RETVAL=2
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
# Write out the events to SEL
Packit Service ed0f68
ipmi_sel_add()
Packit Service ed0f68
{
Packit Service ed0f68
	# Refer ipmitool(1) event for details on format.
Packit Service ed0f68
	printf "0x04 %s 0x00 0x6f %s 0x00 0x00" ${type} ${status} > \
Packit Service ed0f68
		${tmpfile} && \
Packit Service ed0f68
		${IPMI_CMD} sel add ${tmpfile} > /dev/null 2>&1
Packit Service ed0f68
	[ $? -ne 0 ] && RETVAL=3
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
### Main
Packit Service ed0f68
# Most of the status is for this event type
Packit Service ed0f68
tmpfile=$(/usr/bin/mktemp)
Packit Service ed0f68
RETVAL=0
Packit Service ed0f68
type=${OS_BOOT}
Packit Service ed0f68
Packit Service ed0f68
case ${1} in
Packit Service ed0f68
	os_shutdown)   type=${OS_STOP}; status=${GRACEFUL_SHUTDOWN} ;;
Packit Service ed0f68
	os_boot)       status=${BOOT_COMPLETED} ;;
Packit Service ed0f68
	inst_start)    status=${INSTALL_STARTED} ;;
Packit Service ed0f68
	inst_complete) status=${INSTALL_COMPLETED} ;;
Packit Service ed0f68
	inst_abort)    status=${INSTALL_ABORTED} ;;
Packit Service ed0f68
	inst_fail)     status=${INSTALL_FAILED} ;;
Packit Service ed0f68
	*)             RETVAL=1 ;;
Packit Service ed0f68
esac
Packit Service ed0f68
Packit Service ed0f68
[ ${RETVAL} -eq 0 ] && check_ipmi
Packit Service ed0f68
[ ${RETVAL} -eq 0 ] && ipmi_sel_add ${status}
Packit Service ed0f68
Packit Service ed0f68
case ${RETVAL} in
Packit Service ed0f68
	0) ;;
Packit Service ed0f68
	1) printf -- %s\\n "Usage: $0 <os_boot|os_shutdown|inst_start|inst_complete|inst_abort|inst_fail>" ;;
Packit Service ed0f68
	2) printf -- %s\\n "failed to communicate with BMC." ;;
Packit Service ed0f68
	3) printf -- %s\\n "error adding ipmi sel entry." ;;
Packit Service ed0f68
esac
Packit Service ed0f68
Packit Service ed0f68
[ -f ${tmpfile} ] && rm -f ${tmpfile} > /dev/null 2>&1
Packit Service ed0f68
Packit Service ed0f68
exit ${RETVAL}
Packit Service ed0f68
### End