In this post I'm showing you how to setup a basic system with Ubuntu and Virtualbox with all prerequisites installed for Hyperledger Fabric. The resulting virtual machine will serve as a basis for future experiments with the Linux Foundation's enterprise blockchain solution.
While I'm not describing how to install and setup the Hyperledger Fabric (HLF) network itself, I'll reference this post from others about HLF or other distributed ledgers when they're requiring a basic system setup.
If you're already familiar about how to install Ubuntu in Virtualbox, you may install it just the way you're used to and head directly to step 6, as there are no special requirements to run HLF. I'm giving the machines a fixed size virtual disk (dynamically allocated space might do the job as well) and more RAM as usually. That's it.
- Create Virtual Machine
- Install Ubuntu
- Install Guest Additions
- Setup Shared Folder & Clipboard
- Install Hyperledger Fabric Essentials
- Download Docker Images
- Taking a Snapshot
2. Create Virtual Machine
After clicking the "New"-button a dialog opens. Enable the "Expert Mode", enter the options as follows and choose an appropriate name. If you can't afford 4GB RAM for each vm, you should be fine with 2GB for testing purposes, too.
In the next dialog you have to setup the virtual disk. Even though I'm usually selecting "Dynamically allocated", I'm going to use a fixed size disk this time for maximum performance. Otherwise, the virtual disk container needs to grow dynamically each time we store more data (which is not too uncommon on HLF nodes 😜).
Now as we finished the container's setup, we need to tell it to boot up from our previously downloaded Ubuntu image. Click on the newly created machine and then on the "Settings"-button.
On the next window, select the "Storage" tab on the left. Click on the empty disc symbol in the middle of the screen, then click the disc-icon on the right to select the .iso file of Ubuntu. Don't forget to select the "Live CD/DVD" checkbox. Click "OK".
3. Install Ubuntu
Now double-click the machine to start. It will automatically boot the Ubuntu Live system. From now on, I'm skipping description and screenshots of every step except the more interesting ones.
Let's choose a "Minimal installation" and enable third-party software.
Keep the default selection "Erase disk and install Ubuntu" when asked for the installation type. During the installation process you'll be asked "Who are you?". Choose meaningful names here so it's easier to distinguish the machines of different organizations. As I'm using these virtual machines only for testing purposes, I'm using the organization's name as password.
Take a breath of fresh air while the system is being installed...
After the installation finished and the system rebooted, we're faced with the Ubuntu desktop. If you're prompted for new updates, confirm the immediate installation.
The next step is to install the Guest Additions, which are enabling some features like resolution adjustment, shared folders and a shared clipboard.
4. Install Guest Additions
On the menu bar, click "Devices" > "Insert Guest Additions CD image...". You'll be prompted for the installation automatically.
When clicking on "Run" you're probably faced with the same error message like me:
This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.
Press Return to close this window...
Ok, let's do that. Open the terminal via
gnome-terminal followed by
[Enter]. Then install the required packages:
sudo apt-get update sudo apt-get install build-essential gcc make perl dkms reboot
After reboot, the Guest Additions CD is already mounted. Just double click it at the desktop. In the opened window click on "Run Software" at the top right.
After the installation has been finished, you can scale the virtual machine's window and Ubuntu's resolution will be adjusted automatically.
5. Setup Shared Folder & Clipboard
As we might need to exchange the public keys from our HLF identities of different virtual machines later, we're going to setup a shared folder. This allows us for easy file exchange between the host and the guest system. The shared clipboard also makes our lives easier for copying commands from this post into the guest system.
On the menu bar click "Devices" > "Shared folders" > "Shared Folders Settings...".
There are two types of shared folders. "Machine Folders" are permanent folders that are shared until you remove them. "Transient Folders" are temporary and are automatically removed when you restart or shut down the virtual machine.
Press the "Add shared folder"-button on the right side.
I'm creating a new folder on my host system specifically for this guest, e.g.
/home/user/VirtualBox-Shared/HLF-A. Select "Auto-mount", "Make Permanent" and enter the mount point
Then again on the menu bar, select "Devices" > "Shared Clipboard" > "Bidirectional". This allows us to use the clipboard from host to guest and vice versa.
Both features are enabled immediately without restart.
6. Install Hyperledger Fabric Essentials
Now comes the fun part! We're going to install everything we'll need later to setup a HLF network.
Open a terminal within the guest system and curl, docker and docker-compose:
$ sudo apt-get install curl docker docker-compose
Validate that we're above the required versions of Docker 17.06.2-ce and Docker Compose 1.14.0:
$ docker --version Docker version 18.06.1-ce, build e68fc7a $ docker-compose --version docker-compose version 1.17.1, build unknown
In order to connect to the Docker daemon socket our user needs to be in the docker group:
$ sudo usermod -a -G docker $USER $ reboot
We also want to install the Go programming language which HLF is written in. We might even choose to write chaincode in Go. However, Ubuntu's repository doesn't provide the recommended version of 1.11.x. So we have to install it manually.
First go to the Go download page and copy the url of the latest go1.11.x.linux-amd64.tar.gz file. Then in our guest's terminal:
$ wget https://dl.google.com/go/go1.11.5.linux-amd64.tar.gz
Compare the SHA256 checksum:
$ sha256sum go1.11.5.linux-amd64.tar.gz ff54aafedff961eb94792487e827515da683d61a5f9482f668008832631e5d25 go1.11.5.linux-amd64.tar.gz
Next, unpack the package and move the go directory to
$ tar -xvf go1.11.5.linux-amd64.tar.gz $ sudo chown -R root:root ./go $ sudo mv go /usr/local
Last but not least, let's set some paths for Go. Open the
.profile file in your preferred editor:
$ nano ~/.profile
Add the following to the end of the file:
# Set Go paths export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Save + close the file and apply changes by sourcing it:
$ source ~/.profile
Install Node.js Runtime, NPM & Typescript
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
Close and re-open the terminal, so that the
nvm command is available. Then install and use the latest LTS of node:
$ nvm install --lts $ node --version v10.15.1 $ npm --version 6.4.1
After all we can install the Typescript compiler globally:
$ npm i -g typescript $ tsc --version Version 3.3.3
7. Download Docker Images
Hyperledger provides a bootstrap script, which assists us in downloading all available docker images (peer, orderer, ca, couchdb, ...). Enter the following commands in your terminal:
$ mkdir fabric && cd fabric $ curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s -- -s 1.4.0
This will download all the images and platform specific binaries while skipping the cloning of the samples repository. If you want them as well, just remove the
-s right before the version string.
8. Taking a Snapshot
At this point we have all tools available we need for setting up our Fabric network. Let's take a snapshot from this state, as it will serve as our basic system setup for future tutorials.
Select the virtual machine, then on the menu bar "Snapshot" > "Take".
Enter a meaningful name like "Basic System" for easy identification and press OK.
Now you have a Hyperledger Fabric ready virtual machine, which you can clone for your experiments. Have fun and don't miss out my upcoming posts!