1#!/bin/bash 2# 3# SPDX-License-Identifier: Apache-2.0 4# Copyright (C) 2018 IBM Corp. 5 6set -eou pipefail 7 8if [ $# -lt 2 ] 9then 10 echo Usage: $0 [user@][host] [tarball] 11 exit 1 12fi 13 14TARGET="$1" 15DEBUGTOOLS_PATH="$2" 16DEBUGTOOLS="$(basename "${DEBUGTOOLS_PATH}")" 17 18scp "${DEBUGTOOLS_PATH}" libncurses.so.5.9 libncursesw.so.5.9 "${TARGET}":/tmp/ 19ssh "${TARGET}" <<-EOF 20set -eou pipefail 21 22set -x 23 24on_exit() { 25 rm -f /tmp/'${DEBUGTOOLS}' 26 rm -f /tmp/libncurses.so.5.9 /tmp/libncursesw.so.5.9 27} 28 29trap on_exit EXIT 30 31# Deal with field mode 32if ! mountpoint /usr/local 33then 34 systemctl unmask usr-local.mount 35 systemctl start usr-local.mount 36fi 37 38# Untar debug tools tarball into /usr/local 39pushd /usr/local 40tar -xvJf /tmp/"${DEBUGTOOLS}" 41popd 42 43# Work around bugs preventing perf from working 44# Tracking issue: https://github.com/openbmc/openbmc/issues/2880 45 46# Fake expand(1): https://github.com/openbmc/openbmc/issues/2879 47mkdir -p bin 48pushd /usr/local/bin 49# which expand isn't enough as expand might be a symlink to a busybox not built with CONFIG_EXPAND 50if ! echo "" | expand 51then 52 # Remove what is likely a symlink to busybox before trying to overwrite 53 # file because: 54 # 55 # 1) We get errors through trying to write to a read-only filesystem 56 # 2) If the filesystem were read-write, we would overwrite the busybox binary 57 [ -f expand ] && rm expand 58 # Fake out expand(1) in the cheapest way possible 59 echo -e "#!/bin/sh\ncat" > expand 60 chmod +x expand 61fi 62 63# Fix the broken objdump link: https://github.com/openbmc/openbmc/issues/2878 64ln -sf arm-openbmc-linux-gnueabi-objdump objdump 65popd 66 67# perf-config(1) is terrible and won't write your configuration unless the 68# configuration file exists 69touch \${HOME}/.perfconfig 70 71# Disable writing junk to \${HOME}, otherwise we fill up the RW volume and 72# cause systemic failures. 73LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/perf config --user buildid.dir=/dev/null 74 75# Deal with latencytop's missing shared object dependency on ncurses, tracked by 76# https://github.com/openbmc/openbmc/issues/2430 77pushd /usr/local/lib 78if [ -f /tmp/libncurses.so.5.9 -o -f /tmp/libncursesw.so.5.9 ] 79then 80 cp /tmp/libncurses.so.5.9 /tmp/libncursesw.so.5.9 . 81 ln -sf libncurses.so.5.9 libncurses.so.5 82 ln -sf libncurses.so.5.9 libncurses.so 83 ln -sf libncursesw.so.5.9 libncursesw.so.5 84 ln -sf libncursesw.so.5.9 libncursesw.so 85fi 86popd 87EOF 88 89echo 90echo Make sure to run the following in your shell: 91echo 92echo export LD_LIBRARY_PATH=/usr/local/lib PYTHONPATH=/usr/local/lib/python2.7 93echo 94