news 2026/9/15 13:56:55

在 VirtualBox 中用 Vagrant 搭建 Apache Thrift 编译与测试环境(CentOS 6.5)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 VirtualBox 中用 Vagrant 搭建 Apache Thrift 编译与测试环境(CentOS 6.5)

在 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 项目目录中通常包含VagrantfileREADME.md)。其目标是在 VirtualBox 之上启动一个极简的 CentOS 6.5 64 位虚拟机(2GB RAM、2 核 CPU),然后自动执行 Apache Thrift 的完整构建与测试流程。

整个工作分为两个阶段:

  1. 基础镜像(base box)阶段:使用由 Apache Thrift 社区维护的RandyAbernethy/thrift-centos-6.5-64基础镜像,该镜像只包含支持 VirtualBox Guest Additions 所必需的最小软件集(perldkmskernel-develDevelopment Tools软件组以及 EPEL 仓库),不含任何 Thrift 相关软件。
  2. 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

执行过程中发生了什么:

  1. Vagrant 下载并启动基础镜像RandyAbernethy/thrift-centos-6.5-64(Vagrantfile 第 158 行config.vm.box指定);
  2. 宿主机上的 Thrift 源码树挂载到虚拟机内的/thrift(Vagrantfile 第 190 行config.vm.synced_folder "../../../", "/thrift",路径相对于 Vagrantfile 所在目录向上回溯三级到仓库根目录);
  3. 运行内嵌的 provisioning 脚本,依次完成编译器依赖安装、各语言库依赖安装、bootstrap.sh./configuremakemake 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 install

Vagrantfile 关键配置逐项解析

Vagrantfile 采用 Vagrant 2.0 配置语法(Vagrant.configure("2") do |config|),核心配置如下:

配置项取值作用
config.vm.boxRandyAbernethy/thrift-centos-6.5-64指定 CentOS 6.5 minimal + VirtualBox Guest Additions 基础镜像
config.vm.box_check_updatefalse禁用自动更新检查(该 box 不会变更)
config.vm.synced_folder"../../../"/thrift将仓库根目录挂载为虚拟机的/thrift
config.vm.provider "virtualbox"modifyvm --memory 20482GB分配给虚拟机的内存
config.vm.provider "virtualbox"modifyvm --cpus 22 核分配给虚拟机的 CPU 数
config.vm.provision :shell, :inline => $build_and_testshell 内联脚本执行编译依赖安装、构建与测试

Vagrantfile 中已注释的forwarded_portprivate_networkpublic_networkssh.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-develzlib-developenssl-devel;另外从源码编译安装 Boost 1.55.0(./bootstrap.sh && sudo ./b2 install
Javaantjunitant-nodepsant-junitjava-1.8.0-openjdk-devel
Pythonpython-develpython-setuptoolspython-twisted
Rubyrubyruby-develrubygemsgem install bundler rake
Node.jsnodejsnodejs-develnpm
Perlperl-Bit-Vectorperl-Class-Accessorperl-ExtUtils-MakeMakerperl-Test-Simple
PHPphpphp-develphp-pearre2c
GLibCglib2-devel
Erlangerlang-kernelerlang-ertserlang-stdliberlang-euniterlang-rebar
Lualua-devel
Gogolanggolang-pkg-linux-amd64
C#/Monomono-coremono-develmono-web-develmono-extrasmingw32-binutilsmingw32-runtimemingw32-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,依次执行autoscanlibtoolizeaclocal -I ./aclocalautoheaderautoconfautomake,从源码树生成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/vagrantvagrant/vagrant(Vagrantfile 头部注释亦确认了这两组账号)。镜像制备要点包括:给 vagrant 用户免密 sudo、关闭 iptables 防火墙、注入 vagrant SSH 公钥(~/.ssh/authorized_keys)、通过yum-plugin-protectbase让 EPEL 不覆盖基础仓库包,以及安装dkmskernel-develDevelopment 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 13:56:23

网页数据一键变可编辑Excel:Skill开发全流程拆解与避坑指南

最近整理了一个新的 Skill&#xff0c;名字很直白&#xff1a;把网页数据直接变成一张能编辑的表格。给 Claude Code、Codex 这类编程代理丢一个链接&#xff0c;它就能自动把页面里的数据抓下来&#xff0c;整理成 Excel 或 CSV&#xff0c;打开就能改。听起来就是“网页采集”…

作者头像 李华
网站建设 2026/9/15 13:56:15

iOS审核3.2(f)条款深度解析:Flutter与UniApp合规避坑指南

1. 项目概述&#xff1a;这不是一次“封号通知”&#xff0c;而是一次iOS生态规则的现场教学App Store 3.2(f)条款&#xff0c;过去三年里被开发者私下称为“沉默绞索”——它不发警告邮件&#xff0c;不显示具体违规代码行&#xff0c;不提供复审通道&#xff0c;只在审核通过…

作者头像 李华
网站建设 2026/9/15 13:55:28

C++会员系统源码实战:从编译运行到二次开发

简介&#xff1a;这是一份面向C初学者与课程设计人群的会员管理系统资源&#xff0c;基于C控制台实现&#xff0c;涵盖登录、查看会员、添加和修改会员信息等核心功能。压缩包共4个文件&#xff0c;约18KB&#xff0c;包含可直接运行的exe程序、完整cpp源代码、编译生成的o中间…

作者头像 李华
网站建设 2026/9/15 13:54:32

Go并发本质:CSP模型与channel正确使用指南

1. 为什么Go的并发模型不是“多线程升级版”&#xff0c;而是彻底换了一套操作系统思维&#xff1f;很多人刚学Go并发时&#xff0c;第一反应是&#xff1a;“哦&#xff0c;goroutine就是轻量级线程&#xff0c;channel就是带缓冲的队列&#xff0c;和Java的ExecutorServiceBl…

作者头像 李华