Installing JoinMarket
You have an important choice for how to install:
- The blockchain takes up about 55GB of disk space.
- Takes some days to initially download the blockchain.
- Offers maximum privacy by not relying on third parties to check address information.
- Offers complete control over your funds. You push your transactions over Tor, again eliminating third parties.
- When Electrum, Blockchain.info, etc. are having problem making transactions Bitcoin Core is not. It is the client that is the foundation of the network.
- Totally worth it!
- Less private and less secure: this relies on Blockr.io to gather address and transaction data. Blockr is owned by Coinbase. This gives them the ability to make correlations between your addresses if they choose.
- Balance checks are much slower.
- If Blockr is down, you're down. You won't be able to push transactions natively or check balances. Basically JoinMarket won't work at all for you.
- Works "out of the box" and with smaller usb devices.
- This is the fastest way to use JoinMarket if you don't already have a copy of the blockchain.
Installing With Bitcoin Core
I have written scripts to automate the install of libsodium (JoinMarket crypto library), JoinMarket, and Bitcoin Core. We will utilize these scripts in this guide. I've intentionally written the scripts so that they can be read easily even by non-coders. I encourage you to audit the scripts before running them.
Some of the photos shown are a little old and may not show the exact same output that you may experience. Don't worry about that if you notice it.
What you will need:
- A USB device with Tails installed, an administrator password set, and persistence enabled.
- At least 60GB of free space on your USB devices persistent storage or an external storage device with at least 60GB of free space.
- An internet connection.
Overview of what we will be doing:
1. Starting Tails
You must start Tails with persistence enabled for the sake of this guide. You don't need persistence, but it would be insane to go through all the time and effort and not save it.
You must also select "Yes" on the "More options?" selection.
On the next screen set an administator password.
2. Download and verify script
First you are going to open a terminal. It is the icon shaped like a black square to the left of the date/time on the top panel.
Once you have the terminal open you can download my scripts from Github.
git clone https://github.com/tailsjoin/tailsjoin
We need to verify the scripts, but first you need to get my signing key.
gpg --recv-keys 44C5398EA821BB41A0C070521B9184DF9E117718
You should see an output like this:
gpg: requesting key 0x1B9184DF9E117718 from hkps server hkps.sks-keyservers.net gpg: key 0x1B9184DF9E117718: public key "tailsjoin" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
My signing key has been imported. Now we can verify the script.
cd tailsjoin/ && gpg --verify tailsjoin-fullnode.sh.asc tailsjoin-fullnode.sh
If everything goes well you should see an output like this:
gpg: Signature made Sat 24 Oct 2015 12:39:37 AM UTC gpg: using RSA key 0x1B9184DF9E117718 gpg: Good signature from "tailsjoin" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 44C5 398E A821 BB41 A0C0 7052 1B91 84DF 9E11 7718
The date of the signature may change as I make updates to the script. The part we're concerned with is:
gpg: Good signature from "tailsjoin" [unknown]
If you had a good signature, then skip to step 3.
If you did not have a good signature something wicked happened and you need to download again. Instead of the above output you will see this:
gpg: Signature made Sat 24 Oct 2015 12:39:37 AM UTC gpg: using RSA key 0x1B9184DF9E117718 gpg: BAD signature from "tailsjoin" [unknown]
In the case that you have a BAD signature leave the folder and securely delete files.
cd .. && srm -drv tailsjoin/
Once that is finished start over from the beginning of step 2.
3. Run the script
Since we have verified our script we will now move it into the Persistent
folder and run it from there so that our changes will survive reboots.
cd .. && mv tailsjoin/ ~/Persistent/ && cd ~/Persistent/tailsjoin/
Now we can actually run the script. The one we will run is: tailsjoin-fullnode.sh
.
During the script you will be prompted a few times for the admin password that you set in the beginning. Just follow along with the script and I'll see you again after!
./tailsjoin-fullnode.sh
4. Bootstrap the client
Keep reading, you're almost done.
Now that everything is installed we need to get the blockchain somehow. There are two options, the choice is up to you.
Run bitcoind from Tails and start building the blockchain from peers. This will take a long time to say the least. I've heard of this taking over a week. If you have another device to download the blockchain over clearnet skip to the second method.
To proceed with this path we must decide now which folder will hold our block data. It can be anywhere you'd like as long as you're within the Persistence folder. In keeping with the design of the bitcoin devs, I suggest making a hidden folder in
/home/amnesia/Persistent
named.bitcoin
.mkdir ~/Persistent/.bitcoin && chmod 0700 ~/Persistent/.bitcoin
We might as well move our config file over there too, and set the proper permissions for it.
mv ~/Persistent/bitcoin-0.11.2/bin/bitcoin.conf ~/Persistent/.bitcoin/
chmod 0600 ~/Persistent/.bitcoin/bitcoin.conf
Right now your config file looks like this:
rpcuser=[random generated user] rpcpassword=[random generated pass] daemon=1 proxyrandomize=1 proxy=127.0.0.1:9050 listen=0 server=1 # For JoinMarket walletnotify=curl -sI --connect-timeout 1 http://127.0.0.1:62602/walletnotify?%s alertnotify=curl -sI --connect-timeout 1 http://127.0.0.1:62602/alertnotify?%s # User must uncomment and input path to blockchain files #datadir=
You need to remove the
#
from the last line and enter the folder I suggested you create, or a different location of your choice.You can open a graphical text editor from the terminal.
gedit ~/Persistent/.bitcoin/bitcoin.conf
When you're finished your file should look like this:
rpcuser=[random generated user] rpcpassword=[random generated pass] daemon=1 proxyrandomize=1 proxy=127.0.0.1:9050 listen=0 server=1 # For JoinMarket walletnotify=curl -sI --connect-timeout 1 http://127.0.0.1:62602/walletnotify?%s alertnotify=curl -sI --connect-timeout 1 http://127.0.0.1:62602/alertnotify?%s # User must uncomment and input path to blockchain files datadir=/home/amnesia/Persistent/.bitcoin/
Don't forget to save the file so your changes take effect!
Now you're pretty much done. To run bitcoind you have to enter this crazy long command:
/home/amnesia/Persistent/bitcoin-0.11.2/bin/bitcoind -conf=/home/amnesia/Persistent/.bitcoin/bitcoin.conf
Or we can turn the above into an executable script named
btcd
. If you created the data dir that I suggested then you can copy this and paste it to a terminal:echo '#!/bin/bash
/home/amnesia/Persistent/bitcoin-0.11.2/bin/bitcoind -conf=/home/amnesia/Persistent/.bitcoin/bitcoin.conf
exit 0' > ~/Persistent/btcd && chmod +x ~/Persistent/btcd
From now on you can start bitcoind by opening a terminal and doing:
cd ~/Persistent && btcd
- End of Method One -
- Download the blockchain on another device over clearnet and copy the files to Tails. On fast internet this can be done in around 24 hours, there is no security issue, and you save bandwidth for the Tor network.
First thing you'll need to do is download bitcoin for your specific operating system and bootstrap the client by letting it run until it has collected all the blocks.
Find your data directory and copy the folders
blocks
andchainstate
to a usb device (external hard drive, usb stick, internal hdd, etc.). Make sure you have enough space on your device!Start Tails with persistence enabled and an administrator password set.
Next we're going to make our bitcoin folder. It can be anywhere you'd like as long as you're within the Persistence folder. In keeping with the design of the bitcoin devs, I suggest making a hidden folder in
/home/amnesia/Persistent
named.bitcoin
.mkdir ~/Persistent/.bitcoin && chmod 0700 ~/Persistent/.bitcoin
We might as well move our config file over there too, and set the proper permissions for it.
mv ~/Persistent/bitcoin-0.11.2/bin/bitcoin.conf ~/Persistent/.bitcoin/
chmod 0600 ~/Persistent/.bitcoin/bitcoin.conf
Right now your config file looks like this:
rpcuser=[random generated user] rpcpassword=[random generated pass] daemon=1 proxyrandomize=1 proxy=127.0.0.1:9050 listen=0 server=1 # For JoinMarket walletnotify=curl -sI --connect-timeout 1 http://127.0.0.1:62602/walletnotify?%s alertnotify=curl -sI --connect-timeout 1 http://127.0.0.1:62602/alertnotify?%s # User must uncomment and input path to blockchain files #datadir=
You need to remove the
#
from the last line and enter the folder I suggested you create, or a different location of your choice.You can open a graphical text editor from the terminal.
gedit ~/Persistent/.bitcoin/bitcoin.conf
When you're finished your file should look like this:
rpcuser=[random generated user] rpcpassword=[random generated pass] daemon=1 proxyrandomize=1 proxy=127.0.0.1:9050 listen=0 server=1 # For JoinMarket walletnotify=curl -sI --connect-timeout 1 http://127.0.0.1:62602/walletnotify?%s alertnotify=curl -sI --connect-timeout 1 http://127.0.0.1:62602/alertnotify?%s # User must uncomment and input path to blockchain files datadir=/home/amnesia/Persistent/.bitcoin/
Don't forget to save the file so your changes take effect!
Now you're going to use the file manager to help you copy the folders
blocks
andchainstate
from your usb device to the folder you made.If you took my suggestion then the folder is:
/home/amnesia/Persistent/.bitcoin
It is a hidden folder so make sure to set the file manager to show hidden items.
After the files have finished copying over you're going to set the proper owner for the files. Open a terminal and do this (substitute your folder if you didn't take my suggestion):
chown -R amnesia:amnesia ~/Persistent/.bitcoin/ ~/Persistent/.bitcoin/*
Depending on how the permissions were on the files before you copied them, you may need to use
sudo
before the last command.Now you're pretty much done. To run bitcoind you have to enter this crazy long command:
/home/amnesia/Persistent/bitcoin-0.11.2/bin/bitcoind -conf=/home/amnesia/Persistent/.bitcoin/bitcoin.conf
Or we can turn the above into an executable script named
btcd
. If you created the data dir that I suggested then you can copy this and paste it to a terminal:echo '#!/bin/bash
/home/amnesia/Persistent/bitcoin-0.11.2/bin/bitcoind -conf=/home/amnesia/Persistent/.bitcoin/bitcoin.conf
exit 0' > ~/Persistent/btcd && chmod +x ~/Persistent/btcd
From now on you can start bitcoind by opening a terminal and doing:
cd ~/Persistent && btcd
- End of Method Two -
- End of Installing With Bitcoin Core -
Installing Without Bitcoin Core
I have written scripts to automate the install of libsodium (JoinMarket crypto library) and JoinMarket. We will utilize these scripts in this guide. I've intentionally written the scripts so that they can be read easily even by non-coders. I encourage you to audit the scripts before running them.
Some of the photos shown are a little old and may not show the exact same output that you may experience. Don't worry about that if you notice it.
What you will need:
- A USB device with Tails installed, an administrator password set, and persistence enabled.
- An internet connection.
Overview of what we will be doing:
1. Starting Tails
You must start Tails with persistence enabled for the sake of this guide. You don't need persistence, but it would be insane to go through all the time and effort and not save it.
You must also select "Yes" on the "More options?" selection.
On the next screen set an administator password.
2. Download and verify script
First you are going to open a terminal. It is the icon shaped like a black square to the left of the date/time on the top panel.
Once you have the terminal open you can download my scripts from Github.
git clone https://github.com/tailsjoin/tailsjoin
We need to verify the scripts, but first you need to get my signing key.
gpg --recv-keys 44C5398EA821BB41A0C070521B9184DF9E117718
You should see an output like this:
gpg: requesting key 0x1B9184DF9E117718 from hkps server hkps.sks-keyservers.net gpg: key 0x1B9184DF9E117718: public key "tailsjoin" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
My signing key has been imported. Now we can verify the script.
cd tailsjoin/ && gpg --verify tailsjoin.sh.asc tailsjoin.sh
If everything goes well you should see an output like this:
gpg: Signature made Sat 24 Oct 2015 12:39:37 AM UTC gpg: using RSA key 0x1B9184DF9E117718 gpg: Good signature from "tailsjoin" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 44C5 398E A821 BB41 A0C0 7052 1B91 84DF 9E11 7718
The date of the signature may change as I make updates to the script. The part we're concerned with is:
gpg: Good signature from "tailsjoin" [unknown]
If you had a good signature, then skip to step 3.
If you did not have a good signature something wicked happened and you need to download again. Instead of the above output you will see this:
gpg: Signature made Sat 24 Oct 2015 12:39:37 AM UTC gpg: using RSA key 0x1B9184DF9E117718 gpg: BAD signature from "tailsjoin" [unknown]
In the case that you have a BAD signature leave the folder and securely delete files.
cd .. && srm -drv tailsjoin/
Once that is finished start over from the beginning of step 2.
3. Run the script
Since we have verified our script we will now move it into the Persistent
folder and run it from there so that our changes will survive reboots.
cd .. && mv tailsjoin/ ~/Persistent/ && cd ~/Persistent/tailsjoin/
Now we can actually run the script. The one we will run is: tailsjoin.sh
.
During the script you will be prompted a few times for the admin password that you set in the beginning. Just follow along with the script. Once it's finished you'll be ready to start using JoinMarket!
./tailsjoin.sh
- End of Installing Without Bitcoin Core -
Top of Page