blob: eac98183eeec218edb5032faef9b5968fe7ef77d (
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
|
#!/usr/bin/env bash
# This can be run from e.g. the senta machines which have docker available. You
# may need to run this script with sudo.
#
# Once you have booted into the image, you should be able to debug the core file:
# $ gdb -q /ceph/teuthology-archive/.../coredump/1500013578.8678.core
#
# You may want to install other packages (yum) as desired.
#
# Once you're finished, please delete old images in a timely fashion.
set -e
CACHE=""
function run {
printf "%s\n" "$*"
"$@"
}
function main {
eval set -- $(getopt --name "$0" --options 'h' --longoptions 'help,no-cache' -- "$@")
while [ "$#" -gt 0 ]; do
case "$1" in
-h|--help)
printf '%s: [--no-cache] <branch>[:sha1] <environment>\n' "$0"
exit 0
;;
--no-cache)
CACHE="--no-cache"
shift
;;
--)
shift
break
;;
esac
done
if [ -z "$1" ]; then
printf "specify the branch [default \"master:latest\"]: "
read source
if [ -z "$source" ]; then
source=master:latest
fi
else
branch="$1"
fi
if [ "${branch%%:*}" != "${branch}" ]; then
sha=${branch##*:}
else
sha=latest
fi
branch=${branch%%:*}
printf "branch: %s\nsha1: %s\n" "$branch" "$sha"
if [ -z "$2" ]; then
printf "specify the build environment [default \"centos:7\"]: "
read env
if [ -z "$env" ]; then
env=centos:7
fi
else
env="$2"
fi
printf "env: %s\n" "$env"
if [ -n "$SUDO_USER" ]; then
user="$SUDO_USER"
elif [ -n "$USER" ]; then
user="$USER"
else
user="$(whoami)"
fi
tag="${user}:ceph-ci-${branch}-${sha}-${env/:/-}"
T=$(mktemp -d)
pushd "$T"
if grep ubuntu <<<"$env" > /dev/null 2>&1; then
# Docker makes it impossible to access anything outside the CWD : /
cp -- /ceph/shaman/cephdev.asc .
cat > Dockerfile <<EOF
FROM ${env}
WORKDIR /root
RUN apt-get update --yes --quiet && \
apt-get install --yes --quiet screen gdb software-properties-common apt-transport-https curl
COPY cephdev.asc cephdev.asc
RUN apt-key add cephdev.asc && \
curl -L https://shaman.ceph.com/api/repos/ceph/${branch}/${sha}/${env/://}/repo | tee /etc/apt/sources.list.d/ceph_dev.list && \
apt-get update --yes && \
DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical apt-get --assume-yes -q --no-install-recommends install -o Dpkg::Options::=--force-confnew --allow-unauthenticated ceph ceph-osd-dbg ceph-mds-dbg ceph-mgr-dbg ceph-mon-dbg ceph-common-dbg ceph-fuse-dbg ceph-test-dbg radosgw-dbg python3-cephfs python3-rados
EOF
time run docker build $CACHE --tag "$tag" .
else # try RHEL flavor
time run docker build $CACHE --tag "$tag" - <<EOF
FROM ${env}
WORKDIR /root
RUN yum update -y && \
yum install -y screen epel-release wget psmisc ca-certificates gdb
RUN wget -O /etc/yum.repos.d/ceph-dev.repo https://shaman.ceph.com/api/repos/ceph/${branch}/${sha}/centos/7/repo && \
yum clean all && \
yum upgrade -y && \
yum install -y ceph ceph-debuginfo ceph-fuse python34-rados python34-cephfs
EOF
fi
popd
rm -rf -- "$T"
printf "built image %s\n" "$tag"
run docker run -ti -v /ceph:/ceph:ro "$tag"
return 0
}
main "$@"
|