/
generate-docker-base.sh
executable file
·179 lines (166 loc) · 6.48 KB
/
generate-docker-base.sh
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#!/bin/bash
# Makes base images for package-building in docker
# Usage: ./generate-docker-base.sh [versions]
# ie: ./generate-docker-base.sh
# updates all Dockerfiles
# or: ./generate-docker-base.sh centos-7
# updates the centos-7 dockerfile
# or: ./gengerate-docker-base.sh centos-newversion
# makes a new folder and puts a fresh dockerfile inside
# Inspired by https://github.com/docker/docker/blob/master/contrib/builder/rpm/generate.sh
set -eu
ABSOLUTE_PATH=$(cd `dirname "${BASH_SOURCE[0]}"` && pwd)
source $ABSOLUTE_PATH/functions.sh
cd $LSTORE_RELEASE_BASE/scripts/docker/builder
AFL_VERSION="2.32b"
# Parse comand line
DISTROS=( "$@" )
if [ ${#DISTROS[@]} -eq 0 ]; then
DISTROS=( */ )
fi
DISTROS=( "${DISTROS[@]%/}" )
for DISTRO in "${DISTROS[@]}"; do
PARENT="${DISTRO%-*}"
RELEASE="${DISTRO##*-}"
FROM="${PARENT}:${RELEASE}"
mkdir -p $DISTRO
GLOBAL_INSTALL=""
case $PARENT in
centos|fedora)
# Fedora claims:
# Yum command has been deprecated, redirecting to
# '/usr/bin/dnf groupinstall -y Development Tools'
# Should I rewrite this again to include dnf as a different packager
# When does dnf first exist?
PACKAGER="rpm"
PACKAGE_PREFIX="RUN yum install -y"
PACKAGE_POSTFIX="&& yum clean all"
JAVA_INSTALL=""
if [ $PARENT == "centos" ]; then
GLOBAL_INSTALL="RUN yum groupinstall -y 'Development Tools' && yum install -y epel-release git && yum clean all"
else
# Fedora includes epel-releease already
GLOBAL_INSTALL="RUN yum groupinstall -y 'Development Tools' && yum clean all"
fi
;;
ubuntu|debian)
PACKAGER="deb"
PACKAGE_PREFIX="RUN apt-get update && apt-get install -y"
PACKAGE_POSTFIX=" --no-install-recommends --no-upgrade && apt-get clean"
GLOBAL_INSTALL="RUN apt-get update && apt-get install -y build-essential fakeroot devscripts git ca-certificates --no-install-recommends --no-upgrade && apt-get clean"
JAVA_INSTALL="RUN apt-get update && apt-get install -y clang clang-tidy cppcheck openjdk-8-jdk-headless lcov gcovr python-sphinx doxygen --no-install-recommends --no-upgrade && apt-get clean && mkdir /tmp/afl && cd /tmp/afl && wget http://lcamtuf.coredump.cx/afl/releases/afl-${AFL_VERSION}.tgz && tar -xzf afl-${AFL_VERSION}.tgz && cd afl-${AFL_VERSION} && make install && cd / && rm -rf /tmp/afl"
;;
*)
fatal "Unrecognized base image type: ${PARENT}"
;;
esac
case $PACKAGER in
rpm)
ADDITIONAL_PACKAGES=(
apr-devel
apr-util-devel
autoconf
ccache
curl
createrepo
expat-devel
fuse-devel
leveldb-devel
libdb-dev
libtool
openssl-devel
python
rsync
tar
wget
which
zeromq3-devel
zlib-devel
)
;;
deb)
ADDITIONAL_PACKAGES=(
autoconf
ca-certificates
ccache
cmake
curl
debhelper
dpkg-dev
git-buildpackage
git-core
libapr1-dev
libaprutil1-dev
libdb-dev
libdistro-info-perl
libexpat1-dev
libfuse-dev
libleveldb-dev
libssl-dev
libtool
libz-dev
libzmq3-dev
lsb-release
python
rsync
wget
)
;;
*)
fatal "Unrecognized packaging system: ${PACKAGER}"
esac
if [ "$DISTRO" == "ubuntu-bionic" ]; then
ADDITIONAL_PACKAGES+=( clang
)
fi
case $RELEASE in
vivid|wily|xenial|yakkety|jessie)
ADDITIONAL_PACKAGES+=( libtool-bin )
;;
esac
if [ "${#ADDITIONAL_PACKAGES[0]}" -ne 0 ]; then
PACKAGE_INSTALL=$PACKAGE_PREFIX
for VAL in ${ADDITIONAL_PACKAGES[@]}; do
PACKAGE_INSTALL="$PACKAGE_INSTALL $VAL"
done
PACKAGE_INSTALL="$PACKAGE_INSTALL $PACKAGE_POSTFIX"
else
PACKAGE_INSTALL=""
fi
OUT="$DISTRO/Dockerfile"
cat > $OUT <<-EOF
#
# Autogenerated by lstore-release/scripts/generate-docker-base.sh
#
FROM $FROM
MAINTAINER http://lstore.org
ENV DEBIAN_FRONTEND=noninteractive
$GLOBAL_INSTALL
RUN cd /tmp && \
git clone https://github.com/Kitware/CMake.git && \
cd CMake && \
git checkout v3.5.2 && \
./bootstrap && \
make -j16 && \
make install && \
cd .. && \
rm -rf CMake
$PACKAGE_INSTALL
EOF
BUILDSLAVE_DIR=$LSTORE_RELEASE_BASE/scripts/docker/buildslave/$DISTRO
if [[ -d "$BUILDSLAVE_DIR" && ! -z "$JAVA_INSTALL" ]]; then
cat > $BUILDSLAVE_DIR/Dockerfile <<-EOF
#
# Autogenerated by lstore-release/scripts/generate-docker-base.sh
#
FROM lstore/builder:$DISTRO
MAINTAINER http://lstore.org
$JAVA_INSTALL
# Get additional Jenkins slave things
ARG VERSION=3.16
RUN curl --create-dirs -sSLo /usr/share/jenkins/slave.jar https://repo.jenkins-ci.org/public/org/jenkins-ci/main/remoting/${VERSION}/remoting-${VERSION}.jar \
&& chmod 755 /usr/share/jenkins \
&& chmod 644 /usr/share/jenkins/slave.jar
EOF
fi
done