天天看点

phxpaxos编译 完整流程(精简版)1. 安装依赖2. 下载phxpaxos项目3. 编译leveldb4. 编译protobuf5. 编译PhxPaxos静态库6. 编译glog7. 编译PhxPaxos Plugin静态库8. 编译gflags9. 编译sample

以下流程从一个新的虚拟机开始

  • 1. 安装依赖
  • 2. 下载phxpaxos项目
  • 3. 编译leveldb
  • 4. 编译protobuf
  • 5. 编译PhxPaxos静态库
  • 6. 编译glog
  • 7. 编译PhxPaxos Plugin静态库
  • 8. 编译gflags
  • 9. 编译sample
    • 9.1 phxecho
    • 9.2 phxelection
    • 9.3 phxkv

安装环境:CentOS-7-x86_64-Minimal

网络配置:安装net-tools,能用ifconfig命令和ssh连接即可。

以下步骤具体的操作原因,详见:《phxpaxos编译 完整流程》

1. 安装依赖

yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
yum -y install cmake wget git gcc gcc-c++ perl-ExtUtils-MakeMaker libtool libsysfs-dev 
           

下载和编译两个软件:

wget http://ftp.gnu.org/gnu/automake/automake-.tar.gz
wget http://ftp.gnu.org/gnu/autoconf/autoconf-.tar.gz

tar xvzf autoconf-.tar.gz
cd autoconf-
./configure
make && make install
cd ..
tar xvzf automake-.tar.gz
cd automake-
./configure
make && make install
// 验证:
automake --version
>>> automake (GNU automake) 
           

2. 下载phxpaxos项目

3. 编译leveldb

cd phxpaxos/third_party
rm -rf leveldb
wget https://github.com/google/leveldb/archive/v1.tar.gz
tar xvzf v1.tar.gz
mv leveldb- leveldb
cd leveldb
make
mkdir lib 
cd lib 
ln -s ../libleveldb.a libleveldb.a
           
至此,leveldb编译完成,在lib目录下建立了一个软链,PhxPaxos通过lib这个目录来寻址静态库。

4. 编译protobuf

cd ../..  // 到phxpaxos/third_party/目录下
mv gmock protobuf/
cd protobuf
libtoolize --copy --force
./autogen.sh
pwd
./configure CXXFLAGS=-fPIC --prefix=[当前目录绝对路径pwd]
make && make install
           
至此,protobuf编译完成,检查是否在当前目录成功生成bin,include,lib三个子目录。

5. 编译PhxPaxos静态库

cd ../..  // 到PhxPaxos/目录下
./autoinstall.sh
make && make install //默认使用-O2编译优化参数,如需编译debug版本,则命令为make debug=y
           
至此,PhxPaxos静态库编译完成,检查是否在当前目录成功生成lib子目录,在lib目录是否成功生成静态库libphxpaxos.a.

6. 编译glog

cd third_party/glog/
pwd
./configure CXXFLAGS=-fPIC -prefix=[当前目录绝对路径pwd]
automake --add-missing
make && make install
           
至此,glog编译完成,检查是否在当前目录成功生成lib子目录,并检查在lib目录是否成功生成静态库libglog.a.

7. 编译PhxPaxos Plugin静态库

cd ../../plugin/  // 到PhxPaxos/plugin/目录下
make && make install
           
至此,PhxPaxos Plugin静态库编译成功,检查上层lib目录下是否成功生成静态库libphxpaxos_plugin.a.

8. 编译gflags

cd ../third_party/gflags/ // 到phxpaxos/third_party/gflags目录下
cmake .
make -j
make install
           
至此,gflags静态库编译成功,检查是否在当前目录成功生成lib子目录,并检查在lib目录是否成功生成静态库libgflags.a

9. 编译sample

9.1 phxecho

cd ../../sample/phxecho/  // 到phxpaxos/sample/phxecho目录下
make
mkdir log
           

运行:

// 启动三个进程:
./phxecho : :,:,:
./phxecho : :,:,:
./phxecho : :,:,:
           

每个进程都保持如下的阻塞状态:

run paxos ok
echo server start, ip  port 

please input: <echo req value>
           

随意选择其中某个进程,在其终端输入”hello, chao”,结果如下:

hello, chao
[SM Execute] ok, smid  instanceid  value hello, chao
echo resp value hello, chao
           

其他两个进程会显示如下:

[SM Execute] ok, smid  instanceid  value hello, chao
           

9.2 phxelection

cd ../phxelection/
make
           

运行:

// 启动三个进程:
./phxelection : :,:,:
./phxelection : :,:,:
./phxelection : :,:,:
           

进程为如下的状态:

// 启动进程时,进程:
run paxos ok
master: nodeid  version  ip  port 
...

// 启动进程时,进程:
run paxos ok
master change!!! groupidx  newmaster ip  port  version 
master: nodeid  version  ip  port 
...

// 启动进程时,进程:
master change!!! groupidx  newmaster ip  port  version 
master: nodeid  version  ip  port 
...

// 启动进程时,进程:
run paxos ok
master: nodeid  version  ip  port 
master: nodeid  version  ip  port 
master: nodeid  version  ip  port 
master change!!! groupidx  newmaster ip  port  version 
master: nodeid  version  ip  port 
...

// 启动进程时,进程和进程状态不变:
master: nodeid  version  ip  port 
...
           

依次终止进程:

// 终止进程时,进程:
master: nodeid  version  ip  port 
master change!!! groupidx  newmaster ip  port  version 
master: nodeid  version  ip  port 
...

// 终止进程时,进程:
master change!!! groupidx  newmaster ip  port  version 
master: nodeid  version  ip  port 
...

// 终止进程时,进程(只有单进程存活时,都是这个状态):
master: nodeid  version  ip  port 
...
           

9.3 phxkv

要编译grpc:失败待续。