)
在 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再安装 VagrantREADME 明确强调了这个安装顺序且两者都应是较新的版本。三步启动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-64Vagrantfile 第 158 行config.vm.box指定将宿主机上的 Thrift 源码树挂载到虚拟机内的/thriftVagrantfile 第 190 行config.vm.synced_folder ../../../, /thrift路径相对于 Vagrantfile 所在目录向上回溯三级到仓库根目录运行内嵌的 provisioning 脚本依次完成编译器依赖安装、各语言库依赖安装、bootstrap.sh、./configure、make与make check。README 特别提示整个过程视硬件与网络条件可能长达一小时而 Vagrantfile 头部的注释给出了更精细的估算——在配置良好、网络极佳的机器上完整的语言依赖供应provisioning约需 30 分钟随后构建还需约 15 分钟。登录虚拟机并验证 Thrift 编译器构建结束后用 Vagrant SSH 登录虚拟机验证结果$ vagrant ssh [vagrantthrift ~]$ cd /thrift [vagrantthrift thrift]$ compiler/cpp/thrift --version Thrift version version几点说明共享目录使宿主机源码与虚拟机内/thrift实时同步因此在虚拟机内构建的产物会直接落在宿主机源码树中其中编译后的二进制位于 compiler/cpp/thrift--version参数的实现在 compiler/cpp/src/thrift/main.cc 中解析并输出Thrift version %smain.ccversion由构建时生成的THRIFT_VERSION宏决定当前仓库configure.ac中声明的版本为 0.25.0configure.ac。注意provisioning 脚本只执行构建与测试不会执行make install。如需将编译器与库安装到系统中需在虚拟机内手动执行[vagrantthrift thrift]$ make installVagrantfile 关键配置逐项解析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将仓库根目录挂载为虚拟机的/thriftconfig.vm.provider virtualbox内modifyvm --memory 20482GB分配给虚拟机的内存config.vm.provider virtualbox内modifyvm --cpus 22 核分配给虚拟机的 CPU 数config.vm.provision :shell, :inline $build_and_testshell 内联脚本执行编译依赖安装、构建与测试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安装依赖完整清单如下语言/组件依赖包C98 库libevent-devel、zlib-devel、openssl-devel另外从源码编译安装 Boost 1.55.0./bootstrap.sh sudo ./b2 installJavaant、junit、ant-nodeps、ant-junit、java-1.8.0-openjdk-develPythonpython-devel、python-setuptools、python-twistedRubyruby、ruby-devel、rubygemsgem install bundler rakeNode.jsnodejs、nodejs-devel、npmPerlperl-Bit-Vector、perl-Class-Accessor、perl-ExtUtils-MakeMaker、perl-Test-SimplePHPphp、php-devel、php-pear、re2cGLibCglib2-develErlangerlang-kernel、erlang-erts、erlang-stdlib、erlang-eunit、erlang-rebarLualua-develGogolang、golang-pkg-linux-amd64C#/Monomono-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/vagrantvagrant/vagrantVagrantfile 头部注释亦确认了这两组账号。镜像制备要点包括给 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/VagrantfileREADME 中的细节与该文件互为补充。【免费下载链接】thriftApache Thrift项目地址: https://gitcode.com/GitHub_Trending/thr/thrift创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考