Captain’s Log 014 – Let’s Git Real!

download.pngI cannot tell you how many times that I have build rippled from scratch making the howto in my last post; Rippled Developer Setup Guide. Also while testing the XRPine I kept thinking about how nice it would be to have the software install automated without using yum. In true CoinTrek tradition, I set out to learn how to make an installer script, and I am using it as a reason to make my first GitHub repository to share with others. Fair warning, it’s a work in progress, but I’m committed to progress! 😉

I decided that I make the tools that I want to use and share those back to the community, and I will be doing it here:

https://github.com/cointrek

cointrek-github.PNG

I want to take some time to emphasize something I feel very strongly about; Learning! We live in a time where everything is at our finger tips. Google, while convenient and vast, has turned our minds into query generators and many have forgone critical thinking. I admit that I am among those that use the Google Machine on a daily basis, but when it comes to solving problems I limit my use of searching for an answer.  True, what you’re trying to do may have been done by others already. Also true that you may not even have to go through the same process. I love automation! There are so many ways to skin a cat, especially with software.  My point is. If you’re a CoinTrekkie, the journey is what matters.  The Learning Journey! That’s part of why I named my blog what it is. I wanted to learn crypto in and out and it’s a trip to be sure!

Here what I’ve learned how to do this week…

Codius

I am aligning my interests with XRP, so I used my skills to create a Research how to and deploy Codius server! I do want to express thanks for tips I received. I put 20 XRP from previous tips given to me toward a new wallet I could use for the server.  I felt a separate wallet would give me peace.

https://codius.cointrek.voyage/version

In my last post I used a Virtual Private Server on purpose.  I could have used it to stand up a validator, but I decided I’d rather set up a Codius Server.  I wanted to be on the bleeding edge of what XRP is capable.  Also, my validator interests are in making my little XRPine the best it can be.

I followed Stefan Thomas’s How To Guide to the letter. And I failed. My codius server didn’t work at all! The guide was pretty exact but there are a couple pitfalls you might find yourself in, so I want to point them out here.

Domain Verification

The guide makes use of a certbot that communicates with an external verification authority.  Domain verification is a process by which a domain owner proves that the host they are using is in their control.

certbot.PNG

These instructions work just fine but with one exception, which is Patience! The internet takes time to filter changes throughout itself. So, when you add a TXT record to your DNS settings for your domain. Wait a minute before you hit ENTER! I’m serious. If you do this too many times you’ll get locked out and have to wait an hour. Actually five failed attempts equate to being locked out. More and you could get shutdown for a week.

I thought of this afterward, one might change their subdomain from xyz.host.com to abc.host.com and get around the lock out, but I didn’t bother.

Host Info

After verification I followed the remaining steps and was able to view the sucess indicator. Here’s what it should appear to be:

success.PNG

Immediately I took my browser to https://codiushosts.com/hosts and searched for my hostname. It wasn’t there. More over I couldn’t figure out why.  Using their Gitter Chat Room, I was able to work out with another community member how to tell what was the issue.

Little did I know that the host info can be seen with the browser.

https://codius.cointrek.voyage/info

In the print out I had:

  • “uri”:”https://local.codius.com:3000″ instead of
  • “uri”:”https://codius.cointrek.voyage”

This ladies and gentleman is why you should be wary of copy and paste! A simple fix, but I made it and my server appeared on the hosts website.

 Along the way I found many resources that are useful on XRPChat.

  • Spreadsheet to compute earnings/profits for running a coidus server; here.
  • A YouTube video I am going to be using to make a smart contract of my own in the future; here!

Moving Forward I am calling every member of the community to contribute in some way.  Lightning struck me and I realized I should be doing it with hardware and software because that’s what I’m good at. I would like to find out if there is support with in the community to incentive this.  I’d like to create a website to serve as a common location for members to point out their work.  A sort of XRP GitHub but broader because not all of us are software junkies.  I’m not a seasoned webdev, so if anybody wants to help or if there’s interest, please write me!

Captain’s Log 013 – Rippled Developer Setup Guide

In creating the XRPine I was, and still am, forced to tinker with the rippled configuration file. Coupled with the Pine board’s sporty albeit slow performance when compared to a full server, I needed something that was more responsive to play around with. In doing so I could more easily learn how use the configuration file to its fullest extent possible.

My first instinct was to search for a Linux how to guide online. Apart from Ripple’s own guide on their development website, there hasn’t been one made if you want to do it manually. Wieste made a wonderful guide to use with DigitalOcean, an online Virtual Private Server (VPS) hosting server, that walks one through setting up a validator by using Docker. Other members of the community have posted information about what makes a good validator, summarizing developer information. All of this is great, but I don’t like Docker. I have no reason to give you other than it’s not my cup of tea.

For lack of a manual guide and my inclination to do everything myself, a force of habit for someone with a learning hobby, I decided to create this guide for the community. A lot of what’s here went into setting up the XRPine, but I’ll leave the gross nuts and bolts details of that out and keep it specific to using a VPS. This just gave me the development environment.

The purpose of this blog post is to hit all the in between details for other fellow DIYers. I am not pushing my guide over anyone else’s. If you like using Docker and you just want to run a validator out of the box, then by all means. Use the guide that does just that. There are some benefits to my guide. My guide will show you how to do everything from scratch, so if you’re a developer then this is the perfect guide for setting up shop. The information is readily available on the developer site. I’m paraphrasing a good portion here in the context of setting up on a VPS, and I’ll also point out a couple hurdles you might encounter.

Step 1 – DigitalOcean – SetUp your VPS

An online subscription to a VPS with 8GB of RAM and 4vCPUs is what I need so I have acquired one of those. I’m taking advantage of the free $100 slash 60 day credit that DigitalOcean is offering to get my feet wet.

To start, go to DigitalOcean (or a VPS hosting service of your choosing) and create an account. My guide will be with respect to that hosting service .When logged in, there’s a green button that says “create” in the top right. Go there and select “Droplet”

If you’re wondering what options to pick, here’s a PDF link that’ll show you.

Here’s my configuration:

  1. OS: Ubuntu
  2. Size, Standard: 8 GB RAM, 4 vCPUs
  3. Backup: None
  4. Block Storage: None
  5. Region: Pick a region that you want. This is case by case.
  6. Additional Options: I didn’t pick any.
  7. SSH Keys: Leave Alone. Can do this later.
  8. Hostname: my-awesome-vps
  9. Tags: None

Step 2 – DigitalOcean – Get your IP Address

Each droplet is going to come with a public facing IP address that you’ll need to take note of. I personally prefer to log in via secure shell from my own machine. That way I don’t have to go online, log in to a website, and click 10 buttons before I can get to my VPS.

From the dashboard, click on your droplet to expand its information. Here’s an example of mine (redacted). In place of 127.0.0.1 (There’s not place like home!) you’ll have your IP address. Note it.

dashboard-dropplet.png

If you want to use the online shell to access the VPS, those three dots in the top right will give you a button to click; “Access Console”. A window will appear with a command prompt to play with. Probably a pop up blocker hazard!

Step 3 – First Log In

One may choose from any secure shell (SSH) client, such as Putty, however I found one I like called SmartTTY. Just has a few extra buttons and whistles I’ve found useful over time. You can download and install that from their website. Since there are a plethora of SSH clients to choose from, I leave it to the reader to pick on of their choosing and configure it.

To log in, check your email first. You’ll need to get your credentials. The root password is emailed to you. The password is long so happy typing!

Default User: root

Password: See email

Step 4 – Add a new user

This is just good practice. Make a new user and add it as a sudo user. On Ubuntu follow these steps:

  • adduser username
  • usermod -aG sudo username

After setting that new user with a new password, switch to it

  • su username

 Step 5 – Update Linux & Install

Now, moving toward getting ready to install rippled, one must prepared linux for it. This step might be rather lengthy since Linux can take a long time to update.

Update Linux with the following commands:

  • sudo apt-get update
  • sudo apt-get -y upgrade

(After your cup of coffee xD)

Install the prerequisite packages with the following commands:

  • sudo apt-get -y install package

Replace package with the following packages:

git cmake pkg-config protobuf-compiler libprotobuf-dev libssl-dev wget doxygen

You may install each separately or all at once on the same line. Just separate each package with a space on the command line.

Step 6 – Download, Build, and Configure Boost

Image result for boost c++

Boost is a community C++ library that is both an amazing treasure trove of useful software and also a huge pain in the neck because it is so big.

Here’s how:

  • First, navigate to your home directory; cd ~
  • Download it with wget:
    • wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz
  • Use tar to unpack it:
    • tar xvzf boost_1_64_0.tar.gz
  • Move into the boost directory: cd boost_1_64_0/
  • Now, prepare the boost build with; ./bootstrap.sh
  • After the command completes, build boost!
    • ./b2 -j

I used 3 of the 4 cores to build boost on the VPS.

After Boost builds, you have to tell the OS where to find it, so you do that by setting an environment variable. Environment variables are like global labels that the OS or any program can see. You add Boost to an environment variable so the rippled software can see it when it builds later.

Here’s how I do it. On Ubuntu there is the “bashrc” file. That file executes each time the user logs in or opens a new terminal. Open that file with the editor of your choice. I use emacs because VI is not my cup of tea. If you do use emacs, you’ll have to install that too. Just follow the previous step for installing a package.

  • Open the bashrc file
    • emacs ~/.bashrc
  • Add this line to the emacs file:
    • export BOOST_ROOT=/home/USERNAME/boost_1_64_0
  • For the first time, source the file. Every time you log in in the future this doesn’t need to be done.
    • source ~/.bashrc
  • Save and exit the file:
    • Save: ctrl-x and then ctrl-s
    • Exit: ctrl-x and then ctrl-c

Step 6 – Download and Build rippled

This step will clone the rippled repository and build it.

  • Navigate to the home directory; cd ~
  • Clone the rippled repository:
  • Navigate into the rippled directory: cd rippled
  • Check out the master branch:
    • git checkout master
  • Use CMAKE to build the software:
    • Make a build directory: mkdir my_build
    • cd my_build
    • Run cmake to generate makefiles. cmake will tell you if anything is wrong at this point
      • cmake -Dtarget=gcc.debug.unity ..
    • Run the build command
      • cmake –build . — -j
        • Note two dashes 

Here’s where I ran into some issues. Ubuntu straight out of the release that DigitalOcean is using is version 3.5. Unfortunately, the build system will force you to use version 3.9 or higher for a clean configure.

Here’s how to handle that. We’ll need to obtain cmake, build it from source and install it.

  • Navigate to the home directory: cd ~
  • Use wget to obtain the latest release candidate (or stable release)
    • wget https://cmake.org/files/v3.12/cmake-3.12.0-rc2.tar.gz
  • Unpack cmake
    • tar xvf cmake-3.12.0-rc2.tar.gz
  • Go into the cmake directory: cd cmake-3.12.0-rc2
  • Run the bootstrap; ./bootstrap
  • make
  • sudo make install

After this point, go back and rerun the cmake commands for rippled. Be sure to make a new build folder!

  • cmake -Dtarget=gcc.debug.unity ..
  • cmake –build . — -j

NOTE: If you’re ultimate goal is to run rippled as a validator. You will want to change your build target to the release version. If you’ve made changes and want to test them out in release. This is how that works. The debug version will be slower!

  • cmake -Dtarget=gcc.release.unity ..

This time, the build should work. Here’s what a valid configuration will output

And a successful build. I love how cmake counts up to 100%!

Step 7 – Modifying Code and Version Control

Now you know the command to build. If you want to rebuild, just issue the same command and watch cmake count up again!

Using git can git a little tough at times, but fortunately you can get started with minimal effort. Go back up one folder from the “my_build” directory.

If you were here: /home/validator/rippled/my_build

Go up one directory with this command; cd ..

First things first. Set up your Github username and email;

  • git config –global user.name “John Doe”
  • git config –global user.email “[email protected]

If you have a preferred editor:

  • git config –global core.editor emacs

Now a nifty git command to get your current information:

  • git status

You’ll just have one red folder which is the build folder. That should always stay untracked. Actually I’m surprised it’s not in the “.gitignore” which is a file with file name patterns that tells git which files to ignore completely.

Best to be on the develop branch, so we’ll checkout that one:

  • git checkout develop

You can probably get away with just working on develop. You won’t be able to push to ripple’s rep but you can make commits locally and pull changes that are made remotely. To get your changes pushed then you’ll have to make a pull request.

  • git add *
  • git commit -m “Fancy commit message”

That wraps it up! I thought about going as far as making the guide detail how to set up with a Integrated Development Environment, such as Eclipse. I really don’t know what the community devs prefer to use. Some might prefer building on Windows in which case Visual Studio would be better. If I got some idea of what IDE developers were choosing, I’d make a guide for that.

This is half the battle. I hope Ripple updates their developer guide to account for the version issues with cmake. Getting around it isn’t hard, but it could potentially make somebody stumble. If you’re a developer, go ahead and checkout ripple’s issue list. Pick one and have at it. Who knows? Maybe some of your code might end up in the next rippled release! I hope so there are far fewer low level C/C++ devs out there than there are web developers.

Moving forward, I’ll post about the configuration steps involved with setting up rippled to run. That include the configuration file, setting up the linux service so it runs automatically and generating validator keys.

As always. Second star to the right; and Warp 6 this time!

Reference

  • https://developers.ripple.com/build-run-rippled-ubuntu.html
  • https://medium.com/@WietseWind/how-to-run-a-ripple-validator-digitalocean-7e5fca1c3d77
  • https://xrpcommunity.blog/rippled/
  • https://www.digitalocean.com/pricing/
  • http://smartty.sysprogs.com/
  • https://www.digitalocean.com/community/tutorials/how-to-create-a-sudo-user-on-ubuntu-quickstart
  • https://developers.ripple.com/build-run-rippled-ubuntu.html
  • https://github.com/ripple/rippled