《Mysql必知必会》读书笔记 jar包名中自动添加git commit id PyCharm教学视频学习笔记 《SQL基础教程》简要总结 《设计师要懂心理学》读书笔记 MySQL与MariaDB学习笔记 WDT (Folly) 安装指南 -- CentOS 7 [solved]Page build failed(Jekyll) 数据包过滤及分析实例 tshark tcpdump Scala Tour 学习总结 “Docker容器和容器云”读书笔记(1) “Docker Practice”读书笔记 “图解基础设施设计模式”小结 “图解服务器端网络架构”小结 Python网络安全编程 数据包解析笔记 华为挑战赛(1) DDoS攻击防御与云服务 基于网络回溯分析技术的异常行为分析 “Linux程序设计”小结(进程间通信) C语言编程规范(华为软件精英挑战赛) 2017阿里在线编程题--单源最短路径问题 2017年阿里在线编程题-- 数串分组 Uinx/Linux上的帮助查询命令 你懂C,所以C++不在话下 一篇特别长的总结(C专家编程) 程序员面试金典--笔记(精华篇) C陷阱与缺陷--笔记 半小时搭建电子商务网站--opencart linux网络知识和工具(持续更新) 网卡参数查询及设置工具ethtool 高性能流量生成工具trafgen(DDoS模拟) Linux流量控制工具TC 流量控制工具TC详细说明 tcpdump过滤数据包,结果不对? Lecture 网络攻击与防御技术笔记 gotgit-git权威指南 高效使用MacOS所要知道的 shell内置字符串处理 配置ntp(知其所以然) 360黑客攻防技术分享会--记录 中毒U盘恢复--快捷键病毒 Tor--anonymity network介绍(PPT) IBM bluemix 再读《Linux Shell脚本攻略》 linux shell 学习摘记(9) linux shell 学习摘记(8) linux shell 学习摘记(7) linux shell 学习摘记(6) linux shell 学习摘记(5) linux shell 学习摘记(4) linux shell 学习摘记(3) linux shell 学习摘记(2) linux shell 学习摘记(1) firefox vim 插件 vimperator A Byte of Vim 笔记 windows注册表小知识 安全测试工具篇(开源&商业) 安全及性能测试工具(网站收集) 性能测试工具 屡试不爽的“3个”iPad使用技巧 Shell Shortcuts(和Tab键一样实用) vim--自动添加jekyll post信息头 vim 自动给文件添加头部信息 GitHub Tips (很实用,值得收藏) Linux路由、防火墙、NAT命令

WDT (Folly) 安装指南 -- CentOS 7

2017年10月11日

博客链接: http://codeshold.me/2017/10/wdt_folly_install_centos.html

断断续续的摸索了三天,终于在 CentOS 7 上成功的安装了Facebook的 WDT!!!
很麻烦,有选择的话,还是建议直接在Ubuntu上安装,可以节省很多时间和精力……

0x01 Preface

下最新的源码、最新的源码、最新的源码

  1. WDT 依赖 Facebook的 Folly库,故需要先验证Folly的编译和安装
  2. 通过yum安装的glog-devel、gflags-devel、gtest-devel 版本比较低,编译Folly时会报错,需要下载最新源码编译安装
  3. double-conversion 库自己是通过yum安装的,在CentOS 7.2CentOS7.3 下未发现报错信息
  4. WDT 务必直接git clone下载最新源码,最新的release版本也可能会出现编译错误(踩过的坑, git issue也有提及)
  5. gcc一定要4.9或以上,自己并没有手动升级操作系统的gcc,用的是scl(centos-release-scl)
  6. 注意设置LD_LIBRARY_PATH的路径,默认情况下,编译安装的库都在/usr/local/lib目录下
  7. PKG_CONFIG_PATH可不用设置,自己只是设置了LD_LIBRARY_PATH, 当然在pkg-config --variable pc_path pkg-config路径中再添加一个/usr/local/pkgconfig也可以
  8. 安装时注意文件的路径,wdt和folly要在同一目录下

0x02 Prepare

  • glog: Google的一个C++语言的应用级日志记录框架,提供了C++风格的流操作和各种助手宏。
  • gflags: Google的一个开源的处理命令行参数的库,使用c++开发,具备python接口,可以替代getopt。
  • double-conversion: A library that performs fast, accurate conversion between double precision floating point and text.
  • jemalloc: General-purpose scalable concurrent malloc implementation
  • boost: Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一, Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。
  • libunwind: a portable and efficient C programming interface (API) to determine the call-chain of a program.
  • folly: Folly contains a variety of core library components used extensively at Facebook.

0x03 Installation Steps

先完成Folly的安装,再完成WDT的安装

1. Install Folly

  • Ref: https://github.com/facebook/folly
# Install gcc 4.9 devtoolset
[root@gf01 package]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
[root@gf01 package]# yum install epel-release -y 
[root@gf01 package]# yum install centos-release-scl -y
[root@gf01 package]# yum install devtoolset-3-toolchain -y 

# Switch to gcc 4.9 env
[root@gf01 package]# scl enable devtoolset-3 bash
[root@gf01 package]# gcc --version
gcc (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6)

# Required -- Install dependent packages 
yum install \
gcc \
gcc-c++ \
autoconf \
autoconf-archive \
automake \
boost-devel \
libtool \
lz4-devel \
xz-devel \
snappy-devel \
zlib-devel \
scons \
double-conversion-devel \
openssl-devel \
libevent-devel \
git \
-y 

# Optional -- Install dependent packages
yum install \
libdwarf-devel \
elfutils-libelf-devel \
libunwind-devel.x86_64 \
-y

# Add  `/usr/local/lib` to LD_LIBRARY_PATH
export LD_LIBRARY_PATH="/usr/local/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"

# Download && Compile && Install gflags
# Current Directory /home/big_data
git clone https://github.com/schuhschuh/gflags.git
mkdir gflags/build && \
cd gflags/build && \
cmake3 -DGFLAGS_NAMESPACE=google -DBUILD_SHARED_LIBS=on .. && \
make -j && \
make install

# Download && Compile && Install glog
# Current Directory /home/big_data
git clone https://github.com/google/glog.git
cd glog && \
autoreconf -ivf && \
./configure --with-gflags=/usr/local/lib && \
make -j && \
make install

# Download folly and gtest
# Current Directory /home/big_data
git clone https://github.com/facebook/folly.git && \
cd folly/folly/test && \
rm -rf gtest && \
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz && \
tar zxf release-1.8.0.tar.gz && \
rm -f release-1.8.0.tar.gz && \
mv googletest-release-1.8.0 gtest

# Compile && Install folly
# Current Directory: /home/bigdata/folly/folly
autoreconf -ivf && \
./configure && \
make -j && \
make install 

2. Install wdt

  • Ref: https://github.com/facebook/wdt
  • CTESET_OUTPUT_ON_FAILURE=1 make test中若出现部分测试用例不过,可以直接make install,自己部署了多台服务器,但有一台出现了部分case失败(CentOS Linux release 7.3.1611 (Core)),原因还在排查,但make install之后也并不影响文件的传输!
# Required -- Install dependent packages 
yum install \
cmake3.x86_64 \
double-conversion-devel.x86_64 \
jemalloc-devel.x86_64 \
boost-devel.x86_64 \
openssl-devel.x86_64 \
libunwind-devel.x86_64 \
-y

# Optional -- Install dependent packages
yum install boost-system.x86_64 \
-y 

# Download && Compile && Install wdt
# Current Directory /home/big_data
git clone https://github.com/facebook/wdt.git
cd wdt && \
cmake3 . -DBUILD_TESTING=on && \
make -j && \
CTESET_OUTPUT_ON_FAILURE=1 make test && \
make install

3. Test wdt

  • 使用说明参考 wdt -helpfull | less
# Server 指定端口范围,默认开启8个TCP流
wdt -directory /home/bigdata/testfiles/ -transfer_id 1 -start_port 22888

# Client 指定端口范围,指定加密方式,提高传输速度
wdt -directory /usr/bin/ -destination 10.10.88.172 -transfer_id 1 -start_port 22888 -encryption_type aes128ctr

0x04 Ref

  • http://hackage.haskell.org/package/double-conversion
  • http://www.nongnu.org/libunwind/
  • https://github.com/facebook/folly
  • https://github.com/facebook/wdt
  • gcc 4.9 – https://www.dwhd.org/20160724_085212.html
  • https://askubuntu.com/questions/210210/pkg-config-path-environment-variable
  • Other commands
yum install libmpc-devel mpfr-devel gmp-devel

cmake3 . -DGFLAGS_INCLUDE_DIR=/usr/local/include/gflags  -DGFLAGS_LIBRARY=/usr/local/lib -DGLOG_INCLUDE_DIR=/usr/local/include  -DGLOG_LIBRARY=/usr/local/lib

DOUBLE_CONVERSION_HOME=/usr/include/double-conversion

./configure LDFLAGS=-L$DOUBLE_CONVERSION_HOME/ CPPFLAGS=-I$DOUBLE_CONVERSION_HOME/
LD_LIBRARY_PATH=$DOUBLE_CONVERSION_HOME/ make

pkg-config --variable pc_path pkg-config
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig

export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64/:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/usr/local/include/:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/usr/local/include/:$CPLUS_INCLUDE_PATH

知识共享许可协议
SWF's Hacking Dreamonephone 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
© 2011-2018. All rights reserved by onephone. Powerd by Jekyll.