Merge branch 'master' of github.com:spesmilo/electrum-server
[electrum-server.git] / HOWTO.md
index 31b0c2b..c0c0432 100644 (file)
--- a/HOWTO.md
+++ b/HOWTO.md
@@ -97,21 +97,22 @@ our ~/bin directory:
     $ chmod +x ~/src/electrum/server/server.py
     $ ln -s ~/src/electrum/server/server.py ~/bin/electrum-server
 
-### Step 3. Download Bitcoind stable & patch it
+### Step 3. Download bitcoind
 
-In order for the latest versions of Electrum to work properly we currently recommend bitcoind 0.8.5 stable.  
-0.8.5 can be downloaded from github or sourceforge and it needs to be patched with an electrum specific patch.
-bitcoin@master i.e. git head may not currently work with electrum-server even if the patch applies cleanly.
+Older versions of Electrum used to require a patched version of bitcoind. 
+This is not the case anymore since bitcoind supports the 'txindex' option.
+We currently recommend bitcoind 0.8.6 stable.
 
-    $ cd ~/src && wget http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.5/bitcoin-0.8.5-linux.tar.gz
-    $ tar xfz bitcoin-0.8.5-linux.tar.gz
-    $ cd bitcoin-0.8.5-linux/src
-    $ patch -p1 < ~/src/electrum/server/patch/patch
-    $ cd src
+If your package manager does not supply a recent bitcoind and prefer to compile
+here are some pointers for Ubuntu:
+
+    $ cd ~/src && wget http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.6/bitcoin-0.8.6-linux.tar.gz
+    $ tar xfz bitcoin-0.8.6-linux.tar.gz
+    $ cd bitcoin-0.8.6-linux/src/src
     $ sudo apt-get install make g++ python-leveldb libboost-all-dev libssl-dev libdb++-dev 
     $ make USE_UPNP= -f makefile.unix
-    $ strip ~/src/bitcoin-0.8.5-linux/src/src/bitcoind
-    $ ln -s ~/src/bitcoin-0.8.5-linux/src/src/bitcoind ~/bin/bitcoind
+    $ strip ~/src/bitcoin-0.8.6-linux/src/src/bitcoind
+    $ ln -s ~/src/bitcoin-0.8.6-linux/src/src/bitcoind ~/bin/bitcoind
 
 ### Step 4. Configure and start bitcoind
 
@@ -127,8 +128,15 @@ Write this in `bitcoin.conf`:
     rpcuser=<rpc-username>
     rpcpassword=<rpc-password>
     daemon=1
+    txindex=1
+
+
+If you have an existing installation of bitcoind and have not previously
+set txindex=1 you need to reindex the blockchain by running
 
-Restart `bitcoind`:
+    $ bitcoind -reindex
+
+If you have a fresh copy of bitcoind start `bitcoind`:
 
     $ bitcoind
 
@@ -173,7 +181,7 @@ The pruning server uses leveldb and keeps a smaller and
 faster database by pruning spent transactions. It's a lot quicker to get up
 and running and requires less maintenance and diskspace than abe.
 
-The section in the configuration file looks like this:
+The section in the electrum server configuration file (see step 10) looks like this:
 
      [leveldb]
      path = /path/to/your/database
@@ -182,25 +190,70 @@ The section in the configuration file looks like this:
 
 ### Step 8. Import blockchain into the database or download it
 
+It's recommended to fetch a pre-processed leveldb from the net
+
+You can fetch recent copies of electrum leveldb databases and further instructions 
+from the Electrum full archival server foundry at:
+http://foundry.electrum.org/ 
+
+Alternatively if you have the time and nerve you can import the blockchain yourself.
+
 As of April 2013 it takes between 6-24 hours to import 230k of blocks, depending
 on CPU speed, I/O speed and selected pruning limit.
 
-It's considerably faster to index in memory. You can use /dev/shm or indexing in RAM
+It's considerably faster to index in memory. You can use /dev/shm or
 or create a tmpfs which will also use swap if you run out of memory:
 
     $ sudo mount -t tmpfs -o rw,nodev,nosuid,noatime,size=6000M,mode=0777 none /tmpfs
 
+Figures from April 2013:
 At limit 100 the database comes to 2,6 GB with 230k blocks and takes roughly 6h to import in /dev/shm.
 At limit 1000 the database comes to 3,0 GB with 230k blocks and takes roughly 10h to import in /dev/shm.
 At limit 10000 the database comes to 3,5 GB with 230k blocks and takes roughly 24h to import in /dev/shm.
 
-Alternatively you can fetch a pre-processed leveldb from the net
+As of November 2013 expect at least double the time for indexing the blockchain. Databases have grown to
+roughly 4 GB, give or take a few hundred MB between pruning limits 100 and 10000. 
 
-You can fetch recent copies of electrum leveldb databases and further instructions 
-from the Electrum full archival server foundry at:
-http://foundry.electrum.org/ 
 
-### Step 9. Configure Electrum server
+### Step 9. Create a self-signed SSL cert
+
+To run SSL / HTTPS you need to generate a self-signed certificate
+using openssl. You could just comment out the SSL / HTTPS ports in the config and run 
+without, but this is not recommended.
+
+Use the sample code below to create a self-signed cert with a recommended validity 
+of 5 years. You may supply any information for your sign request to identify your server.
+They are not currently checked by the client except for the validity date.
+When asked for a challenge password just leave it empty and press enter.
+
+    $ openssl genrsa -des3 -passout pass:x -out server.pass.key 2048
+    $ openssl rsa -passin pass:x -in server.pass.key -out server.key
+    writing RSA key
+    $ rm server.pass.key
+    $ openssl req -new -key server.key -out server.csr
+    ...
+    Country Name (2 letter code) [AU]:US
+    State or Province Name (full name) [Some-State]:California
+    Common Name (eg, YOUR name) []: electrum-server.tld
+    ...
+    A challenge password []:
+    ...
+
+    $ openssl x509 -req -days 730 -in server.csr -signkey server.key -out server.crt
+
+The server.crt file is your certificate suitable for the ssl_certfile= parameter and
+server.key corresponds to ssl_keyfile= in your electrum server config
+
+Starting with Electrum 1.9 the client will learn and locally cache the SSL certificate 
+for your server upon the first request to prevent man-in-the middle attacks for all
+further connections.
+
+If your certificate is lost or expires on the server side you currently need to run
+your server with a different server name along with a new certificate for this server.
+Therefore it's a good idea to make an offline backup copy of your certificate and key
+in case you need to restore it.
+
+### Step 10. Configure Electrum server
 
 Electrum reads a config file (/etc/electrum.conf) when starting up. This
 file includes the database setup, bitcoind RPC setup, and a few other
@@ -212,11 +265,7 @@ options.
 Go through the sample config options and set them to your liking.
 If you intend to run the server publicly have a look at README-IRC.md 
 
-If you're looking to run SSL / HTTPS you need to generate a self-signed certificate
-using openssl. Otherwise you can just comment out the SSL / HTTPS ports and run 
-without.
-
-### Step 10. Tweak your system for running electrum
+### Step 11. Tweak your system for running electrum
 
 Electrum server currently needs quite a few file handles to use leveldb. It also requires
 file handles for each connection made to the server. It's good practice to increase the
@@ -238,7 +287,7 @@ Two more things for you to consider:
 2. Consider restarting bitcoind (together with electrum-server) on a weekly basis to clear out unconfirmed
    transactions from the local the memory pool which did not propagate over the network
 
-### Step 11. (Finally!) Run Electrum server
+### Step 12. (Finally!) Run Electrum server
 
 The magic moment has come: you can now start your Electrum server:
 
@@ -257,7 +306,7 @@ You should also take a look at the 'start' and 'stop' scripts in
 `~/src/electrum/server`. You can use them as a starting point to create a
 init script for your system.
 
-### Step 12. Test the Electrum server
+### Step 13. Test the Electrum server
 
 We will assume you have a working Electrum client, a wallet and some
 transactions history. You should start the client and click on the green
@@ -270,7 +319,7 @@ addresses and transactions history. You can see the number of blocks and
 response time in the Server selection window. You should send/receive some
 bitcoins to confirm that everything is working properly.
 
-### Step 13. Join us on IRC, subscribe to the server thread
+### Step 14. Join us on IRC, subscribe to the server thread
 
 Say hi to the dev crew, other server operators and fans on 
 irc.freenode.net #electrum and we'll try to congratulate you