目录
一、环境准备
1.1、CentOS 版本为 7.4.1708
1.2、从 github clone ClickHouse 源码,checkout 到 tag v21.2.6.1-stable。clone ClickHOuse 代码的时候需要把依赖的子项目也都 clone 下来,命令如下:
git clone --recursive https://github.com/ClickHouse/ClickHouse.git
1.3、从 LLVM官网 下载最新版的 llvm、clang、compiler-rt 三个源码文件
1.4、创建脚本文件 centos7_build_clickhouse.sh 用来执行编译操作
把这几个文件(目录)放在同一个目录下,目录结构如下:
tree -L 1
.
|-- ClickHouse # 从 GitHub clone 下载的 ClickHouse 源码,并手动 checkout 到最新的稳定版
|-- centos7-build-clickhouse.sh # 执行编译操作的脚本文件
|-- clang-11.0.0.src.tar.xz # clang 的源码文件
|-- compiler-rt-11.0.0.src.tar.xz # 编译器源码
`-- llvm-11.0.0.src.tar.xz # llvm 源码
二、创建编译使用的脚本
centos7_build_clickhouse.sh 内容如下(脚本来源 https://gist.github.com/filimonov/0aa441717d0faf9b77d7099bc61a1e9e,略有修改):
basedir=$(cd $(dirname ${0}) ; pwd)
CODE_DIR="${basedir}/ClickHouse"
if [ -n "${1}" ] ; then
CODE_DIR="$(cd ${1} ; pwd)"
fi
function check_error()
{
if [ $? -ne 0 ] ; then
echo -e "\033[0;33m error happend [${@}] \033[0;m"
exit $?
fi
}
THREADS=$(grep -c ^processor /proc/cpuinfo) # should not use all cpus
export THREADS=$[ ${THREADS} / 2 + 1 ]
# Determine RHEL major version
RHEL_VERSION=`rpm -qa --queryformat '%{VERSION}\n' '(redhat|sl|slf|centos|oraclelinux|goslinux)-release(|-server|-workstation|-client|-computenode)'`
function install_deps()
{
# add extra repos
yum -y install epel-release centos-release-scl centos-release-scl-rh
# installing needed libs
yum -y install readline-devel unixODBC-devel openssl-devel libicu-devel libtool-ltdl-devel openssl-devel scl-utils
yum -y install http://dev.mysql.com/get/mysql57-community-release-el$RHEL_VERSION-11.noarch.rpm
yum -y install mysql-community-devel
# installing build tools
yum -y install git cmake3 devtoolset-9 tar wget
yum -y install http://repo.okay.com.mx/centos/7/x86_64/release/okay-release-1-1.noarch.rpm
yum -y install ninja-build
}
function install_clang()
{
hash clang
if [ $? -eq 0 ] ; then
echo -e "\033[0;33mclang has been installd, if you insist to install clang again, please remove this check\033[0m"
return 0
fi
#
##### CLANG #####
yum -y install python27 xz
mkdir -p ${basedir}/llvm
mkdir -p ${basedir}/llvm/llvm/tools/clang
mkdir -p ${basedir}/llvm/llvm/projects/compiler-rt
mkdir -p ${basedir}/llvm/build
cd ${basedir}/llvm
tar xf ${basedir}/llvm-11.0.0.src.tar.xz -J --strip-components=1 -Cllvm
tar xf ${basedir}/clang-11.0.0.src.tar.xz -J --strip-components=1 -Cllvm/tools/clang
tar xf ${basedir}/compiler-rt-11.0.0.src.tar.xz -J --strip-components=1 -Cllvm/projects/compiler-rt
# scl enable - set the ENV for the passed command to use software from the collection(s)
cd ${basedir}/llvm/build
scl enable devtoolset-9 python27 'cmake3 -D CMAKE_BUILD_TYPE:STRING=Release ../llvm'
check_error 'cmake3 -D CMAKE_BUILD_TYPE:STRING=Release ../llvm'
scl enable devtoolset-9 python27 'make -j $THREADS && make install'
check_error 'make && make install'
hash clang
check_error 'hash clang'
#### CLANG END #####
}
function compile_clickhouse()
{
mkdir -p ${CODE_DIR}/build
cd ${CODE_DIR}/build
scl enable devtoolset-9 'CC=clang CXX=clang++ cmake3 -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/ninja ..'
scl enable devtoolset-9 'ninja -j $THREADS clickhouse'
}
install_deps
install_clang
compile_clickhouse
#clickhouse-server --config=/usr/local/etc/clickhouse-server/config.xml
三、编译 ClickHouse
运行脚本文件 centos7_build_clickhouse.sh ,开始编译:
sh centos7-build-clickhouse.sh ClickHouse # ClickHouse 是 git clone 下来的目录
编译完成后,在目录 ClickHouse/build/programs/ 中会出现编译完成的 clickhouse 二进制文件
$ ls -l ClickHouse/build/programs/
-rwxr-xr-x 1 365376600 Mar 22 04:49 clickhouse
lrwxrwxrwx 1 10 Mar 19 10:08 clickhouse-benchmark -> clickhouse
lrwxrwxrwx 1 10 Mar 19 10:03 clickhouse-client -> clickhouse
lrwxrwxrwx 1 10 Mar 19 10:03 clickhouse-compressor -> clickhouse
lrwxrwxrwx 1 10 Mar 19 10:08 clickhouse-copier -> clickhouse
lrwxrwxrwx 1 10 Mar 19 10:03 clickhouse-extract-from-config -> clickhouse
lrwxrwxrwx 1 10 Mar 19 10:03 clickhouse-format -> clickhouse
lrwxrwxrwx 1 10 Mar 19 10:03 clickhouse-git-import -> clickhouse
lrwxrwxrwx 1 10 Mar 19 10:03 clickhouse-local -> clickhouse
lrwxrwxrwx 1 10 Mar 19 10:06 clickhouse-obfuscator -> clickhouse
-rwxr-xr-x 1 894804664 Mar 19 10:11 clickhouse-odbc-bridge
lrwxrwxrwx 1 10 Mar 19 10:03 clickhouse-server -> clickhouse