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 "FW_level.txt" "cat /etc/os-release" 22 "BMC_OS.txt" "uname -a" 23 "BMC_uptime.txt" "uptime" 24 "BMC_disk_usage.txt" "df -hT" 25 26 "systemctl_status.txt" "systemctl status | cat" 27 "failed_services.txt" "systemctl --failed" 28 "host_console.txt" "cat /var/log/obmc-console.log" 29 30 "BMC_proc_list.txt" "top -n 1 -b" 31 "BMC_journalctl.txt" "journalctl --no-pager" 32 "BMC_dmesg.txt" "dmesg" 33 "BMC_procinfo.txt" "cat /proc/cpuinfo" 34 "BMC_meminfo.txt" "cat /proc/meminfo" 35 36# Copy all content from these directories into directories in the .tar 37# Format: "Directory name" "Directory to copy" 38 "obmc" "/var/lib/obmc/" 39 "core" "/var/lib/systemd/coredump" 40) 41 42dir=$"ffdc_$(date +"%Y-%m-%d_%H-%M-%S")" 43dest="/tmp" 44enable_dump=false 45 46while [[ $# -gt 0 ]]; do 47 key="$1" 48 case $key in 49 -d|--dir) 50 mkdir -p "$2" 51 if [ $? -eq 0 ]; then 52 dest="$2" 53 else 54 echo "Failed to create the destination directory specified." 55 break 56 fi 57 shift 2 58 ;; 59 -e|--enable_dump) 60 enable_dump=true 61 shift 62 ;; 63 -h|--help) 64 echo "$help" 65 exit 66 ;; 67 *) 68 echo "Unknown option $1. Display available options with -h or --help" 69 exit 70 ;; 71 esac 72done 73 74echo "Using destination directory $dest" 75 76if [ $enable_dump = true ]; then 77 id=$(basename $dest) 78 printf -v f_id "%08d" $id 79 dir=$"obmcdump_"$f_id"_$(date +"%s")" 80fi 81 82mkdir -p "$dest/$dir" 83 84for ((i=0;i<${#arr[@]};i+=2)); do 85 if [ -d "${arr[i+1]}" ]; then 86 echo "Copying contents of ${arr[i+1]} to directory ./${arr[i]} ..." 87 mkdir "$dest/$dir/${arr[i]}" 88 cp -r ${arr[i+1]}/* $dest/$dir/${arr[i]} 89 else 90 echo "Collecting ${arr[i]}..." 91 ${arr[i+1]} >> "$dest/$dir/${arr[i]}" 92 fi 93done 94 95tar -cf "$dest/$dir.tar" -C $dest $dir 96echo "Contents in $dest/$dir.tar" 97 98rm -r "$dest/$dir" 99