setting up pond on yosemite

This is about Pond. If you have no idea what that is but don't want to click on the link, I shall quote directly;

Pond is not email. Pond is forward secure, asynchronous messaging for the discerning. Pond messages are asynchronous, but are not a record; they expire automatically a week after they are received. Pond seeks to prevent leaking traffic information against everyone except a global passive attacker.

If that seems interesting, go back and click on the link. Otherwise get out while you still can.

My goal here is to get Pond running. I unfortunately don't have any Pond secrets to hand right now, so testing its messaging functionality will have to come later. The instructions on the main Pond page for OSX are fairly good, so this is just a slight elaboration/modification on those. This is going to look longer than it should because I haven't solved formatting code snippets on this blog yet.

System

I'm using a ~2012 Macbook Pro 13inch Retina blah blah, running OSX Yosemite (version 10.10.1). It's a fairly recent install, so I haven't had time to ruin everything yet. That said, I have Tor Browser installed and running. Obviously.

tl;dr

GUI is b0rked, CLI seems to work. From the site, for a CLI-version:

> brew install go
> export GOPATH=$HOME/gopkg
> export PATH=$PATH:$GOPATH/bin
> go get -tags nogui github.com/agl/pond/client
> alias pond="$GOPATH/bin/client"

But now for how I spent my Friday evening:

Dependencies

Go

> brew install go

Painless success, version: go1.4.1 darwin/amd64. Then make a folder for Go packages,

> mkdir $HOME/gopkg

Export some environment variables to keep Go happy, (I also added these to my .bash_profile)

> export GOPATH=$HOME/gopkg
> export PATH=$PATH:$GOPATH/bin

One more for good measure,

> export PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

gtk+3

(These other dependencies are probably a bit pointless until I figure out how to get the GUI to reliably work, but for the sake of completeness they are here.)

> brew install gtk+3

It complains that it needs XQuartz 2.5, so that is resolved (as it suggests) with

> brew install Caskroom/cask/xquartz

gtkspell3

> brew install gtkspell3

This installed a whole pile of dependencies (including, concerningly, Python: the number of Pythons I have installed grows by the day), and my laptop crashed shortly after they finished, but I think that was random.

mercurial

> brew install mercurial

Pond

> go get github.com/agl/pond/client

It produces lots of warnings, but seemingly no errors. And who reads warnings? Since it's already in my path (see above), running it is simply (I think this could do with being more descriptive):

> client

Disaster strikes.

>Dynamic session lookup supported but failed: launchd did not provide a socket path, verify that org.freedesktop.dbus-session.plist is loaded!

and

>(<unknown>:917): GdkPixbuf-WARNING **: Cannot open pixbuf loader module file '[$GOPATH]/bin/../lib/gdk-pixbuf-2.0/2.10.0/loaders.cache': No such file or directory

>This likely means that your installation is broken.
>Try running the command gdk-pixbuf-query-loaders > [$GOPATH]/bin/../lib/gdk-pixbuf-2.0/2.10.0/loaders.cache to make things work again for the time being.

(I'm using rectangular brackets to denote that I manually replaced its output with the logical meaning, so you don't have to look at my home directory path :)

dbus

First problem is where in the hell is org.freedesktop.dbus-session.plist?

(it's not in in /Library/LaunchAgents or /Library/LaunchDaemons, or ~/Library/LaunchAgents)

The answer, if you brew reinstall dbus to find out (or use some other kind of sorcery) is:

To have launchd start d-bus at login:

ln -sfv /usr/local/opt/d-bus/*.plist ~/Library/LaunchAgents

That's where it is.

Then to load d-bus now:

launchctl load ~/Library/LaunchAgents/org.freedesktop.dbus-session.plist

pixbuf

So the folder it's expecting (lib/gdk-pixbuf...) is certainly not found at [$GOPATH]/bin/..., since that's just $GOPATH.

By running gdk-pixbuf-query-loaders I can see it's probably expecting this path or something:

/usr/local/Cellar/gdk-pixbuf/2.31.2/lib/gdk-pixbuf-2.0/2.10.0/loaders/

Which would only be appropriate if $GOPATH=/usr/local/Cellar/gdk-pixbuf/2.31.2/, which it is not by construction. I can get around this as it suggests by creating a bunch of empty folders and then running

> gdk-pixbuf-query-loaders > $GOPATH/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache

Which gets rid of the warnings. Now when I run

> client

I get no (immediate) errors! Success! Maybe!

GUI-sadness

Empowered by the graphics, I set a password and create an account on the default server.

. . . and it panics. That is to say, the GUI vanishes (although X11 is still running) and I get a lot of errors. Not only that, but now if I try to run it again,

> client
    Jan 30 23:46:58: Fatal error: state file is too small to be valid

Shit.

Maybe I just need the gentle embrace of the command line?

> client -cli=true

>>> Pond...
>>> >>> state file is too small to be valid

Abort, abort!

> rm $HOME/.pond
> client -cli=true

And now, everything is beautiful and nothing hurts.