HCL Sametime 12.02 Container Install on Ubuntu 24 and Podman

Mindwatering Incorporated

Author: Tripp W Black

Created: 11/21 at 07:27 PM

 

Category:
Domino Upgrades / Installations
SameTime

Task:
Replace Ubuntu 24 HCL Sametime 11.6 Community Edition installation w/Ubuntu Podman host (VM) with Sametime 12.0.2 container-based

Important Notes:
- We shutdown our Domino-based Sametime 11.6 VM while creating the new one after hours. We removed the Domino-based server's entries from the Domino Directory (domain) after the new Sametime server came online.
- We did not worry about migration of any persistent chats.
- The existing Domino-based contacts were CN/OU/O-based hierarchical contacts. We did NOT bother to run the conversion. After saving any chats anyone wanted to keep, they right-clicked removed, and re-added anyone they wanted to still be in the contacts.
- We kept the same DNS and IP as the previous HCL Sametime server to limit any reconfiguration.
- YAML files are VERY picking about indents. Do NOT use tabs, and make sure your indentions are correct for the configuration options.
- The mongo CLI program is mongosh. Its commands are JSON and do not need a trailing semi-colon.
- The external host ports cannot be changed from 443 and 8000 as of Sametime 12.0.2.
- For the LDAP account, use a comma and not a slash if using canonical name, alternately, use the email address of the LDAP account instead.
- Netavark is already included w/Podman in Ubuntu, and there is no need to set-up the network.


Servers:
Old Domino-based HCL Sametime server:
Ubuntu 24.04.1 VM (upgraded in-place from Ubuntu 20.x)
Sametime/MWDomain
sametime.mindwatering.net
192.168.99.107

New HCL Sametime server:
Ubuntu 24.04.1 VM host (new one)
sametime.mindwatering.net
192.168.99.107

Primary HCL Domino server for LDAP:
MWDom1/MWDomain
mwdom01.mindwatering.net
192.168.91.101
- port: 636 (389 redirects to 636)
- user: LDAP ServiceID/O=MWDomain
- ST admin email: stadminemailaccount@mindwatering.net



Standalone Podman Host Creation:
1. Shutdown old Sametime server:
vSphere --> select old Sametime (VM)
--> Actions --> Power --> Shutdown Guest OS
--> Actions --> Rename --> SametimeOLD

2. Build new VM:
vSphere --> Datacenter --> New from Template --> Chose Ubuntu_24-04_Server template

a. Power on the VM
vSphere --> select new Sametime (VM)
--> Actions --> Power --> Power On

b. SSH into the VM:
$ ssh myadminid@sametime.mindwatering.net
<enter pwd>

Note:
- SSH is already installed in the Mindwatering templates. If not, login to the remote console and install with:
$ sudo apt-get install openssh-server

- vi/vim is already installed in the Mindwatering templates. If not, install with:
$ sudo apt-get install vim



OS Modifications and Installation Prerequisite Packages:
1. Set static IP - 192.168.99.107
$ cd /etc/netplan/
$ ls -l
<get the file name of the cloud-init.yaml - in our case it is 50-cloud-init.yaml >
$ vi 50-cloud-init.yaml
network:
ethernets:
ens160:
addresses:
- 192.168.99.107/24
nameservers:
addresses:
- 192.168.99.1
- 192.168.91.1
search:
- mindwatering.net
routes:
- to: default
via: 192.168.99.1
version: 2

<esc>:wq (to save)

Disable changes on reboot and apply the new static IP:
$ sudo bash -c 'echo "network: {config: disabled}" > /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg'
$ sudo netplay apply

Note: If there is an error, usually indentions, it will typically tell you the line. Re-edit the file, and re-apply.

2. Update sysfs.conf adding/setting the following line for MondoDB:
# vi /etc/sysfs.conf
sysfsFile = 0

<esc>:wq (to save)


3. Update sysctl.conf to set swappiness to 1 (minimum) for MongoDB:
# vi /etc/sysfs.conf
vm.swappiness = 1

<esc>:wq (to save)

4. Install Prerequisite Packages:
$ sudo apt-get update
<wait>

$ sudo apt-get upgrade
<wait>

If apt tells you there are packages to remove:
$ sudo apt-get autoremove
<wait>

If the kernel was updated, restart:
$ sudo reboot
<wait and log back into the VM>

Install podman prerequisite that didn't install w/ our and needed to be added.
$ sudo apt-get install software-properties-common dos2unix gnupg curl unzip
<wait>

Install ldapsearch to test ldap queries later:
$ sudo apt-get install ldapsearch
<wait>

Verify the number files, file size maxes, and open files aer large enough:
$ sudo ulimit -a
<view limits - typically the number of open files is too low, only 1024>



MongoDB Installation:
1. Install MongoDB:
$ cd /home/myadminid/tmp/

$ sudo su -

# curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor

# echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

# apt-get update
<wait>

# apt-get upgrade
<wait>

# apt-get install mongodb-org
<approve with y, if prompted, wait>

Verify status of MongoDb:
# systemctl status mongod.service
<verify enabled and running>


2. Install Podman:
# apt-get install podman podman-compose netavark
<approve with y, if prompted, wait>

Verify status of Podman:
# systemctl status podman

Exit to normal account
# exit



Configure MongoDB for Sametime:
Notes:
- These commands are case-sensitive, and JavaScript and JSON are typically case-sensitive. Enter with the exact case specified by HCL.
- Update the sametimeUser password.

1. Create the sametimeUser admin account in the built-in admin database:
$ sudo mongosh
> use admin
<returned message: switched to db admin>

> db.createUser({user: "sametimeUser", pwd: "reallygreatpassword", roles:[{role:"readWrite", db:"chatlogging"},{ role:"readWrite", db:"mobileOffline"},{ role:"readWrite", db:"meeting"},{role:"dbAdmin", db:"meeting"},{role:"userAdminAnyDatabase", db:"admin"}]})
<verify in the output that is says :Successfully added user, and verify the details>

Note. Update the password, mystpwd, with your own password. Note the password for later.
> db.createUser({user: "sametimeClusterAdmin", pwd: "mystpwd", roles:[{role:"readWrite", db:"chatlogging"},{ role:"readWrite", db:"mobileOffline"},{role:"userAdminAnyDatabase", db:"admin"}]})
<verify in the output that is says :Successfully added user, and verify the details>


2. Create the chatlogging database and the EVENTS and SESSIONS collections (via on-demand using it the first time):
> use chatlogging

> db.EVENTS.insertOne({"_id" : "dummy"})

> db.SESSIONS.insertOne({"_id" : "dummy"})


3. Stop the MongoDB service, add the replication config, and start MongoDB back up.
$ sudo systemctl stop mongodb.service
<wait>

Edit the mongod.conf file, and perform the following two updates:
- navigate down to the network interfaces section (statement) add add the network configuration
- navigate down to the replication section (statement) and add the replica set information
$ sudo vi /etc/mongod.conf
. . .
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,192.168.99.107
bindIpAll: true
. . .
# replication
replication:
replSetName: rs0
. . .

<esc>:wq (to save)

$ sudo systemctl start mongodb.service
<wait>

$ sudo systemctl status mongodb.service
<verify service is active and running>



Install Sametime on Host/VM:
1. Transfer the file to the server:
Using scp or Filezilla from remote machine transfer the install zip to the folder.
You can use /opt/sametime, but in our case we do it by version of software in the myadminid's home folder
- folder: /home/myadminid/sametime_1202
- Sametime_12.0.2.zip

$ mkdir /home/myadminid/sametime1202

- Transfer the file via SCP or Filezilla to this new folder.

$ cd /home/myadminid/sametime1202

$ unzip Sametime_12.0.2.zip
<wait>


2. Run the install.
Notes:
- For us the install does not completely work. The bind credentials were not in the custom.env afterwards, we had to perform some manual edits.
- If you run another version of Sametime (a FP), this causes us issues with the images, we make sure to remove all images before running install.sh
- Use comma as canonical name separator, or email address for LDAP user.

$ sudo su

# ./install.sh
<wait while all the images are set-up>
<answer the questions>
- Sametime server name: sametime.mindwatering.net
- Mongo host: 192.168.99.107
- Mongo port: [27017]
<take the default>
- Administrator's user name: sametimeUser
- Password: reallygreatpassword
- Connection URL: [mongodb://sametimeUser:************%23@192.168.99.107:27017]
<take the default>
- LDAP server: mwdom01.mindwatering.net
- LDAP port: 636
- Bind name: cn=ldap serviceid,O=mwdomain
- Base password: **********
- Base DN: o=mwdomain
- TLS access: 636
- displayName: [cn]
<take the default>
- JWT Secret: []
<take the empty default unless you have JWT>
- LTPA: [N]
<take the default>
- Administrator email: stadminemailaccount@mindwatering.net
- Grafana Admin user: []
<take the default>
- Grafana Password: []

- Initiate and wait

IMPORTANT:
- The first run will fail because the bind information is not actually saved.


3. Fix the install:
$ docker-compose down -t 100
<wait>
$ sudo vi custom.env
. . .
# LDAP configuration
. . .
LDAP_BIND_ENTRY_DN_ENV=cn=ldap serviceid,o=mwdomain
LDAP_BIND_ENTRY_PWD_ENV= **********
LDAP_PERSON_RESOLVE_BASE_ENV=o=mwdomain
. . .

<esc>:wq (to save)

Try again:
$ docker-compose up -d
<wait - confirm all the returned status values are a 0>


4. Create a one-off Service for the Sametime containers to auto-start:
$ cd /usr/lib/systemd/system/

$ sudo touch podman-compose-app.service

$ vi podman-compose-app.service
[Unit]
Description=Podman Compose Application Service
Requires=podman.service
After=podman.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/myadminid/st1202
ExecStart=/usr/bin/podman-compose up -d
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

<esc>:wq (to save)


Enable the service:
$ sudo systemctl enable podman-compose-app.service



Post-Install:
1. Old Domino Server clean-up steps:

There is no more Domino server needed.
- Domino Admin client --> Open primary server, MWDom1/MWDomain
- - Configuration (tab)
- - Internet Site documents:
- - - Locate Sametime/MWDomain Web Site Configuration
- - - Delete any Rule document(s) and its Internet Site document underneath
- - - Delete the Web Site Configuration
- - Server documents:
- - - Select the MWDom1/MWDomain server document, click Delete
- - Connection documents:
- - - Select connection documents to or from MWDom1/MWDomain, click Delete
- - Configuration document:
- - - Select MWDom1/MWDomain configuration document, if it exists, and click Delete

AdminP will look for MWDom1/MWDomainin groups and application access controls and delete MWDom1/MWDomain automatically.



Troubleshooting and Misc Podman Commands w/ Sametime:

LDAP Failure from Sametime to Domino LDAP directory:
LDAP entry with / causing bind to fail: mwdom01.mindwatering.net. [48] Inappropriate authentication
- KB0116572
- Start-up error:
sed: -e expression #1, char 70: unknown option to `s'
- Authentication log error:
stusers 2024-11-20 20:39:26.873 INFO 113 --- 123399941506880 : StLdapConnection::bind: dn = (null)
stusers 2024-11-20 20:39:26.873 INFO 113 --- 123399941506880 : StLdapConnection::asyncBind: dn = (null)
stusers 2024-11-20 20:39:27.013 INFO 113 --- 123399941506880 : StLdapConnection::asyncResult: m_pConn = 0x703b2c78e6a0 msgId = 1 timeLimit = 0
stusers 2024-11-20 20:39:27.015 INFO 113 --- 123399941506880 : Failed connecting to directory server mwdom01.mindwatering.net. [48] Inappropriate authentication

This error is caused by the name added w/Notes canonical format instead of email address or using comma as delineator:
LDAP_BIND_ENTRY_DN_ENV=cn=ldap accountname,o=mindwateringdomain
or
LDAP_BIND_ENTRY_DN_ENV=cn=accountname@mindwatering.net




Container podman and podman-compose Commands:
podman ps
- view podman containers loaded/running

podman container list -a
- another command to view podman containers loaded/running

podman-compose up -d
- startup containers for the current Sametime folder

podman-compose down -t 60
- shutdown containers for the current Sametime folder, and give 60 seconds for each container instead of the default 10 seconds before the send kill command being issued

podman-compose logs
- view logs from all the containers from the pod for this Sametime folder

podman-compose logs community
- view logs just from the community container

podman-compose logs nginx
- view logs just from the nginx web server

podman rm -a
- issue only after the down command above, to remove all containers

podman image rm -a
- issue only after the down command, and if no containers are loaded, removes the images that the ./install.sh set-up

podman rmi --all
- issue only after the down command, removes all images from the local image repository.
- effectively uninstalls sametime and any other images from host

podman exec -it foldername_community_1 bash
- start bash terminal session into the community container
- Note: vi is not available, but cat is available, and downloading a file is an option, as well

podman cp foldername_community_1 :/sametime.ini ../tmp/sametime.ini
- copies the sametime.ini from the container to the host, up one folder and down into another tmp folder for transfer for analysis

podman cp ../tmp/sametime.ini foldername_community_1:/sametime.ini
- copies the edited file with the new debug, for example, back up to the sametime community container, overwriting the currently used on in the container.

podman-compose logs --since 10m
- all of the pod container logs, but only the last 10 minutes of them


New Sametime client VPS codes:
HCL Notes 12.0.2 64-bit: 122c --> Add to VPS_ALLOWED_LOGIN_TYPES in sametime.ini
- See the table of codes: KB0024444
Per HCL Support, add to custom.env:
$ cd/home/myadminid/sametime1202
. . .
STI__config__VPS_ALLOWED_LOGIN_TYPES=129D,129C,129B,129A,122c,130F,130E,130D,130C,130B,130A,1308,1306,1304,1443,143C,143D,143E,143F,143A,1439,1438,1437,143B,1436,1435,1434,14AF,14B2,14B4,14B6,14AD,14A2,14A0

. . .

<esc>:wq (to save)



previous page