对于一个学c++不到两小时的我来说,本来打算是放弃编译chainsql的,编译过程实在艰辛难受,不过幸好成功,特此记录一下过程。

环境准备

新建一个目录,我把它叫做arch,用来存放待会安装的依赖包

  1. yum y install centos-release-scl
  2. yum y install devtoolset-7
  3. yum -y install python-devel
  4. # 这里是从零开始安装mysql
  5. # wget http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
  6. # yum –y install mysql80-community-release-el7-3.noarch.rpm
  7. # yum –y install mysql-community-server
  8. # systemctl start mysqld.service
  9. # 如果你的所在系统已经有了mysql,那就不需要执行
  10. wget https://cmake.org/files/v3.10/cmake-3.10.2.tar.gz
  11. wget https://dl.bintray.com/boostorg/release/1.63.0/source/boost_1_63_0.tar.gz
  12. wget http://www.zlib.net/zlib-1.2.11.tar.gz
  13. wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2m.tar.gz
  14. wget https://www.openssl.org/source/openssl-fips-2.0.16.tar.gz
  15. wget https://github.com/protocolbuffers/protobuf/archive/v3.5.0.tar.gz

开始安装

先进入dev-7的bash环境,这个环境变量是一次性的,如果你不小心退出了,可以再进去,他只是临时将gcc等一系列套件生效,不用你再去编译安装了

  1. scl enable devtoolset-7 bash

安装cmake

cmake版本必须要3.5.0以上,这里我用的3.10.2

  1. tar xf cmake-3.10.2.tar.gz
  2. cd cmake-3.10.2
  3. ./bootstrap
  4. gmake
  5. gmake install

安装boost库

如果系统中存在boost,看下版本是不是1.63,如果不是则一定要换,低点版本或者高点版本将会导致意料之外的错,比如找不到std库甚至编译直接报错。

  1. # 找到并删除原有的boost库,如果没有可忽略
  2. find / -name libboost_system* -exec rm -rf {} \;
  3. mv /usr/include/boost /usr/include/boost _bak

编译安装

  1. tar -zxvf boost_1_63_0.tar.gz -C /usr/local && cd /usr/local/boost_1_63_0
  2. ./bootstrap.sh
  3. ./b2
  4. ./b2 headers install
  5. ./b2 install
  6. cp -rf boost /usr/include
  7. cp -rf stage/lib/* /usr/lib
  8. # 刷新ld库
  9. ldconfig -v

安装zlib库

这个库很和谐,很快装完

  1. tar xf zlib-1.2.11.tar.gz && cd zlib-1.2.11
  2. 编译安装
  3. ./configure
  4. make
  5. make install

升级openssl

这个是个玄学库,我原来系统是1.0.2k-fip,却仍然缺少必要组件,所以只好重新开始装

  1. # 删除配置文件
  2. rm -rf /etc/ssl
  3. # 备份之前的openssl库和脚本,如果第一次安装,可以忽略本步骤
  4. mv /usr/bin/openssl /usr/bin/openssl_bak
  5. mv /usr/include/openssl /usr/include/openssl_bak
  6. # 安装openssl
  7. tar xf openssl-1.0.2m.tar.gz
  8. cd openssl-1.0.2m/
  9. 安装路径放在/usr/local/openssl
  10. ./config shared zlib --prefix=/usr/local/openssl
  11. ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
  12. ln -s /usr/local/openssl/include/openssl /usr/include/openssl
  13. echo "/usr/local/openssl/lib/" >> /etc/ld.so.conf
  14. ldconfig -v

安装openssl-fips模块

  1. tar xf openssl-fips-2.0.16.tar.gz && cd openssl-fips-2.0.16
  2. ./config shared zlib --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
  3. make && make install
  4. ./config -tmake depend
  5. ldconfig -v
  6. # 查看是否成功
  7. ll /usr/include/openssl/ | grep fip
  8. openssl verison -a
  9. # 如果成功,将目录加入/etc/profile
  10. echo "export OPENSSL_ROOT_DIR=/usr/local/openssl" >> /etc/profile
  11. source /etc/profile

安装protobuf

rpc用的,很牛X

  1. tar xf v3.5.0.tar.gz
  2. cd protobuf-3.5.0/
  3. 执行,大概要一小时安装
  4. ./autogen.sh
  5. ./configure
  6. make
  7. make check
  8. make install
  9. 查看是否成功
  10. protoc --version

编译

下载chainsql的github源码和chainsql最新release的源码。这里并不是打算两个都编译,而是github源码,有个文件夹里有有我要引用的.a文件,而release才是我们真正要编译的

  1. mkdir software build
  2. cd software
  3. git clone https://github.com/ChainSQL/chainsqld.git
  4. wget https://github.com/ChainSQL/chainsqld/archive/v1.0.2-pop.tar.gz
  5. tar xf v1.0.2-pop.tar.gz
  6. # 进入build目录
  7. cd ../build

cmake生成makefile

  1. cmake Dtarget=gcc.release DBOOST_ROOT=/usr/local/boost_1_63_0 你的chainsql release文件夹路径

修改默认链接文件

  1. vim CmakeFiles/chainsqld.dir/link.txt
  2. # 将-pthread后面 /usr/…/libmysqlclient.换成刚刚说的chainsql github源码中Builds/Ubuntu/libmysqlclient.a,这就是我要链接的文件,其他都不用
  3. # 比如我的chainsqld github包路径是/home/wbc/chainsqld,则-pthread后路径替换为/home/wbc/chainsqld/Builds/Ubuntu/libmysqlclient.a

编译开始,在build目录下

  1. make j2

编译结束
在chainsql release新生成的build/gcc.release/目录下,有chainsqld脚本生成,则表示成功