iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Software Development

ClickHouse:時序資料庫建置與運行系列 第 7

day7-如何從ClickHouse專案原始碼進行跨編譯

  • 分享至 

  • xImage
  •  

前言

在前一章節中,我們展示了如何在Ubuntu 18.04的作業系統上編譯ClickHouse專案原始碼,以及將編譯好的ClickHouse資料庫進行相關的啟動與設定等操作,在本章節中,我們會展示如何在Linux作業系統上編譯給AARCH64(ARM64)與RISC-V 64等CPU的架構上需要的ClickHouse資料庫等相關執行檔。

Linux上進行跨編譯ClickHouse給AARCH64的架構

所謂的跨編譯,就是將程式等專案編譯的非真正執行的環境,意思就是在A機器環境的作業系統進行編譯並將編譯好的執行檔在B環境作業系統上執行,這樣的過程就可以稱之為跨編譯,會使用到跨編譯的情形不外乎有幾種情況:

  • 需要在上面執行的環境,其硬體需求效能較差,如在樹莓派上面可以執行ClickHouse資料庫,但是對於在上面編譯ClickHouse資料庫就要很久,因此這種情形就會適合跨編譯。
  • 在上面執行的環境,受限於一些限制而無法安裝編譯等相關套件與指令,這時候也適合使用跨編譯的形式來解決這個問題。

我們會示範如何在Linux發行版本Ubuntu 18.04上面進行跨編譯,並編譯好可以在AARCH64的架構上的作業系統執行ClickHouse資料庫與相關客戶端的執行檔。

建置步驟

首先,需要有clang-14以上的版本,這個已經在前一章節中安裝好了,若沒有安裝的話,請參考前一章節有關於Clang安裝的段落。

接著,執行下列的指令,相關的輸出訊息如下:

peter@ubuntu-s-4vcpu-8gb-amd-sgp1-01:~$ cd ClickHouse/
peter@ubuntu-s-4vcpu-8gb-amd-sgp1-01:~/ClickHouse$ mkdir aarch64-build/
peter@ubuntu-s-4vcpu-8gb-amd-sgp1-01:~/ClickHouse$ CC=clang-14 CXX=clang++-14 cmake . -Baarch64-build -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-aarch64.cmake
-- The C compiler identification is Clang 14.0.6
-- The CXX compiler identification is Clang 14.0.6
-- The ASM compiler identification is Clang with GNU-like command-line
-- Found assembler: /usr/bin/clang-14
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/clang-14 - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/clang++-14 - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Cross-compiling for target:
......
[151/201] Building CXX object CMakeFiles/libprotoc.dir/home/peter/ClickHouse/contrib/protobuf/src/google/protobuf/compiler/java/java_enum_field.cc.o
[152/201] Building CXX object CMakeFiles/libprotoc.dir/home/peter/ClickHouse/contrib/protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.cc.o
[153/201] Building CXX object CMakeFiles/libprotoc.dir/home/peter/ClickHouse/contrib/protobuf/src/google/protobuf/compiler/java/java_enum_lite.cc.o
[154/201] Building CXX object CMakeFiles/libprotoc.dir/home/peter/ClickHouse/contrib/protobuf/src/google/protobuf/compiler/java/java_extension_lite.cc.o
[155/201] Building CXX object CMakeFiles/libprotoc.dir/home/peter/ClickHouse/contrib/protobuf/src/google/protobuf/compiler/java/java_extension.cc.o
......
-- Target check already exists
-- /home/peter/ClickHouse/utils: Have 7975 megabytes of memory.
        Limiting concurrent linkers jobs to 2 and compiler jobs to OFF (system has 4 logical cores)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/peter/ClickHouse/aarch64-build
peter@ubuntu-s-4vcpu-8gb-amd-sgp1-01:~/ClickHouse$ ninja -C aarch64-build
ninja: Entering directory `aarch64-build'
[0/2] Re-checking globbed directories...
[115/8175] Building CXX object contrib/libcxx-c...e/CMakeFiles/cxx.dir/__/libcxx/src/locale.cpp.o 

從上面訊息得知,我們在前一章節已經把ClickHouse的原始專案完整的複製下來了,因此沿用此專案,若還沒有下載ClickHouse原始碼的,可以先參考前一章節,接著切換到此專案目錄並新建一個目錄叫做「aarch64-build/」,接著再執行CC=clang-14 CXX=clang++-14 cmake . -Baarch64-build -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-aarch64.cmake指令產生給AARCH64所需要的相關檔案,接著再執行ninja -C aarch64-build指令執行編譯,這個編譯的訊息相信讀者會很熟悉了,因為跟前一章節的訊息很類似,只差在執行cmake時候帶入一些指定AARCH64的相關參數與設定檔。

當編譯好之後,就會變成下列這樣的訊息:

......
ofile/prof_err.et
[8175/8175] Linking CXX executable utils/wal-dump/wal-dump
peter@ubuntu-s-4vcpu-8gb-amd-sgp1-01:~/ClickHouse$

Linux上進行跨編譯ClickHouse給RISC-V 64的架構

與AARCH64架構上的跨編譯是差不多的,除了要準備clang版本在14版本以上之外,還有CMake等指令,唯獨只有執行cmake指令所要帶的參數不同,下列是進行此CPU架構的跨編譯步驟:

cd ClickHouse
mkdir build-riscv64
CC=clang-14 CXX=clang++-14 cmake . -Bbuild-riscv64 -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-riscv64.cmake -DGLIBC_COMPATIBILITY=OFF -DENABLE_LDAP=OFF  -DOPENSSL_NO_ASM=ON -DENABLE_JEMALLOC=ON -DENABLE_PARQUET=OFF -DUSE_UNWIND=OFF -DENABLE_GRPC=OFF -DENABLE_HDFS=OFF -DENABLE_MYSQL=OFF
ninja -C build-riscv64

從上面的指令可以得知,首先先進入到ClickHouse的專案原始碼目錄,接著建立build-riscv64目錄,接著設定clang-14版本的指令給CC與CXX環境變數,接著執行cmake並帶一些RISC-V 64架構所需要的參數,接著再用ninja指令將相關的編譯好的執行檔與檔案寫入到build-riscv64目錄中。

在官方的ClickHouse文件中,給RISC-V 64的CPU架構跨編譯仍在實驗階段,因此不是所有的ClickHouse特性都可以使用,所以在執行cmake指令時候,需要帶一些參數將一些特性都關閉。

結論

在本篇章節中,我們展示了分別給兩種不同的CPU架構上在Ubuntu 18.04的64位元發行的作業系統上進行跨編譯的動作,並利用數莓派4來驗證跨編譯出來的ClickHouse執行檔的目錄是可以在數莓派4上啟動ClickHouse的資料庫伺服器的,在下一章節中,我們將會完整整理與討論ClickHouse資料庫伺服器的啟動方法。

參考資料


上一篇
day6-如何從ClickHouse原始碼進行安裝
下一篇
day8-ClickHouse資料庫伺服器啟動方法整理
系列文
ClickHouse:時序資料庫建置與運行30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言