天天看點

clickhouse源碼安裝(無sudo權限,gcc、cmake、ninja源碼安裝)

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源碼安裝(無sudo權限,gcc、cmake、ninja源碼安裝)

方案: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    # 指定配置檔案