]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
script/sepia_bt.sh: a script to prepare for debugging on teuthology@sepia 12012/head
authorKefu Chai <kchai@redhat.com>
Wed, 16 Nov 2016 04:07:54 +0000 (12:07 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 16 Nov 2016 04:09:27 +0000 (12:09 +0800)
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/script/sepia_bt.sh [new file with mode: 0755]

diff --git a/src/script/sepia_bt.sh b/src/script/sepia_bt.sh
new file mode 100755 (executable)
index 0000000..3803b76
--- /dev/null
@@ -0,0 +1,73 @@
+#!/bin/sh
+
+function die() {
+    echo $@ >&2
+    exit 1
+}
+
+function usage() {
+    echo "bt: $0 -j job_name -c core_path -v version -d distro -s sha1"
+    exit 1
+}
+
+while getopts  "j:c:v:d:s:" opt
+do
+    case $opt in
+        j) run=$(dirname $OPTARG);
+           job=$(basename $OPTARG);;
+        c) core_path=$OPTARG;;
+        v) release=$OPTARG;;
+        s) sha1=$OPTARG;;
+        d) distro=$OPTARG;;
+        *) usage;;
+    esac
+done
+
+if [ -z $run ] || [ -z $core_path ] || [ -z $release ] || [ -z $distro ] || [ -z $sha1 ]; then
+    usage
+fi
+
+prog=`file $core_path | grep -oP "from '\K[^ ]+"`
+case $prog in
+    ceph-osd|ceph-mon)
+        ;;
+    *)
+        die "unknown prog: $prog";;
+esac
+
+case $distro in
+    ubuntu)
+        base_url=http://gitbuilder.ceph.com/ceph-deb-trusty-x86_64-basic/sha1/%s/pool/main/c/ceph/%s_%s-1trusty_amd64.deb;
+        pkgs="$prog $prog-dbg";;
+    centos)
+        # 11.0.2-1022-g5b25cd3 => 11.0.2-1022.g5b25cd3
+        release=$(echo $release | sed s/-/./2)
+        base_url=http://gitbuilder.ceph.com/ceph-rpm-centos7-x86_64-basic/sha1/%s/x86_64/%s-%s.x64_64.rpm;
+        pkgs="$prog ceph-debuginfo"
+    *)
+        die "unknown distro: $distro";;
+esac
+
+mkdir -p $run/$job
+cd $run/$job
+
+for pkg in pkgs; do
+    url=`printf $base_url $sha1 $pkg $release`
+    wget $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
+file ./usr/bin/$prog
+core $core_path
+EOF
+gdb -x preclude.gdb