1+ FROM almalinux:8.10
2+
3+ ARG BUILD_NUMBER
4+
5+ LABEL NAME=apm/build-image-webserver-agent-centos6-x64 VERSION=$BUILD_NUMBER
6+
7+ ENV GOSU_ARCH amd64
8+ ENV JDK_ARCH x64
9+
10+ ARG PYTHON_VERSION="2.7.18"
11+ ARG CMAKE_VERSION="3.20"
12+ ARG CMAKE_0VERSION="3.20.0"
13+ ARG GRPC_VERSION="1.36.4"
14+ ARG OPENTELEMETRY_VERSION="1.2.0"
15+ ARG BOOST_VERSION="1.75.0"
16+ ARG BOOST_FILENAME="boost_1_75_0"
17+ ARG APR_VERSION="1.7.0"
18+ ARG EXPAT_VERSION="2.3.0"
19+ ARG EXPAT_RVERSION="R_2_3_0"
20+ ARG APRUTIL_VERSION="1.6.1"
21+ ARG AUTOCONF_VERSION="2.68"
22+ ARG LIBTOOL_VERSION="2.4.6"
23+ ARG LOG4CXX_VERSION="0.11.0"
24+ ARG GTEST_VERSION="1.10.0"
25+ ARG AUTOMAKE_VERSION="1.16.3"
26+ ARG PERL_VERSION="5.20.2"
27+ ARG PERL_CPANVERSION="5.0"
28+ ARG PCRE_VERSION="8.44"
29+ ARG NGINX_VERSION="1.26.0"
30+
31+ # create default non-root user
32+ RUN groupadd -r swuser && useradd -u 1000 -g swuser -m -s /sbin/nologin -c "default non-root user" swuser
33+
34+ RUN chmod -R 777 /opt
35+
36+ # install required packages
37+
38+
39+ RUN dnf install wget -y \
40+ && dnf install java-1.8.0-openjdk -y \
41+ && dnf install java-1.8.0-openjdk-devel -y \
42+ && dnf install pcre-devel -y \
43+ && dnf install httpd -y \
44+ && dnf install git -y
45+
46+ RUN dnf groupinstall "Development Tools" -y \
47+ && dnf install wget bzip2 xz-devel openssl-devel libffi-devel zlib-devel -y
48+
49+
50+ # install python 2.7.18
51+ RUN wget http://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz \
52+ && unxz Python-${PYTHON_VERSION}.tar.xz \
53+ && tar -xf Python-${PYTHON_VERSION}.tar \
54+ && cd Python-${PYTHON_VERSION} && ./configure --prefix=/usr/local && make && make install \
55+ && cd .. \
56+ && rm -rf Python-${PYTHON_VERSION}.tar.xz && rm -rf Python-${PYTHON_VERSION}.tar
57+
58+
59+ ENV GOSU_VERSION=1.10
60+
61+ RUN curl -o /usr/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64" \
62+ && chmod +x /usr/bin/gosu \
63+ # Verify that the binary works
64+ && gosu nobody true
65+
66+ # install cmake 3.20
67+ RUN wget https://cmake.org/files/v${CMAKE_VERSION}/cmake-${CMAKE_0VERSION}-linux-x86_64.tar.gz \
68+ && tar -xvf cmake-${CMAKE_0VERSION}-linux-x86_64.tar.gz \
69+ && cd cmake-${CMAKE_0VERSION}-linux-x86_64 \
70+ && cp -rf * /usr/local/ \
71+ && cd .. && rm -rf cmake-${CMAKE_0VERSION}-linux-x86_64.tar.gz
72+
73+
74+ # install grpc. If planning to upgrade, make sure sed command works
75+ RUN git clone https://github.com/grpc/grpc \
76+ && cd grpc \
77+ && git checkout tags/v${GRPC_VERSION} -b v${GRPC_VERSION} \
78+ && git submodule update --init \
79+ && sed -i "s/target_link_libraries(bssl ssl crypto)/target_link_libraries(bssl ssl crypto rt)/g" third_party/boringssl-with-bazel/CMakeLists.txt \
80+ && mkdir -p cmake/build \
81+ && cd cmake/build \
82+ && cmake ../.. -DgRPC_INSTALL=ON -DCMAKE_BUILD_TYPE=Release -DgRPC_ABSL_PROVIDER=module -DgRPC_CARES_PROVIDER=module -DgRPC_PROTOBUF_PROVIDER=module -DgRPC_RE2_PROVIDER=module -DgRPC_SSL_PROVIDER=module -DgRPC_ZLIB_PROVIDER=module \
83+ && make \
84+ && make install \
85+ && cd ../../..
86+
87+
88+ # Create dependencies folder to store all dependencies.
89+ RUN mkdir -p dependencies
90+
91+ # install boost version 1.75.0
92+ RUN wget https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/${BOOST_FILENAME}_rc1.tar.gz \
93+ && tar -xvf ${BOOST_FILENAME}_rc1.tar.gz \
94+ && cd ${BOOST_FILENAME} \
95+ && ./bootstrap.sh --with-libraries=filesystem,system --prefix=/dependencies/boost/${BOOST_VERSION}/ \
96+ && ./b2 install define=BOOST_ERROR_CODE_HEADER_ONLY link=static threading=multi cxxflags="-fvisibility=hidden -fPIC" cflags="-fvisibility=hidden -fPIC" \
97+ && cd .. && rm -rf ${BOOST_FILENAME} && rm ${BOOST_FILENAME}_rc1.tar.gz
98+
99+ # install Apr
100+ RUN mkdir -p dependencies/apr/${APR_VERSION} \
101+ && wget https://archive.apache.org/dist/apr/apr-${APR_VERSION}.tar.gz --no-check-certificate \
102+ && tar -xf apr-${APR_VERSION}.tar.gz \
103+ && cd apr-${APR_VERSION} \
104+ && ./configure --prefix=/dependencies/apr/${APR_VERSION} --enable-static=yes --enable-shared=no --with-pic && echo $? \
105+ && make -j 6 \
106+ && make install \
107+ && cd ../ && rm -rf apr-${APR_VERSION} && rm -rf apr-${APR_VERSION}.tar.gz
108+
109+ # install libexpat
110+ RUN mkdir -p dependencies/expat/${EXPAT_VERSION} \
111+ && wget https://github.com/libexpat/libexpat/releases/download/${EXPAT_RVERSION}/expat-${EXPAT_VERSION}.tar.gz --no-check-certificate \
112+ && tar -xf expat-${EXPAT_VERSION}.tar.gz \
113+ && cd expat-${EXPAT_VERSION} \
114+ && ./configure --prefix=/dependencies/expat/${EXPAT_VERSION} --enable-static=yes --enable-shared=no --with-pic && echo $? \
115+ && make -j 6 \
116+ && make install \
117+ && cd ../ && rm -rf expat-${EXPAT_VERSION} && rm -rf expat-${EXPAT_VERSION}.tar.gz
118+
119+ # install Apr-util
120+ RUN mkdir -p dependencies/apr-util/${APRUTIL_VERSION} \
121+ && wget https://archive.apache.org/dist/apr/apr-util-${APRUTIL_VERSION}.tar.gz --no-check-certificate \
122+ && tar -xf apr-util-${APRUTIL_VERSION}.tar.gz \
123+ && cd apr-util-${APRUTIL_VERSION} \
124+ && ./configure --prefix=/dependencies/apr-util/${APRUTIL_VERSION} --enable-static=yes --enable-shared=no --with-pic --with-apr=/dependencies/apr/${APR_VERSION} --with-expat=/dependencies/expat/${EXPAT_VERSION} && echo $? \
125+ && make -j 6 \
126+ && make install \
127+ && cd ../ && rm -rf apr-util-${APRUTIL_VERSION} && rm -rf apr-util-${APRUTIL_VERSION}.tar.gz
128+
129+
130+ # install autoconf
131+ RUN wget --no-check-certificate https://ftp.gnu.org/gnu/autoconf/autoconf-${AUTOCONF_VERSION}.tar.gz \
132+ && tar xzf autoconf-${AUTOCONF_VERSION}.tar.gz \
133+ && cd autoconf-${AUTOCONF_VERSION} \
134+ && ./configure --prefix=/usr/ && make -j && make install && autoconf -V \
135+ && cd .. && rm -rf autoconf-${AUTOCONF_VERSION}.tar.gz
136+
137+ # install automake
138+ RUN wget --no-check-certificate https://ftp.gnu.org/gnu/automake/automake-${AUTOMAKE_VERSION}.tar.gz \
139+ && tar xzf automake-${AUTOMAKE_VERSION}.tar.gz \
140+ && cd automake-${AUTOMAKE_VERSION} \
141+ && ./configure --prefix=/usr --libdir=/usr/lib64 \
142+ && make -j && make install \
143+ && automake --version \
144+ && cd .. && rm -rf automake-${AUTOMAKE_VERSION}.tar.gz
145+
146+ # install libtool
147+ RUN wget --no-check-certificate https://ftpmirror.gnu.org/libtool/libtool-${LIBTOOL_VERSION}.tar.gz \
148+ && tar xzf libtool-${LIBTOOL_VERSION}.tar.gz \
149+ && cd libtool-${LIBTOOL_VERSION} \
150+ && ./configure --prefix=/usr \
151+ && make -j 6 \
152+ && make install \
153+ && libtool --version \
154+ && cd .. && rm -rf libtool--${LIBTOOL_VERSION}.tar.gz
155+
156+ # install log4cxx
157+ RUN mkdir -p dependencies/apache-log4cxx/${LOG4CXX_VERSION} \
158+ && wget https://archive.apache.org/dist/logging/log4cxx/${LOG4CXX_VERSION}/apache-log4cxx-${LOG4CXX_VERSION}.tar.gz --no-check-certificate \
159+ && tar -xf apache-log4cxx-${LOG4CXX_VERSION}.tar.gz \
160+ && cd apache-log4cxx-${LOG4CXX_VERSION} \
161+ && ./configure --prefix=/dependencies/apache-log4cxx/${LOG4CXX_VERSION}/ --enable-static=yes --enable-shared=no --with-pic --with-apr=/dependencies/apr/${APR_VERSION}/ --with-apr-util=/dependencies/apr-util/${APRUTIL_VERSION}/ && echo $? \
162+ && make -j 6 ; echo 0 \
163+ && automake --add-missing \
164+ && make install \
165+ && cd .. && rm -rf apache-log4cxx-${LOG4CXX_VERSION}.tar.gz && rm -rf apache-log4cxx-${LOG4CXX_VERSION}
166+
167+ # install opentelemetry
168+ RUN mkdir -p dependencies/opentelemetry/${OPENTELEMETRY_VERSION}/lib \
169+ && mkdir -p dependencies/opentelemetry/${OPENTELEMETRY_VERSION}/include \
170+ && git clone https://github.com/open-telemetry/opentelemetry-cpp \
171+ && cd opentelemetry-cpp/ \
172+ && git checkout tags/v${OPENTELEMETRY_VERSION} -b v${OPENTELEMETRY_VERSION} \
173+ && git submodule update --init --recursive \
174+ && mkdir build \
175+ && cd build \
176+ && cmake .. -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DWITH_OTLP=ON -DCMAKE_INSTALL_PREFIX=/dependencies/opentelemetry/${OPENTELEMETRY_VERSION} \
177+ && cmake --build . --target all \
178+ && cd .. \
179+ && find . -name "*.so" -type f -exec cp {} /dependencies/opentelemetry/${OPENTELEMETRY_VERSION}/lib/ \; \
180+ && cp build/libopentelemetry_proto.a /dependencies/opentelemetry/${OPENTELEMETRY_VERSION}/lib \
181+ && cp -r api/include/ /dependencies/opentelemetry/${OPENTELEMETRY_VERSION}/ \
182+ && for dir in exporters/*; do if [ -d "$dir" ]; then cp -rf "$dir/include" /dependencies/opentelemetry/${OPENTELEMETRY_VERSION}/; fi; done \
183+ && cp -r sdk/include/ /dependencies/opentelemetry/${OPENTELEMETRY_VERSION}/ \
184+ && cp -r build/generated/third_party/opentelemetry-proto/opentelemetry/proto/ /dependencies/opentelemetry/${OPENTELEMETRY_VERSION}/include/opentelemetry/ \
185+ && cd .. && rm -rf opentelemetry-cpp
186+
187+ # install googletest
188+ RUN mkdir -p dependencies/googletest/${GTEST_VERSION}/ \
189+ && wget https://github.com/google/googletest/archive/refs/tags/release-${GTEST_VERSION}.tar.gz --no-check-certificate \
190+ && tar -xf release-${GTEST_VERSION}.tar.gz \
191+ && cd googletest-release-${GTEST_VERSION}/ \
192+ && mkdir build && cd build \
193+ && cmake .. -DCMAKE_INSTALL_PREFIX=/dependencies/googletest/${GTEST_VERSION}/ \
194+ && make \
195+ && make install \
196+ && cd ../.. && rm -rf release-${GTEST_VERSION}.tar.gz && rm -rf googletest-release-${GTEST_VERSION}/
197+
198+ # install pcre
199+ RUN mkdir -p dependencies/pcre/${PCRE_VERSION}/ \
200+ && wget https://ftp.exim.org/pub/pcre/pcre-${PCRE_VERSION}.tar.gz --no-check-certificate \
201+ && tar -xvf pcre-${PCRE_VERSION}.tar.gz \
202+ && cd pcre-${PCRE_VERSION} \
203+ && ./configure --prefix=/dependencies/pcre/${PCRE_VERSION} --enable-jit \
204+ && make && make install \
205+ && cd .. && rm -rf ${PCRE_VERSION}.tar.gz && rm -rf pcre-${PCRE_VERSION}
206+
207+ # Installing Apache and apr source code
208+ RUN mkdir build-dependencies \
209+ && wget --no-check-certificate https://archive.apache.org/dist/apr/apr-${APR_VERSION}.tar.gz \
210+ && tar -xf apr-${APR_VERSION}.tar.gz \
211+ && mv -f apr-${APR_VERSION} build-dependencies \
212+ && wget --no-check-certificate https://archive.apache.org/dist/apr/apr-util-${APRUTIL_VERSION}.tar.gz \
213+ && tar -xf apr-util-${APRUTIL_VERSION}.tar.gz \
214+ && mv -f apr-util-${APRUTIL_VERSION} build-dependencies \
215+ && wget --no-check-certificate http://archive.apache.org/dist/httpd/httpd-2.2.31.tar.gz \
216+ && tar -xf httpd-2.2.31.tar.gz \
217+ && mv -f httpd-2.2.31 build-dependencies \
218+ && wget --no-check-certificate http://archive.apache.org/dist/httpd/httpd-2.4.23.tar.gz \
219+ && tar -xf httpd-2.4.23.tar.gz \
220+ && mv -f httpd-2.4.23 build-dependencies
221+
222+ # install nginx
223+ RUN wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz \
224+ && tar -xvf nginx-${NGINX_VERSION}.tar.gz -C /build-dependencies \
225+ && rm -rf nginx-${NGINX_VERSION}.tar.gz
226+
227+ # Build Webserver Module
228+ COPY . /otel-webserver-module
229+
230+ RUN cp -r /dependencies /otel-webserver-module/ \
231+ && cp -r /build-dependencies /otel-webserver-module/ \
232+ && cd otel-webserver-module \
233+ && ./gradlew assembleWebServerModule
234+
235+ RUN echo '[nginx-stable]' >> /etc/yum.repos.d/nginx.repo \
236+ && echo 'name=nginx stable repo' >> /etc/yum.repos.d/nginx.repo \
237+ && echo 'baseurl=http://nginx.org/packages/centos/8/$basearch/' >> /etc/yum.repos.d/nginx.repo \
238+ && echo 'gpgcheck=1' >> /etc/yum.repos.d/nginx.repo \
239+ && echo 'enabled=1' >> /etc/yum.repos.d/nginx.repo \
240+ && echo 'gpgkey=https://nginx.org/keys/nginx_signing.key' >> /etc/yum.repos.d/nginx.repo \
241+ && echo 'module_hotfixes=true' >> /etc/yum.repos.d/nginx.repo \
242+ && dnf install nginx-${NGINX_VERSION} -y
243+
244+ RUN cd /otel-webserver-module/build \
245+ && tar -xf opentelemetry-webserver-sdk-x64-linux.tgz \
246+ && mv -f opentelemetry-webserver-sdk /opt/ \
247+ && cd ../ \
248+ && cp opentelemetry_module.conf /etc/httpd/conf/ \
249+ && sed -i "s/libmod_apache_otel22.so/libmod_apache_otel.so/g" /etc/httpd/conf/opentelemetry_module.conf \
250+ && echo 'Include conf/opentelemetry_module.conf' >> /etc/httpd/conf/httpd.conf \
251+ && cd /opt/opentelemetry-webserver-sdk \
252+ && ./install.sh \
253+ && cd /
254+
255+
256+ RUN cp /otel-webserver-module/conf/nginx/opentelemetry_module.conf /opt/ \
257+ && sed -i '8i load_module /opt/opentelemetry-webserver-sdk/WebServerModule/Nginx/1.26.2/ngx_http_opentelemetry_module.so;' /etc/nginx/nginx.conf \
258+ && sed -i '33i include /opt/opentelemetry_module.conf;' /etc/nginx/nginx.conf \
259+ && cd /
260+
261+ COPY entrypoint.sh /usr/local/bin/
262+ ENTRYPOINT ["entrypoint.sh" ]
0 commit comments