Article
· Feb 10, 2022 7m read

The InterSystems Iris Fhirserver running on a Raspberry Pi Raspberry running as a FHIRserver

The InterSystems Iris Fhirserver running on a Raspberry Pi Raspberry running as a FHIRserver

Raspberry running as FHIRserver

About a year ago I wrote some articles about the installation of the HAPI FHIRserver on a   Raspberry Pi. At that time, I only knew the basics of the FHIR standard, little about the technology behind FHIR-servers and not much more about the Raspberry. By trying, failing, giving up and trying again I learned a lot.More than a year later I’m still a “perseverant amateur”, but meanwhile I built up a full FHIR environment with Raspberries, a number of applications in HTML/JavaScript/jQuery/Bootstrap and some applications in PHP. I did some work with authentication- and authorization servers on the Raspberry and some experiments with SMART on FHIR.

Most of it works, although sometimes without me knowing what the difference is between the last non-working version and the success I obviously created. I ‘m still surprised daily. Looking back, I should properly have studied systems development (I’ve a degree in forestry and currently volunteer a lot in that area. But that is different story).

Please be aware that a Raspberry Pi is ok to experiment with, but is not suitable for productional situations. So don’t use the Raspberry as a productional system in healthcare or any other situation in which reliability, continuity, security, privacy etc is needed or expected. It’s a perfect and cheap computer to experiment and it exceeds my expectations time after time, but it isn’t of “industrial strength”.  

The InterSystems FHIRserver

At the time I have chosen the HAPI FHIR server because of its availability and because I succeeded quite soon to get some results with it. A former colleague, who is working for InterSystems now already suggested to experiment with InterSystems’ FHIRserver too.

I know InterSystems quite well (or should I say “I.know”😉) and it sounded like fun, but at that time, more than a year ago, a suitable version of Iris wasn’t available for ARM -processors (the Raspberry runs on ARM). Apart from that is the community version of Iris distributed as a Docker-container and I knew less than nothing about Docker.

From Raspbian towards Ubuntu

Meanwhile a year has passed. There is a new and even more powerful Raspberry Pi available    (while stocks last…). The new Raspberry 4, like the Raspberry 3, supports 64-bits Unix. The IRIS community version is available for ARM too and I learned somewhat more about containers and Docker.

With all these improvements, the nonsensical “lock down” we had in the Netherlands at the end of last year became an opportunity to start a new experiment in which I would try to get the community version of IRIS running on a Raspberry Pi .

Looking back this was quite easy. In fact, there are only three attention points:

  1. You’ll need a Raspberry supporting 64 bits. This means either a Raspberry 3 or 4 .
  2. I didn’t succeed with (64 bits) Raspbian (which is quite new by the way). But I succeeded with 64 bits Ubuntu.
  3. The InterSystems FHIRserver seems to be more judgemental about the FHIR-calls than the HAPI FHIRserver. I will explain this later in an additional publication, but I don’t think this is bad. Being the central repository in an (health-)care environment you should be strict regarding the standards, otherwise it will be “garbage in – garbage out”.

It took however some time for me to understand while applications that ran ok with the HAPI FHIRserver failed running with IRIS. Spoiler alert: the problem was in my applications.

It is however fun and more than worthwhile to see a little computer like a Raspberry Pi, at costs less than 100 Euros, running the full InterSystems IRIS platform, complete with management portals, Ensemble, Caché and a FHIRserver.

In the next paragraph I’ll explain step-by-step what I did to get there. That will not be a lengthy story about the history of Ubuntu, the philosophy behind Docker etc. If you’re interested in that, please visit the Internet. I will focus on the “happy flow” and only when relevant mention where I firstly went wrong.

Installing the InterSystems FHIRserver

Phase 1. Ubuntu 64-bits

1. Format your SD-card and put the 64-bits version of Ubuntu for ARM-processors on it. The compressed version was named “ubuntu-20.04.3-preinstalled-server-arm64+raspi.img.xz” in my case and you’ll find it on http://cdimage.ubuntu.com . (Of course you have to decompress the .img file before putting it on the SD-card!).

Don’t use RaspberryPi-imager because that gives an incorrect version. I used Win32DiskImager.

2. Start your Raspberry with the new image. Change (and memorize!) the password for the ubuntu-account. wachtwoord van het ubuntu-account.

3. Your Raspberry is running Ubuntu now, but we are not ready yet.

Look at this:

 This Ubuntu-version still is 32-bit !

We’re going to cure that now

1. Log in on your Pi

2. sudo rpi-update

3. sudo reboot now

5. sudo copy /boot/config.txt /boot/config-ok.txt (in case of errors we’ve got an escape)

6. sudo nano /boot/config.txt   Add under [pi4] the text : arm_64bit=1

8. Save boot/config.txt (in nano: <ctr>O )

9. Exit from nano (<ctrl>X)

10. sudo reboot now

And now we’re running 64 bits. See for yourself:

 

Make a notation of your Pi’s IP-address (sudo hostname -I where I is the I from "Island")  and you can put it away since in Ubuntu SSH is enabled by default.

Phase 2: Docker

1. sudo curl -fsSL https://get.docker.com -o get-docker.sh

2. sudo sh get-docker.sh 

This will result (after a while) in an extensive notification of Docker about using it as a “non-priviliged user” .

3. sudo usermod -aG docker $USER

4. Log off and log on again

5. docker container run hello-world

Docker now looks for a “hello-world” image on your system. It will not find it there and than will download it from the Docker-repository. After that Docker puts the image in a container on the Pi and starts the “hello-world” image.

You can see that confirmed by another block of text from Docker, including the “Hello from Docker” welcome message.

Fase 3: The Docker image for InterSystems’ IRIS FHIRserver

1.  Give the following command in one time:

sudo docker run --name my-iris -d --publish 9091:1972 --publish 9092:52773 containers.intersystems.com/intersystems/irishealth-community-arm64

Now a lot of events happen after eachother:

  • Docker will get the “community edition” from Irishealth and puts it in your local Docker repository.
  • Docker starts the community edition in a docker container named “my-iris”.
  • Docker maps port 1972 of IRIS, running in the container, to port 9091 of your Raspberry.
  • Following the same pattern, port 52773 of IRIS (in the container) becomes port 9092 on your Raspberry.

You can see what happened by:

2. sudo docker container ls  But there is another, much more impressive way to experience it.

Phase 4. Start the InterSystems IRIS for Health Fhirserver

Start a webbrowser in your network, for example on your PC en go to:

       <ip-address-of-your-Raspberry>:9092/csp/sys/UtilHome.csp .

You’ll see the managementportal of IRIShealth. The portal automatically adjusts to the language on your PC.

The standard account is _SYSTEM (with a leading underscore) and the initial password is SYS (without underscore). IRIS requires to change the password immediately.

Now you’re able to configure the IRIS for Health FHIRserver and start it up, following the instructions on: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI...

You have to configure a “Foundation” and to define an “Endpoint” (FHIR 3 or 4).

The “endpoint” will result in the URI on which you can access the FHIRserver. In my case the “Patient” resource is on http://192.168.1.29:9092/csp/healthshare/fhironpi/fhir/r4/Patient (doesn’t work from outside!)

Conclusion

Has this been worth the trouble? Yes, more than that! To start with: there wasn't much trouble. I didn't succeed with Raspbian, but that was solved easily. And having the IRIS-for-health platform running on device like a Raspberry Pi is impressive. All the dashboards (DeepSee), dataconversion-tools, Ensemble (an Enterprise Service Bus plus a lot of extra tools), CSP-pages and Caché (a multi-dimensional database) seem to be available to experiment with and even I.know for natural language processing is visible in the management portal. The IRIS-for-health platform offers much more than a FHIRserver allone and far too much to describe in one article.

For me personally IRIS-for-health has an extra bonus since I  worked (as an architect) with Ensemble almost as soon as it was there and apart from that IRIS-for-health's earliest start was in the second half of the 2-th century. The MUMPS development environment for healthcare applications (MUMPS: Massachusetts General Hospital Utility Multi-Programming System) ran mostly on VAX computer systems of Digital Corp. And my professional career in IT started at that time with VAXes.

MUMPS, Caché, Ensemble and today the IRIS-for-Health platform have great stability  and require relatively modest support and maintenance. The documentation of the InterSystems products is extensive and easy to find.

I will experiment more with IRIS and the FHIRserver and I promise to at least publish one more article: about my "struggle" with a strict adherence to the FHIR-standard!

Stay healthy, keep thinking, play on! 

Bob

Discussion (7)1
Log in or sign up to continue

Hi Yankai, thank you. The InterSystems FHIR server as I wrote about is now running for 20 days without any interruption. It is -of course- not heavily used, only for my own testing purposes. A Raspberry Pi is IMHO not suitable for critical applications like airplane-control,  critical healthcare systems etc and I don't think InterSystems will support "IRIS on Raspberry" . But the combination of the Raspberry Pi and IRIS appears to me, based on my modest usage,  as to be pleasantly stable. Which is in line with my earlier experiences with Caché and Ensemble.

ubuntu@Ubuntu01:~$ uptime
 15:26:47 up 20 days,  3:19,  1 user,  load average: 0.02, 0.03, 0.00
 

Thank you Ravi. Some use cases could probably be found in (portable) healthcare devices that don't need 99.998% of 24x365 availability. I don't think stripping down functionallity would be necessary since this would require development and maintenance of a "special Raspberry" version of IRIS. The licensing part would be another story ;-).  But because small computers like the Raspberry Pi (and Raspberry Zero) are so powerful today (and inexpensive) a lot of new applications can be thought of. If there are situations (I think mostly in the care/healthcare area) where FHIR and integration are needed in a small platform this certainly could be an option. I don't think however that for really critical applications, where health, lifes or welbeing can be dependant of this would be an advisable direction. And -from another perspective- we should take care not to desperately find a problem for this solution. Over all I'm already very happy with the opportunity to play around with IRIS and FHIR without big expenses. 

IRIS isn't suitable (nor meant to be) running on the edge or inside containers for that matter.
As its name implies it is a Data *Platform* a framework on its own for running large-scale mission-critical applications.
IRIS Agents or ECP Clients or whatever you will call them could extend IRIS to the realm of containers and edge applications.

Even in the global masters rewards where they have an RPi available with IRIS preinstalled, it's running on Ubuntu, not Raspbian, so that part didn't surprise me.

As python becomes more widely adopted in IRIS and word gets out about it, I won't be surprised if some of the RPi community shows up with some pretty cool projects using IRIS Community since a lot of them are python developers. InterSystems tends to lean into health care as the main thing, but there you've got a device that you can connect all kinds of sensors and gizmos to that may lend themselves well to other fields. Let's not be hasty dismissing it because it can't run an entire hospital.