Domino Linux Install Tips

These are some notes I took from when I installed an IBM Lotus Domino 8 server on a slightly older Linux machine for testing. For future searchers, I'm doing this in February 2010, using CentOS 4.7 (just because that's the server I already had set up). This is not a step-by-step install guide; rather, it's information about how to get around certain installer errors.

Before I begin, let me state explicitly that this is not a supported configuration. Disregarding any arguments about the possible differences between CentOS and RHEL, Domino 8.x actually requires Red Hat 5.x, so installing on a 4.x server isn't supposed to work in the first place.

I do not recommend installing enterprise software on unsupported configurations. Especially with Linux. If you are doing this for any reason other than morbid curiousity, stop right now and get yourself on a supported platform. Otherwise, you shouldn't expect things to work in the first place, and even if you do get it working you might have weird errors and problems later.

Also, specific to Lotus Domino, it's important to note that IBM has improved the Linux install process significantly with Domino 8, compared to previous versions. There is a lot of information on the Internet specific to older versions of Domino that discuss adjusting file and directory permissions, setting environment variables, etc. Most if not all of this type of post-install stuff is now done for you by the installer, so you probably won't have to do any of that kind of tweaking anymore.

So, let's talk about the problems I had...

Error #1 - Graphic Mode Won't Work
The first thing I tried was just downloading the Domino installer tar file, extracting it, switching to root, and running "install". Here were my results:

InstallShield graphic mode wizard does not launch

It looked like it was working: the installer ran, it asked if I wanted to continue in graphic mode, the InstallShield wizard initialized and tried to prepare the Java virtual machine, and then... nothing.

It used to be that older versions of Domino required you to do things with Display settings and xhost in order for the graphic installer to display, but that's not the case anymore. It should just run. For me, it didn't. So my next step was to run the installer in logging mode, with the command:

./install -is:log ./log.txt

This produces the same result, but this time I had a log.txt file my install directory. Here are the contents of that log file:

file type: 0
  file id: 0
  length: 177
  offset: 655148
  file name: instructions.txt
file type: 5
  file id: 1
  length: 650
  offset: 655325
  file name: Verify.jar
file type: 2
  file id: 2
  length: 711
  offset: 655975
  file name: launch.txt
file type: 4
  file id: 3
  length: 38682514
  offset: 656686
  file name: ibm_linux_142sr8.bin
ERROR: Invalid bundled JVM. Missing 'jvm' file.

So, the way InstallShield works in this case is: there's a version of Java bundled up in the installer, and the install script tries to extract this Java bundle and use it to run the graphic installer. I was getting a problem with the JVM extraction.

IBM Technote #1295755 covers some common reasons why this might happen, so if you're having this particular problem you should read that Technote first. For me, the /tmp directory had plenty of space and didn't have the noexec restriction, so that wasn't it. I also made sure that SELinux was turned off, which can apparently cause problems of its own.

My next step was to extract the contents of the installer and try to run the Java bin file manually. You can extract the installer contents with this command:

./install -is:extract

This gave me all the files, but when I tried to run the ibm_linux_142sr8.bin file (just to see what would happen) I got an error about not having glibc 2.4 installed. I checked, and sure enough I only had glibc 2.3. Here's the console output of that process:

[snapps@localhost domino]$ ls -1

[snapps@localhost domino]$ ./ibm_linux_142sr8.bin
./ibm_linux_142sr8.bin: /lib/tls/ version `GLIBC_2.4' not found (required by ./ibm_linux_142sr8.bin)

[snapps@localhost domino]$ rpm -qa|grep glibc

What this means is that the bin file needs to have at least glibc 2.4 to run (and extract the included Java JVM files), and since I only have version 2.3 on my system the bin file can't run and the JVM can't extract and that's why I got the "Invalid bundled JVM" error. The file isn't invalid, it just can't run on my system.

I'd like to say again that at this point, the right thing to do is to upgrade the server to a supported version of Linux and start over. Glibc 2.4 is an explicitly required package for Domino 8.5 on Linux. Systems like CentOS/RHEL are sensitive to the version of glibc that they're running, and this is not a case where I can just upgrade from 2.3 to 2.4 (without upgrading the entire server from 4.x to 5.x) and go on.

However, I gave myself a day to try to figure this out before I quit, and my day wasn't over yet, so I trudged on. I'm stubborn that way.

After a little searching and poking, I found out that I could actually run the setup.jar file directly (in the /tools subfolder) if I had Java installed. So I tried going down that road.


Error #2 - JVM Not Found
This seemed simple enough. All I had to do was have Java installed properly and run:

java -jar setup.jar

I downloaded Java 1.6, got it configured, and ran the command. The graphic installer started! Excellent. I got all the way through to where it started copying files, but when I got to about 5% done with the file copying I got a "JVM not found" error.

Domino install error: JVM not found

This was rather confusing, because I obviously had to have a JVM on my machine in order to run the install in the first place. Not found? Heck, I'm using a JVM to display the error that a JVM can't be found! Doesn't make sense.

I did all sorts of things with regards to setting Java home paths and running the install from the JVM directory and creating symlinks, but nothing worked. I kept getting the error.

Then I started poking around inside the setup.jar file itself. There's a subdirectory inside the JAR file called linux.jvm.resolution and it has several text files in it that have a .jvm extension (like ibmjre13.jvm, sunjdk142.jvm, etc.). Here's a screenshot of the files in that directory, along with the contents of the ibmjdk13.jvm file:

InstallShield required JVM list

You'll see that the .jvm file contains information about exactly what vendor and version a JVM is supposed to identify itself as, and exactly what directories the JVM is expected to be installed in. For the example above, the .jvm file is looking for a JVM that identifies itself with a vendor name beginning with "IBM", a version number beginning with "1.3", and is installed in one of six specific directories.

As far as I can tell, here's what the installer does at the time during the setup process where it's looking for a JVM:

From the .jvm file list in the screenshot above, you can see that the only allowed Java versions (that the installer is explicitly looking for) are IBM 1.3 and Sun 1.3, 1.3.1, 1.4, 1.4.1, and 1.4.2. Those are pretty old, and certainly not what I had installed.

The next thing I did was to uninstall Java 1.6 and download and install IBM Java JRE for Linux, 1.3.1. This installed itself to the /opt/IBMJava2-131 directory, so I made a link from that to /opt/IBMJava3-13 to make sure the .jvm file would find it okay.

This actually sort of worked. I didn't get the JVM error and the install appeared to go without a hitch. However, the Domino server files didn't quite get installed to the right places, and the permissions weren't set properly, and a few other things like that didn't happen like they were supposed to.

I looked at the terminal console where I ran the setup from and saw that early in the install process (before the files started copying) there was a Java exception related to the fact that the String.matches method was not available. Well, since that method was introduced in Java 1.4, I guess it wouldn't be available in 1.3.1, would it?

So, I went back to the IBM download site and got the IBM Java JRE for Linux, 1.4.2 and installed that in addition to the 1.3.1 JRE that I already had. Now my /opt directory had:

I ran the install again, this time making sure to use the 1.4.2 version of java to launch the installer:

Domino Linux InstallShield Wizard

This time it got all the way to the end, and all my files were in the right place.

Domino Linux install success

You might notice that I installed to some non-standard directories there -- /apps/ibm/lotus instead of /opt/ibm/lotus, and /apps/notesdata instead of /local/notesdata. That was just because on my test server I have an /apps partition on a separate hard disk to make sure I don't run out of room.

Anyway, once I was done with that I finished the install by:

The final step (for now) is to get a script to start the server automatically as a service. There are many such scripts available for download if you do a Google search, although the "ultimate" one seems to be Daniel Nashed's Domino startup script.

You are on the website. Copyright 2010.