Question
Rob Tweed · Nov 25, 2020

IRIS Community Edition Docker container for ARM?

I see this available as an option on Docker Hub:

What ARM platform(s) is it designed for?  When I saw it available, I rather hoped it might work on a Raspberry Pi but it failed to start!  

docker pull store/intersystems/iris-community-arm64:2020.4.0.524.0
20
2 0 15 195

Replies

Thanks Vic. Yes that was my conclusion too - it seems to be for AWS EC2 ARM Graviton processors.  The question is whether it ought to work on other ARM chips too? 

As far as ARM support for IRIS is concerned, Raspberry Pi would be really handy to have as it's a very low cost but extremely potent platform, and out there in huge numbers (eg you should see how many I have! :-).  I know some work on an RPi/ARM port was done a while ago by an ISC intern but don't know what, if anything, became of it.

Apple M1 would be the other obvious ARM platform of course :-)

Could you provide what error you got?

I've tried to run it with Qemu, on GitHub Actions, or locally on macOS (Docker on macOS supports running ARM64 images as well)

I don't have RPi, yet. Did not manage to play with it, but at least I've managed to run it on AWS EC2 ARM64 instance.

My messages.log when failed was looked like this.

Dmitry Maslennikov, [16.11.20 13:29]
11/16/20-09:09:14:181 (957) 0 [Generic.Event] Global buffer setting requires attention.  Auto-selected 25% of total memory.
11/16/20-09:09:14:302 (957) 0 [Generic.Event] Allocated 1557MB shared memory: 1234MB global buffers, 123MB routine buffers
11/16/20-09:09:14:396 (957) 0 [WriteDaemon.UsingWIJFile] Using WIJ file: /usr/irissys/mgr/IRIS.WIJ
11/16/20-09:09:14:398 (957) 0 [WriteDaemon.CreatingNewWIJ] Creating a new WIJ file
11/16/20-09:09:14:862 (957) 0 [WriteDaemon.CreatedNewWIJ] New WIJ file created
11/16/20-09:09:14:897 (957) 0 [Generic.Event] 
Startup of InterSystems IRIS [IRIS for UNIX (Ubuntu Server LTS for ARM64 Containers) 2020.4 (Build 524U) Thu Oct 22 2020 16:49:47 UTC]
       in ./
       with mgr: /usr/irissys/mgr
       with wij: /usr/irissys/mgr/IRIS.WIJ
       from: /usr/irissys/mgr/
  OS=[Linux], version=[#1 SMP Fri May 8 23:03:06 UTC 2020], release=[5.4.39-linuxkit], machine=[aarch64]
  nodename=[buildkitsandbox].
  numasyncwijbuf: 8, swdwrtmax: 64, wijdirectio: on, synctype: 3
  System Initialized.
11/16/20-09:09:14:933 (972) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38
11/16/20-09:09:14:936 (966) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38
11/16/20-09:09:14:937 (972) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38...(repeated 63 times)
11/16/20-09:09:14:937 (972) 1 [Generic.Event] Write daemon asynchronous I/O disabled dueto failure allocating control structures.
11/16/20-09:09:14:940 (966) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38...(repeated 63 times)
11/16/20-09:09:14:940 (966) 1 [Generic.Event] Write daemon asynchronous I/O disabled dueto failure allocating control structures.
11/16/20-09:09:14:947 (960) 0 [WriteDaemon.Started] Write daemon started.
11/16/20-09:09:14:948 (960) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38
11/16/20-09:09:14:949 (960) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38...(repeated 7 times)
11/16/20-09:09:14:949 (960) 1 [Generic.Event] Write daemon asynchronous I/O disabled dueto failure allocating control structures.
11/16/20-09:09:15:354 (982) 0 [Database.MountedRW] Mounted database /usr/irissys/mgr/ (SFN 0) read-write.
11/16/20-09:09:15:397 (982) 3 [Generic.Event] Process 982 (JobType=Interactive job (application mode),Dumpstyle=0,Directory='/usr/irissys/mgr/') caught signal 11. 
11/16/20-09:09:15:404 (982) 3 [Generic.Event] Parent process will clean up and halt
11/16/20-09:09:15:405 (982) 3 [Generic.Event] If core dumps are enabled, a core file will be created by process 985 in the location specified by the system configuration.

Dmitry

What I see on the Raspberry Pi is this if I try to start it (in foreground mode so I can see the error):

$ docker run --name my-iris -it --rm -p 9091:1972 -p 9092:52772 -p 9093:52773 -p 9094:7041 store/intersystems/iris-community-arm64:2020.3.0.221.0
standard_init_linux.go:211: exec user process caused "exec format error"

Just curious, which RPi you are tring to use?

The latest model RPi 4 running the standard Raspian OS.  I have other Docker containers running fine on it - eg my rtweed/qewd-server-rpi and rtweed/mgweb-rpi ones (available on Docker Hub)

I've not tried the 3, but really there shouldn't be any difference as far as Docker is concerned - all my RPi containers work fine on the 3 and 4.

RPi 4 should be fine, it's just the first edition which got 64 bit, RPi 3 was 32 bit and it would not run IRIS anyway.

But the issue may be in Raspbian, which I suppose is 32 bit, while 64 bit yet in beta. And you have to install 64 bit version of Raspbian or Ubuntu 20.04 64 bit

Actually I think that might be the answer - uname -m on the RPi4 I've been using says armv7l which means 32 bit - it should say aarch64.  The version of Raspbian is pretty old on that particular RPi4 and I'm not sure if they have now put out a 64-bit version of Raspbian?

Now I have another RPi4 (I did say I had loads of them, right!) running Ubuntu Server 20.04 which I believe is a 64 bit version - I'll give it a try on that one and report back

Rob

Bingo - nice find, Dmitry

Here we go on Ubuntu Server 20.04 on my RPi4:

ubuntu@ubuntu:~$ sudo docker run --name my-iris -it --rm -p 9091:1972 -p 9092:52772 -p 9093:52773 -p 9094:7041 store/intersystems/iris-community-arm64:2020.3.0.221.0
[WARN] No init process detected!  This container may accumulate zombie processes if run for a long time.  Consider using "docker create --init ..." or equivalent.
[INFO] Starting InterSystems IRIS instance IRIS...
[INFO] This copy of InterSystems IRIS has been licensed for use exclusively by:
InterSystems IRIS Community
Copyright (c) 1986-2020 by InterSystems Corporation
Any other use is a violation of your license agreement
Starting IRIS

11/26/20-11:02:27:145 (361) 0 [Generic.Event] Global buffer setting requires attention.  Auto-selected 25% of total memory.
11/26/20-11:02:27:436 (361) 0 [Generic.Event] Allocated 449MB shared memory: 227MB global buffers, 80MB routine buffers
11/26/20-11:02:27:588 (361) 0 [WriteDaemon.UsingWIJFile] Using WIJ file: /usr/irissys/mgr/IRIS.WIJ
11/26/20-11:02:27:588 (361) 0 [WriteDaemon.CreatingNewWIJ] Creating a new WIJ file
11/26/20-11:02:34:614 (361) 0 [WriteDaemon.CreatedNewWIJ] New WIJ file created
11/26/20-11:02:34:629 (361) 0 [Generic.Event]
Startup of InterSystems IRIS [IRIS for UNIX (Ubuntu Server LTS for ARM64 Containers) 2020.3 (Build 221U) Thu Oct 1 2020 15:11:45 UTC]
        in /usr/irissys/bin/
        with mgr: /usr/irissys/mgr
        with wij: /usr/irissys/mgr/IRIS.WIJ
        from: /usr/irissys/mgr/
  OS=[Linux], version=[#25-Ubuntu SMP PREEMPT Thu Oct 15 13:31:49 UTC 2020], release=[5.4.0-1022-raspi], machine=[aarch64]
  nodename=[b6deee189a6f].
  numasyncwijbuf: 8, swdwrtmax: 64, wijdirectio: on, synctype: 3
  System Initialized.
11/26/20-11:02:34:642 (362) 0 [WriteDaemon.Started] Write daemon started.
11/26/20-11:02:45:083 (373) 0 [Database.MountedRW] Mounted database /usr/irissys/mgr/ (SFN 0) read-write.
11/26/20-11:02:45:216 (373) 0 [Utility.Event] Instance 'IRIS' starting on node b6deee189a6f by user irisuser
11/26/20-11:02:45:216 (373) 0 [Utility.Event] Using parameters from file '/usr/irissys/iris.cpf'
11/26/20-11:02:45:221 (373) 0 [Utility.Event] Loading DLLs
11/26/20-11:03:31:951 (373) 0 [Database.MountedRO] Mounted database /usr/irissys/mgr/irislib/ (SFN 1) read-only. Database label is marked read-only.
11/26/20-11:03:32:147 (373) 0 [Utility.Event] Switching to temporary %SYS Namespace
11/26/20-11:03:32:340 (373) 0 [Utility.Event] Loading Locale enuw (English, United States, Unicode) from objects
11/26/20-11:03:34:020 (373) 0 [Database.MountedRW] Mounted database /usr/irissys/mgr/iristemp/ (SFN 2) read-write.
11/26/20-11:03:34:073 (373) 0 [Utility.Event] /usr/irissys/mgr/iristemp/ initialized as IRISTEMP
11/26/20-11:03:34:080 (373) 0 [Utility.Event] Switching to default %SYS Namespace
11/26/20-11:03:34:199 (390) 0 [Utility.Event] Log Monitor Started
11/26/20-11:03:34:334 (391) 0 [Utility.Event] Clean Daemon Started
11/26/20-11:03:34:382 (373) 1 [Utility.Event] Configuration file /usr/irissys/iris.cpf is not the same as when last shut down
11/26/20-11:03:35:657 (373) 0 [Utility.Event] Updating configuration information from /usr/irissys/iris.cpf
11/26/20-11:03:35:759 (373) 0 [Utility.Event] Performing Journal Recovery
11/26/20-11:03:35:764 (373) 0 [Utility.Event] Graceful system shutdown, journal restore not required
11/26/20-11:03:35:765 (373) 0 [Utility.Event] Graceful system shutdown, transaction rollback not required
11/26/20-11:03:35:790 (373) 0 [Utility.Event] START: /usr/irissys/mgr/journal/20201126.001
11/26/20-11:03:35:853 (373) 0 [Generic.Event] INTERSYSTEMS IRIS JOURNALING SYSTEM MESSAGE
Journaling started to: /usr/irissys/mgr/journal/20201126.001
11/26/20-11:03:35:855 (373) 0 [Utility.Event] Journaling to /usr/irissys/mgr/journal/20201126.001 started.
11/26/20-11:03:35:979 (373) 0 [Utility.Event] Processing Startup section
11/26/20-11:03:36:001 (392) 0 [Utility.Event] Purging old application errors
11/26/20-11:03:36:246 (373) 0 [Utility.Event] Initializing Security system
11/26/20-11:03:37:325 (392) 0 [Database.MountedRW] Mounted database /usr/irissys/mgr/irislocaldata/ (SFN 3) read-write.
11/26/20-11:03:37:495 (373) 0 [Utility.Event] Processing Network section
11/26/20-11:03:37:502 (373) 0 [Utility.Event] Activating Network
11/26/20-11:03:37:756 (373) 0 [Utility.Event] Processing Databases section
11/26/20-11:03:37:959 (373) 0 [Database.MountedRW] Mounted database /usr/irissys/mgr/irisaudit/ (SFN 4) read-write.
11/26/20-11:03:37:978 (373) 0 [Utility.Event] Processing Namespaces section
11/26/20-11:03:37:979 (373) 0 [Utility.Event] Namespaces are up to date
11/26/20-11:03:37:979 (373) 0 [Utility.Event] Activating namespaces
11/26/20-11:03:37:991 (373) 0 [Utility.Event] Activating new namespace map
11/26/20-11:03:38:157 (373) 0 [Utility.Event] Namespace changes have been activated
11/26/20-11:03:38:363 (373) 0 [Utility.Event] Starting Super Server on port 1972
11/26/20-11:03:38:406 (373) 0 [Utility.Event] Network Lock Upload Phase Starting
11/26/20-11:03:38:410 (373) 0 [Utility.Event] Lock Upload Phase Complete
11/26/20-11:03:38:410 (373) 0 [Utility.Event] Processing Miscellaneous section
11/26/20-11:03:38:632 (397) 0 [Utility.Event] LMF Info:  Licensed for 5 users.
11/26/20-11:03:38:644 (398) 0 [Utility.Event] Starting Servers
11/26/20-11:03:38:644 (373) 0 [Generic.Event] init_gcr_seed:  gen_crypt_rand seeded from /dev/urandom:  64 bytes.
11/26/20-11:03:38:644 (373) 0 [Utility.Event] Processing Devices section
11/26/20-11:03:38:663 (373) 0 [Utility.Event] Processing DeviceSubTypes section
11/26/20-11:03:38:664 (373) 0 [Utility.Event] Processing MagTape section
11/26/20-11:03:38:684 (373) 0 [Utility.Event] Processing IO section
11/26/20-11:03:38:691 (373) 0 [Utility.Event] Processing SQL section
11/26/20-11:03:38:806 (373) 0 [Generic.Event] Auditing to /usr/irissys/mgr/irisaudit/
11/26/20-11:03:38:978 (373) 0 [Utility.Event] Executing ^ZSTU routine
11/26/20-11:03:38:984 (373) 0 [Utility.Event] Executing ^%ZSTART routine
11/26/20-11:03:38:985 (373) 0 [Utility.Event] Enabling logons
11/26/20-11:03:40:649 (398) 0 [Utility.Event] Private webserver started on 52773
11/26/20-11:03:40:650 (398) 0 [Utility.Event] Processing Shadows section (this system as shadow)
11/26/20-11:03:40:806 (373) 0 [Database.MountedRW] Mounted database /usr/irissys/mgr/user/ (SFN 5) read-write.
11/26/20-11:03:40:812 (398) 0 [Utility.Event] Processing Monitor section
11/26/20-11:03:41:242 (547) 0 [Utility.Event] Starting TASKMGR
11/26/20-11:03:41:404 (548) 0 [Utility.Event] [SYSTEM MONITOR] System Monitor started in %SYS
11/26/20-11:03:41:451 (398) 0 [Utility.Event] Shard license: 0
11/26/20-11:04:00:517 (373) 0 [Database.MountedRO] Mounted database /usr/irissys/mgr/enslib/ (SFN 6) read-only. Database label is marked read-only.
11/26/20-11:04:00:527 (373) 0 [Utility.Event] Initializing Interoperability during system startup
[INFO] ...started InterSystems IRIS instance IRIS

and then in another process I can shell in and run

iris terminal IRIS

and access the IRIS shell and database!

Amazing!

It's pretty fast two - I do have a pretty fast micro SD in the RPi4 but it looks like you can set 0.5m global nodes/sec in a very simple test:

USER>s s=$p($zts,",",2) f i=1:1:1000000 s ^rob(i)=$r(1000) i i=1000000 w $p($zts,",",2)-s
2.072394


Not bad for a $35 computer :-)

$ docker run --init --name my-iris -it --rm -p 9091:1972 -p 9092:52772 -p 9093:52773 -p 9094:7041 store/intersystems/iris-community-arm64:2020.4.0.524.0                                                                              

[INFO] Starting InterSystems IRIS instance IRIS...
[INFO] This copy of InterSystems IRIS has been licensed for use exclusively by:
InterSystems IRIS Community
Copyright (c) 1986-2020 by InterSystems Corporation
Any other use is a violation of your license agreement
Starting IRIS 

Sign-on inhibited.
See messages.log for details. 

[ERROR] Unknown QEMU_IFLA_INFO_KIND ipip
Unknown QEMU_IFLA_INFO_KIND ip6tnl
qemu: uncaught target signal 6 (Aborted) - core dumped
11/26/20-10:05:11:295 (954) 0 [Generic.Event] Global buffer setting requires attention.  Auto-selected 25% of total memory.
11/26/20-10:05:11:508 (954) 0 [Generic.Event] Allocated 1557MB shared memory: 1234MB global buffers, 123MB routine buffers
11/26/20-10:05:12:118 (954) 0 [WriteDaemon.UsingWIJFile] Using WIJ file: /usr/irissys/mgr/IRIS.WIJ
11/26/20-10:05:12:119 (954) 0 [WriteDaemon.CreatingNewWIJ] Creating a new WIJ file
11/26/20-10:05:13:081 (954) 0 [WriteDaemon.CreatedNewWIJ] New WIJ file created
11/26/20-10:05:13:205 (957) 0 [WriteDaemon.Started] Write daemon started.
11/26/20-10:05:13:206 (957) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38
11/26/20-10:05:13:222 (964) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38
11/26/20-10:05:13:222 (963) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38
11/26/20-10:05:13:224 (957) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38...(repeated 63 times)
11/26/20-10:05:13:224 (957) 1 [Generic.Event] Write daemon asynchronous I/O disabled dueto failure allocating control structures.
11/26/20-10:05:13:228 (964) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38...(repeated 63 times)
11/26/20-10:05:13:228 (964) 1 [Generic.Event] Write daemon asynchronous I/O disabled dueto failure allocating control structures.
11/26/20-10:05:13:228 (963) 2 [Generic.Event] create_iotd_pool failed because LKIO_SETUP returned error 38...(repeated 63 times)
11/26/20-10:05:13:228 (963) 1 [Generic.Event] Write daemon asynchronous I/O disabled dueto failure allocating control structures.
11/26/20-10:05:15:881 (954) 0 [Generic.Event]
Startup of InterSystems IRIS [IRIS for UNIX (Ubuntu Server LTS for ARM64 Containers) 2020.4 (Build 524U) Thu Oct 22 2020 16:49:47 UTC]
    in ./
    with mgr: /usr/irissys/mgr
    with wij: /usr/irissys/mgr/IRIS.WIJ
    from: /usr/irissys/mgr/
  OS=[Linux], version=[#1 SMP Fri May 8 23:03:06 UTC 2020], release=[5.4.39-linuxkit], machine=[aarch64]
  nodename=[dbac38c4a18e].
  numasyncwijbuf: 0, swdwrtmax: 0, wijdirectio: on, synctype: 3
  System Initialized.
11/26/20-10:05:17:582 (979) 0 [Database.MountedRW] Mounted database /usr/irissys/mgr/ (SFN 0) read-write.
11/26/20-10:05:18:285 (979) 3 [Generic.Event] Process 979 (JobType=Interactive job (application mode),Dumpstyle=0,Directory='/usr/irissys/mgr/') caught signal 11.
11/26/20-10:05:18:793 (979) 3 [Generic.Event] If core dumps are enabled, a core file will be created by process 982 in the location specified by the system configuration.
11/26/20-10:05:18:802 (979) 3 [Generic.Event] Parent process will clean up and halt
[ERROR] See /usr/irissys/mgr/messages.log for more information
[FATAL] Error starting InterSystems IRIS