summaryrefslogtreecommitdiff
path: root/src/ceph-debugpack.in
blob: 7bcafbf4af2f609e3e2b41764b5d0abf1455ee2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/sh



# if we start up as ./init-ceph, assume everything else is in the
# current directory too.
if [ `dirname $0` = "." ] && [ $PWD != "/etc/init.d" ]; then
    BINDIR=.
    LIBDIR=.
    ETCDIR=.
else
    BINDIR=@bindir@
    LIBDIR=@libdir@/ceph
    ETCDIR=@sysconfdir@/ceph
fi

BINDBGDIR="/usr/lib/debug/usr/bin"

usage_exit() {
    echo "usage: $0 [-c ceph.conf] <filename.tar.gz>"
    exit
}

wait_pid_exit() {
	pid=$1

	for i in {1..10}; do
		[ -e /proc/$pid ] || return
		sleep 1
	done
	if [ -e /proc/$pid ]; then
	    echo Killing pid $pid
	    kill $pid
	fi
}


. $LIBDIR/ceph_common.sh

dest_tar=""

while [ $# -ge 1 ]; do
case $1 in
    --conf | -c)
	    [ -z "$2" ] && usage_exit
	    shift
	    conf=$1
	    ;;
    *)
	    if [ "$dest_tar" != "" ]; then
	    	echo unrecognized option \'$1\'
	    	usage_exit
	    fi
	    dest_tar=$1
	    ;;
esac
shift
done

[ "$dest_tar" = "" ] && usage_exit

# get absolute path for dest_tar
[ `echo $dest_tar | cut -c 1` != "/" ] && dest_tar="`pwd`/$dest_tar"

bins="ceph-mon ceph-mds ceph-osd"
core_paths="/ $BINDIR $BINDBGDIR"
[ "$conf" = "" ] && conf=$ETCDIR/ceph.conf
log_path=`$CCONF -c $conf "log dir"`

[ -z "$conf" ] && usage_exit


tmp_path=`mktemp -d /tmp/ceph-debugpack.XXXXXXXXXX`
tmp_path_bin=$tmp_path/bin
tmp_path_bin_dbg=$tmp_path/bin.dbg
tmp_path_log=$tmp_path/out
tmp_path_core=$tmp_path/core
tmp_path_etc=$tmp_path/etc

echo tmp_path=$tmp_path

mkdir -p $tmp_path_bin
mkdir -p $tmp_path_bin_dbg
mkdir -p $tmp_path_log
mkdir -p $tmp_path_core
mkdir -p $tmp_path_etc


#copy the binaries

for name in $bins; do
	[ -e $BINDIR/$name ] && cp $BINDIR/$name $tmp_path_bin
	[ -e $BINDBGDIR/$name ] && cp $BINDBGDIR/$name $tmp_path_bin_dbg
done


# copy the logs
cp -rp $log_path/* $tmp_path_log

# copy cores (if exist)

for path in $core_paths; do
  files="`find $path -maxdepth 1 -name 'core*'`"
  if [ "$files" != "" ]; then
    for core_file in `ls $path/core*`; do
      tmp_core=`mktemp $tmp_path_core/core.XXXX`
      cp $core_file $tmp_core
    done
  fi
done

# copy config
cp $conf $tmp_path_etc

# other output
$BINDIR/ceph -s > $tmp_path_log/ceph-s &
wait_pid_exit $!
$BINDIR/ceph osd dump -o $tmp_path_log/ceph-osd-dump &
wait_pid_exit $!
$BINDIR/ceph mds dump -o $tmp_path_log/ceph-mds-dump &
wait_pid_exit $!
$BINDIR/ceph pg dump -o $tmp_path_log/ceph-pg-dump &
wait_pid_exit $!


# now create a tarball
tmp_path_dir=`echo $tmp_path | cut -d / -f 3`
tar cvfz $dest_tar -C /tmp $tmp_path_dir
rm -fR $tmp_path