Google Wave Federation on Ubuntu – Openfire XMPP, StatusNet, Asterisk and Beyond

Last night, I spent more time exploring Google Wave, and find there are so many more areas that I need to explore. I am especially interested in Google Wave Federation.

On the GoogleCode blog, they talk about “the Google Wave Federation Protocol, the underlying network protocol for sharing waves between wave providers.” They go on to explain, “Yes, that's between wave providers: anyone can build a wave server and interoperate, much like anyone can run their own SMTP server.”

With this in mind, I set up my own wave server. To do this, I followed the steps in the Google Wave Federation Prototype Server Installation Wiki Page.

At first glance, it looked nice and straight forward for Debian and Ubuntu users. Make sure you have Java 6 installed, grab the Openfire package, install it, configure it, and add the Wave software. Unfortunately, it turned out to be a bit more complicated.

If you are running on an older version of Ubuntu, you cannot simply install sun-java6-jdk. The package isn’t found. You can install openjdk-6-jdk, but then the Debian package can’t find sun-java6-jdk and it won’t install.

I did install sun-java6-jdk and Openfire 3.6.4 on one of my machines. However, I couldn’t get it to start. Then, when I finally got it to start, it wouldn’t recognize the administrative password. I went through several cycles of installing, uninstalling, tweaking, and couldn’t get things to work consistently. It was then that I discovered two important things:

First, when you start Openfire, depending on the machine you are using, it make take a minute or two before it will start responding to http requests. So, install Openfire. Wait a minute or two. Then, attempt to configure it. This led me to the second issue. After you configure it and set up the administrative userid and password, it appears that you need to restart the Openfire service. Once you’ve restarted it, and given it a minute or two to get up to speed, you can login to the administrative panel, and continue on with the configuration.

Openfire is an XMPP server. XMPP is a standard protocol that is used for chat programs like Google Talk. It is used by StatusNet for connecting with their micro blogging. StatusNet connects with Twitter, and the Openfire server has plugins that allow connections to other IM services like AOL and Yahoo. Openfire also has plugins to connect to Asterisk and SIP, so that you can use an Openfire session to connect to Voice over IP services. These are things I have yet to test.

My first test to make sure that Openfire was up and running was to run Pidgin, a chat service that runs nicely in Ubuntu. Not only did it connect nicely with my Openfire server, but I managed to connect over IPv6 for some of my testing.

Once I had Openfire running smoothly, the next step was to add the Wave component. In the instructions, they say to download the software using the ‘hg’ command. I did not have ‘hg’ as an available command. Hg is part of the mercurial package, so I did a

sudo apt-get install mercurial

To install Mercurial. Then, I retrieved the code and tried to build it. However, I had initially installed just the Java Runtime Environment, and I didn’t have ‘ant’ available as a command. I installed ant and the full Java Development Kit and the build worked. It took about a minute to build on my machine.

The next step was to build certificates. The Wiki page for Certificates provides a simple easy way to build your own certificates. However, it suggests getting a CA-issued certificate. They suggested going to http://xmpp.net/. However, as of yesterday, XMPP stopped operations. They have a link to https://www.startssl.com/. However, Google Chrome says that StartSSL’s certificate is not valid. On top of that, the StartSSL pages just aren’t working for me right now. So, I’m running with my own self-signed certificate.

The next place where I ran into an issue was installing my certificate. The run-config.sh file has a line

CERTIFICATE_FILENAME_LIST=${WAVE_SERVER_DOMAIN_NAME}.cert

If figured I’d just name my cert file to be my domain name. The problem is that the procedure for making cert files uses an extension of .crt instead of .cert So, my first attempt to run failed. Fortunately, I found that fairly easily and now have the server up and running.

The Openfire administration pages shows the component session running. The message from the wave server looks like it is initializing okay, but it isn’t discovering any other wave servers. It is getting a message that

INFO: Couldn't find wave on initech-corp.com
initech-corp.com does not appear to have wave

So, it looks like I’ve got a wave server up and running, but not connected to anything or doing anything. If anyone else is experimenting with Google Wave Federation, let me know. In addition, if anyone wants to do other things with my XMPP server, I’ve set it up so that you need to contact me to set up a userid, but I’ll set up userids for people that want to experiment.

Later, I’ll reinstall statusnet. I had set up a very early instance of laconi.ca, the precursor to statusnet, but I haven’t done anything with it in ages. Now that I have a nice XMPP server, I will want to do an new installation and see how it runs with Openfire and ultimately, Google Wave Federation. If I really get motivated and have some free time, I’ll work on getting Asterisk up and running again. Also, still on the list is looking at Shindig and Drupal for Google Gadgets, but that is even further down the list.

So, are you doing anything interesting with Google Wave Federation? Got any cool ideas?