ClickHouse 源码安装 (无sudo情况下,gcc,cmake,ninja源码安装)
简介
由于工作和学习的需要,需要使用clickhouse数据库。如果只是限于日常的简单使用,那么不需要源码安装;如果涉及到对clickhouse的改造和开发,则必须要利用源码安装。而且限制于个人的身份,很难去获取sudo权限,因此安装各种软件就会收到限制。下面就介绍一下,非sudo权限下源码安装clickhouse的全部过程。
gcc安装
clickhouse支持的gcc版本为10.0以上,而大部分linux系统原生的gcc-4.7左右。下面是源码安装gcc的过程。(之前也用clang编译过,出奇的顺利,如果gcc行不通的话,可以试试clang)
# gcc 源码安装
# 下载源码并解压,注意源码的版本
# 进入解压后的目录
./contrib/download_prerequisites # 下载依赖
mkdir -p ~/gcc-build-10.1.0 # 建立安装路径,放在home目录下
cd ~/gcc-build-10.1.0
# 这一步是为了生成makefile, gcc-10.1.0是压缩包解压后的路径, --prefix用于指定安装路径
../gcc-10.1.0/configure --prefix=~/gcc-build-10.1.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
# 编译 -j16用于多线程编译,速度会快很多
make -j16
make install
# 修改环境路径, 直接写在.bashrc中
export PATH=~/gcc-build-10.1.0/bin:$PATH
export LD_LIBRARY_PATH=~/gcc-build-10.1.0/lib64:~/gcc-build-10.1.0/lib:$LD_LIBRARY_PATH # 这个路径不能unset,因为cmake会用到
export C_INCLUDE_PATH=~/gcc-build-10-1.0/include:$C_INCLUDE_PATH
此时运行gcc --version,已经能得到10.0以上的版本了。make的过程可能会比较长,耐心等待。
cmake安装
cmake的版本我采用的是3.19.1,下载源码并解压
mkdir -p ~/cmake3_19 # cmake安装路径
cd ~/cmake-3.19.1 # 切换到cmake源码解压后的目录
./bootstrap --prefix=/data/users/guojiantao/cmake3_19 # 指定安装路径,进行一些环境配置
gmake -j16 # 编译
gmake install # 安装
# 将cmake添加到环境变量,注意不要把上面gcc的环境变量删掉
export PATH=~/gcc-build-10.1.0/bin:~/cmake3_19/bin:$PATH
此时执行cmake --version就能看到cmake的版本了
ninja安装
ninja的版本是1.10.2。ninja需要依赖re2c,因此需要安装re2c,re2c的版本是2.0.3,下载源码并解压。
mkdir -p ~/re2c # 安装路径
cd re2c-1.0.3/ # 解压后的安装包
autoreconf -i -W all
./configure --prefix=~/re2c
make
make install
# 下面将路径添加到环境变量, 注意不要覆盖之前的变量
export PATH=~/gcc-build-10.1.0/bin:~/cmake3_19/bin:~/re2c/bin:$PATH
ninja安装
git clone git://github.com/ninja-build/ninja.git && cd ninja # 下载并切换目录
./configure.py --bootstrap # 编译并生成可执行文件
# 将路径添加到环境变量
export PATH=~/gcc-build-10.1.0/bin:~/cmake3_19/bin:~/re2c/bin:~/ninja-1.10.2$PATH
至此,clickhouse需要的所有环境都已经配置完成
clickhouse安装
首先下载源码
git clone --recursive https://github.com/ClickHouse/ClickHouse.git
cd ClickHouse
git submodule update --init --recursive #这一步骤一定要多执行几次,要下载submodule,可能下载不完全
然后进行安装
# 首先测试一下版本
gcc --version
g++ --version
cmake --version
ninja --version
# 结果如下
# gcc --version
gcc (GCC) 10.1.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# g++ --version
g++ (GCC) 10.1.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# cmake --version
cmake version 3.19.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
# ninja --version
1.10.2
# 指定编译器, 剩下的一步一步执行就完事了
export CC=$(which gcc)
export CXX=$(which g++)
cd ClickHouse
mkdir build
cd build
cmake ..
ninja
ninja中可能遇到的bug:
bug1:

方案:clickhouse声明和linux内核声明不一致。解决方法:将…/base/glibc-compatibility/musl/eventfd.c的第6行的“unsigned”去掉。(这个方法不知道会不会有坑)
bug2:
执行./clickhouse-serevr,路径权限出现问题。这是因为用户没有sudo权限,那么clickhouse默认一些日志的存储位置无法去访问
cd ClickHouse
cp ./programs/server/config.xml ./programs/server/config_test.xml # 复制一个xml文件
mkdir ~/var # 在home目录下创建一个存放数据的文件夹
vim ./programs/server/config_test.xml # 修改配置文件
# 修改内容如下
将所有的/var前面添加“~”,表示clickhouse将数据存储到home下的var,而不是从根目录中去寻找var
# 然后再启动clickhouse
./clickhosue-serevr --config ~/ClickHouse/programs/server/config_test.xml # 指定配置文件