在 VirtualBox 中用 Vagrant 搭建 Apache Thrift 编译与测试环境(CentOS 6.5)
【免费下载链接】thriftApache Thrift项目地址: https://gitcode.com/GitHub_Trending/thr/thrift
导读
本文基于 Apache Thrift 仓库中 contrib/vagrant/centos-6.5/README.md 与配套的 Vagrantfile,完整讲解如何用 Vagrant + VirtualBox 在 CentOS 6.5 虚拟机中自动化搭建 Thrift 的编译、构建与测试环境。读完本文,你将掌握:从克隆仓库到vagrant up一键完成bootstrap.sh → configure → make → make check全流程的操作方法、共享目录与资源调优细节,以及如何按需裁剪语言依赖来显著缩短构建时间。
环境概览:这个 Vagrant 项目做了什么
该目录是一个标准的 Vagrant 项目目录(Vagrant 项目目录中通常包含Vagrantfile与README.md)。其目标是在 VirtualBox 之上启动一个极简的 CentOS 6.5 64 位虚拟机(2GB RAM、2 核 CPU),然后自动执行 Apache Thrift 的完整构建与测试流程。
整个工作分为两个阶段:
- 基础镜像(base box)阶段:使用由 Apache Thrift 社区维护的
RandyAbernethy/thrift-centos-6.5-64基础镜像,该镜像只包含支持 VirtualBox Guest Additions 所必需的最小软件集(perl、dkms、kernel-devel、Development Tools软件组以及 EPEL 仓库),不含任何 Thrift 相关软件。 - Provisioning(供应/预置)阶段:
vagrant up时由 Vagrantfile 内嵌的 shell 脚本执行依赖安装、构建与测试,自动化完成从源码编译 Apache Thrift 的整个过程。
前置条件:必须先安装 VirtualBox,再安装 Vagrant(README 明确强调了这个安装顺序),且两者都应是较新的版本。
三步启动:clone → cd → vagrant up
按照 README 给出的操作流程,在宿主机 shell 中依次执行:
$ git clone https://github.com/apache/thrift $ cd thrift/contrib/vagrant/centos-6.5 $ vagrant up执行过程中发生了什么:
- Vagrant 下载并启动基础镜像
RandyAbernethy/thrift-centos-6.5-64(Vagrantfile 第 158 行config.vm.box指定); - 将宿主机上的 Thrift 源码树挂载到虚拟机内的
/thrift(Vagrantfile 第 190 行config.vm.synced_folder "../../../", "/thrift",路径相对于 Vagrantfile 所在目录向上回溯三级到仓库根目录); - 运行内嵌的 provisioning 脚本,依次完成编译器依赖安装、各语言库依赖安装、
bootstrap.sh、./configure、make与make check。
README 特别提示:整个过程视硬件与网络条件可能长达一小时;而 Vagrantfile 头部的注释给出了更精细的估算——在配置良好、网络极佳的机器上,完整的语言依赖供应(provisioning)约需 30 分钟,随后构建还需约 15 分钟。
登录虚拟机并验证 Thrift 编译器
构建结束后,用 Vagrant SSH 登录虚拟机验证结果:
$ vagrant ssh [vagrant@thrift ~]$ cd /thrift [vagrant@thrift thrift]$ compiler/cpp/thrift --version Thrift version <version>几点说明:
- 共享目录使宿主机源码与虚拟机内
/thrift实时同步,因此在虚拟机内构建的产物会直接落在宿主机源码树中(其中编译后的二进制位于 compiler/cpp/thrift); --version参数的实现在 compiler/cpp/src/thrift/main.cc 中解析,并输出Thrift version %s(main.cc),<version>由构建时生成的THRIFT_VERSION宏决定,当前仓库configure.ac中声明的版本为 0.25.0(configure.ac)。
注意:provisioning 脚本只执行构建与测试,不会执行make install。如需将编译器与库安装到系统中,需在虚拟机内手动执行:
[vagrant@thrift thrift]$ make installVagrantfile 关键配置逐项解析
Vagrantfile 采用 Vagrant 2.0 配置语法(Vagrant.configure("2") do |config|),核心配置如下:
| 配置项 | 取值 | 作用 |
|---|---|---|
config.vm.box | RandyAbernethy/thrift-centos-6.5-64 | 指定 CentOS 6.5 minimal + VirtualBox Guest Additions 基础镜像 |
config.vm.box_check_update | false | 禁用自动更新检查(该 box 不会变更) |
config.vm.synced_folder | "../../../"→/thrift | 将仓库根目录挂载为虚拟机的/thrift |
config.vm.provider "virtualbox"内modifyvm --memory 2048 | 2GB | 分配给虚拟机的内存 |
config.vm.provider "virtualbox"内modifyvm --cpus 2 | 2 核 | 分配给虚拟机的 CPU 数 |
config.vm.provision :shell, :inline => $build_and_test | shell 内联脚本 | 执行编译依赖安装、构建与测试 |
Vagrantfile 中已注释的forwarded_port、private_network、public_network、ssh.forward_agent等段落是 Vagrant 模板自带的常规选项,本场景未启用。
关于资源规格,Vagrantfile 注释明确:该机器需要 2 核 CPU 与 2GB 内存才能获得合理性能。若宿主机资源紧张,可修改--memory与--cpus参数,但构建时间会相应变长。
Provisioning 脚本:依赖安装与构建测试全流程
Vagrantfile 中的$build_and_test内联脚本是自动化核心,其流程如下。
1. 更新构建工具链
CentOS 6.5 自带的 autoconf/automake/bison 过旧,无法满足 Thrift 构建要求,因此脚本从源码编译安装新版工具:
# autoconf 2.69 ./configure --prefix=/usr && make && sudo make install # automake 1.14 ./configure --prefix=/usr && make && sudo make install # bison 2.5.1 ./configure --prefix=/usr && make && sudo make install这一步骤的必要性可从 bootstrap.sh 得到印证:该脚本要求automake 1.13 或更高版本,否则直接报错退出。而 configure.ac 中AC_PROG_BISON(2.5)也要求 bison 至少为 2.5。
2. 各语言库依赖安装
脚本按语言分组通过yum安装依赖,完整清单如下:
| 语言/组件 | 依赖包 |
|---|---|
| C++98 库 | libevent-devel、zlib-devel、openssl-devel;另外从源码编译安装 Boost 1.55.0(./bootstrap.sh && sudo ./b2 install) |
| Java | ant、junit、ant-nodeps、ant-junit、java-1.8.0-openjdk-devel |
| Python | python-devel、python-setuptools、python-twisted |
| Ruby | ruby、ruby-devel、rubygems;gem install bundler rake |
| Node.js | nodejs、nodejs-devel、npm |
| Perl | perl-Bit-Vector、perl-Class-Accessor、perl-ExtUtils-MakeMaker、perl-Test-Simple |
| PHP | php、php-devel、php-pear、re2c |
| GLibC | glib2-devel |
| Erlang | erlang-kernel、erlang-erts、erlang-stdlib、erlang-eunit、erlang-rebar |
| Lua | lua-devel |
| Go | golang、golang-pkg-linux-amd64 |
| C#/Mono | mono-core、mono-devel、mono-web-devel、mono-extras、mingw32-binutils、mingw32-runtime、mingw32-nsis |
其中 C++ 库是 Thrift 核心运行时(lib/cpp)与编译器所必需;其他语言库则对应仓库 lib 目录下各语言实现(如 lib/rs、lib/go 等,见 LANGUAGES.md)。
3. 构建与测试
依赖就绪后,脚本在/thrift下依次执行:
cd /thrift sh bootstrap.sh sh configure --without-ruby --without-go --without-lua --without-python make make check各步骤含义:
bootstrap.sh:调用 bootstrap.sh,依次执行autoscan、libtoolize、aclocal -I ./aclocal、autoheader、autoconf、automake,从源码树生成configure脚本及构建基础设施;configure:检测工具链与各语言开发环境,生成 Makefile。--without-*开关用于跳过指定语言的库构建;make:编译 thrift 编译器(C++)与各语言库;make check:运行仓库测试套件(含 test 目录下各语言测试)。
Vagrantfile 注释特别指出:在该环境下 Ruby、Python、Go、Lua 的单元测试会失败,因此脚本默认用--without-ruby --without-go --without-lua --without-python排除这四个语言。如需构建并测试这些语言,可自行去掉对应开关。这套--without-*机制的底层实现在 configure.ac:--enable-libs控制是否构建各语言库,各语言又有独立的with_*开关与对应的AM_CONDITIONAL条件编译判断。
4. 加速技巧
Vagrantfile 注释明确建议:provisioning 脚本会预置所有语言,非常耗时;可以注释掉不需要的语言库依赖安装段落,从而大幅缩短构建时间。结合configure的--without-*开关,可以做到"依赖与构建双侧裁剪"。
基础镜像的制备清单(Base Box 构建细节)
README 附带了该 CentOS 6.5 基础镜像的制备过程摘要,理解它有助于排查 Vagrant 环境问题:
# 1. 创建 vagrant 用户并授予免密 sudo adduser vagrant passwd vagrant visudo : vagrant ALL=(ALL) NOPASSWD: ALL #Defaults requiretty # 2. 关闭防火墙并禁用 service iptables stop chkconfig iptables off # 3. 安装 vagrant 公钥以支持 vagrant ssh mkdir /home/vagrant/.ssh chmod 700 /home/vagrant/.ssh cd /home/vagrant/.ssh wget --no-check-certificate '<vagrant pub key>' -O authorized_keys chmod 600 /home/vagrant/.ssh/authorized_keys chown -R vagrant /home/vagrant/.ssh # 4. 安装 EPEL 仓库并保护基础仓库不被遮蔽 yum -y install yum-plugin-protectbase rpm -Uvh <epel-release-6 rpm> # 5. 安装 VirtualBox Additions 所需依赖 yum -y install perl yum -y --enablerepo epel install dkms yum -y groupinstall "Development Tools" yum -y install kernel-devel # 6. 更新系统并重启 yum update reboot # 7. 安装 VirtualBox Guest Additions(使用 VirtualBox iso) mount /dev/cdrom /mnt /mnt/VBoxLinuxAdditions.run umount /mnt账号信息:root/vagrant,vagrant/vagrant(Vagrantfile 头部注释亦确认了这两组账号)。镜像制备要点包括:给 vagrant 用户免密 sudo、关闭 iptables 防火墙、注入 vagrant SSH 公钥(~/.ssh/authorized_keys)、通过yum-plugin-protectbase让 EPEL 不覆盖基础仓库包,以及安装dkms、kernel-devel、Development Tools以支撑 VirtualBox 增强工具。
使用建议与限制
- 该 Vagrant 环境面向CentOS 6.5 这一较老发行版,工具链需从源码升级(autoconf/automake/bison)才能满足构建要求,这是本方案最大的时间开销来源之一;
- 默认 provisioning 会构建全部语言库,仅编译 C++ 编译器与核心库时可大幅裁剪,方法见上文"加速技巧";
- 官方文档另有其他系统的安装指南可供参考(如 doc/install/centos.md、doc/install/debian.md),生产环境可按需选择;
- 更多 Vagrant 用法参见官方 Vagrant 文档;本仓库的 Vagrant 配置即 contrib/vagrant/centos-6.5/Vagrantfile,README 中的细节与该文件互为补充。
【免费下载链接】thriftApache Thrift项目地址: https://gitcode.com/GitHub_Trending/thr/thrift
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考