summaryrefslogtreecommitdiffstats
path: root/src/script/sepia_bt.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/script/sepia_bt.sh
parentInitial commit. (diff)
downloadceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.tar.xz
ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.zip
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/script/sepia_bt.sh')
-rwxr-xr-xsrc/script/sepia_bt.sh182
1 files changed, 182 insertions, 0 deletions
diff --git a/src/script/sepia_bt.sh b/src/script/sepia_bt.sh
new file mode 100755
index 00000000..f2d74aa8
--- /dev/null
+++ b/src/script/sepia_bt.sh
@@ -0,0 +1,182 @@
+#!/usr/bin/env bash
+
+function die() {
+ echo $@ >&2
+ exit 1
+}
+
+function usage() {
+ echo "bt: $0 -c core_path [-d distro] [-C directory] [-v]"
+ exit 1
+}
+
+function log() {
+ if [ -n "$verbose" ]; then
+ echo $*
+ fi
+}
+
+function get_machine() {
+ local core_path=$1
+ local machine=${core_path%/coredump/*}
+ echo $(basename $machine)
+}
+
+function get_t_dir() {
+ local core_path=$1
+ echo ${core_path%/remote/*}
+}
+
+while getopts "c:C:d:v" opt
+do
+ case $opt in
+ c) core_path=$OPTARG;;
+ C) wd=$OPTARG;;
+ d) codename=$OPTARG;;
+ v) verbose=1;;
+ *) usage;;
+ esac
+done
+
+if [ -z $core_path ]; then
+ usage
+fi
+
+sha1=$(strings $core_path | gawk 'BEGIN{ FS = "=" } /^CEPH_REF/{print $2}')
+if [ -z $sha1 ]; then
+ teuthology_log=$(get_t_dir $core_path)/teuthology.log
+ sha1=$(grep -m1 -A1 "Running command: sudo ceph --version" ${teuthology_log} | tail -n1 | grep -oP "ceph version [^ ]+ \(\K[^\) ]+")
+fi
+
+if [ -z $distro ]; then
+ machine=$(get_machine $core_path)
+ teuthology_log=$(get_t_dir $core_path)/teuthology.log
+ if [ ! -r ${teuthology_log} ]; then
+ die "missing distro, and unable to read it from ${teuthology_log}"
+ fi
+ ld=$(grep -m1 -A1 "${machine}:Running.*linux_distribution" ${teuthology_log} | tail -n1 | grep -oP "\(\K[^\)]+")
+ distro=$(echo $ld | gawk -F ", " '{print $1}' | sed s/\'//g)
+ distro=$(echo $distro | tr '[:upper:]' '[:lower:]')
+ distro_ver=$(echo $ld | gawk -F ", " '{print $2}' | sed s/\'//g)
+ codename=$(echo $ld | gawk -F ", " '{print $3}' | sed s/\'//g)
+ if [ "$distro" == "centos linux" ]; then
+ # there is chance that it's actually something different,
+ # but we take it as centos7 anyway.
+ distro=centos
+ distro_ver=7
+ fi
+else
+ case $codename in
+ xenial)
+ distro=ubuntu
+ distro_ver=16.04
+ ;;
+ trusty)
+ distro=ubuntu
+ distro_ver=14.04
+ ;;
+ centos7)
+ distro=centos
+ distro_ver=7
+ ;;
+ *)
+ die "unknown distro: $distro"
+ ;;
+ esac
+fi
+
+# try to figure out a name for working directory
+if [ -z $wd ]; then
+ run=${core_path%/remote/*}
+ job_id=${run#/a/}
+ if [ $job_id != $core_path ]; then
+ # use the run/job for the working dir
+ wd=$job_id
+ fi
+fi
+
+if [ -z $wd ]; then
+ wd=$(basename $core_path)
+ wd=${wd%.*}
+ echo "unable to figure out the working directory, using ${wd}"
+fi
+
+log "creating ${wd}"
+mkdir -p $wd
+cd $wd
+
+prog=$(file $core_path | grep -oP "from '\K[^']+" | cut -d' ' -f1)
+case $prog in
+ ceph_test_*)
+ pkgs="ceph-test librados2"
+ ;;
+ ceph-osd|ceph-mon)
+ pkgs=$prog
+ ;;
+ */python*)
+ prog=$(basename $prog)
+ pkgs=librados2
+ ;;
+ rados)
+ pkgs="ceph-common librados2 libradosstriper1"
+ ;;
+ *)
+ die "unknown prog: $prog"
+ ;;
+esac
+
+flavor=default
+arch=x86_64
+
+release=$(strings $core_path | grep -m1 -oP '/build/ceph-\K[^/]+')
+if [ -z $release ]; then
+ teuthology_log=$(get_t_dir $core_path)/teuthology.log
+ release=$(grep -m1 -A1 "Running command: sudo ceph --version" ${teuthology_log} | tail -n1 | grep -oP "ceph version \K[^ ]+")
+fi
+
+case $distro in
+ ubuntu)
+ pkg_path=pool/main/c/ceph/%s_%s-1${codename}_amd64.deb
+ for p in $pkgs; do
+ t="$t $p $p-dbg"
+ done
+ pkgs="$t"
+ ;;
+ centos)
+ pkg_path=${arch}/%s-%s.el7.x86_64.rpm
+ # 11.0.2-1022-g5b25cd3 => 11.0.2-1022.g5b25cd3
+ release=$(echo $release | sed s/-/./2)
+ pkgs="$pkgs ceph-debuginfo"
+ ;;
+ *)
+ die "unknown distro: $distro"
+ ;;
+esac
+
+query_url="https://shaman.ceph.com/api/search?status=ready&project=ceph&flavor=${flavor}&distros=${distro}%2F${distro_ver}%2F${arch}&sha1=${sha1}"
+repo_url=`curl -L -s "${query_url}" | jq -r '.[0] | .url'`
+pkg_url=${repo_url}/${pkg_path}
+log "repo url is ${repo_url}"
+
+for pkg in ${pkgs}; do
+ url=`printf $pkg_url $pkg $release`
+ log "downloading ${url}"
+ curl -O -L -C - --silent --fail --insecure $url
+ fname=`basename $url`
+ case $fname in
+ *.deb)
+ ar p `basename $fname` data.tar.xz | tar xJv;;
+ *.rpm)
+ rpm2cpio < $fname | cpio -id;;
+ *)
+ esac
+done
+
+cat > preclude.gdb <<EOF
+set sysroot .
+set debug-file-directory ./usr/lib/debug
+set solib-search-path ./usr/lib64
+file ./usr/bin/$prog
+core $core_path
+EOF
+gdb -x preclude.gdb