Thursday, May 16, 2013

Installing Cisco RTMT for CUCM 8.6 on Mac OS X

This is a follow up to a blog entry I added a while back covering the installation of Cisco RTMT on Mac OS X. This original blog was just a quick blurb highlighting the work done by @ciscomonkey. The original article is still alive and well. Most of the information provided is still valid. However, I recently discovered that there is an issue when installing the RTMT plugin from a CUCM 8.6 or later system on a Mac OS X (Snow Leopard or Mountain Lion). 

I received a handful of comments from readers that they were running into problems with the installer. Well after some research I think I figured out what has happened and how to fix it. Applying this fix should help people get pass the installer issue that has been reported with RTMT plugin version 8.91. I believe it is likely that this issue exists in CUCM 9.x RTMT installers, too. I have not tested that yet (I need to rebuild my 9.1 VM).

Background

As noted above and in my previous blog entry covering the installation of Cisco RTMT on Mac OS X the bulk of the procedure for installing RTMT on Mac OS X is covered in this blog entry: "Real Time Monitoring Tool on Mac OS X" (http://www.ciscomonkey.net/rtmt-on-mac/). Again, many thanks to the owner of that blog for keeping the entry up and running. I know he doesn't maintain the blog anymore but the legacy lives on!

Of course the original article is a bit dated but it has served me well for a while. At least until recently. I had quite a few readers post comments about issues they experienced when installing RTMT in OS X. I originally thought this was an issue on Lion/Mountain Lion and since I wasn't running that OS I didn't weigh in.

Well, I finally loaded Mountain Lion on my MBP and figured it was a good opportunity to check to see if I ran into the same issue. Further, since I was still running Snow Leopard on my iMac I had a built-in "control" environment. What I discovered was that the RTMT plugin I installed from CUCM 7.1.3 and the plugin from CUCM 8.5 works fine on both OS X versions. 

From here I attempted to install the RTMT plugin from CUCM 8.6(2) and that is when I ran into problems. The installer failed on both versions of OS X. Now, this is getting interesting! 

Update

Based on the comments received on this post, the procedures outlined here work for RTMT 8.9.2 and 9.1. Also, @ciscomonkey has updated the original post to include workarounds for RTMT 10.0 installs where the installer reports an error about similar to: "Unsupported major.minor version 51.0". You should check out the original post if you hit this error.


The Error Message

When running the installer for the RTMT plugin (e.g. CcmServRtmtPlugin.bin) you are almost immediately greeted with an error message that claims the binary file cannot be executed. This error message also shows a temporary path for the JVM. For example:

/tmp/install.dir.320/Linux/resource/jre/bin/java: cannot execute binary file


Sample output from my own install attempt is provided below.


wolverine:installFiles xxxx$ ./CcmServRtmtPlugin-ucm8.6.bin
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...

./CcmServRtmtPlugin-ucm8.6.bin: line 2506: /tmp/install.dir.320/Linux/resource/jre/bin/java: cannot execute binary file
./CcmServRtmtPlugin-ucm8.6.bin: line 2506: /tmp/install.dir.320/Linux/resource/jre/bin/java: Unknown error: 0
wolverine:installFiles xxxx$ 


The Root Cause

The root issue is that the installer (InstallAnywhere by Flexera Software, Inc.) comes with an embedded standalone JVM. This isn't a problem by itself as I believe this is standard practice and previous versions of the installer also included an embedded JVM. At this time it is worth noting that we are attempting to use an installer package that was built by Cisco for Linux not Mac OS X. 

What I think is happening is that the installer is failing (or is simply ignoring) to detect and use the native JVM for Mac OS X. Therefore, the installer falls back to using its own embedded JVM and this gets us into trouble. The Linux JVM simply isn't compatible with Mac OS X. 

If you run the command: LAX_DEBUG=1 sh CcmServRtmtPlugin.bin

You will see a slew of output. In that output you should look for the section that starts with "=== Finding VM =====". In this section, you will see a value for "Using VM". This tells you what JVM this particular .bin file is going to use. On both my MBP and iMac (each running a different OS X version) I saw that the install package was using the embedded JVM.

Of course, you don't need to do the LAX_DEBUG to successfully load the installer. I am just providing that info for the curious minds. 


The Fix

What we need to do is force the installer to use the local JVM. Sounds simple right? Well, it actually is pretty simple once you figure out the right search terms to feed Google! The command we need to use when loading the installer is:

sh CcmServRtmtPlugin.bin LAX_VM /usr/bin/java


The following provides some sample output when running the installer with the LAX_VM argument.


wolverine:installFiles xxxx$ sh CcmServRtmtPlugin-ucm8.6.bin LAX_VM /usr/bin/java
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...

Custom code execution Started...
Custom code execution Completed...
Custom code execution Started...
Custom code execution Completed...


At this point the installer runs successfully and you should be in business. 


Next Steps

The ciscomonkey.net article on installing RTMT does a good job on walking through the rest of the installation process. I see no point in simply repeating the blog. There is one deviation that I think should be noted here. When you finish the install and the shell script editing you will execute the "run.sh" shell script as normal. However, unlike earlier versions of RTMT, in this version the application will load even if a timezone conflict is detected. You will see a prompt similar to the following:



I have not tested what happens if you say "No" (just a heads up). I do know that if you say "Yes" then your terminal.app will display some information which suggests that the RTMT application has taken care of running the tzupdater.jar. This is not the case and you will keep getting the error until you manually run the tzupdater (as noted in the ciscomonkey.net walk through). So, if you see the above just stick with the original walk through and you should be fine.



Thanks for reading. If you have time, post a comment!

19 comments:

  1. Thanks, this worked great with RTMT 9.1.

    ReplyDelete
  2. RTMT version 8.9.2 worked great following both your instructions and the ciscomonkey.net posting. Thanks!

    ReplyDelete
  3. I actually found this fix a while back for my coworkers, but forgot to update the page with the information. 3 year old and a 1 year old keep me plenty busy these days. :)

    ReplyDelete
  4. I also updated the page in case anyone gets the java error about "Unsupported major.minor version 51.0" when running RTMT 10.

    ReplyDelete
  5. The URL you quote above "Real Time Monitoring Tool on Mac OS X" (http://www.ciscomonkey.net/rtmt-on-mac/) is no longer available, and I didn't have the forsight to keep an off-line copy as you did. Can you please publish or send me unicast the information? It was an excellent link and I am kind of dead in the water without it.
    Thank You,

    ReplyDelete
    Replies
    1. Aladdin,

      I have been in communication with the owner of the original write up. He is in the process of moving the web site and ran into a snafu. The site should be back up in a couple of weeks. In the mean time, you can find the cached version of the page via Google: http://webcache.googleusercontent.com/search?q=cache:http://www.ciscomonkey.net/rtmt-on-mac/

      HTH.

      -Bill (@ucguerrilla)

      Delete
  6. Bill,

    The cached page is gone. Can you publish the steps from the original link?

    Thx!

    ReplyDelete
  7. here is the page for those looking.. https://web.archive.org/web/20120822024439/http://www.ciscomonkey.net/rtmt-on-mac

    ReplyDelete
  8. The original post says nothing on how to fix - Unsupported major.minor version 51.0
    or I'm not seeing it.
    Can you please post it here?

    ReplyDelete
  9. For the "Unsupported major.minor version 51.0", if I understood correctly, there is a difference between the Java version that was used to compile RTMT and the version you have installed on your OSX. I had the same issue so here is what I did:
    - First check what is installed (e.g. OSX Mavericks):
    ls /System/Library/Java/JavaVirtualMachines/
    1.6.0.jdk <= What you probably have
    ls /Library/Java/JavaVirtualMachines/
    "Empty" <- this is where you will be installing a more recent JDK
    Go to: http://www.oracle.com/technetwork/java/javase/downloads/index.html and download a recent JDK, I chose Java SE Development Kit 7u71 (jdk-7u71-macosx-x64.dmg)
    After installing, you should have:
    ls /Library/Java/JavaVirtualMachines/
    jdk1.7.0_71.jdk
    Now try again :-) ... Worked for me!
    Thanks,
    Fabrice

    ReplyDelete
  10. Trying to install RTMT 10.5 on Yosemite and getting the following. Any ideas? I have Java 8u25 installed.

    ========= Forking JAVA =============================================
    CcmServRtmtPlugin.bin: line 3319: /tmp/install.dir.3282/usr/bin/java: No such file or directory
    CcmServRtmtPlugin.bin: line 3319: exec: /tmp/install.dir.3282/usr/bin/java: cannot execute: No such file or directory

    ReplyDelete
    Replies
    1. I haven't tested on Yosemite. I'll need to check with one of my colleagues to see if they will let me test on their OS. I plan on sticking with Mavericks for the time being.

      Perhaps others have tested w/ Mavericks and are willing to share.

      -Bill (@ucguerrilla)

      Delete
  11. 10.5 works for me on Yosemite.
    Need to use the LAX step from above:
    sh CcmServRtmtPlugin.bin LAX_VM /usr/bin/java
    and edit run.sh to remove java line.
    Didnt need the tzupdate step.
    :)

    ReplyDelete
    Replies
    1. @Mike can you spell out the edit you had to make in run.sh to get this to work on your Yosemite system?

      Delete
    2. Open file run.sh in vim and type following:

      :%s/\.\/jre\/bin/\/usr\/bin/
      :wq

      This will replace incorrect Java path in run.sh file.
      run.sh must be executable, if not:
      chmod +x run.sh

      Delete
  12. Hi,
    Need some help, please. trying to make it run on MacBook with El Capitan OS and RTMT 10.5.2.
    Have followed all procedures and after it bombed after login the first time ran the tzupdater.
    I get the following output in Terninal when running tzupdater:

    Oscar-Work-Mac:JRtmt ojaime$ sudo java -Djava.vendor="Sun Microsystems Inc." -jar ./tzupdater.jar -u -f -v
    Password:
    java.home: /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre
    java.vendor: Sun Microsystems Inc.
    java.version: 1.8.0_66
    JRE time zone data version: tzdata2015a
    Embedded time zone data version: tzdata2015a
    Extracting files... Creating: /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/tz.tmp/: /data/tzdb.dat
    Need to make dir /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/tz.tmp/data
    done.
    Backing up original tzdata file to /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/tzdb.dat.tzdata2015a
    Time zone data update is complete.

    However RTMT still bombs after login with error "RTMT failed to initialize"
    In Terminal I see the following error:

    2015-11-13 09:16:20,251 [SplashThread] INFO rtmt.control - doMeat(): after ServerVersionChecker.validMLALogin(): ServerVersionChecker.gStatusCode=200, bValidLogin=true
    2015-11-13 09:16:20,253 [SplashThread] ERROR rtmt.control - TzDataManager:getStrClientTzVersion:[ERROR]:Ex: /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/zi/ZoneInfoMappings (No such file or directory)
    2015-11-13 09:16:20,253 [SplashThread] ERROR rtmt.control - [ERROR] In run thread SplashWindow: java.lang.NullPointerException
    2015-11-13 09:16:20,254 [SplashThread] ERROR rtmt.control - [ERROR] In run thread SplashWindow: java.lang.NullPointerException
    at com.cisco.ccm.serviceability.rtmt.utils.TzDataManager.findClientTzVersion(Unknown Source)
    at com.cisco.ccm.serviceability.rtmt.utils.TzDataManager.(Unknown Source)
    at com.cisco.ccm.serviceability.rtmt.ui.JRtmtMain.doMeat(Unknown Source)
    at com.cisco.ccm.serviceability.rtmt.ui.JRtmtMain$SplashWindow$2.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)

    2015-11-13 09:16:40,184 [SplashThread] INFO rtmt.control - ======>Exit System

    Checking with Finder I see the last two items on the path being searched do not exist:
    /zi/ZoneInfoMap

    looks to me like the tzupdater is not running correctly or not creating the right files on the right location.

    Any ideas? Anyone been able to make it run with OS and RTMT versions mentioned above?

    Thanks in advance


    ReplyDelete
    Replies
    1. Oscar,

      Check this link to see if it helps. I ran into this issue as well. http://www.ucguerrilla.com/2015/10/installing-cisco-rtmt-105-on-apple-os-x.html

      -Bill

      Delete
  13. Many thanks. Found the solution on that link and it's working now (with the noted quirk but I can live with it).

    ReplyDelete
  14. Cool. I could not get 10.5 to install on Centos. Your tips worked.

    ReplyDelete