A while back, scaleway announced some very affordable bare metal servers: for €3 a month you get 4 (ARM) cores, 2GB of RAM, and a 50GB SSD.
I’ve wanted to try out ARM in the server room for some time, and I wanted a chance to use the fantastic servant library, so I’ve built an example REST API and web-app using servant and deployed it on scaleway. You can see the demo running here.
This blog post is about how to get compiling with a modern (7.10) GHC on a Scaleway ARM server running their stock Ubuntu 15.04 image. A better solution might be cross-compiling, but this is a simple-ish way to get Haskell/Servant code running on Scaleway.
The REST API
First, a quick summary of the demo.
The demo is a simple messageboard, consisting of only threads and comments. It serves endpoints as either JSON or HTML, so you can view content through your browser. I didn’t bother adding HTML forms, so to add comments or threads, you’ll need to make a POST request yourself. Check out the example curl scripts in the the github repo.
Getting GHC 7.10 on Scaleway’s Ubuntu 15.04 Image
I used GHC 7.10.2, which you can download here. I’ll refer to it below by something like
<ghc_arm_package.tar.xz> instead of its full name.
Here’s what you need to do to run the demo:
Update your system, and install git:
apt-get update apt-get upgrade apt-get install git
Install GHC dependencies- LLVM is for GHC 7.10.2
apt-get install llvm-3.5 binutils gcc g++ zlib1g-dev libgmp-dev`
Install cabal-install - this uses GHC 7.6.3 for now
apt-get install cabal-install
Install GHC 7.10
wget <ghc_arm_package.tar.xz> tar xf <ghc_arm_package.tar.xz> cd <ghc_arm_package> configure make install
At this point, GHC 7.10 should be installed. Verify that
ghc --version prints
Update cabal-install so we can use sandboxes
cabal update cabal install cabal-install
Run the code
git clone https://github.com/statusfailed/scaleway-servant-demo cd scaleway-servant-demo cabal sandbox init && cabal install --only-dependencies cabal run
You should now be able to run the example curl scripts to populate the demo with some fake data, e.g.:
Things went pretty smoothly in general, but I did encounter a couple of minor hiccups:
Compiling is pretty slow on these boxes. That said, I’m comparing against my laptop, which has an i5 and 16GB of RAM. It also uses binary distributions of haskell packages, so I don’t really have a fair comparison :-)
I saw cabal/GHC run out of memory once, while trying to compile too many packages simultaneously.
These aren’t really huge problems. In a production setting you’d probably be running a CI server. That could be an ARM server, or a cross compiler running on x86. This at least shows that Haskell on ARM is not too hard :-)
It’s dead easy to get a machine running on Scaleway. Their UI is simple, and it takes only a few clicks to get a machine running. I’m not really sure what kind of projects would be well suited to Scaleway boxes, but at €3 you might as well play around with one!Paul —