1#!/bin/sh 2 3base_dir="/var/lib/phosphor-software-manager/hostfw" 4ro_dir="/media/hostfw/running-ro" 5running_dir="${base_dir}/running" 6file_recovered=0 7 8if [ -f "${ro_dir}/81e00994.lid" ]; then 9 #look for the DEVTREE and the preserved files 10 filesList=$(grep 'PRESERVED\|DEVTREE' "${ro_dir}/81e00994.lid") 11 for eachFile in ${filesList}; do 12 eachFile=${eachFile##partition*=} 13 eachFile=$(echo "${eachFile}" | cut -d "," -f 1) 14 #check if it is a symbolic link 15 if [ -L "${running_dir}/${eachFile}" ]; then 16 # get the symlink target file 17 eachFile="$(readlink "${running_dir}/${eachFile}")" 18 if [ -f "${running_dir}/${eachFile}" ] && [ -f "${ro_dir}/${eachFile}" ]; then 19 runsize="$(stat -c '%s' "${running_dir}/${eachFile}")" 20 rosize="$(stat -c '%s' "${ro_dir}/${eachFile}")" 21 # Partition size may have changed or became corrupted 22 # restoring the file from the readonly copy 23 if [ "$runsize" != "$rosize" ]; then 24 cp -p ${ro_dir}/"${eachFile}" ${running_dir}/"${eachFile}" 25 # Log PEL to indicate such 26 busctl call xyz.openbmc_project.Logging \ 27 /xyz/openbmc_project/logging \ 28 xyz.openbmc_project.Logging.Create Create "ssa{ss}" \ 29 xyz.openbmc_project.Software.Version.Error.HostFile \ 30 xyz.openbmc_project.Logging.Entry.Level.Error 3 "FILE_NAME" \ 31 "${eachFile}" "CURRENT_FILE_SIZE" "${runsize}" "EXPECTED_FILE_SIZE" \ 32 "${rosize}" 33 34 file_recovered=1 35 fi 36 fi 37 fi 38 done 39 #one or more files could be recovered. So trigger dump outside the while loop 40 if [ $file_recovered -eq 1 ]; then 41 # Initiate dump 42 busctl call xyz.openbmc_project.Dump.Manager \ 43 /xyz/openbmc_project/dump/bmc xyz.openbmc_project.Dump.Create \ 44 CreateDump "a{sv}" 0 45 fi 46fi