How to Run Nu in Tails (behind Tor)

Merry Christmas Eve, everyone! I wanted to run the Nu client in Tails – the privacy centered OS that routes all traffic through Tor. There was an earlier post pointing out that it doesn’t work:

The bad news: this is still the case: the binary executable won’t work. Trying to compile it myself also didn’t work at first. The good news? After deleting code related to datafeeds, it does compile and produce an executable that can be run under Tails. I’ll describe how I did it in case someone else wants to do this too.

You’ll need to have root access to install what’s needed to build it. After building it, you can reboot in Tails without root access to run it. For now I’ll assume you can sudo.

Step 1. Download the linux Nu 2.0.3 and extract the source code.

Step 2. Install the packages you need.

sudo apt-get update

sudo apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev libssl-dev libdb5.1++-dev build-essential libssl-dev libboost-all-dev libqrencode-dev libminiupnpc-dev qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev libssl-dev

Step 3. Delete datafeeds related code.

In Makefile just search for any dependency or target that has the phrase “datafeed” as part of the name and delete it.

The following files in src and src/qt must be modified:

init.cpp : delete lines with “curl” in them.
main.cpp : delete the four lines starting with "if (strDataFeedError != “”)"
bitcoinrpc.cpp : delete all code related to “setvote” “setdatafeed” and "getdatafeed"
net.cpp : delete the line "StartUpdateFromDataFeed();"
bitcoingui.cpp : delete code related to votePage and gotoVotePage
bitcoingui.h : delete code related to votePage and gotoVotePage
votepage.cpp : delete code mentioning "datafeed"
votepage.h : delete line "void on_dataFeedButton_clicked();"
walletmodel.cpp : delete code mentioning “datafeed”

Step 4. Compile a version that doesn’t need the dependencies.

qmake "RELEASE=1"
make

This should make an executable called “nu” which can be run in the future with a fresh Tails. You should copy this somewhere, like a flash drive at /media/nuflash. Later you can start it in a fresh Tails like:

/media/nuflash/nu -datadir=/media/nuflash/.nu -proxy=127.0.0.1:9050

Hope this helps someone. I’m not sure what effect deleting the datafeed related code has, but it is able to keep up with the block chain and send transactions. That’s good enough for me.

Someone might advise that there’s an easier way, but until then at least there is some way.

4 Likes

Thank you for sharing this info!

So maybe the issue is with the Curl library? Are you able to compile an older binary before data feeds were introduced? I’m having a hard time remembering which version but if you can simply compile like 2.0 it might give some more clues on what the exact issue is.

Note: Nu official client runs great on Ubuntu (x32 and x64) based distros, but not natively in Debian ones (e.g. Tails) without doing that “kind of compile-magic”…

I do think curl is part of the problem. Before removing data feeds I did apt-get installed libcurl4-openssl-dev but compilation failed. I no longer have the exact message, but some curl reference was undefined. You should be able to reproduce it by trying to install under Tails.

There’s a notice that 2.0.3 is “mandatory,” so I didn’t try to compile earlier versions.

I wont be able to try it out for some time but when I have some time i’ll spin up a tails VM and give it a spin. Thanks for all of your efforts.

1 Like

Hi, i posted that bug, its great that someone is trying to fix this since the developers are too lazy to try.

I went through your method which doesnt work. It produces this error on compiling:

src/datafeed.cpp:5:23: fatal error: curl/curl.h: No such file or directory
compilation terminated.

Removing that line in datafeed.cpp produces errors and removing all datafeed files entirely breaks compiling right away. Is your list of files to be modified complete? Are there any other files that need to be downloaded or deleted?

Nevermind looks like it works, however you left out a hell of a lot of steps. I’m not a programmer but i was able to pick out what was wrong, these are the steps for a nonprogrammer to follow to convert the broken 2.0.3 linux client into a working tails client:

As OP said, login with admin password, bootup root terminal. Your aim is to open each file (using gedit) and search for anything with ‘datafeed’ mentioned, some you are looking for ‘curl’. Some are simple lines that reference a datafeed file, others are blocks of code, you have to delete the entire block, so like

if {datafeed = (suck;) {
then datafeed=crash}
else somestuff > otherstuff
};

delete the whole block, watch out for extra parenthesis brackets and such as it may be part of a larger block of code.

  • In the src subfolder -

delete datafeed.cpp, datafeed.h files

bitcoinrpc.cpp - datafeed, setvote (mentions curl but this is a comment dont delete)
init.cpp - CURL
main.cpp - datafeed
makefile.linux-mingw - datafeed + CURL
makefile.mingw - datafeed + CURL
makefile.osx - datafeed + CURL
makefile.unix - datafeed + CURL
net.cpp - datafeed
wallet.cpp - datafeed
wallet.h - datafeed
walletdb.cpp -datafeed
walletdb.h - datafeed

  • in the src/qt subfolder -

delete datafeeddialog.cpp, datafeeddialog.h files

bitcoingui.cpp - votePage, gotoVotePage
bitcoingui.h - votePage, gotoVotePage
votepage.cpp - datafeed
votepage.h - datafeed
walletmodel.cpp - datafeed
walletmodel.h - datafeed

  • in src/qt/forms subfolder -

delete datafeeddialog.ui file


Type in the apt-get update commands listed above, once thats done navigate to your src folder using ‘cd /whateveryourpathis/nubits’, then type qmake “RELEASE=1”, this will make the build files, you have to delete some of these but they are locked so type in ‘nautilus’, navigate to the nubits/build folder and wipe the files with ‘datafeed’ in the name. Then navigate to the makefile in your nubits folder and open with gedit, remove all datafeed and CURL references, save and close nautilus, back in terminal finally type ‘make’ and it will produce the working nu executable.

But it will be locked because you are doing this all in root and tails doesnt run as root, so ‘cd /yourpersistence/nubits’ then ‘chown -R amnesia:amnesia nubits’ and it will unlock the executable, which does run. In options uncheck unpnp and check ‘connect through socks4proxy’, it will begin downloading the blockchain.

Edit: After some generous testing it appears nubits hates secure OS’s, its very painfully slow to download the blockchain, i estimate upwards of a month, i dont think this is Tor related as i was quickly downloading over Tor on windows but its hard to say why an OS would cause its download to crawl, it has no problem connecting to peers. The strategy then is to download using windows then bring the blockchain files into tails which will keep you wallets secure and anonymous.

4 Likes

Problem solved, Nubits v2.0.3 works fine with new Tails version (2.0) wich is based on Debian 8 (Jessie)…

Try it out!

1 Like

No, no it doesnt. Im still getting 0.5kb/s to 3kb/s on average using 2.0.3 on tails 2.0. This is evidence enough that the problem is not with Tor or Tails but with the clients themselves, 2.0.3 gets the same crap speeds on either version of Tails and 2.1.0 doesnt connect at all.

While using v2.0.3 the “issue” I get is fast block download speed for first blocks (genesis and following blocks) and 1/10th of that speed for newer blocks (current generated blocks).

I noticed that’s also the pattern for bitcoin-qt (core).

Edit:

I just realized that as a i386 Live OS, Nubits Client won’t be able to download the whole blockchain data because it’s already over ~2GB, so if you’ve only got 4GB of RAM, it won’t be enough to store the whole blockchain (Tails Live OS free space is about 2GB under that circumstances).

We really need an Electrum-Nubits or any SPV wallet for Linux (Tails).

1 Like