Using Upstart on Ubuntu for bitcoind

My bitcoind was always crashing after about 12 hours and I would restart it. I had a script that ran after a reboot, but that didn’t help to restart it after a crash. I tried Upstart scripts but they wouldn’t work at reboot, although I could start/stop them at will after configuration.

I found the answer here:
https://bitcointalk.org/index.php?topic=25518.msg8733922#msg8733922

So this is what my /etc/init/bitcoind.conf looks like now.

description "bitcoind"

start on filesystem
stop on runlevel [!2345]
oom score -500
expect fork
respawn
respawn limit 10 60 # 10 times in 60 seconds

script
	user=yourusername
	home=/home/$user
	cmd=/usr/local/bin/bitcoind
	pidfile=$home/bitcoind.pid
	# Don't change anything below here unless you know what you're doing
	[[ -e $pidfile && ! -d "/proc/$(cat $pidfile)" ]] && rm $pidfile
	[[ -e $pidfile && "$(cat /proc/$(cat $pidfile)/cmdline)" != $cmd* ]] && rm $pidfile
	exec start-stop-daemon --start -c $user --chdir $home --pidfile $pidfile -m --startas $cmd
end script

I have similar scripts for my other coins.

NameCoin compile from source on Ubuntu

I’ve been having trouble with the binary qt on my windows machine. So I backed up the Namecoin wallet and compiled from source.

First, I got the source from the official namecoin-qt github project:

https://github.com/namecoin-qt/namecoin-qt.git

After getting this setup, I found that it did not work with the NOMP pool because of the batch processing.

So after asking some questions in the NOMP project, I was informed that the NOMP project is dead, but UNOMP is the new version. So I set up UNOMP (more on this later), and also that UNOMP has their own version of NameCoin.

Get the source:

cd ~/source
git clone https://github.com/UNOMP/namecoin-core.git

Install all the dependencies:

sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils
sudo apt-get install libboost-all-dev

sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install libdb4.8-dev libdb4.8++-dev

sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler

Compile:

cd ~/source/namecoin-core
./autogen.sh
./configure --with-incompatible-bdb
make

Getting NOMP to run at reboot on Ubuntu

There are several things you must do to accomplish this without any user intervention. It is up to you to decide if any of these pose as a security risk depending on your situation.

  1. Enable your user to automatically login
  2. Start all your CryptoCoins at login
  3. Unlock all your CryptoCoin Wallets at login
  4. Run NOMP as root

Enable your user to automatically login:

  • System Settings
  • User Accounts
  • Automatic Login

Start all your CryptoCoins at login:

    • Create a script for each coin “run_bitcoin-qt”
/usr/local/bin/bitcoin-qt -server
    • Create a “start_all_coin_wallets” script
echo Starting Crypto Coins...
/usr/local/bin/bitcoin-qt -server &
/usr/local/bin/mazacoin-qt -server &
/usr/local/bin/titcoin-qt -server &
/usr/local/bin/UniversalCurrency-qt -server &
/usr/local/bin/zetacoin-qt -server &
echo Wallets Started.
  • Here is the daemon version.  Seems to be more stable, but you have to compile the daemon’s for each coin.
echo Starting Crypto Coins...
/usr/local/bin/bitcoind -daemon &
/usr/local/bin/mazacoind -daemon &
/usr/local/bin/titcoind -daemon &
/usr/local/bin/UniversalCurrencyd -daemon &
/usr/local/bin/zetacoind -daemon &
echo Wallets Started.
  • Add the “start_all_coin_wallets” script to “Startup Applications”

Unlock all your CryptoCoin Wallets at login:

  • Create a script that passes the “walletpassphrase” command
  • Example:
    /usr/local/bin/bitcoin-cli walletpassphrase "this should be your passphrase in these quotes" 9999999
    
  • Since you don’t know how long it will take to bootup all your wallets, you can set this to run every 5 minutes just to be sure.
    • Do this by adding it to the “Scheduled Tasks”

Run NOMP as root

  • Why? because “node” needs to run as root or your website won’t work.
  • Create a “run_nomp” script, something like this
    echo Starting NOMP...
    cd /home/yourusername/www/nomp
    sudo node init.js
    
  • You will have to add a line to /etc/sudoers
    yourusername ALL=(ALL) NOPASSWD:ALL
  • Add “run_nomp” to “Startup Applications”
    gnome-terminal -e "/home/yourusername/bin/run_nomp"
    

Reboot your server and watch it boot up.

NOMP Setup

Nomp:
—-

cd ~/source
sudo apt-get install nodejs-legacy
sudo apt-get install redis-tools
sudo apt-get install redis-server
git clone https://github.com/zone117x/node-open-mining-portal.git nomp
cd ~/source/nomp

—-
Copied the nomp to my www folder and configured.
—-
Folders that needed configuring:
coins
pool_config
—-
Files that need configuring:
config.json
package.json
—-

Well, I got this configured and I’m happy to say that all the alt coin wallets that I attempted to mine solo before, but got 100% rejects, are now working. Perhaps it is because of the startum protocol built into this mining pool.

I also got the profitability coin switching working, although I only enabled Cryptsy for the profit checking.

So far, I like this little piece of software, and great job developers. It does seem to still be in beta, but for now is functional for what I need to do. Which is solo mining alt coins.

If I have time, I’ll see if I can help out, but doesn’t seem likely with my schedule.

ZetaCoin compile from source on Ubuntu

This coin was about the easiest to compile except for MazaCoin which was the easiest. It was also the longest to compile.  The make created zetacoind, zetacoind-cli, zetacoin-qt. It worked after adding the –with-incompatible-bdb flag to configure.

cd ~/source
git clone https://github.com/zetacoin/zetacoin.git
cd ~/source/zetacoin
./autogen.sh
./configure --with-incompatible-bdb
make

TitCoin compile from source on Ubuntu

This coin gave a bit of trouble.  It may have been my libraries were conflicting and I was running the wrong version of qmake.  What finally worked was to uninstall both versions, re-installed both versions, then ran these commands:

cd ~/source
git clone https://github.com/OfficialTitcoin/titcoin-wallet
apt-get install qt4-qmake libqt4-dev
qmake-qt4
make clean
make

MazaCoin compile from source on Ubuntu

MazaCoin was an interesting coin, as it inspires to be a national currency.  Good luck to them.

Compiling MazaCoin was the most straightforward as I already had the necessary libraries from the previous attempts, so here are the commands that I ran to make get this running.

cd ~/source
git clone https://github.com/MazaCoin/MazaCoin.git
cd ~/source/MazaCoin
qmake
make

UniversalCurrency compile from source on Ubuntu

UniversalCurrency (UNIT) was a fairly new Crypto Currency at the time I started playing with it.  It’s genesis block was created in May 2015.

I downloaded the source from github:
https://github.com/unitcurrency/unitcurrency/

If you already compiled the Bitcoin Core in my previous post, you should already have most of the dependencies that this software needs.  I did have some trouble compiling this, even after reading all the instructions provided with this version.

cd ~/source
git clone https://github.com/unitcurrency/unitcurrency/

Follow the instructions in the ./source/unitcurrency/doc/readme-qt.rst

Running “qmake”, then “make” will give you some errors however, until you change permissions to a particular folder and make a few changes to the “UniversalCurrency-qt.pro” file.

The first error you get will be a permissions denied, which can be fixed by:

chmod 755 ./src/leveldb/build_detect_platform

I found this info here from another blogger who successfully compiled memecoin-qt in ubuntu, and it fixed my problem with UniversalCurrency:

https://pw999.wordpress.com/2013/09/29/compiling-memecoin-qt-on-xubuntu/

Basically, the developers of UniversalCurrency linked a specific version of Boost and we are changing this now:

Look for:

LIBS += -lboost_system-mgw49-mt-s-1_57 -lboost_filesystem-mgw49-mt-s-1_57 -lboost_program_options-mgw49-mt-s-1_57 -lboost_thread-mgw49-mt-s-1_57
BOOST_LIB_SUFFIX=-mgw49-mt-s-1_57

Change to:

LIBS += -lboost_system -lboost_filesystem -lboost_program_options -lboost_thread
BOOST_LIB_SUFFIX=

Look for:

isEmpty(BOOST_LIB_SUFFIX) {
macx:BOOST_LIB_SUFFIX = -mt
windows:BOOST_LIB_SUFFIX = -mgw49-mt-s-1_57
}

Comment out, so it will look like this:

#isEmpty(BOOST_LIB_SUFFIX) {
# macx:BOOST_LIB_SUFFIX = -mt
# windows:BOOST_LIB_SUFFIX = -mgw49-mt-s-1_57
#}

After these changes, you can then run

qmake
make

The build will take a while, but then you can copy the UniversalCurrency-qt file to your bin folder and it should be good to go.