The Raspberry Pi 3 is the third generation Raspberry Pi, on this i will be installing Mulesoft enterprise runtime standalone with latest Java 8 running inside a Docker container. The Instance will register itself with Anypoint platform runtime manager.

The raspberry features:

  • A 1.2GHz 64-bit quad-core ARMv8 CPU
  • 1 GB Memory
  • 802.11n Wireless LAN + Ethernet, Bluetooth
  • Micro SD card slot
  • 4xUSB, 1xHDMI

alt text

Raspberry setup

Raspbian is the raspberry’s officially supported operating system which we will be using. First Setup your raspberry pi with a minimal installation, as we won’t be using desktop. When installation has completed, you can SSH into your raspberry with the default pi user and raspberry password.

ssh pi@ip

Make sure you have the latest kernel as docker support has only been added recently. do an update to get the latest base system.

sudo su -
apt-get update && upgrade

This guide has been tested with the below kernel version.

$ uname -a
Linux raspberrypi 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linux

Installing docker on raspberry pi 3

Docker

Fetch and execute installation script:

curl -sSL https://get.docker.com | sh

Add pi user to docker group to be able to run docker without root privileges.

root@raspberrypi:~# usermod -aG docker pi

Verify your docker installation as the pi user:

root@raspberrypi:~# exit
docker version
Client:
 Version:      17.04.0-ce
 API version:  1.28
 Go version:   go1.7.5
 Git commit:   4845c56
 Built:        Mon Apr  3 18:22:23 2017
 OS/Arch:      linux/arm

Server:
 Version:      17.04.0-ce
 API version:  1.28 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   4845c56
 Built:        Mon Apr  3 18:22:23 2017
 OS/Arch:      linux/arm
 Experimental: false

Setup Anypoint platform access management

alt text

Add your organisation. e.g. redpill-linpro

Add your environments e.g. Production and Test

Check that your subscription is valid. It is possible to run this during the 30 day trial, and the runtime will continue to work even after expiration if it has not been shut down in the meantime, but you won’t be able to register new instances.

Configure docker image

The docker image has been based on https://github.com/kenngyc/Dockerfiles but since this image has not been prepared to run on ARM a fork has been created.

To check out sources

git clone https://github.com/simonvalter/Dockerfiles.git

The changes that were needed to make this run is to base it on a Raspbian docker image and hence get a Java version installed that will run on arm.

There also seems to be a bug in the /muleruntime/bin/mule start script where it decides to use armel wrapper for all arm.

        armv*)
            if [ -z "`readelf -A /proc/self/exe | grep Tag_ABI_VFP_args`" ] ; then
                DIST_ARCH="armel"
                DIST_BITS="32"
            else
                echo "Warning: An armhf architecture has been detected and this is not currently supported. The armel version of the wrapper will be used instead."
                DIST_ARCH="armel"
                DIST_BITS="32"
            fi

instead we will change it to the correct wrapper using the DIST_ARCH=”armhf”

The /muleruntime/conf/wrapper.conf is also using excessive memory for running on the 1GB available memory that the raspberry has, which will cause failure on startup. Instead the initial heap and max heap size has been decreased from the default 1024 MB

# Initial Java Heap Size (in MB)
wrapper.java.initmemory=256

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=512

Build docker image

cd /Dockerfile

Get latest mule runtime:

wget http://s3.amazonaws.com/new-mule-artifacts/mule-ee-distribution-standalone-3.8.4.zip

Configure Dockerfile to use latest version:

set ARG     muleVersion=3.8.4

Build image with the tag simv/mule-docker-ee and version 1

docker build -t simv/mule-docker-ee:1 .

Starting the container

Start the container, giving your Anypoint platform credentials, your organization and environment and ports to listen on as arguments.

./startDockerContainer.sh 1 user password redpill-linpro Production 80 443

Deploying mule application

After starting the container you should be able to see the server registered in Anypoint platform runtime manager.

Server status

For each restart a new server instance will be registered with a random name.

To deploy your application you go to deploy application and upload your mule app.

Application status

That’s it. Within seconds you should see it deployed and running on your raspberry.

Simon Nyborg Valter

Integration Consultant at Redpill Linpro

Simon Valter works as an integration specialist and Java developer, from our office in Copenhagen, creating integrations in Mule for various customers.

Comparison of different compression tools

Working with various compressed files on a daily basis, I found I didn’t actually know how the different tools performed compared to each other. I know different compression will best fit different types of data, but I wanted to compare using a large generic file.

The setup

The file I chose was a 4194304000 byte (4.0 GB) Ubuntu installation disk image.

The machine tasked with doing of the bit-mashing was an Ubuntu with a AMD Ryzen 9 5900X 12-Core ... [continue reading]

Why TCP keepalive may be important

Published on December 17, 2024

The irony of insecure security software

Published on December 09, 2024