如何在 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
,该文件可与 client
或 server
参数一起使用。
在任何 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"