The question is not if you are paranoid,I'm a fan of darknets. I've always been. I don't want this to turn into a political discussion - it is a "tech" blog - so it should be sufficient to say that I like and use RetroShare.
it is if you are paranoid enough.
RetroShare is a decentralized sharing application/network that is, in my opinion, the best darknet software available right now. I've already tried WASTE, GnuNet and AllianceP2P, and they couldn't convince me for long.
Maybe I'll make an article about the pros and cons of RetroShare, but in this article I want to describe my attempts to get it running on my Raspberry Pi, so it can serve as a 24/7 node in the RetroShare network to forward connections without consuming that much power.
When I heard about the Raspberry Pi, the geek inside me wanted to have one. Fabian is still pissed that my Raspi arrived sooner than his, that is it arrived at all, although I ordered it much later. (I think he wants to go for Parallella now ...)
I've already managed to compile RetroShare 0.5.3 on and for my Raspi, but it segfaulted whenever I wanted to add a friend or open the settings menu. With the recent release of 0.5.4 I thought I could give it a try again.
Be warned: The compiling alone takes a few hours. I didn't write down exact times, but it's probably best if you have some other tasks to attend to for 2 hours while one subproject is compiling.
What we need to get started
Raspberry Pi and Raspbian WheezyI'm starting with my Raspberry Pi (Model B) with a sufficiently large SD card (4 GB should be enough) and a freshly installed Raspbian Wheezy (build 2012-09-18), which I've updated today (15th October) doing
apt-get update && apt-get upgrade
, and haven't modified so far besides putting my dotfiles under revision control using git.In case that information changes on the Raspi website, I'll duplicate the links and information here, so we're all on the same page:
Torrent | 2012-09-18-wheezy-raspbian.zip.torrent |
Direct download | 2012-09-18-wheezy-raspbian.zip |
SHA-1 | 3bc788d447bc88feaae8382d61364eaba1088e78 |
Default login | Username: pi Password: raspberry |
RetroShare sources
The RetroShare version we need is 0.5.4b
Create a directory
development
in your home directory, cd
there, download the sources and unpack them.mkdir ~/development mkdir ~/development/RetroShare-v0.5.4b cd ~/development wget http://sourceforge.net/projects/retroshare/files/RetroShare/0.5.4b/RetroShare-v0.5.4b.tar.gz cd RetroShare-v0.5.4b tar -xvf ../RetroShare-v0.5.4b.tar.gz
Required packages
My primary source for instructions is the RetroShare wiki page UnixCompile of today's version. It is a bit outdated because they've removedgnupg
and introduced openpgp
, but didn't update their instructions. Install the following packages with:sudo apt-get install libqt4-dev g++ libupnp-dev libssl-dev libgnome-keyring-dev libbz2-dev libxss-dev
Then you need to compile the projects in the subdirectories, but there are still some modifications necessary to make it work under Debian. The first two subprojects should work fine:
cd ~/development/RetroShare-v0.5.4b/trunk/ cd libbitdht/src && qmake && make clean && make -j2 cd ../../openpgpsdk/src && qmake && make clean && make -j2The problems start with
libretroshare
and there are two changes you need to make on it:Firstly, because even though the preprocessor commands are there, you still need to tell the make process that you are on Debian and your
libupnp
is of a different version. You do this by editing the file libretroshare.pro
in the libretroshare/src/
directory and after the line 221DEFINES *= UBUNTUyou add (not replace) these lines
DEFINES *= DEBIAN DEFINES *= UPNP_VERSION=10617because we do in fact have version 1.6.17 of
libupnp
installed. (See this thread in the RetroShare forum.)Secondly, someone hardcoded the location of
glib-2.0
into that project file in a very system dependent way. You need to change this line (should be directly below the previous change, line 224 now)INCLUDEPATH += /usr/include/glib-2.0/ /usr/lib/glib-2.0/includeto this
INCLUDEPATH += $$system(pkg-config --cflags glib-2.0 | sed -e "s/-I//g")(Source)
cd ../../libretroshare/src && qmake && make clean && make -j2
And now the real fun starts. The Raspberry Pi has 256 MB RAM of which at least 16 MB need to be reserved for the video core, so only 240 MB RAM left. Unfortunately, this is not enough to compile
retroshare-gui
, it will quit with something likevirtual memory exhausted: Cannot allocate memory g++: internal compiler error: Killed (program cc1plus)when it tries to compile
qrc_images.cpp
.Super hot update
The irony of situation is that just today an enhanced version of the Raspberry Pi was announced with 512 MB of RAM, which should make the following swap file part obsolete.
Now, I've heard that very, very bad things happen if you create a swap file on a flash storage device like the SD card your Raspi uses or USB sticks. But as a matter of fact, Raspbian wheezy already uses a swap file per default, so it can't be that bad. All you need to do is create another swap file of sufficient size, say 256 MB, which you delete afterwards just to be on the safe side:
sudo dd if=/dev/zero of=swapfile bs=1M count=256 sudo mkswap swapfile sudo swapon swapfileThen you can compile
retroshare-gui
cd ../../retroshare-gui/src && qmake && make clean && make -j2and deactivate the swap file again:
sudo swapoff swapfile sudo rm swapfileThis is also a good opportunity to turn of the default swap file, too, as it really isn't that healthy for your SD card. (Hoping that actually running RetroShare is possible with only 256 MB RAM)