Andrew Jeffery | e454025 | 2018-02-06 10:07:05 +1030 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | # |
| 3 | # SPDX-License-Identifier: Apache-2.0 |
| 4 | # Copyright (C) 2018 IBM Corp. |
| 5 | |
| 6 | set -eou pipefail |
| 7 | |
| 8 | if [ $# -lt 2 ] |
| 9 | then |
| 10 | echo Usage: $0 [user@][host] [tarball] |
| 11 | exit 1 |
| 12 | fi |
| 13 | |
| 14 | TARGET="$1" |
| 15 | DEBUGTOOLS_PATH="$2" |
| 16 | DEBUGTOOLS="$(basename "${DEBUGTOOLS_PATH}")" |
| 17 | |
| 18 | scp "${DEBUGTOOLS_PATH}" libncurses.so.5.9 libncursesw.so.5.9 "${TARGET}":/tmp/ |
| 19 | ssh "${TARGET}" <<-EOF |
| 20 | set -eou pipefail |
| 21 | |
| 22 | set -x |
| 23 | |
| 24 | on_exit() { |
| 25 | rm -f /tmp/'${DEBUGTOOLS}' |
| 26 | rm -f /tmp/libncurses.so.5.9 /tmp/libncursesw.so.5.9 |
| 27 | } |
| 28 | |
| 29 | trap on_exit EXIT |
| 30 | |
| 31 | # Deal with field mode |
| 32 | if ! mountpoint /usr/local |
| 33 | then |
| 34 | systemctl unmask usr-local.mount |
| 35 | systemctl start usr-local.mount |
| 36 | fi |
| 37 | |
| 38 | # Untar debug tools tarball into /usr/local |
| 39 | pushd /usr/local |
| 40 | tar -xvJf /tmp/"${DEBUGTOOLS}" |
| 41 | popd |
| 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 |
| 47 | mkdir -p bin |
| 48 | pushd /usr/local/bin |
| 49 | # which expand isn't enough as expand might be a symlink to a busybox not built with CONFIG_EXPAND |
| 50 | if ! echo "" | expand |
| 51 | then |
| 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 |
| 61 | fi |
| 62 | |
| 63 | # Fix the broken objdump link: https://github.com/openbmc/openbmc/issues/2878 |
| 64 | ln -sf arm-openbmc-linux-gnueabi-objdump objdump |
| 65 | popd |
| 66 | |
| 67 | # perf-config(1) is terrible and won't write your configuration unless the |
| 68 | # configuration file exists |
| 69 | touch \${HOME}/.perfconfig |
| 70 | |
| 71 | # Disable writing junk to \${HOME}, otherwise we fill up the RW volume and |
| 72 | # cause systemic failures. |
| 73 | LD_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 |
| 77 | pushd /usr/local/lib |
| 78 | if [ -f /tmp/libncurses.so.5.9 -o -f /tmp/libncursesw.so.5.9 ] |
| 79 | then |
| 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 |
| 85 | fi |
| 86 | popd |
| 87 | EOF |
| 88 | |
| 89 | echo |
| 90 | echo Make sure to run the following in your shell: |
| 91 | echo |
| 92 | echo export LD_LIBRARY_PATH=/usr/local/lib PYTHONPATH=/usr/local/lib/python2.7 |
| 93 | echo |