Discuss New Concept,New Technic,New Tools, Including EAI,BPM,SOA,Tibco,IBM MQ,Tuxedo, Cloud,Hadoop,NoSQL,J2EE,Ruby,Scala,Python, Performance,Scalability,Distributed,HA, Social Network,Machine Learning.
Dec 182010
 

Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml.

Originally developed at Facebook, Thrift was open sourced in April 2007 and entered the Apache Incubator in May, 2008.

1) Requirement software

Basic requirements

  • A relatively POSIX-compliant *NIX system
    • Cygwin or MinGW can be used on Windows
  • g++ 3.3.5+
  • boost 1.33.1+ (1.34.0 for building all tests)
  • Runtime libraries for lex and yacc might be needed for the compiler.

Requirements for building from SVN

  • GNU build tools: autoconf 2.59+ (2.60+ recommended), automake 1.9+, libtool 1.5.24+
  • pkg-config autoconf macros (pkg.m4) (Use MacPorts for Mac OS X)
  • lex and yacc (developed primarily with flex and bison)

Language requirements

  • C++
    • Boost 1.33.1+
    • libevent (optional, to build the nonblocking server)
    • zlib (optional)
  • Java
    • Java 1.5+
    • Apache Ant
    • Apache Ivy (recommended)
    • Apache Commons Lang (recommended)
    • SLF4J
  • C#: Mono 1.2.4+ (and pkg-config to detect it) or Visual Studio 2005+
  • Python 2.4+ (including header files for extension modules)
  • PHP 5.0+ (optionally including header files for extension modules)
  • Ruby 1.8+ (including header files for extension modules)
  • Erlang R12 (R11 works but not recommended)
  • Perl 5
    • Bit::Vector
    • Class::Accessor

These are only required if you choose to build the libraries for the given language.

2) Install Requirement software

In Redhat or Centos

sudo yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel

In Ubuntu:

sudo apt-get install libboost-dev libboost-test1.40-dev libevent-dev automake libtool flex bison pkg-config g++
Then install the Java JDK of your choice. Type javac to see a list of available packages,
pick the one you prefer and apt-get install it.

Debian Lenny Users need some packages from backports =>
 sudo apt-get -t lenny-backports install automake libboost-test1.40-dev

Some other packages depend on what languages you want Thrift to support.
  1. For ruby, install ruby-dev librspec-ruby rake rubygems.
  2. For python, install python-dev python-twisted.
  3. For perl, install libbit-vector-perl.
  4. For php, install php5-dev php5-cli.
  5. For c_glib, install libglib2.0-dev (Debian Lenny Users => sudo apt-get -t lenny-backports install libglib2.0-dev)
  6. For erlang, install erlang-base
  7. For csharp, install mono-gmcs libmono-dev
  8. For haskell, install ghc6 cabal-install libghc6-binary-dev libghc6-network-dev libghc6-http-dev

3) Compile

Compiling

First make sure your system meets ThriftRequirements If you are building from the first time out of the source repository,
you will need to generate the configure scripts.
(This is not necessary if you downloaded a tarball.)
From the top directory, do:
        ./bootstrap.sh

Once the configure scripts are generated, thrift can be configured.

From the top directory, do:

        ./configure

(if getting errors using Ubuntu, check out the workarounds)

You may need to specify the location of the boost files explicitly.

If you installed boost in /usr/local,

you would run configure as follows:

        ./configure --with-boost=/usr/local

If you want to override the logic of the detection of the Java SDK, use the JAVAC environment variable:

        ./configure JAVAC=/usb/bin/javac

Note that by default the thrift C++ library is typically built with debugging symbols included.

If you want to customize these options you should use the CXXFLAGS option in configure, as such:

        ./configure CXXFLAGS='-g -O2'
        ./configure CFLAGS='-g -O2'
        ./configure CPPFLAGS='-DDEBUG_MY_FEATURE'

Run ./configure --help to see other configuration options

Please be aware that the Python library will ignore the --prefix option

and just install wherever Python's distutils puts it (usually along the lines of /usr/lib/pythonX.Y/site-packages/).

If you need to controlwhere the Python modules are installed, set the PY_PREFIX variable.

(DESTDIR is respected for Python and C++.)

Make thrift:

        make

Issues while compiling

If you get the error ./thrift-20080411p1/compiler/cpp/thriftl.cc:2190: undefined reference to `yywrap' you need

to install the flex library (See also ThriftRequirements) and re-run the configuration script.

If you get the error mv: cannot stat `.deps/TBinaryProtocol.Tpo': No such file or directory

while building the Thrift Runtime Library:

Re-reun configure with --enable-libtool-lock, or

Turn off parallel make using make -j 1 or placing .NOTPARALLEL: in lib/cpp/Makefile.

Although the thrift compiler build appears to be compatible with parallel make without libtool lock,

the thrift runtime build is not. (Thrift 0.2.0, Cygwin/Windows XP)

If you get error with PHP or do not want install php extension.
configure: error: Cannot find php-config. Please use --with-php-config=PATH
configure: error: ./configure failed for lib/php/src/ext/thrift_protocol

configure: error: Cannot find php-config. Please use --with-php-config=PATHconfigure: error: ./configure failed for lib/php/src/ext/thrift_protocol

Rerun the configure script as this:

sudo ./configure --without-php --without-php_extension

4)Installing

From the top directory, become superuser and do:

        make install

Note that some language packages must be installed manually using build tools better suited

to those languages (at the time of this writing, this applies to Java, Ruby, PHP).

Look for the README file in the lib/<language>/ folder for more details

on the installation of each language library package.

Java

Java can be built in two ways. The default is to use Ivy.

With Ivy

When the Java build begins, ant will automatically download Apache Ivy into the build directory.

Ivy will then be used to download Thrift's other dependencies.

Without Ivy

If you don't have Internet access, you can cd into lib/java and run "ant -Dnoivy=" (without quotes).

You will have to manually include

Thrift's dependencies (except for Ivy) in your CLASSPATH.

newitfarmer

  2 Responses to “Install Thrift on Linux”

  1. I installed hadoop and thrift on both redhat and ubuntu. And I got the same error while compiling thrift(make).
    [get] Error getting http://repo2.maven.org/maven2/org/apache/ivy/ivy/2.0.0-rc2/ivy-2.0.0-rc2.jar to /home/demosasymh/program/thrift-0.5.0/lib/java/build/ivy/ivy-2.0.0-rc2.jar
    However I do have internet access. I can use wget to download the jar file into the target directory with no problem.
    I download “ivy with dependency” tarball and install it under lib/java/build/ and compile it with noivy (ant -Donivy=1).
    I got the following error: BUILD FAILED
    /home/demo/program/thrift-0.5.0/lib/java/build.xml:125: Reference ivy.compile.classpath not found.
    Any idea to help ? Thanks.

You must log in to post a comment.