phxpaxos安装编译流程
一、前言
这篇博客记录了腾讯微信团队的phxpaxos安装编译过程,记录一些编译过程中的坑。
github链接:
phxpaxos github链接
官方文档的编译手册:
编译手册
然而,官方的编译手册年代久远,所以依照其流程来操作可能会遇到一些问题,这里总结一下自己安装过程中的坑,并使用不同于编译手册的方式进行编译安装。
二、安装过程
1. 拉取代码
官方文档使用
git clone --recursive https://github.com/tencent-wechat/phxpaxos.git
来拉取代码,这样可以把submodule一起拉取,但由于连接缓冲区大小或者连接超时时间的原因,有可能没办法一次拉取下来,所以可以尝试:先
git clone https://github.com/tencent-wechat/phxpaxos.git
拉取不带submodule的代码,然后进入./phxpaxos
目录下,
git submodule init
git submodule update
拉取submodule,如果一次update不成功(连接失败或者只拉取了部分submodule),可以多用几次git submodule update
直到所有submodule更新完成。
2. 编译 submodules(依赖库)
直接运行
../phxpaxos/third_party/autoinstall.sh
为什么不按照官方编译手册来
phxpaxos依赖leveldb、protobuf
等module,这部分代码在../phxpaxos/third_party
中,目录如下:
官方手册分别编译不同的模块,这样比较麻烦,而且不够灵活,所以我们使用../phxpaxos/third_party/autoinstall.sh
来进行安装编译。为什么不推荐跟着手册来,举两个例子:
1.在安装leveldb的时候官方手册有如下操作:
mkdir lib建立一个lib目录,然后
cd lib;ln -s ../libleveldb.a libleveldb.a
建立一个软链,PhxPaxos通过lib这个目录来寻址静态库。
但实际上libleveldb.a
可能并不在third_party/leveldb
目录下,而是在third_party/leveldb/out-static
目录下,而在../phxpaxos/third_party/autoinstall.sh
中会自行判断并链接
2.在安装protobuf的时候官方手册有如下操作:
进入
third_party/protobuf
目录,运行./autogen.sh
protobuf
依赖gmock
,所以在./autogen.sh
中会下载安装gmock
,但图示链接被墙,搭梯子上去之后也是404.
而在../phxpaxos/third_party/autoinstall.sh
中会先尝试重用third_party
目录中的gmock
(gmock
也是phxpaxos
的submodule),然后再运行protobuf
的./autogen.sh
,所以并不会出现问题。
可能会遇到的坑
a. glog aclocal-1.14 不存在
先查看当前版本
版本若不是1.14的话依次进行以下操作:
找个合适的目录,如/usr/local/
,然后
autoconf 编译
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar xvzf autoconf-2.69.tar.gz
cd autoconf-2.69; ./configure
make && make install
cd ..
automake 编译
wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
tar xvzf automake-1.14.tar.gz; cd automake-1.14
./configure
make && make install
重新运行../phxpaxos/third_party/autoinstall.sh
即可。
b. glog ‘./test-driver’ not found
修改../phxpaxos/third_party/autoinstall.sh
脚本
在install_glog()
函数中画框的位置添加:
automake --add-missing
aclocal-1.14
重新运行../phxpaxos/third_party/autoinstall.sh
便可下载缺失文件并正常工作。
c. protobuf 找不到AC_PROG_LIBTOOL
由于安装了多个版本的aclocal
(重新安了1.14),导致aclocal
扫描configure.ac中所有的宏定义并展开的时候路径错误。aclocal
是去默认安装目录/usr/share/aclocal
下面搜索所有的.m4文件找所定义的宏,但是由于安装了多个aclocal
,可能aclocal
目录不存在,实际目录为/usr/local/share/aclocal
等,这就造成了aclocal
找不到m4文件的情况,需要将复制一份.m4文件到/usr/local/share/aclocal
,因此需要执行以下命令
cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/
重新运行../phxpaxos/third_party/autoinstall.sh
便可正常执行。
3. 编译PhxPaxos静态库
回到phxpaxos根目录
cd phxpaxos/
./autoinstall.sh
make && make install //默认使用-O2编译优化参数,如需编译debug版本,则命令为make debug=y
如仅需使用libphxpaxos.a进行开发,则编译就到此完成了。而如果希望使用我们的glog打日志插件模块,或者想尝试编译sample目录,或用于phxsql使用,则还需要编译libphxpaxos_plugin.a, 这个静态库依赖了glog。
4. 编译PhxPaxos Plugin静态库
cd phxpaxos/plugin
make && make install
编译成功检查上层lib目录下是否成功生成静态库libphxpaxos_plugin.a
三、example-phxecho
编译phxecho
cd ../phxpaxos/sample/phxecho
make
mkdir log
运行测试
// 启动三个进程
./phxecho 127.0.0.1:1000 127.0.0.1:1000,127.0.0.1:1001,127.0.0.1:1002
./phxecho 127.0.0.1:1001 127.0.0.1:1000,127.0.0.1:1001,127.0.0.1:1002
./phxecho 127.0.0.1:1002 127.0.0.1:1000,127.0.0.1:1001,127.0.0.1:1002
输入的内容会被所有进程看到并记录。