
StarRocks Toolchains 开发环境基础镜像构建指南CentOS 7 / Ubuntu / Rocky Linux 9 全平台实践【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks本篇技术指南以 StarRocks 仓库中 docker/dockerfiles/toolchains/README.md 为核心系统讲解如何为 StarRocks 构建工具链ToolchainsDocker 基础镜像。读者将掌握三套 DockerfileCentOS 7、Ubuntu、Rocky Linux 9的构建命令、多架构amd64/arm64交叉构建方法、镜像内部工具链组成以及它与 StarRocks 开发环境镜像dev-env之间的层级关系从而能够从零搭建出可编译 StarRocks BE/FE 及全部 third-party 依赖的构建环境。一、什么是 StarRocks Toolchains 镜像StarRocks 是一个同时包含 C 后端BE、Java 前端FE以及上百个第三方依赖的大型项目。要从零编译它通常需要先完成两大步骤通过 thirdparty/build-thirdparty.sh 和 thirdparty/download-thirdparty.sh 编译安装全部第三方依赖再分别构建 fe 组件与 be 组件。Toolchains 镜像正是为此提供的一站式就绪环境它以某个 Linux 发行版为基础镜像预先安装好编译 StarRocks 所需的全部开发工具例如gcc、cmake、java、maven、autoconf、automake、ccache等。开发者拉取该镜像后即可直接开始构建 StarRocks 的 third-party 依赖无需再手工装配工具链。当前仓库在docker/dockerfiles/toolchains/目录下提供了三套 Toolchains DockerfileDockerfile基础发行版适用场景toolchains-centos7.DockerfileCentOS 7老版本 glibc2.17兼容性最佳产物可在更老的环境运行toolchains-ubuntu.DockerfileUbuntu 24.04默认推荐发行版工具链版本较新toolchains-rocky9.DockerfileRocky Linux 9CentOS 7 的现代化替代方案1.1 Toolchains 与 dev-env 的层级关系需要特别说明的是Toolchains 镜像只负责工具链层。在它的之上StarRocks 还有一个更完整的开发环境镜像dev-env后者在 Toolchains 的基础上进一步预编译了 third-party 依赖库和 Maven 依赖。从 dev-env.Dockerfile 的第 35 行可以清楚看到这种继承关系FROM starrocks/toolchains-${distro}:main-20260707 as base即dev-env直接以starrocks/toolchains-distro作为基础镜像再通过多阶段构建builder_stage1 编译 thirdparty、build_stage2 预拉取 Maven 依赖、starlet 阶段注入 starlet 运行时组装出开箱即用的完整开发环境。因此Toolchains 是 StarRocks 容器化开发链路的最底层基石dev-env 的构建与发布流程参见 docker/dockerfiles/dev-env/README.md。二、三套 Toolchains 镜像的工具链组成三套 Dockerfile 的核心目标一致——提供 gcc、cmake、JDK、Maven 等关键工具但在具体版本与安装策略上各有差异以下内容均来自仓库内 Dockerfile 的实际定义。2.1 CentOS 7toolchains-centos7.DockerfileCentOS 7 已于 2024 年 6 月正式 EOL官方软件源已下线。该 Dockerfile 的第一阶段专门做了镜像源修复将仓库内 yum-mirrorlist 目录下的本地镜像列表 ADD 进镜像删除官方失效的CentOS-*.repo并软链接到本地 repo 文件/etc/yum-mirrorlist/$(arch)/CentOS-Base-Local-List.repo该目录同时提供了 x86_64 与 aarch64 两套镜像源保证两种架构都能正常安装软件包。关键工具链版本源自 toolchains-centos7.Dockerfile 的 ARG 与构建逻辑gcc 10.3.0 gcc 14.3.0均为源码编译。先用系统 gcc 在gcc-builder阶段编译出 gcc-10.3.0再用 gcc-10 作为引导编译器编译 gcc-14.3.0最终通过COPY --fromgcc-builder装入最终镜像安装目录为/opt/rh/gcc-toolset-10/root/usrbinutils 2.30源码编译仅安装 GNU 汇编器asDockerfile 中注释明确说明Cant upgrade to a later version, due to incompatible changes between 2.31 and 2.32因此版本被刻意钉死在 2.30cmake 3.31.9从 cmake.org 官方二进制包解压安装到/opt/cmake并软链到/usr/bin/cmakeOpenJDK 17从 StarRocks 第三方 CDN 下载解压到/opt/jdk17Maven 3.6.3从 Apache 归档下载解压到/opt/maven软链到/usr/bin/mvnclang-format按架构区分下载aarch64 与 x86_64 分别有对应二进制安装到/usr/bin/clang-format其余工具ghGitHub CLI从 GitHub 官方 RPM 源安装、ccache、python3、patch、bison、byacc、flex、autoconf、automake、libtool、wget、unzip、git等通过 yum EPEL 安装。最终镜像设置的环境变量包括ENV STARROCKS_GCC_HOME${GCC_INSTALL_HOME} ENV JAVA_HOME${JDK_INSTALL_HOME} ENV MAVEN_HOME${MAVEN_INSTALL_HOME} ENV LANGen_US.utf82.2 Ubuntu 24.04toolchains-ubuntu.DockerfileUbuntu 版采用源码编译 gcc apt 安装其余工具的混合策略Dockerfile 头部注释直接给出了完整的版本清单gcc 14.3.0源码编译./configure --disable-multilib --enable-languagesc,c --prefix/opt/gcc-toolset-14随后通过update-alternatives将自编译的 gcc/g/cpp 设为系统默认工具链构建时特意先移除发行版自带的cppalternative避免自引用符号链接死循环OpenJDK 21apt 安装openjdk-21-jdkJAVA_HOME/lib/jvm/java-21-openjdkaarch64/amd64 各自建立软链接cmake 3.31.9同样从 cmake.org 官方二进制安装到/opt/cmakeMaven 3.8.7apt 安装lld 18.1.3 / clang-format 18.1.3apt 安装Ubuntu 24.04 无 clang-format-21故与 Rocky9 版本不同binutils 2.42 / glibc 2.39随发行版 apt 安装。该镜像额外设置了STARROCKS_LINKERlld即默认使用 lld 链接器。2.3 Rocky Linux 9toolchains-rocky9.DockerfileRocky Linux 9 作为 CentOS 7 的现代化继任者全部工具尽量用发行版软件包gcc 14.3.0源码编译Rocky9 自带较新的 gcc/binutils可直接引导编译 gcc-14安装到/opt/gcc-toolset-14OpenJDK 21java-21-openjdk-develJAVA_HOME/usr/lib/jvm/java-21-openjdkcmake 3.31.x发行版 cmake 包Maven 3.6.3maven-openjdk21包lld 21.1.8 / clang-format 21.1.8lld与clang-tools-extra包binutils 2.35.2 / glibc 2.34发行版包。注意该 Dockerfile 中的补充说明额外安装的xz解压 .tar.xz、gettextautotools、perlOpenSSL Configure 脚本依赖、binutilsgcc 所需的 as/ld都是编译 StarRocks 所必需的同时 Rocky9 基础镜像自带 curl-minimal刻意不安装完整 curl 以避免包冲突下载统一使用 wget。环境变量同样包含STARROCKS_GCC_HOME、JAVA_HOME与STARROCKS_LINKERlld。三、构建 Toolchains 镜像重要前提三套 Dockerfile 的注释都明确要求——构建上下文build context必须设置为docker/dockerfiles/toolchains/目录CentOS7 与 Rocky9 的 Dockerfile 头注释写有 NOTE: build context MUST be set todocker/dockerfiles/toolchains/。原因在于 CentOS 7 的镜像源修复依赖同目录下的yum-mirrorlist/子目录该目录必须进入构建上下文。3.1 多架构构建并发布到 Docker HubCentOS 7使用docker buildx一次构建并推送多个平台架构DOCKER_BUILDKIT1 docker buildx build -f toolchains-centos7.Dockerfile --platform platform_list -t starrocks/toolchains-centos7:tag --push .例如同时构建 amd64 与 arm64 并推送DOCKER_BUILDKIT1 docker buildx build -f toolchains-centos7.Dockerfile --platform linux/amd64,linux/arm64 -t starrocks/toolchains-centos7:20230306 --push .--push会将构建产物直接推送到 Docker Hub 上的starrocks/toolchains-centos7:tag仓库--platform用于指定目标架构列表tag建议使用日期或版本号如示例中的20230306。3.2 单平台本地构建CentOS 7若只需在本地构建单一平台镜像不加buildx与--platformDOCKER_BUILDKIT1 docker build -f toolchains-centos7.Dockerfile -t starrocks/toolchains-centos7:20230306 .3.3 多架构构建并发布UbuntuDOCKER_BUILDKIT1 docker buildx build -f toolchains-ubuntu.Dockerfile --platform platform_list -t starrocks/toolchains-ubuntu:tag --push .示例amd64 arm64DOCKER_BUILDKIT1 docker buildx build -f toolchains-ubuntu.Dockerfile --platform linux/amd64,linux/arm64 -t starrocks/toolchains-ubuntu:20230306 --push .3.4 单平台本地构建UbuntuDOCKER_BUILDKIT1 docker build -f toolchains-ubuntu.Dockerfile -t starrocks/toolchains-ubuntu:20230306 .3.5 多架构构建并发布Rocky Linux 9DOCKER_BUILDKIT1 docker buildx build -f toolchains-rocky9.Dockerfile --platform platform_list -t starrocks/toolchains-rocky9:tag --push .示例DOCKER_BUILDKIT1 docker buildx build -f toolchains-rocky9.Dockerfile --platform linux/amd64,linux/arm64 -t starrocks/toolchains-rocky9:20230306 --push .3.6 单平台本地构建Rocky Linux 9DOCKER_BUILDKIT1 docker build -f toolchains-rocky9.Dockerfile -t starrocks/toolchains-rocky9:20230306 .3.7 关于构建上下文与 COMMIT_ID所有构建命令都必须在docker/dockerfiles/toolchains/目录下执行或显式将构建上下文指向该目录否则 CentOS 7 的ADD yum-mirrorlist /etc/yum-mirrorlist/会因找不到源目录而失败三套 Dockerfile 均支持--build-arg COMMIT_IDcommit传入 StarRocks 源码提交号最终写入镜像 LABELcom.starrocks.commit便于追溯镜像对应的代码版本构建 gcc 需要较长时间源码编译 make -j$(nproc)建议在资源充足的机器上执行并可使用ccache加速后续重复构建。四、Toolchains 镜像如何参与 StarRocks 构建Toolchains 镜像本身不包含 StarRocks 源码与 third-party 依赖源码它的定位是可复用的构建基础层。实际构建 StarRocks 时通常有两种用法用法一作为 dev-env 镜像的基础层官方路径在仓库根目录执行 dev-env.Dockerfile 的构建命令先加载 starlet 版本号# 加载 STARLET_ARTIFACTS_TAG 环境变量 . thirdparty/starlet-artifacts-version.sh DOCKER_BUILDKIT1 docker build --rmtrue --build-arg starlet_tag$STARLET_ARTIFACTS_TAG \ -f docker/dockerfiles/dev-env/dev-env.Dockerfile -t starrocks/dev-env-ubuntu:tag .dev-env会以starrocks/toolchains-${distro}为基础在其内部自动执行 build-thirdparty.sh 完成 third-party 依赖编译并预拉取 Maven 依赖最终得到可直接编译 BE/FE 的完整环境。distro可选centos7、ubuntu、rocky9通过--build-arg distrocentos7切换。用法二直接基于 Toolchains 镜像手动构建拉取对应发行版的 Toolchains 镜像后挂载 StarRocks 源码与 thirdparty 缓存目录在容器内依次执行# 编译并安装全部第三方依赖 cd thirdparty ./build-thirdparty.sh # 回到仓库根目录构建 fe / be cd .. ./build.sh --fe ./build.sh --be容器内已设置好STARROCKS_GCC_HOME、JAVA_HOME、MAVEN_HOME等环境变量并在PATH中加入了 gcc 工具链目录env.sh会被构建脚本自动加载无需手工配置工具链路径。五、选择哪一套 Toolchains追求最广兼容性选 CentOS 7 版。其 glibc 2.17 与 binutils 2.30 的复古组合意味着编译出的二进制可以在更老的操作系统上运行这也是历史上 StarRocks 长期以 CentOS 7 作为发布基线的原因默认开发环境选 Ubuntu 24.04 版。工具链版本新gcc 14.3、JDK 21、lld 18且 dev-env 默认distroubuntuCentOS 7 的现代替代选 Rocky Linux 9 版。同为 RHEL 系、glibc 2.34适合仍偏好 RPM 系但需要新工具链的团队其 starlet 运行时复用了 CentOS 7 的产物glibc 2.17 向前兼容详见 dev-env.Dockerfile 第 76-78 行注释。六、常见注意事项CentOS 7 镜像源修复由于 CentOS 7 EOL官方源已失效Dockerfile 已内置 yum-mirrorlist 的本地镜像列表作为替代构建时不要替换该目录下的 repo 文件版本钉死原则关键工具版本在 Dockerfile 中以 ARG 显式声明如 gcc 14.3.0、cmake 3.31.9、binutils 2.30这是保证可复现构建的关键个别版本存在特殊约束如 binutils 2.31→2.32 存在不兼容变更升级前务必验证架构一致性多架构镜像使用docker buildx构建时yum-mirrorlist目录内的 aarch64 与 x86_64 镜像列表会被$(arch)自动选中因此 amd64/arm64 均可正常安装软件包构建上下文所有 Dockerfile 都必须以docker/dockerfiles/toolchains/为构建上下文执行docker build否则将因缺少yum-mirrorlist目录而构建失败。通过上述内容你可以完全自主地构建并发布 StarRocks 的 Toolchains 基础镜像再以此为地基搭建自己的开发环境从而以可控、可复现的方式参与 StarRocks BE/FE 及 third-party 依赖的编译工作。【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考