1*0d6140beSAndroid Build Coastguard Worker#!/bin/sh 2*0d6140beSAndroid Build Coastguard Worker# 3*0d6140beSAndroid Build Coastguard Worker# This file is part of the flashrom project. It is derived from 4*0d6140beSAndroid Build Coastguard Worker# board_status.sh in coreboot. 5*0d6140beSAndroid Build Coastguard Worker# 6*0d6140beSAndroid Build Coastguard Worker# Copyright (C) 2016 Google Inc. 7*0d6140beSAndroid Build Coastguard Worker# Copyright (C) 2014 Sage Electronic Engineering, LLC. 8*0d6140beSAndroid Build Coastguard Worker 9*0d6140beSAndroid Build Coastguard WorkerUSE_CUSTOM_HOOKS=0 10*0d6140beSAndroid Build Coastguard Workerif [ -n "$CUSTOM_HOOKS_FILENAME" ]; then 11*0d6140beSAndroid Build Coastguard Worker USE_CUSTOM_HOOKS=1 12*0d6140beSAndroid Build Coastguard Worker . "$CUSTOM_HOOKS_FILENAME" 13*0d6140beSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 14*0d6140beSAndroid Build Coastguard Worker echo "Failed to source custom hooks file." 15*0d6140beSAndroid Build Coastguard Worker exit $EXIT_FAILURE 16*0d6140beSAndroid Build Coastguard Worker fi 17*0d6140beSAndroid Build Coastguard Worker 18*0d6140beSAndroid Build Coastguard Worker if ! custom_hook_sanity_check; then 19*0d6140beSAndroid Build Coastguard Worker echo "Failed to run sanity check for custom hooks." 20*0d6140beSAndroid Build Coastguard Worker exit $EXIT_FAILURE 21*0d6140beSAndroid Build Coastguard Worker fi 22*0d6140beSAndroid Build Coastguard Workerfi 23*0d6140beSAndroid Build Coastguard Worker 24*0d6140beSAndroid Build Coastguard Worker# test a command 25*0d6140beSAndroid Build Coastguard Worker# 26*0d6140beSAndroid Build Coastguard Worker# $1: 0 ($LOCAL) to run command locally, 27*0d6140beSAndroid Build Coastguard Worker# 1 ($REMOTE) to run remotely if remote host defined 28*0d6140beSAndroid Build Coastguard Worker# $2: command to test 29*0d6140beSAndroid Build Coastguard Worker# $3: 0 ($FATAL) Exit with an error if the command fails 30*0d6140beSAndroid Build Coastguard Worker# 1 ($NONFATAL) Don't exit on command test failure 31*0d6140beSAndroid Build Coastguard Workertest_cmd() 32*0d6140beSAndroid Build Coastguard Worker{ 33*0d6140beSAndroid Build Coastguard Worker local rc 34*0d6140beSAndroid Build Coastguard Worker local cmd__="$(echo $2 | cut -d ' ' -f -1)" 35*0d6140beSAndroid Build Coastguard Worker local args="$(echo $2 | cut -d ' ' -f 2-)" 36*0d6140beSAndroid Build Coastguard Worker 37*0d6140beSAndroid Build Coastguard Worker if [ -e "$cmd__" ]; then 38*0d6140beSAndroid Build Coastguard Worker return 39*0d6140beSAndroid Build Coastguard Worker fi 40*0d6140beSAndroid Build Coastguard Worker 41*0d6140beSAndroid Build Coastguard Worker if [ "$1" -eq "$REMOTE" ] && [ -n "$REMOTE_HOST" ]; then 42*0d6140beSAndroid Build Coastguard Worker ssh $REMOTE_PORT_OPTION root@${REMOTE_HOST} command -v "$cmd__" $args > /dev/null 2>&1 43*0d6140beSAndroid Build Coastguard Worker rc=$? 44*0d6140beSAndroid Build Coastguard Worker else 45*0d6140beSAndroid Build Coastguard Worker command -v "$cmd__" $args >/dev/null 2>&1 46*0d6140beSAndroid Build Coastguard Worker rc=$? 47*0d6140beSAndroid Build Coastguard Worker fi 48*0d6140beSAndroid Build Coastguard Worker 49*0d6140beSAndroid Build Coastguard Worker if [ $rc -eq 0 ]; then 50*0d6140beSAndroid Build Coastguard Worker return 0 51*0d6140beSAndroid Build Coastguard Worker fi 52*0d6140beSAndroid Build Coastguard Worker 53*0d6140beSAndroid Build Coastguard Worker if [ "$3" = "1" ]; then 54*0d6140beSAndroid Build Coastguard Worker return 1 55*0d6140beSAndroid Build Coastguard Worker fi 56*0d6140beSAndroid Build Coastguard Worker 57*0d6140beSAndroid Build Coastguard Worker echo "$2 not found" 58*0d6140beSAndroid Build Coastguard Worker exit $EXIT_FAILURE 59*0d6140beSAndroid Build Coastguard Worker} 60*0d6140beSAndroid Build Coastguard Worker 61*0d6140beSAndroid Build Coastguard Worker# Same args as cmd() but with the addition of $4 which determines if the 62*0d6140beSAndroid Build Coastguard Worker# command should be totally silenced or not. 63*0d6140beSAndroid Build Coastguard Worker_cmd() 64*0d6140beSAndroid Build Coastguard Worker{ 65*0d6140beSAndroid Build Coastguard Worker local silent=$4 66*0d6140beSAndroid Build Coastguard Worker local rc=0 67*0d6140beSAndroid Build Coastguard Worker 68*0d6140beSAndroid Build Coastguard Worker if [ -n "$3" ]; then 69*0d6140beSAndroid Build Coastguard Worker pipe_location="${3}" 70*0d6140beSAndroid Build Coastguard Worker else 71*0d6140beSAndroid Build Coastguard Worker pipe_location="/dev/null" 72*0d6140beSAndroid Build Coastguard Worker fi 73*0d6140beSAndroid Build Coastguard Worker 74*0d6140beSAndroid Build Coastguard Worker if [ $1 -eq $REMOTE ] && [ -n "$REMOTE_HOST" ]; then 75*0d6140beSAndroid Build Coastguard Worker if [ $silent -eq 0 ]; then 76*0d6140beSAndroid Build Coastguard Worker ssh $REMOTE_PORT_OPTION "root@${REMOTE_HOST}" "$2" > "$pipe_location" 2>/dev/null 77*0d6140beSAndroid Build Coastguard Worker rc=$? 78*0d6140beSAndroid Build Coastguard Worker else 79*0d6140beSAndroid Build Coastguard Worker ssh $REMOTE_PORT_OPTION "root@${REMOTE_HOST}" "$2" >/dev/null 2>&1 80*0d6140beSAndroid Build Coastguard Worker rc=$? 81*0d6140beSAndroid Build Coastguard Worker fi 82*0d6140beSAndroid Build Coastguard Worker else 83*0d6140beSAndroid Build Coastguard Worker if [ $USE_CUSTOM_HOOKS -eq 1 ]; then 84*0d6140beSAndroid Build Coastguard Worker preflash_hook $1 "$2" "$3" $4 85*0d6140beSAndroid Build Coastguard Worker fi 86*0d6140beSAndroid Build Coastguard Worker 87*0d6140beSAndroid Build Coastguard Worker if [ $silent -eq 0 ]; then 88*0d6140beSAndroid Build Coastguard Worker $SUDO_CMD $2 > "$pipe_location" 2>/dev/null 89*0d6140beSAndroid Build Coastguard Worker rc=$? 90*0d6140beSAndroid Build Coastguard Worker else 91*0d6140beSAndroid Build Coastguard Worker $SUDO_CMD $2 >/dev/null 2>&1 92*0d6140beSAndroid Build Coastguard Worker rc=$? 93*0d6140beSAndroid Build Coastguard Worker fi 94*0d6140beSAndroid Build Coastguard Worker 95*0d6140beSAndroid Build Coastguard Worker if [ $USE_CUSTOM_HOOKS -eq 1 ]; then 96*0d6140beSAndroid Build Coastguard Worker postflash_hook $1 "$2" "$3" $4 97*0d6140beSAndroid Build Coastguard Worker fi 98*0d6140beSAndroid Build Coastguard Worker fi 99*0d6140beSAndroid Build Coastguard Worker 100*0d6140beSAndroid Build Coastguard Worker return $rc 101*0d6140beSAndroid Build Coastguard Worker} 102*0d6140beSAndroid Build Coastguard Worker 103*0d6140beSAndroid Build Coastguard Worker# run a command 104*0d6140beSAndroid Build Coastguard Worker# 105*0d6140beSAndroid Build Coastguard Worker# $1: 0 ($LOCAL) to run command locally, 106*0d6140beSAndroid Build Coastguard Worker# 1 ($REMOTE) to run remotely if remote host defined 107*0d6140beSAndroid Build Coastguard Worker# $2: command 108*0d6140beSAndroid Build Coastguard Worker# $3: filename to direct output of command into 109*0d6140beSAndroid Build Coastguard Workercmd() 110*0d6140beSAndroid Build Coastguard Worker{ 111*0d6140beSAndroid Build Coastguard Worker _cmd $1 "$2" "$3" 0 112*0d6140beSAndroid Build Coastguard Worker 113*0d6140beSAndroid Build Coastguard Worker if [ $? -eq 0 ]; then 114*0d6140beSAndroid Build Coastguard Worker return 115*0d6140beSAndroid Build Coastguard Worker fi 116*0d6140beSAndroid Build Coastguard Worker 117*0d6140beSAndroid Build Coastguard Worker echo "Failed to run \"$2\", aborting" 118*0d6140beSAndroid Build Coastguard Worker rm -f "$3" # don't leave an empty file 119*0d6140beSAndroid Build Coastguard Worker return $EXIT_FAILURE 120*0d6140beSAndroid Build Coastguard Worker} 121*0d6140beSAndroid Build Coastguard Worker 122*0d6140beSAndroid Build Coastguard Worker# run a command silently 123*0d6140beSAndroid Build Coastguard Worker# 124*0d6140beSAndroid Build Coastguard Worker# $1: 0 ($LOCAL) to run command locally, 125*0d6140beSAndroid Build Coastguard Worker# 1 ($REMOTE) to run remotely if remote host defined 126*0d6140beSAndroid Build Coastguard Worker# $2: command 127*0d6140beSAndroid Build Coastguard Workerscmd() 128*0d6140beSAndroid Build Coastguard Worker{ 129*0d6140beSAndroid Build Coastguard Worker _cmd $1 "$2" "" 1 130*0d6140beSAndroid Build Coastguard Worker 131*0d6140beSAndroid Build Coastguard Worker if [ $? -eq 0 ]; then 132*0d6140beSAndroid Build Coastguard Worker return 133*0d6140beSAndroid Build Coastguard Worker fi 134*0d6140beSAndroid Build Coastguard Worker 135*0d6140beSAndroid Build Coastguard Worker echo "Failed to run \"$2\", aborting" 136*0d6140beSAndroid Build Coastguard Worker return $EXIT_FAILURE 137*0d6140beSAndroid Build Coastguard Worker} 138