Domino on Linux/Unix, Troubleshooting, Best Practices, Tips and more ...

alt

Daniel Nashed

Running Nomad Web on Ubuntu Touch Phone in a Container

Daniel Nashed – 8 October 2026 22:39:34

This is the next level working with an Ubuntu Touch phone.
I have crafted an Ubuntu X Window Docker container and added RDP support.

Now I can RDP into my Ubuntu phone and start Nomad web in Firefox.

All the components are running on the same phone and there is still room for mow applications.

What I have tested first are the most challenging parts.
Normal Docker containers will be much easier to deploy.


I have an Yubikey working inside a container. And there are many other ARM applications in a Docker container which will work out of the box.
The Desktop container was built on another ARM machine and pulled down to the phone.


Image:Running Nomad Web on Ubuntu Touch Phone in a Container


 Ubuntu 

Ubuntu Phone - Checking CPU state and power consumtion

Daniel Nashed – 7 October 2026 21:32:26

It is getting more interesting. The phone has 8 CPU cores.

- 4 Efficiency cores

- 4 Performance cores with a prime core with a bit more power


You can turn off individual cores. But that does not change idle power consumption.

ChatGPT wrote a nice script for me to include also battery and USB status.

That's pretty cool for performance / efficiency spelunking.

In my case I hooked up the phone with a power bank:

Turning off CPUs does not make a big difference. It looks like the kernel is pretty effective.

I might later tune maximum CPU frequency.
And I might add scripts to a GitHub project later.

What I found so far is pretty interesting.

I have a second script which shows the CPU/power information per interval.



Image:Ubuntu Phone - Checking CPU state and power consumtionImage:Ubuntu Phone - Checking CPU state and power consumtion

 Domino  Ubuntu 

Run Domino on a phone

Daniel Nashed – 7 October 2026 14:19:41

Run Domino on a phone


The idea of running Domino on a phone came up when I was looking for a new small environment, similar to a Raspberry Pi.

There is no Domino support for ARM yet, but I have been looking into the ARM platform for other types of applications for quite a while. For example, NGINX and containers in general work very well on ARM.


Most of my projects already work on ARM, and I have a couple of ARM-based production servers running today.

For smaller emergency environments, I was looking for an even smaller form factor. My first idea was a tablet. But then, during a discussion with ChatGPT, the Ubuntu Touch project came up.

Ubuntu Touch only supports a limited number of phone models because it needs to be specifically adapted to the hardware of each mobile device.


The phone we picked is particularly interesting and is currently available refurbished. I got mine this week:

https://devices.ubuntu-touch.io/device/spacewar/

Getting Ubuntu Touch and Docker running


Switching the phone to Ubuntu Touch was the first adventure.

Once stage one was complete, I started looking into adding Docker. Installing additional system software on Ubuntu Touch can be challenging because the operating system itself is mostly read-only.

But Docker can be installed using Snap.


Once Docker was running and I had some native ARM containers up and running, another idea came up:


Why not run the x64/amd64 version of Domino in a container using emulation on the ARM phone?


The phone has eight CPU cores and 8 GB of RAM, which leaves plenty of resources for experimenting with amd64 emulation on ARM.

And that's where things started to get really interesting...


I’d continue from here with the actual emulation setup, then the first successful Domino startup, and finally a short section on performance and what this means in practice.


That gives the post a nice progression: phone → Ubuntu Touch → Docker/ARM → amd64 emulation → Domino.



IMG_5177.jpeg style=  IMG_5180.jpeg style=
 Ubuntu  Docker 

Reproducible container builds on Ubuntu - Include phased updates

Daniel Nashed – 1 October 2026 20:07:45
Ubuntu is phasing out some updates and only send them to a fractions of the machines.
Security updates are always included. For normal servers using phased updates is perfectly OK.

But for container builds it makes sense to always update all packages to have a reproducible build.

The command can be also used manually:

/usr/bin/apt-get -o APT::Get::Always-Include-Phased-Updates=true upgrade -y

I am adding it to the container build just for Ubuntu.

And I am cleaning up older versions for known distributions which are not available any more. Like Debian11 and Debian10 along with soon out of support Ubuntu 22.04 LTS




 Domino  Ubuntu 

Updating Domino and Ubuntu

Daniel Nashed – 1 October 2026 18:55:44

It has never been easier to update Domino and the OS stack -- provided you use the right base OS.



Domino Autoupdate


Domino introduced Autoupdate in 14.5. It allows to update Domino with a couple of clicks.

Currently this only updates the Domino release, fixpack and interim fix.
Later it will potentially update other packages like Verse etc.


It works on Windows and Linux.


Domino Container Image


The container image supports all add-ons. And updates a Domino server in seconds.

  • Built an image
  • Eventually distribute it to a registry to be used domain wide (like a Harbor registry)
  • Shutdown the container, remove it and start it with the new image -> Done
     
Using a container image makes every installation clean and reproducible.
You can build it once and test it in a QE environment before deploying it in production.


Updating Ubuntu


Every distribution is a bit different. My favorite distribution is Ubuntu.

It has a couple of benefits:

  • Very current packages and a good coverage of packages without extra repositories
  • Native ZFS support
  • Easy to use firewall
  • Optional commercial support
     
And there is also an easy release upgrade path from one LTS release to the next release.

I have just upgraded all my production servers from Ubuntu 24.04.x LTS to 26.04.1 LTS.


Even if you don't use Domino Autoupdate, it is still a good way to find out Domino version and also provides details about the Linux distribution, kernel and glibc version.



Image:Updating Domino and Ubuntu
 ACME  BSI  Certs 

Free ACME CAs, BSI RSA Requirements and Having a Plan B

Daniel Nashed – 1 October 2026 15:00:33

Disclaimer: The Blog post content is not well formatted, because I gave up after 30 minutes with the Domino Blog template.

The text copied from somewhere else and reformatted at least does not work.
I can't spend more time on this today. This is breaking my nerves.

----


A customer raised a concern about the RSA-2048 intermediate CA used by Let's Encrypt.

There is nothing wrong with RSA-2048 from a current public WebPKI/browser perspective.
However, the German BSI TR-02102-2 recommends a minimum RSA key length of 3000 bits for certificate-signing keys. In practice, this means using RSA-3072 or larger.

BSI TR-02102-2 – TLS recommendations:

https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRich tlinien/TR02102/BSI-TR-02102-2.pdf?__blob=publicationFile

This prompted me to test several free ACME providers with RSA-4096 certificates and look at the complete certificate chain, not just the server certificate.



ACME CA results


Let's Encrypt


- Free ACME: Yes

- Wildcard: Yes

- RSA CA chain: includes RSA-2048

- BSI RSA >=3000: No


Google Trust Services


- Free ACME: Yes

- Wildcard: Yes

- RSA CA chain: includes RSA-2048

- BSI RSA >=3000: No


ZeroSSL


- Free ACME: Yes

- Wildcard: Yes

- RSA CA chain: RSA-3072 / 4096 throughout

- BSI RSA >=3000: Yes


Actalis


Free ACME: Yes

- Wildcard: No (Not free at least)

- RSA CA chain: RSA-4096 throughout*

- BSI RSA >=3000: Yes


*Based on the certificate chain returned in my test.


Let's Encrypt


Let's Encrypt's current Generation Y RSA hierarchy uses RSA-2048 issuing intermediates.

With an RSA-4096 server certificate, the chain looks like this:

  • RSA-4096  Server certificate
  • RSA-2048  Let's Encrypt YR1
  • RSA-4096  Root YR
  • RSA-4096  ISRG Root X1
     
The important part is YR1. Even though the server certificate itself uses RSA-4096, the certificate chain contains an RSA-2048 issuing CA.

Therefore, increasing the RSA key size of the server certificate doesn't solve the BSI requirement.

Let's Encrypt could address this by introducing new RSA-3072 or RSA-4096 issuing intermediates and moving RSA issuance to them.
The current YR1/YR2/YR3 intermediates use RSA-2048 keys, so this would require new intermediate CA keys and certificates.


Let's Encrypt certificate hierarchy:

https://letsencrypt.org/certificates/




Google Trust Services


Google Trust Services also provides free ACME certificates including wildcard certificates.

I tested an RSA-4096 wildcard certificate. The resulting chain was:

  • RSA-4096  Server certificate
  • RSA-2048  Google Trust Services WR1
  • RSA-4096  GTS Root R1
  • RSA-2048  GlobalSign Root CA

Again, the relevant issuing CA, WR1, uses RSA-2048.

Google Trust Services therefore doesn't solve this particular requirement when using its current RSA certificate hierarchy.

Google Trust Services certificate repository:

https://pki.goog/repository/




ZeroSSL – RSA with wildcard support


ZeroSSL is the interesting result when RSA certificates are required.

ZeroSSL supports free ACME wildcard certificates, and the complete RSA certification path returned in my test uses at least RSA-3072:

  • RSA-4096  Server certificate
  • RSA-3072  ZeroSSL RSA DV SSL CA 2
  • RSA-4096  Sectigo Public Server Authentication Root R46
  • RSA-4096  USERTrust RSA Certification Authority
     
There is therefore no RSA-2048 certificate anywhere in this certification path.

This makes ZeroSSL a good option when RSA, wildcard certificates and the BSI RSA key-length recommendation are all requirements.

ZeroSSL ACME documentation:

https://zerossl.com/documentation/acme/



Actalis – a European alternative

Actalis is another interesting ACME provider, particularly for European customers. Actalis is based in Italy and provides free ACME certificates.
In my test, the complete RSA chain used RSA-4096, so it also meets the BSI RSA key-length recommendation.

The important limitation is that Actalis currently doesn't provide wildcard certificates through its free ACME service.
It is nevertheless an interesting European alternative for environments where wildcard certificates aren't required.

Actalis ACME:

https://www.actalis.com/acme-certificates.aspx



What about ECDSA?


There is another straightforward option: use ECDSA instead of RSA.

Let's Encrypt's current ECDSA hierarchy avoids the RSA-2048 issue. If all clients and applications in your environment support ECDSA certificates, this is a good option.

This gives us a fairly simple practical result:

  • ECDSA + wildcard → Let's Encrypt
  • RSA ≥3072 throughout + wildcard → ZeroSSL
  • European CA without wildcard → Actalis


Have a Plan B


There is another lesson from this exercise which might be even more important than the RSA key sizes:

Don't depend on a single ACME CA.

When using a free public ACME service, a customer typically doesn't have an individual contract or SLA with that CA. Availability, policies, certificate hierarchies, rate limits or service conditions can change.
ACME is a standard protocol, so there is little reason to make certificate infrastructure unnecessarily dependent on one provider.

For example, even if Let's Encrypt is your normal CA, having a ZeroSSL ACME account configured and tested gives you an alternative. The reverse applies when ZeroSSL is your primary provider.

The important point is to test the alternative before you actually need it.




Domino CertMgr makes this easy


HCL Domino CertMgr supports the ACME providers discussed here and makes it easy to configure multiple ACME accounts centrally in
certstore.nsf.
Certificate requests aren't tied to Let's Encrypt. Different ACME providers can be configured and used depending on the requirements of a particular certificate.

That makes a multi-provider strategy straightforward:

  • ECDSA → Let's Encrypt
  • RSA → ZeroSSL
  • Plan B → Configure and test both
     
Actalis can additionally be useful as a European alternative where wildcard certificates aren't required.
Having more than one ACME provider configured and tested avoids unnecessary dependency on a single free service with which the customer might not have any contractual relationship.

For production certificate automation, having a working Plan B is a good idea regardless of which CA is the primary provider.


 Domino  Linux 

Economically Right-Sizing Domino Server Memory on Linux

Daniel Nashed – 23 September 2026 10:18:37

More RAM is generally good for a Domino server. But more RAM is not automatically a good investment.
This matters more today because RAM has become significantly more expensive again, particularly when building servers with large memory configurations.

A useful concept from economics applies surprisingly well to server sizing: diminishing marginal utility.
The first additional GB of RAM can provide significant performance benefits. The next GB still helps, but usually a little less. Eventually, adding another 32 GB might provide only a small additional benefit.

The interesting question therefore isn't:


How much RAM can Domino use?


It is:


How much RAM provides a meaningful benefit for a workload?




On Linux, unused RAM normally doesn't remain unused. Linux uses available memory as filesystem cache.
A 64 GB Domino server might therefore look approximately like this:



64 GB RAM


8–10 GB   Domino + other processes
~50 GB     filesystem cache
remainder kernel / other usage

It is easy to look at this and conclude that the machine benefits from all 64 GB.
But there is an important distinction:


Memory being used is not the same as memory being required.


Linux will happily use additional RAM to cache filesystem data whenever memory is available.


Diminishing Marginal Utility


The first GBs of filesystem cache are extremely valuable because they contain the most frequently accessed data.
As the cache grows, increasingly less frequently accessed data is retained. Additional RAM still provides a benefit, but the incremental benefit gets smaller.


Conceptually:





Filesystem cache        Marginal benefit

8 GB                   Very high
16 GB                   High
24 GB                   Significant
32 GB                   Useful
48 GB                   Lower
64 GB                   Lower still



The numbers are only illustrative. The actual curve depends on the workload.The important principle is:


Doubling the filesystem cache does not double its performance benefit.


In my tests on one busy Domino mail server, for example, Linux was using around 55 GB of filesystem cache.
Reducing the available cache substantially did not result in a corresponding dramatic increase in physical disk I/O.
Even around 24 GB of cache, the server continued to behave very well.

That suggests that much of the additional cache was useful because it was available—not because the workload actually required it.



Different Domino Workloads Are Different

A mail server, Traveler server, directory server and SMTP server do not have the same memory requirements.
A busy mail server accessing many NSF databases can benefit substantially from filesystem cache.
Traveler is quite different. Its important memory consumers include the JVM, Domino HTTP and native process memory, while an HA configuration uses an external database for Traveler data.

Providing huge amounts of RAM to a Traveler VM simply to create a large filesystem cache may therefore provide little additional benefit.



RAM Isn't Cheap Anymore

For years, a common argument was: RAM is cheap. Just add more. That argument isn't nearly as convincing anymore.
Large server-memory configurations have become expensive again. And in virtualized environments, overprovisioning accumulates quickly.

Consider 20 Domino VMs with 32 GB more RAM each than their workloads meaningfully benefit from: 20 × 32 GB = 640 GB

That's 640 GB of physical infrastructure memory providing progressively smaller benefits.
The same memory could instead provide capacity for additional workloads, HA headroom, or simply reduce the cost of the infrastructure.



Right-Size Instead of Max-Size


The goal should not be to provide every Domino server with the largest possible filesystem cache.
The goal is to provide enough application memory, enough filesystem cache to capture the valuable part of the working set, and reasonable operational headroom.

Beyond that point, additional RAM still helps—but its marginal utility decreases.


That's the economic part of right-sizing:



Don't size memory simply because Linux knows how to use it. Size it according to the value that additional memory actually provides.


VictoriaLogs for Domino

Daniel Nashed – 21 September 2026 16:25:15


Grafana Loki is my current favorit and fits well to the the remaining Grafana stack we have for Domino metrics.

When looking into OpenTelemetry formats VictoriaLogs hit my radar.
It's pretty simple to setup in a Docker container and works pretty well even on a local setup.

https://docs.victoriametrics.com/victorialogs/

The entry point for OpenTelemetry is different than for Loki and the format is "protobuf":

http://localhost:9428/insert/opentelemetry/v1/logs



Setting up a container via Docker Compose


services:

  victorialogs:
    image: victoriametrics/victoria-logs:latest
    container_name: victorialogs
    hostname: victorialogs
    restart: always

    ports:
      - "9428:9428"

    command:
      - "-storageDataPath=/victoria-logs-data"
      - "-retentionPeriod=30d"

    volumes:
      - victoria-logs-data:/victoria-logs-data

volumes:
  victoria-logs-data:


Here is how it looks like

Image:VictoriaLogs for Domino


Domino Log Forwarder goes OpenTelemetry

Daniel Nashed – 21 September 2026 08:43:26

I have been working quite a bit on my Domino Log Forwarder project over the last week.
What started as a small utility to forward Domino console output to Grafana Loki has evolved into a more generic OpenTelemetry log forwarder.

One of the most important changes is that there is no Loki-specific output anymore.

otelfwd now sends OpenTelemetry logs using OTLP/HTTP JSON. Grafana Loki is one of the receivers I use and test with, but the forwarder itself doesn't depend on Loki.



One forwarder, multiple input methods


Image:Domino Log Forwarder goes OpenTelemetry



There are several ways to feed data into
otelfwd.

The Domino console is the simplest one. Domino STDOUT is piped into otelfwd, just like with the original version of the project.

The new
domfwd Domino server add-in goes a step further. It reads structured events directly from the Domino Event Monitoring queue and sends them to otelfwd through a local UNIX socket.

Other applications can use the same structured interface through a UNIX socket or a TCP connection bound to 127.0.0.1.


There is a UNIX datagram syslog interface. I use this, for example, to send NGINX access and error logs directly into
otelfwd.

All those inputs use the same forwarding infrastructure from that point on.



Reliable OTLP delivery

otelfwd converts and groups the incoming records into OpenTelemetry resources and scopes and sends them using OTLP/HTTP JSON.
Before sending, records are batched for efficient transmission.
More importantly,
otelfwd has its own write-ahead log (WAL). If the configured OTLP receiver isn't reachable, records are kept locally and automatically replayed when the receiver becomes available again.



The backend is no longer Loki only

This is probably the biggest architectural change compared with the original Domino Log Forwarder.
There is no longer a Loki Push API implementation in the forwarder -> The output is OpenTelemetry only.

For my own environment I currently use Grafana Loki, which provides an OTLP endpoint. But from the perspective of otelfwd, Loki is simply an OTLP receiver.

This also makes it much easier to use the same forwarder with other observability platforms. While testing other backends, VictoriaLogs turned out to be an interesting case.
VictoriaLogs also supports OpenTelemetry logs, but its native OpenTelemetry JSON ingestion format is different from the standard OTLP/HTTP JSON representation used by
otelfwd.



Native Domino Events forwarder


The project now contains also a Domino Events Forwarder. It's a native integration into the Domino Event Monitoring Stack and allows you to push enhanced events to any OpenTelemetry backend.


See the updated project on GitHub:
https://github.com/nashcom/domino-log-forwarder
 Veeam  ZFS 

Veeam Backup 13.1 Application Repositories perfect fit for Domino Backup

Daniel Nashed – 19 September 2026 18:11:03

Veeam Backup Application Repositories are an interesting new option for application backups — and they are a particularly good fit for HCL Domino Backup & Restore.


The repository is based on ZFS and provides NFS storage that application servers can use directly.

This matches the Domino backup architecture very well: Domino Backup & Restore can simply copy databases, transaction logs, DAOS data and other backup data to an NFS target using its standard file-copy flow.

There is no need for a special backup agent or configuration on Domino Backup side. The standard file copy mode works for backup and restore.



Image:Veeam Backup 13.1  Application Repositories perfect fit for Domino Backup


The repository supports NFSv4 and benefits from ZFS fast deduplication, which can be particularly useful for Domino backup data.

Deduplication isn't configurable in the GUI today. But there is a way to get root access to the repository to enable Fast Dedup on the ZFS data sets.


Linux Domino servers can mount the repository directly via NFS. On Windows, NFS should currently also be used for this scenario. In my testing, NFSv3 from Windows provided good performance.

The important difference compared with using an arbitrary NFS server is the integration with Veeam.
The Application Repository becomes part of the normal Veeam Backup workflows, while Domino remains responsible for creating an application-consistent backup using its native Backup & Restore functionality.


Each server will get it's own ZFS data set in ZFS pool with permissions per server.
This creates a very clean separation of responsibilities:

Domino creates the application-consistent backup. Veeam provides and manages the backup repository and integrates the resulting data into the overall backup infrastructure.


For Domino environments, that is a remarkably natural combination.


Links

    Archives


    • [HCL Domino]
    • [Domino on Linux]
    • [Nash!Com]
    • [Daniel Nashed]