Postprocessing
None
Glow
Blur
Radial Blur
  1. Getting Dogecoind to run on CentOS

    December 28, 2013 by Mike

    I’m on vacation in a rural part of the country for Christmas. I’m able to use the internet through tethering on my phone, but it’s pretty slow. I’m also not able to use the phone and the internet at the same time. Therefore, I decided to work on a project that I could do mostly offline, would help me learn how to work with cryptocurrencies, and generally be a positive help to the community at large.

     

    Therefore I’ve decided to create a Dogecoin faucet. From reading about Bitcoin and interacting with libbitcoin, I have something of an understanding of how these things work. Essentially a faucet needs (please feel free to correct me if I’m wrong in anything):

    1. A copy of the Dogecoin daemon running on the server

    2. This daemon will need to have an entire copy of the blockchain

    3. A wallet run by the daemon

    4. Some coins

    5. A website frontend (html/css)

    6. PHP to interact with the dogecoin daemon (This is done, I think, by making CURL requests to the Dogecoin daemon running on the same localhost server but on a different port. I think there’s a library for this but I could be wrong).

     

    First things first, I’ve decided to google to see if there’s anything on github, and in fact there is a faucet written by a polish girl (https://github.com/Emkacf/dogecoins-faucet/). I’m going to review this code and, if it seems correct, use it.

     

    According to the github comments, the first step is to download and install the dogecoin daemon. This is going to be true regardless of whether or not I use the faucet code that I see here or if I’m going to wind up creating my own. So let’s go to the github for the faucet: (https://github.com/dogecoin/dogecoin)

     

    Using putty to connect to my server so that I don’t have to use up my cellular bandwidth. The github instructions say to run the following:

    sudo apt-get install build-essential \ libssl-dev \ libdb5.1++-dev \ libboost-all-dev \ libqrencode-dev \ libminiupnpc-dev cd src/ make -f makefile.unix USE_UPNP=1 USE_IPV6=1 USE_QRCODE=1

    I’m on CentOS, so I’m using YUM instead. Looking for some of these equivalents.

    build-essential’s equivalent would be yum install make automake gcc gcc-c++ kernel-devel

    libssl-dev’s equivalent would be yum install openssl-devel

     

    At this point I get tired of finding package equivalencies, because I really want to get moving on this and I know that I have a lot of packages already installed for other things. So I grab the zip using wget

    wget https://github.com/dogecoin/dogecoin/archive/master.zip

    and unzip it

    unzip master.zip

     

    and move into the folder to see what we have. There’s a src directory with a makefile.unix. I attempt to make this file using  make -f makefile.unix USE_UPNP=1 USE_IPV6=1 USE_QRCODE=1 and get a ton of errors. Looks like I’m going back to installing dependencies.

     

    Dogecoin is based on Litecoin as they’re both scrypt coins. So I start looking around for a CentOS guide to installing litecoin. I find a litecoin miner tutorial that suggests

    sudo yum -y groupinstall "Development Tools"

    sudo yum -y install git libcurl-devel python-devel screen rsync

     

    The “Development Tools” I think is definitely going to be important, although I thought I had covered it with the yum install previously. As far as screen and rsync, those aren’t going to be important for the Dogecoin daemon, and I’m pretty sure I already have libcurl-devel, and since I’m just downloading the zip from git, I shouldn’t need this second line at all.

     

    Fussing about some more, I’ve decided to delete the .zip and just use git to get the package from git.

     

    git clone https://github.com/dogecoin/dogecoin.git

     

    I need that libboost-all-devel, which in yum is

    yum install boost-devel

     

    and libqrencode-dev, which CentOS is

    yum install qrencode-devel

     

    At this point, trying to find the libminiupnpc-dev I stumble across this article for installing services for Primecoin on centos

    http://www.primecoiner.com/centos-auto-install-servers/

     

    Finally, a decent guide for CentOS for altcoins, although it’s not a scrypt coin, a lot of these will be important. And I’m able to grab the miniupnpc by following this section of the guide:

    cd /root echo 'NOTICE: Downloading miniupnpc 1.6.2…' wget http://miniupnp.tuxfamily.org/files/download.php?file=miniupnpc-1.6.20120509.tar.gz -O  miniupnpc-1.6.20120509.tar.gz tar xzvf miniupnpc-1.6.20120509.tar.gz cd miniupnpc-1.6.20120509 echo 'NOTICE: Compiling miniupnpc 1.6.2…' make echo 'NOTICE: Installing miniupnpc 1.6.2…' INSTALLPREFIX=/usr/local make install

     

    I also grabbed db4 with:

    yum install db4

     

    Now that all the dependencies seem like they might reasonably have been met, I’m going back to try to make dogecoin again.

     

    ---- SOME HOURS PASS ----

     

    Apparently CentOS only has boost 1.4.1 in its yum repositories and I need boost 1.4.8. Since I installed the old boost before, I need to remove it. I’m following the instructions here (http://ben-tech.blogspot.com/2013/06/build-boost-for-impala-in-centos-63.html)

     

    rpm -qa | grep boost

    yum remove boost-*

     

    Download boost

    wget http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz/download

    tar -xvzf boost_1_55_0.tar.gz

     

    And it is here that I learn that /tmp is mounted as noexec and I can’t run ./ commands. And also I learn that the bootstrap and installation procedure is different for 1.55 than it was for the ben-tech article.

    ./bootstrap.sh

    ./b2

    ./bjam install

     

    Hah. Just kidding. That apparently only leaves the libraries in the current directory. Now that I’m learning what I actually need to invoke, I’m trying

    ./b2 --prefix=/usr/local/boost --build-type=complete --layout=tagged toolset=gcc link=static,shared threading=multi runtime-link=shared install

    This should give me boost in /usr/local/boost and maybe I can run it again.

     

    Still getting boost errors. How about installing from RPM?

     

    There’s no RPM for CentOS with a later version. I’ve been working on following the bitcoind instructions for CentOS.

     

    --- More hours of dependency hell later -----

     

    Ok, I’ve got dogecoind compiling, but its unable to load some shared libraries. I think that this should theoretically be pretty close. At least its compiling.

     

    The biggest problem has been with boost and getting the correct version of boost installed, since CentOS doesn’t seem to work.

     

    I do

     

    wget http://downloads.sourceforge.net/boost/boost_1_55_0.tar.bz2

    tar -jxvf boost_1_55_0.tar.bz2

    ./bootstrap.sh --prefix=/usr && ./b2 stage threading=multi link=shared

    then as root

    ./b2 install threading=multi link=shared

    then

    cd /dogecoin/src/

    make -f makefile.unix dogecoind

     

    And it compiles correctly (at least on my machine) but trying to ./dogecoind gives me

    ./dogecoind: error while loading shared libraries: libboost_system.so.1.55.0: cannot open shared object file: No such file or directory

     

    Ok, so I’ve fixed these errors by copying the correct libraries in /lib64/ but now I get

     

    ************************

    EXCEPTION: 9key_error

    CKey::CKey() : EC_KEY_new_by_curve_name failed

    dogecoin in AppInit()

     

    terminate called after throwing an instance of 'key_error'

     what():  CKey::CKey() : EC_KEY_new_by_curve_name failed

    Aborted

     

    So it turns out that CentOS and Fedora don’t come with EC in openssl. So I have to rebuild openssl. This does not sound like fun.

     

    ----- Some more hours pass -----

    Ok, so I’ve taken the method for installing bitcoind on CentOS that is found here: (https://bitcointalk.org/index.php?topic=65818) and modified the files to work for dogecoind.

     

    https://github.com/mikeminneman/dogecoind-centos

     

    Use those files to get yourself started. Please feel free to contact me if you need any further help on reddit at http://www.reddit.com/u/earcaraxe