前言
在CentOS 7上编译ClickHouse 24.8可能会遇到一些挑战,主要是因为CentOS 7的默认软件版本较旧。本文将详细介绍从零开始构建ClickHouse 24.8的完整过程,包括依赖安装和环境配置。
准备工作
首先确保系统已更新到最新版本:
yum update -y
1. 安装CMake
ClickHouse需要CMake 3.1.7以上版本,我们安装3.25.3:
wget --no-check-certificate https://cmake.org/files/v3.25/cmake-3.25.3-linux-x86_64.sh
mkdir /usr/local/cmake && ./cmake-3.25.3-linux-x86_64.sh --prefix=/usr/local/cmake --skip-license
ln -s /usr/local/cmake/bin/cmake /usr/local/bin/cmake
ln -s /usr/local/cmake/bin/cpack /usr/local/bin/cpack
ln -s /usr/local/cmake/bin/ctest /usr/local/bin/ctest
2. 安装GCC 10
CentOS 7默认GCC 4.8太旧,需要升级到GCC 10:
# 配置阿里云镜像源
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 配置SCL源
yum install -y centos-release-scl
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-SCLo-scl.repo
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
sed -i 's|baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.aliyun.com/centos|g' /etc/yum.repos.d/CentOS-SCLo-scl*.repo
yum clean all && yum makecache
yum install -y centos-release-scl
yum install -y devtoolset-10-gcc*
# 启用GCC 10
scl --list
scl enable devtoolset-10 bash
echo "source /opt/rh/devtoolset-10/enable" >> ~/.bashrc
source ~/.bashrc
gcc --version
3. 安装Python 3
wget --no-check-certificate https://www.python.org/ftp/python/3.8.19/Python-3.8.19.tgz
tar xvf Python-3.8.19.tgz
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
cd Python-3.8.19
./configure --enable-optimizations --prefix=/usr/local/python3
make -j$(nproc)
make install
ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
4. 安装LLVM
使用LLVM来编译ClickHouse,安装18.1.8版本:
git clone --depth=1 --branch=llvmorg-18.1.8 https://github.com/llvm/llvm-project.git
cd llvm-project
mkdir build && cd build
cmake -G "Unix Makefiles" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_TARGETS_TO_BUILD='X86' \
-DCMAKE_INSTALL_PREFIX=/usr/local/llvm-18.1.8 \
../llvm-project/llvm
make -j$(nproc)
make install
echo 'export PATH=/usr/local/llvm-18.1.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/llvm-18.1.8/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
ln -s /usr/local/llvm-18.1.8/bin/clang /usr/local/bin/clang
ln -s /usr/local/llvm-18.1.8/bin/clang++ /usr/local/bin/clang++
5. 安装NASM和YASM
# 安装NASM
wget --no-check-certificate http://www.nasm.us/pub/nasm/releasebuilds/2.16.03/nasm-2.16.03.tar.gz
tar zxvf nasm-2.16.03.tar.gz && cd nasm-2.16.03
./configure --prefix=/usr/local/nasm
make && make install
ln -s /usr/local/nasm/bin/nasm /usr/local/bin/nasm
# 安装YASM
wget --no-check-certificate http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -zxvf yasm-1.3.0.tar.gz && cd yasm-1.3.0
./configure --prefix=/usr/local/yasm
make && make install
ln -s /usr/local/yasm/bin/yasm /usr/local/bin/yasm
6. 编译ClickHouse
git clone --branch=v24.8.14.39-lts --recurse-submodules https://github.com/ClickHouse/ClickHouse
cd ClickHouse
git checkout -b v24.8.14.39-lts origin/v24.8.14.39-lts
git submodule update --init --recursive
# 解决可能出现的mariadb-connector-c问题
rm -rf contrib/mariadb-connector-c
git submodule update --init --force contrib/mariadb-connector-c
# 设置编译环境
export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++
yum install -y ccache
# 编译
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_C_COMPILER=$(which clang) \
-DCMAKE_CXX_COMPILER=$(which clang++) \
-DENABLE_TESTS=OFF \
-G Ninja ..
ninja
7. 运行ClickHouse
编译完成后,可以运行ClickHouse服务器:
./clickhouse-server --config-file=/path/to/config.xml --daemon
常见问题解决
mariadb-connector-c配置错误:
rm -rf contrib/mariadb-connector-c git submodule update --init --force contrib/mariadb-connector-c
内存不足:编译过程需要大量内存,建议至少有16GB内存或设置交换空间。
依赖缺失:如果编译过程中提示缺少依赖,可以使用
yum provides
查找并安装相应包。