opentelemetry-cpp-contrib icon indicating copy to clipboard operation
opentelemetry-cpp-contrib copied to clipboard

Can not build on Alpine 3.18 with Nginx 1.24.0 stable verison

Open vndroid opened this issue 1 year ago • 1 comments

Describe your environment

nginx: 1.24.0 Alpine Linux: 3.18 docker: 24.0.5

Steps to reproduce

Run a demo with docker container:

docker container run --rm -it alpine:3.18 /bin/sh

Install depend and build opentelemetry-cpp first.

mkdir /src
cd /src
apk add --no-cache gtest-dev benchmark-dev
apk add --no-cache build-base cmake perl git mercurial linux-headers pkgconfig
git clone --recurse-submodules https://github.com/open-telemetry/opentelemetry-cpp
cd opentelemetry-cpp/
mkdir build
cd build
cmake ..
cmake --build . --target all
ctest
cmake --install .

This part content according to the website Building opentelemetry-cpp.

Then we can get the nginx source code and build the nginx ext.

NGINX_VERSION=1.24.0
set -x \
&& cd /src \
&& apk add --no-cache pcre2-dev openssl-dev \
&& hg clone https://hg.nginx.org/nginx \
&& git clone https://github.com/open-telemetry/opentelemetry-cpp-contrib.git \
&& cd /src/nginx \
&& hg up release-$NGINX_VERSION \
&& auto/configure \
    --prefix=/etc/nginx \
	--sbin-path=/usr/sbin/nginx \
	--modules-path=/usr/lib/nginx/modules \
	--conf-path=/etc/nginx/nginx.conf \
	--error-log-path=/var/log/nginx/error.log \
	--http-log-path=/var/log/nginx/access.log \
	--pid-path=/var/run/nginx.pid \
	--lock-path=/var/run/nginx.lock \
	--http-client-body-temp-path=/var/cache/nginx/client_temp \
	--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
	--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
	--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
	--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
	--with-perl_modules_path=/usr/lib/perl5/vendor_perl \
	--user=nginx \
	--group=nginx \
	--with-compat \
	--with-file-aio \
	--with-threads \
	--with-http_addition_module \
	--with-http_auth_request_module \
	--with-http_dav_module \
	--with-http_flv_module \
	--with-http_gunzip_module \
	--with-http_gzip_static_module \
	--with-http_mp4_module \
	--with-http_random_index_module \
	--with-http_realip_module \
	--with-http_secure_link_module \
	--with-http_slice_module \
	--with-http_ssl_module \
	--with-http_stub_status_module \
	--with-http_sub_module \
	--with-http_v2_module \
	--with-mail \
	--with-mail_ssl_module \
	--with-stream \
	--with-stream_realip_module \
	--with-stream_ssl_module \
	--with-stream_ssl_preread_module \
    --add-dynamic-module=/src/opentelemetry-cpp-contrib/instrumentation/nginx \
&& make modules -j1

Now we can see the first Error:

/src/opentelemetry-cpp-contrib/instrumentation/nginx/src/otel_ngx_module.cpp:5:10: fatal error: opentelemetry/exporters/otlp/otlp_grpc_exporter.h: No such file or directory
    5 | #include <opentelemetry/exporters/otlp/otlp_grpc_exporter.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [objs/Makefile:1880: objs/addon/src/otel_ngx_module.o] Error 1

I find it and soft link it to the system include directory.

find / -name "otlp_grpc_exporter.h"
+ find / -name otlp_grpc_exporter.h
/src/opentelemetry-cpp-contrib/exporters/geneva-trace/third_party/opentelemetry-cpp/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter.h
/src/opentelemetry-cpp/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_exporter.h

fix it use:

ln -s /src/opentelemetry-cpp/exporters/otlp/include/opentelemetry/exporters/otlp/ /usr/local/include/opentelemetry/exporters/otlp

It look like ok, let's go on. The second Error:

In file included from /src/opentelemetry-cpp-contrib/instrumentation/nginx/src/otel_ngx_module.cpp:5:
/usr/local/include/opentelemetry/exporters/otlp/otlp_grpc_exporter.h:11:10: fatal error: opentelemetry/proto/collector/trace/v1/trace_service.grpc.pb.h: No such file or directory
   11 | #include "opentelemetry/proto/collector/trace/v1/trace_service.grpc.pb.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [objs/Makefile:1880: objs/addon/src/otel_ngx_module.o] Error 1

I can not find it everywhere in container. How to deal with this problem?

Another issues

By the way, there are a lot of warning messages during the compilation of the program.

/src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc: In function 'void {anonymous}::BM_AlwaysOffSamplerConstruction(benchmark::State&)':
/src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc:30:29: warning: 'typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type benchmark::DoNotOptimize(const Tp&) [with Tp = opentelemetry::v1::sdk::trace::AlwaysOffSampler; typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type = void]' is deprecated: The const-ref version of this method can permit undesired compiler optimizations in benchmarks [-Wdeprecated-declarations]
   30 |     benchmark::DoNotOptimize(AlwaysOffSampler());
      |     ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from /src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc:17:
/usr/include/benchmark/benchmark.h:496:5: note: declared here
  496 |     DoNotOptimize(Tp const& value) {
      |     ^~~~~~~~~~~~~
/src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc: In function 'void {anonymous}::BM_AlwaysOnSamplerConstruction(benchmark::State&)':
/src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc:40:29: warning: 'typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type benchmark::DoNotOptimize(const Tp&) [with Tp = opentelemetry::v1::sdk::trace::AlwaysOnSampler; typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type = void]' is deprecated: The const-ref version of this method can permit undesired compiler optimizations in benchmarks [-Wdeprecated-declarations]
   40 |     benchmark::DoNotOptimize(AlwaysOnSampler());
      |     ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
/usr/include/benchmark/benchmark.h:496:5: note: declared here
  496 |     DoNotOptimize(Tp const& value) {
      |     ^~~~~~~~~~~~~
/src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc: In function 'void {anonymous}::BM_ParentBasedSamplerConstruction(benchmark::State&)':
/src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc:49:29: warning: 'typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type benchmark::DoNotOptimize(const Tp&) [with Tp = opentelemetry::v1::sdk::trace::ParentBasedSampler; typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type = void]' is deprecated: The const-ref version of this method can permit undesired compiler optimizations in benchmarks [-Wdeprecated-declarations]
   49 |     benchmark::DoNotOptimize(ParentBasedSampler(std::make_shared<AlwaysOnSampler>()));
      |     ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/benchmark/benchmark.h:496:5: note: declared here
  496 |     DoNotOptimize(Tp const& value) {
      |     ^~~~~~~~~~~~~
/src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc: In function 'void {anonymous}::BM_TraceIdRatioBasedSamplerConstruction(benchmark::State&)':
/src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc:58:29: warning: 'typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type benchmark::DoNotOptimize(const Tp&) [with Tp = opentelemetry::v1::sdk::trace::TraceIdRatioBasedSampler; typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type = void]' is deprecated: The const-ref version of this method can permit undesired compiler optimizations in benchmarks [-Wdeprecated-declarations]
   58 |     benchmark::DoNotOptimize(TraceIdRatioBasedSampler(0.01));
      |     ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/benchmark/benchmark.h:496:5: note: declared here
  496 |     DoNotOptimize(Tp const& value) {
      |     ^~~~~~~~~~~~~
/src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc: In function 'void {anonymous}::BenchmarkShouldSampler(opentelemetry::v1::sdk::trace::Sampler&, benchmark::State&)':
/src/opentelemetry-cpp/sdk/test/trace/sampler_benchmark.cc:83:29: warning: 'typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type benchmark::DoNotOptimize(const Tp&) [with Tp = opentelemetry::v1::sdk::trace::SamplingResult; typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type = void]' is deprecated: The const-ref version of this method can permit undesired compiler optimizations in benchmarks [-Wdeprecated-declarations]
   83 |     benchmark::DoNotOptimize(
      |     ~~~~~~~~~~~~~~~~~~~~~~~~^
   84 |         sampler.ShouldSample(invalid_ctx, trace_id, "", span_kind, view, links));
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/benchmark/benchmark.h:496:5: note: declared here
  496 |     DoNotOptimize(Tp const& value) {
      |     ^~~~~~~~~~~~~
/src/opentelemetry-cpp/sdk/test/metrics/attributes_hashmap_benchmark.cc: In lambda function:
/src/opentelemetry-cpp/sdk/test/metrics/attributes_hashmap_benchmark.cc:40:29: warning: 'typename std::enable_if<(std::is_trivially_copyable<_Tp>::value && (sizeof (Tp) <= sizeof (Tp*)))>::type benchmark::DoNotOptimize(const Tp&) [with Tp = bool; typename std::enable_if<(std::is_trivially_copyable<_Tp>::value && (sizeof (Tp) <= sizeof (Tp*)))>::type = void]' is deprecated: The const-ref version of this method can permit undesired compiler optimizations in benchmarks [-Wdeprecated-declarations]
   40 |     benchmark::DoNotOptimize(hash_map.Has(hash));
      |     ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from /src/opentelemetry-cpp/sdk/test/metrics/attributes_hashmap_benchmark.cc:4:
/usr/include/benchmark/benchmark.h:485:5: note: declared here
  485 |     DoNotOptimize(Tp const& value) {
      |     ^~~~~~~~~~~~~
/src/opentelemetry-cpp/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc: In function 'void {anonymous}::BM_NewIndexer(benchmark::State&)':
/src/opentelemetry-cpp/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc:31:31: warning: 'typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type benchmark::DoNotOptimize(const Tp&) [with Tp = opentelemetry::v1::sdk::metrics::Base2ExponentialHistogramIndexer; typename std::enable_if<((! std::is_trivially_copyable<_Tp>::value) || (sizeof (Tp) > sizeof (Tp*)))>::type = void]' is deprecated: The const-ref version of this method can permit undesired compiler optimizations in benchmarks [-Wdeprecated-declarations]
   31 |       benchmark::DoNotOptimize(Base2ExponentialHistogramIndexer(value));
      |       ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /src/opentelemetry-cpp/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc:6:
/usr/include/benchmark/benchmark.h:496:5: note: declared here
  496 |     DoNotOptimize(Tp const& value) {
      |     ^~~~~~~~~~~~~
/src/opentelemetry-cpp/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc: In function 'void {anonymous}::BM_ComputeIndex(benchmark::State&)':
/src/opentelemetry-cpp/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc:56:31: warning: 'typename std::enable_if<(std::is_trivially_copyable<_Tp>::value && (sizeof (Tp) <= sizeof (Tp*)))>::type benchmark::DoNotOptimize(const Tp&) [with Tp = int; typename std::enable_if<(std::is_trivially_copyable<_Tp>::value && (sizeof (Tp) <= sizeof (Tp*)))>::type = void]' is deprecated: The const-ref version of this method can permit undesired compiler optimizations in benchmarks [-Wdeprecated-declarations]
   56 |       benchmark::DoNotOptimize(indexer.ComputeIndex(value));
      |       ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/benchmark/benchmark.h:485:5: note: declared here
  485 |     DoNotOptimize(Tp const& value) {
      |     ^~~~~~~~~~~~~

vndroid avatar Aug 23 '23 07:08 vndroid

are there any updates on this issue?

patsevanton avatar Jan 26 '24 14:01 patsevanton