FROM docker.io/library/rockylinux:9 # Toolchain and build tools, same as the rocky9 image. RUN dnf install --assumeyes --enablerepo=crb \ autoconf \ automake \ bzip2 \ ca-certificates \ cmake \ curl-minimal \ gcc \ gcc-c++ \ libasan \ gcc-toolset-15-gcc-c++ \ gcc-toolset-15-libasan-devel \ git \ libtool \ make \ ninja-build \ patch \ perl-core \ pkgconf-pkg-config \ rpm-build \ tar \ xz \ which \ epel-release \ && sed \ -e 's!^metalink=!#metalink=!g' \ -e 's!^#baseurl=!baseurl=!g' \ -e 's!https\?://download\.example/pub/epel!https://mirrors.ustc.edu.cn/epel!g' \ -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo \ && dnf install --assumeyes \ makeself \ && dnf upgrade --assumeyes \ && dnf clean all \ && rm -rf /var/cache/dnf RUN git config --global url."https://wangguofang.net/github.com/".insteadOf "https://github.com/" RUN test "$(cmake --version | sed -n '1s/[^0-9]*//p' | cut -d. -f2)" -ge 29 # Libraries come from the distribution (Rocky Linux 9, CRB and EPEL) instead of being built from # source, except Protobuf (below). A package that is not available in these repositories is skipped, not an error. RUN dnf install --assumeyes --enablerepo=crb,epel \ --setopt=skip_missing_names_on_install=True \ --skip-broken \ boost-devel \ cyrus-sasl-devel \ fast_float-devel \ fmt-devel \ folly-devel \ gflags-devel \ glog-devel \ gmock-devel \ gmp-devel \ gnutls-devel \ gtest-devel \ hiredis-devel \ jsoncpp-devel \ json-c-devel \ libaio-devel \ libcurl-devel \ libdwarf-devel \ libevent-devel \ libmaxminddb-devel \ libsodium-devel \ liburing-devel \ libuuid-devel \ libxml2-devel \ libyaml-devel \ libzstd-devel \ log4cplus-devel \ lz4-devel \ magic_enum-devel \ nettle-devel \ numactl-devel \ openssl-devel \ rapidjson-devel \ librdkafka-devel \ snappy-devel \ spdlog-devel \ sqlite-devel \ thrift-devel \ tsl-sparse-map-devel \ xsimd-devel \ xxhash-devel \ zeromq-devel \ czmq-devel \ zlib-devel \ libarrow-devel \ parquet-libs-devel \ && dnf clean all \ && rm -rf /var/cache/dnf # Protobuf is the only library built from source; it is installed under /usr/local, which takes # precedence over the system packages in /usr. RUN --mount=type=bind,from=sources,source=protobuf-v3.21.12.tar.gz,target=/tmp/protobuf.tar.gz \ mkdir src \ && tar --extract --gzip --file=/tmp/protobuf.tar.gz --directory=src --strip-components=1 \ && cmake -G Ninja -S src -B build -Dprotobuf_BUILD_TESTS=OFF \ -Dprotobuf_BUILD_SHARED_LIBS=OFF \ -Dprotobuf_WITH_ZLIB=ON \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ && cmake --build build --parallel "$(nproc)" --target install \ && rm -rf build src CMD ["/bin/bash"]