X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fscript%2Fsepia_bt.sh;fp=src%2Fceph%2Fsrc%2Fscript%2Fsepia_bt.sh;h=62786f2207bfe775839fe0069efa572f001c44bc;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/script/sepia_bt.sh b/src/ceph/src/script/sepia_bt.sh new file mode 100755 index 0000000..62786f2 --- /dev/null +++ b/src/ceph/src/script/sepia_bt.sh @@ -0,0 +1,182 @@ +#!/bin/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 <