跳至主要内容

如何在 Linux 上构建 ClickHouse

支持的平台

  • x86_64
  • AArch64
  • PowerPC 64 LE(实验性)
  • RISC-V 64(实验性)

在 Ubuntu 上构建

以下教程基于 Ubuntu Linux。经过适当修改,它也应该适用于任何其他 Linux 发行版。推荐用于开发的 Ubuntu 最低版本为 22.04 LTS。

安装先决条件

sudo apt-get update
sudo apt-get install git cmake ccache python3 ninja-build nasm yasm gawk lsb-release wget software-properties-common gnupg

安装和使用 Clang 编译器

在 Ubuntu/Debian 上,您可以使用 LLVM 的自动安装脚本;请参阅 此处

sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"

注意:如果遇到问题,您也可以使用此方法

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test

对于其他 Linux 发行版 - 检查 LLVM 的 预构建软件包 的可用性。

截至 2024 年 3 月,clang-17 或更高版本将有效。GCC 作为编译器不受支持。要使用特定 Clang 版本构建

提示

这是可选的,如果您正在按照说明进行操作,并且刚刚安装了 Clang,则在设置此环境变量之前,请检查您安装了哪个版本。

export CC=clang-18
export CXX=clang++-18

安装 Rust 编译器

首先按照官方 rust 文档 中的步骤安装 rustup

与 C++ 依赖项一样,ClickHouse 使用供应商控制确切安装的内容,并避免依赖第三方服务(如 crates.io 注册表)。

尽管在发布模式下任何现代 rustup 工具链版本都应该可以使用这些依赖项,但如果您计划启用 sanitize,则必须使用与 CI 中使用的完全相同的 std 版本(为此我们为这些 crate 提供了版本)。

rustup toolchain install nightly-2024-04-01
rustup default nightly-2024-04-01
rustup component add rust-src

检出 ClickHouse 源代码

git clone --recursive --shallow-submodules [email protected]:ClickHouse/ClickHouse.git

git clone --recursive --shallow-submodules https://github.com/ClickHouse/ClickHouse.git

构建 ClickHouse

cd ClickHouse
mkdir build
cmake -S . -B build
cmake --build build # or: `cd build; ninja`
提示

如果 cmake 无法检测到可用逻辑内核的数量,则将通过一个线程完成构建。为了克服这个问题,您可以调整 cmake 以使用带有 -j 标志的特定线程数,例如,cmake --build build -j 16。或者,您可以提前生成具有特定作业数的构建文件,以避免始终设置标志:cmake -DPARALLEL_COMPILE_JOBS=16 -S . -B build,其中 16 是所需的线程数。

要创建可执行文件,请运行 cmake --build build --target clickhouse(或:cd build; ninja clickhouse)。这将创建一个可执行文件 build/programs/clickhouse,该文件可与 clientserver 参数一起使用。

在任何 Linux 上构建

构建需要以下组件

  • Git(用于检出源代码,构建不需要)
  • CMake 3.20 或更高版本
  • 编译器:clang-18 或更高版本
  • 链接器:lld-17 或更高版本
  • Ninja
  • Yasm
  • Gawk
  • rustc

如果所有组件都已安装,则您可以按照上述步骤进行构建。

OpenSUSE Tumbleweed 示例

sudo zypper install git cmake ninja clang-c++ python lld nasm yasm gawk
git clone --recursive https://github.com/ClickHouse/ClickHouse.git
mkdir build
cmake -S . -B build
cmake --build build

Fedora Rawhide 示例

sudo yum update
sudo yum --nogpg install git cmake make clang python3 ccache lld nasm yasm gawk
git clone --recursive https://github.com/ClickHouse/ClickHouse.git
mkdir build
cmake -S . -B build
cmake --build build

在 docker 中构建

我们使用 docker 镜像 clickhouse/binary-builder 进行 CI 构建。它包含构建二进制文件和软件包所需的一切。有一个脚本 docker/packager/packager 可以简化镜像的使用

# define a directory for the output artifacts
output_dir="build_results"
# a simplest build
./docker/packager/packager --package-type=binary --output-dir "$output_dir"
# build debian packages
./docker/packager/packager --package-type=deb --output-dir "$output_dir"
# by default, debian packages use thin LTO, so we can override it to speed up the build
CMAKE_FLAGS='-DENABLE_THINLTO=' ./docker/packager/packager --package-type=deb --output-dir "./$(git rev-parse --show-cdup)/build_results"