1#!/bin/sh 2 3# TODO openbmc/openbmc#1622 remove -e option related changes. 4 5help=$'FFDC File Collection Script 6 7Collects various FFDC files and system parameters and places them in a .tar 8 9usage: ffdc [OPTION] 10 11Options: 12 -d, --dir <directory> Specify destination directory. Defaults to /tmp if 13 invalid or unspecified. 14 -e, --enable_dump Enable BMC Dump specific features. 15 -h, --help Display this help text and exit. 16' 17 18declare -a arr=( 19# Commands to be outputted into individual files 20# Format: "File name" "Command" 21 "Build_info.txt" "cat /etc/version" 22 "FW_level.txt" "cat /etc/os-release" 23 "BMC_OS.txt" "uname -a" 24 "BMC_uptime.txt" "uptime" 25 "BMC_disk_usage.txt" "df -hT" 26 27 "systemctl_status.txt" "systemctl status | cat" 28 "failed_services.txt" "systemctl --failed" 29 "host_console.txt" "cat /var/log/obmc-console.log" 30 31 "BMC_proc_list.txt" "top -n 1 -b" 32 "BMC_journalctl.txt" "journalctl --no-pager" 33 "BMC_dmesg.txt" "dmesg" 34 "BMC_procinfo.txt" "cat /proc/cpuinfo" 35 "BMC_meminfo.txt" "cat /proc/meminfo" 36 37# Copy all content from these directories into directories in the .tar 38# Format: "Directory name" "Directory to copy" 39 "obmc" "/var/lib/obmc/" 40 "core" "/var/lib/systemd/coredump" 41) 42 43dir=$"ffdc_$(date +"%Y-%m-%d_%H-%M-%S")" 44dest="/tmp" 45enable_dump=false 46 47while [[ $# -gt 0 ]]; do 48 key="$1" 49 case $key in 50 -d|--dir) 51 mkdir -p "$2" 52 if [ $? -eq 0 ]; then 53 dest="$2" 54 else 55 echo "Failed to create the destination directory specified." 56 break 57 fi 58 shift 2 59 ;; 60 -e|--enable_dump) 61 enable_dump=true 62 shift 63 ;; 64 -h|--help) 65 echo "$help" 66 exit 67 ;; 68 *) 69 echo "Unknown option $1. Display available options with -h or --help" 70 exit 71 ;; 72 esac 73done 74 75echo "Using destination directory $dest" 76 77if [ $enable_dump = true ]; then 78 id=$(basename $dest) 79 printf -v f_id "%08d" $id 80 dir=$"obmcdump_"$f_id"_$(date +"%s")" 81fi 82 83mkdir -p "$dest/$dir" 84 85for ((i=0;i<${#arr[@]};i+=2)); do 86 if [ -d "${arr[i+1]}" ]; then 87 echo "Copying contents of ${arr[i+1]} to directory ./${arr[i]} ..." 88 mkdir "$dest/$dir/${arr[i]}" 89 cp -r ${arr[i+1]}/* $dest/$dir/${arr[i]} 90 else 91 echo "Collecting ${arr[i]}..." 92 ${arr[i+1]} >> "$dest/$dir/${arr[i]}" 93 fi 94done 95 96tar -cf "$dest/$dir.tar" -C $dest $dir 97echo "Contents in $dest/$dir.tar" 98 99rm -r "$dest/$dir" 100