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):
A copy of the Dogecoin daemon running on the server
This daemon will need to have an entire copy of the blockchain
A wallet run by the daemon
A website frontend (html/css)
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
and unzip it
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
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-*
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.
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.
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
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
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
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.
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