Lotus Notes in SBC & VDI, surviving the pitfalls of an aging client.
Should all this be necessary? definitely not, but if you plan right you’ll be better prepared for failure.
To start, I think I should open by saying I’m not an IBM software fan, in fact I’m the furthest thing from an IBM software fan. I feel they write unnecessarily complicated, Java heavy and buggy applications. They completely miss the point of the MSI standard and their application architecture is a mesh of static files, misleading registry keys all rolled into what I consider a really ugly eclipse platform.
Finding accurate information on how to install Lotus Notes in an SBC / VDI environment including all fixes and improvements can be from difficult to impossible, so below you will find a roll up of the considerations, caveat’s and some silly hang ups to deploying Lotus Notes in the above environments.
I’m not a Notes expert, I’m just the poor idiot that’s been forced to support it for the last three years. I don’t intend to update this post frequently, consider this my knowledge dump as I move away from a Lotus Notes environment.
So to begin, some fun Lotus Notes facts!
- Windows Remote Desktop Services isn’t supported, at all.
- XenApp 6.5 is only supported on Notes 8.5.3 Fix Pack 1.
- XenApp 6 is only supported in 8.5.3.
- XenDesktop isn’t supported, so by extension VMware View shouldn’t be either.*
*I think it’s hilarious they don’t support desktops if a hypervisor is involved.
For more specifics on earlier clients, check here:
This post is huge, 14 pages huge so I’ve made a pdf available for ease of reading. If you wish to read it on this page, click more below.
So now let’s get right to it. Below I’ve broken this post into categories to base your decisions on. Even if you veer off course and use a network drive, there is still useful information to be had in optimising and pruning.
1: Planning around the data directory:
The crux of the lotus notes issue lies with Lotus Notes data directory. This data directory contains (among other static files) the user’s customizable dictionaries, contact lists, desktop layout and ID file to prove who you are when authenticating. As this folder contains user preferences, it’s critical on every device the user wishes to retain their settings.
The size of a user’s data directory can vary largely, based on my internal investigation I found the average un-managed data directory ranged from 70mb’s to over 600mb’s but if you manage it correctly, you can achieve sizes between 60mb’s to 120mb’s.
Where this data directory lives is the biggest decision you are going to face with your roll out, so below you will find the two most suitable locations for the data directory, the downsides and the products you could consider to deliver the data.
1.1: Utilizing a network share for the data directory:
“You’re running it from where?” *Gasp*
Most administrators choose to store this data directory on a network share, it’s their decision. But here’s why I don’t suggest it:
Lotus notes loves to write to this directory really frequently, and any kind of loss of connectivity to this directory results in an immediate notes crash. Although this solution allowed the users to roam relatively easily, it also generates huge traffic to the file servers, maintaining at least 4 open files per user. Throw SwiftFile (IBM’s indexing and quick categorization tool) and you have another open and extremely chatty file to contend with.
IBM categorically refuses to support running the client from a network drive, which is funny really because the performance white paper (see appendix I: notes install) I read from IBM seems to be based from a file server? How come they benchmark the client using this configuration but don’t recommend it? Your answer is as good as mine.
- Native roaming when online, on the network.
- Offline requires tried & distrusted windows offline files.
- Runs like a stuck pig.
- Causes a large load on the file server.
- Not supported by IBM.
If you have an option to move to the local file system I strongly recommend you do, the difference is immediately noticeable and makes the client run acceptably without putting undue stress on your already busy file servers.
If you do choose to proceed and continue your installation from the network share, still consider the following two items:
1: Ensure to still install the client correctly from the command line below and avoid at all possible using the “=.\location\notes.ini” shortcut amendment. This is a workaround at best and most native email support will fail due to the local installation being unaware of where the data directory is really stored.
2: See the performance tweaks, pruning options below and redirect what files you can to the c: drive, anything is better than nothing.
1.2: Storing the data directory on local disk:
Using a local disk for your lotus data directory will provide immediate performance increases over running it from a network. Using the below methods you can easily run from local disk while allowing for roaming from device to device.
Some caveat’s around Citrix Provisioning Services / linked clones:
When it comes to Citrix Provisioning Services, the location of your write cache dictates the speed you will achieve by moving the notes data directory local. If you leaving the write cache on the provisioning server, forget about moving the data directory and fix that first.
If you are utilizing local disk or memory caching, bear in mind the values above and perform load testing to ensure you have the capacity to keep up.
When it comes to linked clones / difference disks etc. the speed / cost of your storage is the deciding factor here. In every case this should still be much faster than network based performance. The added IOPS created by moving this folder should be considered in either case.
1.2.1: Roaming profiles / Profile managers:
With Roaming Profiles / Profile managers, you can store the data directory of a user in the profile. (e.g. .\AppData\Roaming) This will allow you to keep the users notes data directories between all devices.
- All the benefits of running notes from local disk.
- Synchronize the data directory to all clients.
- User profiles will bloat excessively & an additional mechanism will be required to keep this directory small.
- Increased login / logout time due to the size of the data directory.
1.2.2: User virtualisation technologies:
My product of choice for user virtualisation is RES Workspace manager, so I will base this post around that technology; that being said the other virtualisation products work similarly enough to translate this across.
If you configure Lotus Notes as a user preference using Workspace manager, you get the benefit of synchronization between platforms and the ability to restore past preferences in the event of a Lotus Notes crash. Workspace manager also compresses the data directory saving vital space on the network.
So long as all your clients are Workspace Manager managed, this solution works beautifully.
- Compressed storage of the notes data directory.
- Retention of history (to recover from a notes crash).
- Pruning and Exceptions for what data to capture.
- Native INI editing abilities.
- Fast login and cache in background option.
- Only fit for purpose if all devices (the user ever could use) are managed by workspace manager.
- The notes data is stored in a compressed encrypted format the users cannot access to view (minor).
1.2.3: Lotus Notes Roaming:
Lotus Notes roaming allows for roaming of certain user preferences to every client the user connects from. This method is cumbersome in SBC/VDI as if you do not retain the rest of the folder (not covered by roaming, you will be forced to re-run the setup process on every login.
The sweet spot for Lotus Notes roaming is when the user leaves the controlled SBC / VDI environment (to work offline / on a pool laptop) where you can provision their basic preferences and they sync before leaving and upon arriving back. Lotus Notes roaming is not a complete solution.
- Native lotus notes synchronization to all notes clients.
- Managed by the Domino Administrators.
- Integrates with Workspace Manager / Scripts to deliver the client to “other” non-managed devices.
- Difficult to configure correctly removing prompts etc.
- If the profile isn’t already present, each login requires a slow setup routine.
1.2.4: Some Good ole’ scripting:
As part of a login script, you could simply copy the data from a network location locally before the user reaches the desktop. This will slow down the login process but speed up the Lotus Notes experience in the session all day. As you are scripting it, you can master your own destiny by pruning, compressing etc. the data directory on login and log off. The only limitation here is your own scripting skill.
If you do choose to script this task, I highly recommend you use WinZip / WinRAR / any other zip vendor’s command line utilities to zip and extract the folder on login and log off. This will speed up the copy and reduce the network storage necessary.
If you wish to view a script I’ve used for this task, drop a comment below.
- Tried and trusted
- Slow login / logoff.
- Login script restrictions / complexities.
- Script needs to run on all devices.
- Requires some scripting experience.
1.2.5: Marvel Client: (Source)
The Marvel Client Solution for Lotus Notes is the one size fits all solution for notes roaming while still taking advantage of performance gained by running on Local disks.
The marvel client will zip and store your preferences Domino server side to be deployed on demand. The marvel client also extends much further to allow you to provision, manage, report and interact with the users preferences from a central console.
The product is still quite a mystery to me but I can say we’re actively investigating this product. It really excited the domino team which I suppose is a good sign.
- Supported 3rd party product.
- Managed by the domino team.
- Clean and simple install.
- One size fits all.
- Additional cost.
- Some domino knowledge necessary.
2: To Eclipse, or not to Eclipse?
It’s really a question of your own stubbornness.
The Lotus Notes (standard) Eclipse client has improved since 8.0.1. When it first arrived, users were consuming at least 290mb’s (notes2.exe 250mb + nlnotes.exe 40mb) of memory just the running the client. When this was compared to the “basic” client’s meagre consumption of 40mb’s it was incredibly difficult to justify the use of the eclipse client.
Through 8.0.1 to 8.5.2 a lot of work has been done to tune notes2.exe (the eclipse culprit) down to an acceptable working set number. At present 8.5.3 will consume up to around 130mb’s of memory in most users sessions. When this is then added to the 40mb’s required for nlnotes.exe we settle at roughly 170mb’s per user for their Notes client. It’s an improvement and judging by a quick “finger in the air” twitter poll, Microsoft Outlook also operates in this memory space size.
With these numbers in mind, it’s a simple enough decision. For all intents and purposes both the basic and standard clients function the same way for the users.
Ultimately they won’t miss out on anything by being forced to use the basic client and you will have a lot less to worry about.
Check the comments below for an insight into what to eclipse client is capable of if tuned correctly. If you wish to utilise the full suite of products then the eclipse version is the way to go, if most of your users just need an email client with one or two notes based applications go with the basic client.
The choice is yours.
3: Installation method:
The Lotus Notes installation method is critical in an SBC environment, unless you install the client correctly using the below command line standard calls to email clients will fail among other things.
Remember, even if you choose to use the basic client, it’s still worth installing the standard client and locking it down. This will give you the flexibility to provision it to the select users who need it, without siloing versions of notes or changing your desktop installation. See 4.1 for assistance on this.
The two options you have for a Lotus Notes install are virtual or physical. My product of choice in virtualisation is Microsoft App-V, so this will weigh heavily on my decision.
3.1 Virtualising Lotus Notes:
My honest advice is don’t virtualise the Lotus Notes client, any native operating system call to send an email will fail and file type associations require workarounds to function. Installing the Lotus Notes client locally with Microsoft Office and other middleware applications will result in the best possible user experience.
Virtualising the administrative features of Lotus Notes on the other hand serves a purpose. This will allow you to install the Standard client to your shared environment, presenting the admin client to Domino administrators only. For this purpose, see the descriptive settings below:
3.1.1 How to Virtualise Lotus Notes with App-V:
(Tested with Lotus Notes 8.5.3)
Note: Exclude the users data directory from the VFS, it will save you hassle in the long run. Aaron Parker explains this well here so I won’t reinvent the wheel, It may be for Firefox but the theory is the same.
Note 2: DON’T try to share a virtualised data directory with a local directory. Notes gets really upset.
Note 3: Don’t try to modify the installation directory to Q: Notes doesn’t like that either.
Before you start your sequence:
- Download the full package executable to the sequencer.
- Extract the contents of the exe to c:\8.5.3.
- If you intend to use Microsoft office with Notes, install Microsoft Office as a pre requisite.
- Take a snapshot.
Begin your sequence:
- Begin your sequence but do not launch the setup.exe, instead see the below command line:
msiexec /i “c:\8.5.3\Lotus Notes 8.5.3.msi” SETMULTIUSER=1 MULTIUSERBASEDIR=”!userprofile!\appdata\Local\NotesAdmin” MULTIUSERCOMMONDIR=”C:\NotesShared” CITRIX=1
Note: the bolded text ensures you use a different directory to the local installation. See note 2.
- The installer will begin, click next and accept the Eula.
- Choose the default directory (see note 3)
- Select the components you want to install.
- Set Notes to all defaults
- Ensure “Launch parts of Notes when the operating system starts to enable faster notes startup” is unchecked.
- Disable the services if you can, if you get a parameter is incorrect wait until you’ve finished the sequence to disable them:
- Lotus Notes Diagnostics
- Lotus Notes Smart Upgrade Service
- Multi-user Cleanup Service
- Launch Notes and confirm it asks you to set it up.
- Close notes at this point, and delete the %localappdata%\notesadmin folder
- Stop the sequence
Post Sequencing tasks:
- Remove the file type associations or see the following article.
- Disable the above services if not already done.
3.2 Installing Lotus Notes locally:
Fairly normal stuff here for IBM and MSI’s, you can only enable the Citrix settings for Lotus Notes by using the command line as below, so ensure to follow these details to limit the issues you will see in production.
Here are a couple of quick tips for when installing lotus notes:
- Run the setup to extract the MSI, the setup command line is confusing and overcomplicated.
- Create a folder in the root directory and move the contents of the MSI here, e.g. c:\8.5.3. Lotus Notes creates huge folder paths and the higher in the folder tree the better.
- Don’t install it from a network share, IBM MSI’s don’t like network drives.
- Despite IBM’s recommendations, placing a path to c:\users\%username% in SBC is dangerous where user profile issues can and will occur. Use !userprofile! as below to circumvent these issues.
- Even if you aren’t using SBC in favour of VDI, still use this install method it will guarantee a similar setup across all devices.
Below is a roll up of the command line I would use to install lotus notes:
msiexec /i "c:\8.5.3\Lotus Notes 8.5.3.msi" /qb SETMULTIUSER=1 MULTIUSERBASEDIR="!userprofile!\appdata\Local" MULTIUSERCOMMONDIR="C:\ProgramData" CITRIX=1 /l*v c:\windows\lotus-notes-install.log
- The above command line will create the users notes directory in %userprofile%\appdata\Local\Lotus\Notes\data.
- The shared data directory will be hidden and tucked away in C:\programdata\Lotus\Notes\Data\Shared
- it will write a (vital, its IBM + MSI’s after all) log file to c:\windows\lotus-notes-install.log
The above command line is written for Windows Server 2008 R2, amend it to suit previous operating systems as necessary.
Note: if you receive an error about copying install.xml from your profile directory, rename your installer batch file to anything but install.bat, Lotus Notes secretly doesn’t like a batch file with that name.
4: Performance tuning:
4.1: Forcing the basic client:
As per Item 2, if you really don’t need the full client don’t use it. It’s bloated, heavy and unnecessary. Consider the below two options to disable the full client:
You can configure a notes.ini value to force the basic client as below; the drawback to this is the user can simply remove it if they have access to their data directory.
If you add the –SA switch to the lotus notes command line, you can force the client into basic mode, again the drawback is the user can remove this if they have the rights.
e.g.: C:\Program Files (x86)\IBM\Lotus\Notes\notes.exe -sa
4.2: RCPinstallID: (Source)
When Roaming from device to device, the first login to Lotus Notes will take 10+ seconds. During this time a .configbak folder will be created in your workspace folder. This issue is due to each local installation of Lotus Notes having a unique RCPInstallID value in the \Notes\framework\rcp\rcplauncher.properties file.
To resolve this issue, copy the rcplauncher.properties from one client to all others. Don’t try to amend the value, Lotus Notes doesn’t like that either.
4.3: Shared JVM properties:
It is possible to offload some of the Java classes used by lotus notes to a shared disk location. This will reduce disk space per user and improve launch times.
This can be achieved with the following steps:
Create a shared directory to store the java file and allow all users to modify the contents of this folder.
In the [notes install path]\framework\rcp\deploy\jvm.properties file
Remove the “,singleJVM” option from the line:
Then, change the sharedclass cache location to a shared/common path in the following line
4.4: Redirected local Cache file: (Source)
if you choose to use a network drive location for hosting your data directory Consider the following tip.
The cache.ndk file in the data directory writes regularly and isn’t needed between sessions. If you are working off a network drive use the following notes.ini entry to redirect it local:
If you are roaming, this file can be deleted / not captured on log off.
4.5: Redirected dtf files:
if you choose to use a network drive location for hosting your data directory Consider the following tip.
Lotus notes stores information about the client and application views as you use the client, these files write regularly and aren’t needed between sessions.
If you are working off a network drive, redirect them using the below notes.ini entry:
If you are roaming, delete/do not capture these files on log off.
4.6: Disable logging:
To disable logging to log.nsf, use the following notes.ini entry:
4.7: Reduce History in bookmark.nsf:
By default the user’s bookmark.nsf collects a history, to reduce this history use the following notes.ini entry:
HistoryAgeCutOff=2 or 3 (we don’t like 1)
4.8: Increase the JVM memory allocation:
IBM recommends amending the following values in the jvm.properties file to allow the client a larger JVM memory allocation.
Just bear in mind that allocating more memory to the JVM will result in more memory consumption per user, obviously.
- vmarg.Xmx=-Xmx256m (for x86)
- vmarg.Xmx=-Xmx512m (for x64)
4.9: Solid State Disks (SSD) & RAMDRIVE considerations:
Personally, I laughed at this suggestion at first, but if you are trying to tease every last bit of performance out of the Notes client, consider redirecting the cache, dtf and any other client files possible to fast SSD’s or a Ram drive.
I haven’t tested this, but I can see where they’re coming from. Should it be necessary? No, Could it be useful? Probably.
4.10: Lotus Notes Client services:
The following three client services are installed by default with a Lotus Notes installation:
Multi-user cleanup service
This service cleans up multi user installs with roaming data.
- If you don’t use roaming users disable this service.
Lotus Notes Diagnostics
The Lotus Notes Diagnostics service monitors for Notes client crashes and generates NSD files for support departments.
- If you are basing your user data directory on a network drive, disable this service (source)
- If you are using a local data directory, but do not want client crashes submitted to you, disable this service.
Lotus Notes smart upgrade service
The Lotus Notes Smart Upgrade Service allows upgrades to the client to be deployed on demand.
- As most SBC / VDI environments are heavily controlled and automated, I’d disable this service.
5: Data Directory Pruning:
Whether you are running your data directory locally or on a file server pruning this directory regularly will keep the disk-space from running away with itself.
5.1: Logging, lots of it:
Lotus Notes by default gathers crap, logs etc. in a plethora of locations:
- [data directory]\IBM_TECHNICAL_SUPPORT\*.*
- [data directory]\IBM_TECHNICAL_SUPPORT\SmartUpgrade\*.*
- [data directory]\cluster.ncf
- [data directory]\fault_recovery.log
- [data directory]\log.nsf
- [data directory]\workspace\logs\*.*
All of the above entries can be excluded from roaming, but make sure the folders still exist. Lotus Notes gets upset if the folders don’t exist from session to session resulting in another .configbak folder.
5.2: JVM classes cache:
If you don’t share the JVM classes cache as per 4.3, the below files will be created per user and by default consume 64mb of disk space.
As the file name changes between versions of Notes (C240D2A32P_xpdplat_.jvm_G07 for notes 8.5.2) Exclude the following wildcard.
When Notes gets it knickers in a twist, you’ll often see this folder crop up in the [data directory]\workspace folder.
Follow 4.2 above to resolve the underlying issue first, then exclude the folder from roaming.
Cache.ndk is not required between sessions, exclude it.
5.5: Crash dumps:
When notes crashes, it writes a crash dump to [data directory]\workspace\logs. It writes to .dmp files. These files can be anywhere between 200 to 600mb’s of memory and should be excluded.