This also works on Ubuntu, with two little tweaks.
First, no need to install libevent from source, just do an apt-get install libevent-dev.
Second, after you install Scribe, you need to add Thrift to the shared library path so it will load.
Just add a new file called /etc/ld.so.conf.d/scribe.conf with this content:
/opt/thrift/lib /opt/scribe/lib /opt/fb303/lib
Then run ldconfig and you should be good to go.
I looked for a way to install Facebook’s Scribe on OS X to test out some code I’m writing at work, but I could not find a process that worked for me.
It got me close, but what I outline below got me the rest of the way. Hopefully it will help you (until it breaks too)
Install libevent (2.0.10)
You’ll need the development files for libevent, which you probably don’t have. Grab the latest stable package at http://monkey.org/~provos/libevent/. I used 2.0.10.
This one is easy, just configure and make install.
$ sudo ./configure $ sudo make install
You might consider using --prefix=/opt/libevent on the configure to keep this libevent separate from any others that might get installed (via brew or ports). If so, be sure to change --with-libevent when compiling Thrift.
Install Thrift (0.5.0)
Now let’s install Thrift. 0.5.0 is the latest stable, and what I used. http://incubator.apache.org/thrift/.
Again, not a tough build, but you need to be sure that you set --with-libevent on configure, otherwise thriftnb won’t be built and you’ll have to do this compile again later when you get stuck in the Scribe build.
$ sudo ./configure --prefix=/opt/thrift --with-libevent=/usr/local/lib $ sudo make install
Install FB303 (In Thrift source)
You also need FaceBook Baseline (FB303) which is included in the Thrift source code. From your Thrift source directory, do the following:
$ cd contrib/fb303 $ sudo ./bootstrap.sh $ sudo ./configure --prefix=/opt/fb303 --with-thriftpath=/opt/thrift $ sudo make install
Install Scribe (> 2ee14d3)
There is a bug fix in Scribe at version 2ee14d3, which fixes a build problem created by Thrift 0.5.0.
So, as of right now you need to get your source for Scribe from github, and after that commit.
Once you have it:
$ sudo ./bootstrap.sh $ sudo ./configure --prefix=/opt/scribe --with-thriftpath=/opt/thrift --with-fb303path=/opt/fb303 $ sudo make install
Build Ruby Thrift structures
Okay, everything is installed now! Well, almost. You still need to generate the Thrift bindings if you are going to be using Ruby.
From the scribe source directory:
$ /opt/thrift/bin/thrift -o . -I /opt/fb303/share/ --gen rb if/scribe.thrift $ /opt/thrift/bin/thrift -o . -I /opt/fb303/share/ --gen rb /opt/fb303/share/fb303/if/fb303.thrift $ sudo mkdir /opt/scribe/ruby $ sudo mv gen-rb/ /opt/scribe/ruby/scribe
Copy a config from Scribe
You’ll also need a config file for Scribe, which you can get from the examples directory in the Scribe source.
Again, from the Scribe source root:
$ sudo mkdir /opt/scribe/conf/ $ sudo cp examples/example1.conf /opt/scribe/conf/test.conf
You are now ready to run scribe, so fire it up!
$ sudo /opt/scribe/bin/scribed -c /opt/scribe/conf/test.conf
Test it from Ruby
Now open up an editor and drop this into a Ruby script.
$LOAD_PATH.unshift('/opt/scribe/ruby/scribe') require 'scribe' begin socket = Thrift::Socket.new('localhost', 1463) transport = Thrift::FramedTransport.new(socket) protocol = Thrift::BinaryProtocol.new(transport, false) client = Scribe::Client.new(protocol) transport.open() log_entry = LogEntry.new( :category => 'test', :message => 'This is a test message' ) client.Log([log_entry]) transport.close() rescue Thrift::Exception => tx print 'Thrift::Exception: ', tx.message, "\n" end
When you run it, you should get a new directory and file in /tmp/scribetest containing your message.