在kylin-ARM系统上的neokylin容器中构建clickhouse-21.3.12.2-lts

本文详细介绍了如何在kylin-ARM系统上的neokylin容器内编译clickhouse-21.3.12.2-lts。首先,调整docker镜像源,然后配置centos镜像,并安装必要的编译工具,如GCC9.3.0、cmake、clang、git和ninja。接着,作者列举了在编译过程中可能遇到的各种问题及其解决办法,包括第三方包下载、JEMALLOC、libpqxx、re2_internal等错误处理。最后,文章提供了在容器内运行clickhouse的方法以及GLIBC_2.30的安装步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之所以要在容器内编译,主要是一台arm编译服务器大家共用,避免一些编译工具包的安装影响其他人编译,所以在容器内进行。下面正式开始:

目录

本机更改docker镜像源

运行并配置centos镜像

编译工具安装

安装GCC9.3.0

cmake-3.18.4安装

clang安装

git安装

​​​​​​​ninja安装

编译

或:将LIB和工具分开编译

问题处理

contrib第三方包下载

报错信息

​​​​​​​解决办法(离线下载,不推荐)

​​​​​​​解决办法(在线下载,推荐)

​​​​​​​JEMALLOC报错处理

​​​​​​​libpqxx报stream_from相关告警的处理

​​​​​​​re2_internal报错处理

​​​​​​​not a git repository报错处理

​​​​​​​natvis/LICENSE不存在问题处理

​​​​​​​空间不足

​​​​​​​启动运行时,校验和检查失败

​​​​​​​make时报conflicting types for 'eventfd'

​​​​​​​make时报objcopy:Zulu.o: Invalid bfd target

​​​​​​​make时报contrib/jemalloc/src/pages.c:362:6: error: use of undeclared identifier 'JEMALLOC_MADV_FREE'

​​​​​​​make时报error: no template named 'auto_ptr' in namespace 'std'

​​​​​​​Make时报variable 'update_place_value' set but not used

​​​​​​​Make时报parameter ‘size’ set but not used [-Werror=unused-but-set-parameter]

​​​​​​​Make时报parameter passing for argument of type ‘xxx’ changed in GCC 9.1

​​​​​​​make时报/bin/sh^M: bad interpreter: No such file or directory

​​​​​​​make时报build/contrib/arrow-cmake/thrift/config.h:1:1 error: cannot use dot operator on a type    ../../../thrift/build/cmake/config.h.in

​​​​​​​make时报错./StorageSystemLicenses.sh: not found

运行启动

附:GLIBC_2.30安装

​​​​​​​设置yum源

​​​​​​​安装GCC9.3.0

​​​​​​​Python3.8安装

​​​​​​​make4.2安装

glibc-2.30安装



本机更改docker镜像源

vi /etc/docker/daemon.json

{

"registry-mirrors": [

    "https://mirrors.huaweicloud.com/"

"https://registry.docker-cn.com",

    "http://hub-mirror.c.163.com",

    "https://docker.mirrors.ustc.edu.cn"

],

"insecure-registries": [

"https://mirrors.huaweicloud.com/"

"https://registry.docker-cn.com",

    "http://hub-mirror.c.163.com",

    "https://docker.mirrors.ustc.edu.cn"

]

}

systemctl daemon-reload

systemctl restart docker

运行并配置centos镜像

docker pull securityneo/neokylin:openjdk18

docker run -itd --network=host -v /home/clickhouse/ckdir:/home/clickhouse/ckdir securityneo/neokylin:openjdk18

docker ps |grep kylin

docker exec -it 569aac8191c7 bash  #其中569aac8191c7为上一步查出来的容器ID。

yum源配置:

cp -a /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-AltArch-7.repo

或者直接将如下内容放到/etc/yum.repos.d/CentOS-Base.repo中。

[base]

name=CentOS-$releasever - Base - mirrors.huaweicloud.com

baseurl=https://repo.huaweicloud.com/centos-altarch/7/os/$basearch/

#mirrorlist=https://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os

gpgcheck=0

gpgkey=https://repo.huaweicloud.com/centos-altarch/7/os/$basearch/RPM-GPG-KEY-CentOS-7-$basearch

#released updates

[updates]

name=CentOS-$releasever - Updates - mirrors.huaweicloud.com

baseurl=https://repo.huaweicloud.com/centos-altarch/7/updates/$basearch/

#mirrorlist=https://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates

gpgcheck=0

gpgkey=https://repo.huaweicloud.com/centos-altarch/7/os/$basearch/RPM-GPG-KEY-CentOS-7-$basearch

#additional packages that may be useful

[extras]

name=CentOS-$releasever - Extras - mirrors.huaweicloud.com

baseurl=https://repo.huaweicloud.com/centos-altarch/7/extras/$basearch/

#mirrorlist=https://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras

gpgcheck=0

gpgkey=https://repo.huaweicloud.com/centos-altarch/7/os/$basearch/RPM-GPG-KEY-CentOS-7-$basearch

#additional packages that extend functionality of existing packages

[centosplus]

name=CentOS-$releasever - Plus - mirrors.huaweicloud.com

baseurl=https://repo.huaweicloud.com/centos-altarch/7/centosplus/$basearch/

#mirrorlist=https://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus

gpgcheck=0

enabled=0

gpgkey=https://repo.huaweicloud.com/centos-altarch/7/os/$basearch/RPM-GPG-KEY-CentOS-7-$basearch

编译工具安装

安装GCC9.3.0

#gcc如果离线安装,wget可以不用装。

yum install -y bzip2 wget gcc gcc-c++ glibc-headers

#把离线下载的gmp-6.1.0.tar.bz2、isl-0.18.tar.bz2、mpc-1.0.3.tar.gz、mpfr-3.1.4.tar.bz2放到解压出来的gcc-9.3.0目录下,然后进入gcc-9.3.0目录,执行如下命令:

./contrib/download_prerequisites

mkdir build && cd build

../configure --prefix=/usr/local/gcc-9.3.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib

export THREADS=$(grep -c ^processor /proc/cpuinfo)

make -j $(nproc)

make install

echo "export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64">>/etc/profile

echo "export CC=/usr/local/gcc-9.3.0/bin/aarch64-unknown-linux-gnu-gcc">>/etc/profile

echo "export CXX=/usr/local/gcc-9.3.0/bin/aarch64-unknown-linux-gnu-g++">>/etc/profile

echo "export PATH=/usr/local/gcc-9.3.0/bin:${PATH}">>/etc/profile

source /etc/profile

# 设置头文件

ln -sv /usr/local/gcc/include/ /usr/include/gcc

# 设置库文件

touch /etc/ld.so.conf.d/gcc.conf

chmod 777 /etc/ld.so.conf.d/gcc.conf

echo -e "/usr/local/gcc/lib64" >> /etc/ld.so.conf.d/gcc.conf

# 加载动态连接库

ldconfig -v

ldconfig -p | grep gcc

source /etc/profile

gcc -v

cp /usr/local/gcc-9.3.0/lib64/libstdc++.so.6.0.28 /usr/lib64

cd /usr/lib64

rm -f libstdc++.so.6

ln -s libstdc++.so.6.0.28 libstdc++.so.6

cmake-3.18.4安装

yum -y install lz4-devel openssl-devel zlib-devel zstd-devel protobufdevel libicu-devel readline-devel gperf curl-devel

#获取版本https://github.com/Kitware/CMake/archive/v3.18.4.tar.gz

cd cmake-3.18.4

./bootstrap

# 编译安装

make -j 4

make install

# 查看版本

cmake --version

clang安装

tar xvf llvm-11.0.0.src.tar.xz

tar xvf clang-11.0.0.src.tar.xz

tar xvf clang-tools-extra-11.0.0.src.tar.xz

tar xvf compiler-rt-11.0.0.src.tar.xz

tar xvf libcxx-11.0.0.src.tar.xz

tar xvf libcxxabi-11.0.0.src.tar.xz

tar xvf lldb-11.0.0.src.tar.xz

mv clang-11.0.0.src llvm-11.0.0.src/tools/clang

mv clang-tools-extra-11.0.0.src llvm-11.0.0.src/tools/clang/extra

mv compiler-rt-11.0.0.src llvm-11.0.0.src/projects/compiler-rt

mv libcxx-11.0.0.src llvm-11.0.0.src/projects/libcxx

mv libcxxabi-11.0.0.src llvm-11.0.0.src/projects/libcxxabi

mv lldb-11.0.0.src llvm-11.0.0.src/tools/lldb

cd llvm-11.0.0.src

mkdir build && cd build

cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/llvm ..

export THREADS=$(grep -c ^processor /proc/cpuinfo)

make -j $(nproc)

make install

echo "export PATH=$PATH:/opt/llvm/bin" >>/etc/profile

source /etc/profile

​​​​​​​git安装

yum install -y curl-devel

yum install -y git

​​​​​​​ninja安装

yum -y install git automake gcc+ gcc-c++ libtool

#下载https://down.24kplus.com/linux/re2c-1.1.1.tar.gz

tar -zxvf cd re2c.tar.gz

cd re2c

mkdir -p m4

./autogen.sh && ./configure --prefix=/usr && make

make install

#检查

re2c -v

#下载https://github.com/ninja-build/ninja

unzip ninja-1.8.2.zip

cd ninja-1.8.2/

./configure.py --bootstrap

# ninja比较精简,只需要一个可执行文件即可,现在可以做软链或者复制到/usr/bin下面就可以直接调用了

cp ninja /usr/bin/

ninja --version

编译

source /etc/profile

export CC=clang

export CXX=clang++

#进入解压出来或者git拉下来的代码目录后,执行如下命令:

mkdir build && cd build

cmake .. -DCMAKE_INSTALL_PREFIX=/opt/clickhouse

ninja

#clickhouse下载下来的代码应该是通过ninja编译过,所有默认还是使用ninja编译,而无法用 make和make install

# make -j $(nproc)

# make install

#如果cmake时指定了-DCMAKE_INSTALL_PREFIX参数,make install会将可以执行文件即各类其他依赖文件都放到/opt/clickhouse下;

#在编译及安装完成后,会缺少一些文件,并不是编译错误造成的,这些文件需要手动添加

#手动添加之后,可以将/opt/clickhouse目录压缩,以备在其他地方运行

mkdir -p /opt/ClickHouse-21.3.12.2-lts-aarch64/bin

mkdir -p /opt/ClickHouse-21.3.12.2-lts-aarch64/config/

mkdir -p /opt/ClickHouse-21.3.12.2-lts-aarch64/lib

cp programs/clickhouse /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/

cp programs/clickhouse-odbc-bridge /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/

cp ./utils/report/clickhouse-report /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/

cp ./tests/clickhouse-test /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/

cp ./tests/clickhouse-test-server /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/

cp ./build_kylin0625/utils/zookeeper-cli/clickhouse-zookeeper-cli /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/

cp ./build_kylin0625/utils/config-processor/config-processor /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/

cp ./build_kylin0625/utils/corrector_utf8/corrector_utf8 /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/

cp ../programs/server/config.xml /opt/ClickHouse-21.3.12.2-lts-aarch64/config/

cp ../programs/server/users.xml /opt/ClickHouse-21.3.12.2-lts-aarch64/config/

cp ../tests/config/dhparam.pem /opt/ClickHouse-21.3.12.2-lts-aarch64/config/

cp ../tests/config/server.key /opt/ClickHouse-21.3.12.2-lts-aarch64/config/

cp ../tests/config/server.crt  /opt/ClickHouse-21.3.12.2-lts-aarch64/config/

cp ./contrib/libcxx-cmake/libcxx.a /opt/ClickHouse-21.3.12.2-lts-aarch64/lib/

cp ./contrib/libcxxabi-cmake/libcxxabi.a /opt/ClickHouse-21.3.12.2-lts-aarch64/lib/

cp ./base/glibc-compatibility/libglibc-compatibility.a /opt/ClickHouse-21.3.12.2-lts-aarch64/lib/

cd /opt/ClickHouse-21.3.12.2-lts-aarch64/bin

ln -s clickhouse clickhouse-client

ln -s clickhouse clickhouse-compressor

ln -s clickhouse clickhouse-copier

ln -s clickhouse clickhouse-extract-from-config

ln -s clickhouse clickhouse-format

ln -s clickhouse clickhouse-git-import

ln -s clickhouse clickhouse-local

ln -s clickhouse clickhouse-obfuscator

ln -s clickhouse clickhouse-server

cd /opt

tar -zcvf ClickHouse-21.3.12.2-lts-aarch64_kylinCompile.tar.gz ClickHouse-21.3.12.2-lts-aarch64/

或:将LIB和工具分开编译

这一步跟上面“4.编译”都是进行编译,只是编译的参数不同,可根据自己的需要选择4或5执行。

source /etc/profile

export CC=clang

export CXX=clang++

#进入解压出来或者git拉下来的代码目录后,执行如下命令:

mkdir build && cd build

cmake .. -DUSE_STATIC_LIBRARIES=0 -DSPLIT_SHARED_LIBRARIES=1 -DCLICKHOUSE_SPLIT_BINARY=1 -DCMAKE_INSTALL_PREFIX=/opt/clickhouse

#如果只将工具分开,lib都静态链接,可以执行如下:

cmake .. -DCLICKHOUSE_SPLIT_BINARY=1 -DCMAKE_INSTALL_PREFIX=/opt/clickhouse

make -j  $(nproc)

make install

mkdir -p /opt/clickhouse/config/

cp ../programs/server/config.xml /opt/clickhouse/config/

cp ../programs/server/users.xml /opt/clickhouse/config/

cp ../tests/config/dhparam.pem /opt/clickhouse/config/

cp ../tests/config/server.key /opt/clickhouse/config/

cp ../tests/config/server.crt  /opt/clickhouse/config/

/usr/bin/cp  -f ../base/harmful/libharmful.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../base/common/libcommon.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../base/daemon/libdaemon.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../base/loggers/libloggers.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../base/widechar_width/libwidechar_width.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../base/readpassphrase/libreadpassphrase.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../base/mysqlxx/libmysqlxx.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/libunwind-cmake/libunwind.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/libcxxabi-cmake/libcxxabi.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/libcxx-cmake/libcxx.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/capnproto-cmake/libkj.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/capnproto-cmake/libcapnp.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/capnproto-cmake/libcapnpc.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/antlr4-runtime-cmake/libantlr4-runtime.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/boost-cmake/lib_boost_system.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/boost-cmake/lib_boost_context.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/boost-cmake/lib_boost_filesystem.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/boost-cmake/lib_boost_program_options.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/boost-cmake/lib_boost_iostreams.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/boost-cmake/lib_boost_coroutine.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/boost-cmake/lib_boost_regex.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/cctz-cmake/libcctz.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/consistent-hashing/libconsistent-hashing.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/dragonbox-cmake/libdragonbox_to_chars.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/jemalloc-cmake/libjemalloc.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/libmetrohash/libmetrohash.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/lz4-cmake/liblz4.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/murmurhash/libmurmurhash.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/replxx-cmake/libreplxx.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/unixodbc-cmake/libltdl.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/unixodbc-cmake/libunixodbc.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/xz/liblzma.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/Crypto/lib_poco_crypto.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/Data/ODBC/lib_poco_data_odbc.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/Data/lib_poco_data.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/Foundation/lib_poco_foundation_pcre.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/Foundation/lib_poco_foundation.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/JSON/lib_poco_json_pdjson.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/JSON/lib_poco_json.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/MongoDB/lib_poco_mongodb.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/Net/SSL/lib_poco_net_ssl.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/Net/lib_poco_net.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/Redis/lib_poco_redis.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/Util/lib_poco_util.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/XML/lib_poco_xml_expat.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/poco-cmake/XML/lib_poco_xml.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/croaring-cmake/libroaring.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/zstd-cmake/libzstd.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/re2/libre2.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/re2_st/libre2_st.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/double-conversion-cmake/libdouble-conversion.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/cityhash102/libcityhash.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/libfarmhash/libfarmhash.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/zlib-ng/libz.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/h3-cmake/libh3.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/boringssl-cmake/libcrypto.so /opt/clickhouse/lib/

/usr/bin/cp  -f ../contrib/boringssl-cmake/libssl.so /opt/clickhouse/lib/

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值