Skip to content

Commit 428c349

Browse files
almalinux8
1 parent c2bd080 commit 428c349

File tree

2 files changed

+324
-0
lines changed

2 files changed

+324
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
name: webserver centos8
2+
3+
on:
4+
workflow_dispatch:
5+
6+
webserver-build-test-almalinux8:
7+
name: webserver-almalinux8-build
8+
runs-on: ubuntu-20.04
9+
steps:
10+
- name: checkout otel webserver
11+
uses: actions/checkout@v3
12+
- name: setup buildx
13+
id: buildx
14+
uses: docker/setup-buildx-action@master
15+
with:
16+
install: true
17+
# - name: cache docker layers
18+
# uses: actions/cache@v3
19+
# with:
20+
# path: /tmp/buildx-cache/
21+
# key: apache-almalinux8-${{ github.sha }}
22+
# restore-keys: |
23+
# apache-almalinux8
24+
- name: setup docker image
25+
run: |
26+
cd instrumentation/otel-webserver-module
27+
docker buildx build -t apache_almalinux8 -f docker/almalinux8/Dockerfile \
28+
--load .
29+
- name: build
30+
run: |
31+
cat /etc/os-release
32+
java -version
33+
docker run -idt --name apache_almalinux8_container apache_almalinux8 /bin/bash
34+
cd instrumentation/otel-webserver-module
35+
docker exec apache_almalinux8_container bash -c \
36+
'cd /otel-webserver-module; rm -rf *;'
37+
docker cp . $(docker inspect --format="{{.Id}}" apache_almalinux8_container):/otel-webserver-module/
38+
docker exec apache_almalinux8_container bash -c \
39+
'cd /otel-webserver-module; rm -rf build; \
40+
cp -r /dependencies /otel-webserver-module/; \
41+
cp -r /build-dependencies /otel-webserver-module/; \
42+
./gradlew assembleWebServerModule'
43+
- name: unit test
44+
run: |
45+
docker exec apache_almalinux8_container bash -c \
46+
'cd /otel-webserver-module; ./gradlew runUnitTest'
47+
# - name: update cache
48+
# run: |
49+
# rm -rf /tmp/buildx-cache/apache_almalinux8
50+
# mv /tmp/buildx-cache/apache_almalinux8-new /tmp/buildx-cache/apache_almalinux8
51+
- name: copy artifacts
52+
id: artifacts
53+
run: |
54+
cd instrumentation/otel-webserver-module
55+
mkdir -p /tmp/apache_almalinux8/
56+
docker cp apache_almalinux8_container:/otel-webserver-module/build/opentelemetry-webserver-sdk-x64-linux.tgz \
57+
/tmp/apache_almalinux8/
58+
- name: upload artifacts
59+
uses: actions/upload-artifact@v3
60+
with:
61+
name: opentelemetry-webserver-sdk-x64-linux.tgz
62+
path: /tmp/apache_almalinux8/opentelemetry-webserver-sdk-x64-linux.tgz
Lines changed: 262 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,262 @@
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

Comments
 (0)