#!/bin/bash
# collect_bmc_sel.sh
# CentOS root运行：自动安装ipmitool，获取主板SN，输出日志文件以SN命名，打包为 SN.zip
set -o pipefail

# 加载IPMI内核模块
modprobe ipmi_msghandler 2>/dev/null
modprobe ipmi_devintf 2>/dev/null
modprobe ipmi_si 2>/dev/null

# 安装ipmitool
if ! command -v ipmitool &>/dev/null;then
    echo "ipmitool not found, installing..."
    yum install -y ipmitool
fi

# 获取主板BIOS SN序列号（FRU主板信息）
BOARD_SN=$(ipmitool -I open fru list | awk '/Builtin FRU Device/ {flag=1;next} /^FRU Device Description/ {flag=0} flag && /Board Serial/ {sub(/^.*: */,"");print;exit}')
echo "主板SN: ${BOARD_SN}"

# 容错，如果获取SN为空
if [ -z "${BOARD_SN}" ];then
    BOARD_SN="UNKNOWN_SN_$(date +%Y%m%d_%H%M%S)"
    echo "警告：读取主板SN失败，使用临时名称：${BOARD_SN}"
fi

WORK_DIR="./${BOARD_SN}"
mkdir -p "${WORK_DIR}"

echo "收集BMC带外日志，主板SN: ${BOARD_SN}"

# 输出各类带外日志到 SN.txt 系列文件
ipmitool -I open mc info        > "${WORK_DIR}/${BOARD_SN}_mc_info.txt"
ipmitool -I open sel elist      > "${WORK_DIR}/${BOARD_SN}_sel_elist.txt"
ipmitool -I open sel list       > "${WORK_DIR}/${BOARD_SN}_sel_list.txt"
ipmitool -I open sel info       > "${WORK_DIR}/${BOARD_SN}_sel_info.txt"
ipmitool -I open sdr elist      > "${WORK_DIR}/${BOARD_SN}_sdr_elist.txt"
ipmitool -I open fru list       > "${WORK_DIR}/${BOARD_SN}_fru_list.txt"
tail -n3000 /var/log/messages   > "${WORK_DIR}/${BOARD_SN}_os_messages.txt"

# 戴尔服务器racadm兼容，存在就导出iDRAC原生日志
if command -v racadm &>/dev/null;then
    racadm getsel > "${WORK_DIR}/${BOARD_SN}_idrac_sel.txt" 2>/dev/null
fi

# 压缩为 BIO的SN码.zip → ${BOARD_SN}.zip
zip -r "${BOARD_SN}.zip" "${WORK_DIR}"
rm -rf "${WORK_DIR}"

echo ""
echo "=========================="
echo "完成！输出文件：${BOARD_SN}.zip"
echo "本地IPMI模式，不需要BMC账号密码"
echo "=========================="
