1*3e3f28b4SMichael Tritz#!/bin/sh 2*3e3f28b4SMichael Tritz 3*3e3f28b4SMichael Tritzhelp=$'FFDC File Collection Script 4*3e3f28b4SMichael Tritz 5*3e3f28b4SMichael TritzCollects various FFDC files and system parameters and places them in a .tar 6*3e3f28b4SMichael Tritz 7*3e3f28b4SMichael Tritzusage: ffdc [OPTION] 8*3e3f28b4SMichael Tritz 9*3e3f28b4SMichael TritzOptions: 10*3e3f28b4SMichael Tritz -d, --dir <directory> Specify destination directory. Defaults to /tmp if 11*3e3f28b4SMichael Tritz invalid or unspecified. 12*3e3f28b4SMichael Tritz -h, --help Display this help text and exit. 13*3e3f28b4SMichael Tritz' 14*3e3f28b4SMichael Tritz 15*3e3f28b4SMichael Tritzdeclare -a arr=( 16*3e3f28b4SMichael Tritz# Commands to be outputted into individual files 17*3e3f28b4SMichael Tritz# Format: "File name" "Command" 18*3e3f28b4SMichael Tritz "Build_info.txt" "cat /etc/version" 19*3e3f28b4SMichael Tritz "FW_level.txt" "cat /etc/os-release" 20*3e3f28b4SMichael Tritz "BMC_OS.txt" "uname -a" 21*3e3f28b4SMichael Tritz "BMC_uptime.txt" "uptime" 22*3e3f28b4SMichael Tritz "BMC_disk_usage.txt" "df -hT" 23*3e3f28b4SMichael Tritz 24*3e3f28b4SMichael Tritz "systemctl_status.txt" "systemctl status | cat" 25*3e3f28b4SMichael Tritz "failed_services.txt" "systemctl --failed" 26*3e3f28b4SMichael Tritz "host_console.txt" "cat /var/log/obmc-console.log" 27*3e3f28b4SMichael Tritz 28*3e3f28b4SMichael Tritz "BMC_proc_list.txt" "top -n 1 -b" 29*3e3f28b4SMichael Tritz "BMC_journalctl.txt" "journalctl --no-pager" 30*3e3f28b4SMichael Tritz "BMC_dmesg.txt" "dmesg" 31*3e3f28b4SMichael Tritz "BMC_procinfo.txt" "cat /proc/cpuinfo" 32*3e3f28b4SMichael Tritz "BMC_meminfo.txt" "cat /proc/meminfo" 33*3e3f28b4SMichael Tritz 34*3e3f28b4SMichael Tritz# Copy all content from these directories into directories in the .tar 35*3e3f28b4SMichael Tritz# Format: "Directory name" "Directory to copy" 36*3e3f28b4SMichael Tritz "obmc" "/var/lib/obmc/" 37*3e3f28b4SMichael Tritz) 38*3e3f28b4SMichael Tritz 39*3e3f28b4SMichael Tritzdir=$"ffdc_$(date +"%Y-%m-%d_%H-%M-%S")" 40*3e3f28b4SMichael Tritzdest="/tmp" 41*3e3f28b4SMichael Tritz 42*3e3f28b4SMichael Tritzwhile [[ $# -gt 0 ]]; do 43*3e3f28b4SMichael Tritz key="$1" 44*3e3f28b4SMichael Tritz case $key in 45*3e3f28b4SMichael Tritz -d|--dir) 46*3e3f28b4SMichael Tritz if [ -d "$2" ]; then 47*3e3f28b4SMichael Tritz dest="$2" 48*3e3f28b4SMichael Tritz else 49*3e3f28b4SMichael Tritz echo "Invalid or no destination directory specified." 50*3e3f28b4SMichael Tritz break 51*3e3f28b4SMichael Tritz fi 52*3e3f28b4SMichael Tritz shift 2 53*3e3f28b4SMichael Tritz ;; 54*3e3f28b4SMichael Tritz -h|--help) 55*3e3f28b4SMichael Tritz echo "$help" 56*3e3f28b4SMichael Tritz exit 57*3e3f28b4SMichael Tritz ;; 58*3e3f28b4SMichael Tritz *) 59*3e3f28b4SMichael Tritz echo "Unknown option $1. Display available options with -h or --help" 60*3e3f28b4SMichael Tritz exit 61*3e3f28b4SMichael Tritz ;; 62*3e3f28b4SMichael Tritz esac 63*3e3f28b4SMichael Tritzdone 64*3e3f28b4SMichael Tritz 65*3e3f28b4SMichael Tritzecho "Using destination directory $dest" 66*3e3f28b4SMichael Tritz 67*3e3f28b4SMichael Tritzmkdir "$dest/$dir" 68*3e3f28b4SMichael Tritz 69*3e3f28b4SMichael Tritzfor ((i=0;i<${#arr[@]};i+=2)); do 70*3e3f28b4SMichael Tritz if [ -d "${arr[i+1]}" ]; then 71*3e3f28b4SMichael Tritz echo "Copying contents of ${arr[i+1]} to directory ./${arr[i]} ..." 72*3e3f28b4SMichael Tritz mkdir "$dest/$dir/${arr[i]}" 73*3e3f28b4SMichael Tritz cp -r ${arr[i+1]}/* $dest/$dir/${arr[i]} 74*3e3f28b4SMichael Tritz else 75*3e3f28b4SMichael Tritz echo "Collecting ${arr[i]}..." 76*3e3f28b4SMichael Tritz ${arr[i+1]} >> "$dest/$dir/${arr[i]}" 77*3e3f28b4SMichael Tritz fi 78*3e3f28b4SMichael Tritzdone 79*3e3f28b4SMichael Tritz 80*3e3f28b4SMichael Tritztar -cf "$dir.tar" -C $dest $dir 81*3e3f28b4SMichael Tritzecho "Contents in $dest/$dir.tar" 82*3e3f28b4SMichael Tritz 83*3e3f28b4SMichael Tritzrm -r "$dest/$dir" 84