Casey Bowman | ad4362b | 2021-03-03 17:49:28 -0800 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | # Copyright 2021 The Chromium OS Authors. All rights reserved. |
| 3 | # Use of this source code is governed by a BSD-style license that can be |
| 4 | # found in the LICENSE file. |
| 5 | |
| 6 | # Loads script libraries. |
| 7 | CONTRIB_DIR=$(dirname "$(readlink -f "$0")") |
| 8 | . "${CONTRIB_DIR}/common.sh" || exit 1 |
| 9 | |
| 10 | assert_inside_chroot |
| 11 | |
| 12 | # Load remote library |
| 13 | REMOTE_LIB="/home/$USER/trunk/src/scripts" |
| 14 | . "${REMOTE_LIB}/remote_access.sh" || exit 1 |
| 15 | |
| 16 | cf_help="Removes the headers from the output." |
| 17 | |
| 18 | DEFINE_boolean debug $FLAGS_FALSE "Enables debug logging." |
| 19 | DEFINE_boolean copy_friendly $FLAGS_FALSE "${cf_help}" |
| 20 | |
| 21 | # Parse command line. |
| 22 | FLAGS "$@" || exit 1 |
| 23 | eval set -- "${FLAGS_ARGV}" |
| 24 | |
| 25 | cleanup() { |
| 26 | logd "Activated trap card. Exiting..." |
| 27 | cleanup_remote_access |
| 28 | rm -rf "${TMP}" |
| 29 | } |
| 30 | |
| 31 | # Removing leading and trailing whitespace. |
| 32 | remove_whitespace() { |
| 33 | space_match=${1##*[! ]} # Match prefixed spaces. |
| 34 | trimmed=${1%"$space_match"} # Remove prefixed spaces. |
| 35 | space_match=${trimmed%%[! ]*} # Match postfixed spaces. |
| 36 | trimmed=${trimmed#"$space_match"} # Remove postfixed spaces. |
| 37 | printf "$trimmed" |
| 38 | } |
| 39 | |
| 40 | # Generic debug logger. |
| 41 | logd() { |
| 42 | if [ ${FLAGS_debug} = ${FLAGS_TRUE} ]; then |
| 43 | printf "DEBUG: $1\n" |
| 44 | fi |
| 45 | } |
| 46 | |
| 47 | # Debug 'start' function for a section type. |
| 48 | log_status_start() { |
| 49 | if [ ${FLAGS_debug} = ${FLAGS_TRUE} ]; then |
| 50 | printf "DEBUG: Getting ${1} information..." |
| 51 | fi |
| 52 | } |
| 53 | |
| 54 | # Debug 'end' function for a section type. |
| 55 | log_status_end() { |
| 56 | if [ ${FLAGS_debug} = ${FLAGS_TRUE} ]; then |
| 57 | if [ ! -z "${1}" ]; then |
| 58 | printf "Complete!\n" |
| 59 | else |
| 60 | printf "Failed!\n" |
| 61 | fi |
| 62 | fi |
| 63 | } |
| 64 | |
| 65 | # Uses remote_sh to pass a command, but acts like a try/fail |
| 66 | # condition, returning an empty string upon failure. |
| 67 | try_remote_command() { |
| 68 | remote_sh "${1} || printf ''" |
| 69 | } |
| 70 | |
| 71 | main() { |
| 72 | trap cleanup EXIT |
| 73 | |
| 74 | TMP=$(mktemp -d /tmp/get_dut_info.XXXX) |
| 75 | |
| 76 | remote_access_init |
| 77 | |
| 78 | log_status_start "Board Name" |
| 79 | try_remote_command "grep CHROMEOS_RELEASE_BOARD /etc/lsb-release" |
| 80 | if [ ! -z "${REMOTE_OUT}" ]; then |
| 81 | BOARD=$(printf "${REMOTE_OUT}" | cut -d '=' -f 2) |
| 82 | fi |
| 83 | log_status_end "${BOARD}" |
| 84 | |
| 85 | log_status_start "OS Version" |
| 86 | command="awk -F = '\$1 ~ /CHROMEOS_RELEASE_DESCRIPTION/ \ |
| 87 | {print \$2}' /etc/lsb-release" |
| 88 | try_remote_command "${command}" |
| 89 | OS="${REMOTE_OUT}" |
| 90 | log_status_end "${OS}" |
| 91 | |
| 92 | log_status_start "Chrome Browser" |
| 93 | try_remote_command "/opt/google/chrome/chrome --version" |
| 94 | CHROME="${REMOTE_OUT}" |
| 95 | log_status_end "${CHROME}" |
| 96 | |
| 97 | log_status_start "Firmware" |
| 98 | try_remote_command "crossystem fwid" |
| 99 | FW="${REMOTE_OUT}" |
| 100 | if [[ -z "$FW" ]]; then |
| 101 | command="dmidecode | sed -n '/BIOS Information/,/Handle/p' \ |
| 102 | | grep \"Version\"" |
| 103 | try_remote_command "${command}" |
| 104 | ver="${REMOTE_OUT}" |
| 105 | ver=$(remove_whitespace "$ver") |
| 106 | FW=$( printf "${ver}" | awk '{print $2}' ) |
| 107 | fi |
| 108 | log_status_end "${FW}" |
| 109 | |
| 110 | log_status_start "EC" |
| 111 | try_remote_command "(ectool version 2>&1 | grep 'Build info')" |
| 112 | EC=$(printf "${REMOTE_OUT}" | awk '{ print $3 }') |
| 113 | log_status_end "${EC}" |
| 114 | |
| 115 | log_status_start "CPU" |
| 116 | command="awk -F : '\$1 ~ /model name/ {print \$2}' \ |
| 117 | /proc/cpuinfo | head -1" |
| 118 | try_remote_command "${command}" |
| 119 | CPU="${REMOTE_OUT}" |
| 120 | CPU=$(remove_whitespace "$CPU") |
| 121 | log_status_end "${CPU}" |
| 122 | |
| 123 | log_status_start "Kernel" |
| 124 | try_remote_command "uname -smr" |
| 125 | KERNEL="${REMOTE_OUT}" |
| 126 | log_status_end "${KERNEL}" |
| 127 | |
| 128 | log_status_start "Memory (Physical)" |
| 129 | try_remote_command "cat /proc/meminfo | grep MemTotal" |
| 130 | MEM="${REMOTE_OUT}" |
| 131 | MEM=$(printf "$MEM" | awk '{print $2}') |
| 132 | if [[ ! -z $MEM ]] && [[ $MEM == [0-9]* ]] && [ $MEM -ne 0 ]; then |
| 133 | # Conversion from system kB to manufactuer GB |
| 134 | MEM=$(($MEM * 1024 / 1000000000 )) |
| 135 | else |
| 136 | MEM="" |
| 137 | fi |
| 138 | log_status_end "${MEM}" |
| 139 | |
| 140 | log_status_start "Memory Channels" |
| 141 | try_remote_command "dmidecode -t memory | grep Channel | wc -l" |
| 142 | MEM_CHANNELS="${REMOTE_OUT}" |
| 143 | log_status_end "${MEM_CHANNELS}" |
| 144 | |
| 145 | log_status_start "Storage" |
| 146 | command="lsblk -o PKNAME,MOUNTPOINT \ |
| 147 | | grep \"/mnt/stateful_partition$\"" |
| 148 | try_remote_command "${command}" |
| 149 | storage_type=$(printf "${REMOTE_OUT}" | awk '{print $1}') |
| 150 | try_remote_command "lsblk -b --nodeps | grep -w $storage_type" |
| 151 | STORAGE=$(printf "${REMOTE_OUT}" | awk '{print $4}') |
| 152 | if [[ ! -z "$STORAGE" ]]; then |
| 153 | # Conversion from system bytes to manufactuer GB |
| 154 | STORAGE=$(($STORAGE * 1024 / 1000000000000 )) |
| 155 | fi |
| 156 | log_status_end "${STORAGE}" |
| 157 | |
| 158 | log_status_start "Core Number" |
| 159 | try_remote_command "nproc --all" |
| 160 | CORES="${REMOTE_OUT}" |
| 161 | log_status_end "${CORES}" |
| 162 | |
| 163 | log_status_start "Media" |
| 164 | try_remote_command "vainfo 2>/dev/null | grep 'Driver version'" |
| 165 | MEDIA=$(printf "${REMOTE_OUT}" | awk -F : '{print $3}'| sed 's/^\s//') |
| 166 | log_status_end "${MEDIA}" |
| 167 | |
| 168 | log_status_start "Libva" |
| 169 | try_remote_command "vainfo 2>/dev/null | grep 'vainfo: VA-API version'" |
| 170 | LIBVA=$(printf "${REMOTE_OUT}" | awk -F : '{print $3}'| sed 's/^\s//') |
| 171 | log_status_end "${LIBVA}" |
| 172 | |
| 173 | log_status_start "Mesa" |
| 174 | try_remote_command "wflinfo -p null -a gles2 2>/dev/null | egrep -o '(Mesa [[:digit:]].*?)\s'" |
| 175 | MESA="${REMOTE_OUT}" |
| 176 | log_status_end "${MESA}" |
| 177 | |
| 178 | logd "Information gathering complete!" |
| 179 | |
| 180 | mem_message="${MEM:-(unknown) }GB (physical), \ |
| 181 | ${MEM_CHANNELS:-(unknown)} channels" |
| 182 | if [ "${FLAGS_copy_friendly}" = "${FLAGS_TRUE}" ]; then |
| 183 | cat <<EOF |
| 184 | ${BOARD:-(unknown)} |
| 185 | ${OS:-(unknown)} |
| 186 | ${CHROME:-(unknown)} |
| 187 | ${FW:-(unknown)} |
| 188 | ${EC:-(unknown)} |
| 189 | ${CPU:-(unknown)} (${CORES:-(unknown)} cores) |
| 190 | ${KERNEL:-(unknown)} |
| 191 | ${mem_message} |
| 192 | ${STORAGE:-(unknown) }GB |
| 193 | ${MEDIA:-(unknown)} |
| 194 | ${LIBVA:-(unknown)} |
| 195 | ${MESA:-(unknown)} |
| 196 | EOF |
| 197 | |
| 198 | else |
| 199 | cat <<EOF |
| 200 | Board: ${BOARD:-(unknown)} |
| 201 | OS: ${OS:-(unknown)} |
| 202 | Chrome: ${CHROME:-(unknown)} |
| 203 | FW: ${FW:-(unknown)} |
| 204 | EC: ${EC:-(unknown)} |
| 205 | CPU: ${CPU:-(unknown)} (${CORES:-(unknown)} cores) |
| 206 | Kernel: ${KERNEL:-(unknown)} |
| 207 | Mem: ${mem_message} |
| 208 | Storage: ${STORAGE:-(unknown) }GB |
| 209 | Media: ${MEDIA:-(unknown)} |
| 210 | Libva: ${LIBVA:-(unknown)} |
| 211 | Mesa: ${MESA:-(unknown)} |
| 212 | EOF |
| 213 | fi |
| 214 | } |
| 215 | |
| 216 | main "$@" |