Friday 31 August 2012

Integrating the Web Application Bridge (WAB) with IBM WebSphere Portal 8.0: A step-by-step guide

Saw this posted earlier today: -

Table of Contents

• 1 Introduction
• 2 Understanding the WAB
• 2.1 WAB components
• 2.2 Accessing virtual Web applications
• 3 Installing the WAB
• 3.1 Installing the WAB from the Solutions Catalog
• 3.2 Installing the WAB from the Solutions Installer: Stand-alone environment
• 3.3 Installing the WAB from the Solutions Installer: Clustered environment
• 4 Integrating the WAB with WebSphere Portal
• 4.1 Create a new application from the Virtual web application manager portlet
• 5 Add a Web Dock portlet
• 5.1 Configure the Web Dock portlet
• 6 Conclusion
• 7 Tell us what you think
• 8 Resources
• 9 About the author


More on WebSphere Portal 8 and silent installs

Following on from my earlier posts: -

WebSphere Portal v8 on Red Hat Enterprise Linux - some lessons learned

WebSphere Portal v8 on Red Hat Enterprise Linux - revisited

I've been struggling with the precise incantation of a response-file to get WP8 to fully install, and kept hitting the same old error: -

<result>
<error uid="CRIMA1154E">
  Error installing.
</error>
<error>
  The silent installation process does not support installing packages that are contained on multiple media discs.</error>
</result>


Well, I think I've cracked it - at least, I found a response file that actually worked - I've yet to re-try a new installation using the same file, but will try that in the near future.

Here's the response file: -

<?xml version="1.0" encoding="UTF-8"?>
<!--The "acceptLicense" attribute has been deprecated. Use "-acceptLicense" command line option to accept license agreements.-->
<agent-input acceptLicense='true'>
<server>
<repository location='/mnt/hgfs/Lenovo/WP8/WAS'/>
<repository location='/mnt/hgfs/Lenovo/WP8/Setup/eimage/'/>
<repository location='/mnt/hgfs/Lenovo/WP8/Portal'/>
<repository location='/mnt/hgfs/Lenovo/WP8/Enable'/>
</server>
<profile id='IBM WebSphere Application Server Network Deployment V8.0' installLocation='/opt/IBM/WebSphere/AppServer'>
<data key='eclipseLocation' value='/opt/IBM/WebSphere/AppServer'/>
<data key='user.import.profile' value='false'/>
<data key='cic.selector.os' value='linux'/>
<data key='cic.selector.ws' value='gtk'/>
<data key='cic.selector.arch' value='x86'/>
<data key='cic.selector.nl' value='en'/>
</profile>
<install modify='false'>
<offering id='8.0.0.3-WS-WAS-TFPM59935' version='8.0.3.20120309_1201' profile='IBM WebSphere Application Server Network Deployment V8.0' features='-'/>
<offering id='8.0.0.3-WS-WAS-TFPM60670' version='8.0.3.20120319_1949' profile='IBM WebSphere Application Server Network Deployment V8.0' features='-'/>
<offering id='8.0.0.3-WS-WAS-TFPM61934' version='8.0.3.20120409_1230' profile='IBM WebSphere Application Server Network Deployment V8.0' features='-'/>
<offering id='8.0.0.3-WS-WASProd-TFPM60134' version='8.0.3.20120312_1656' profile='IBM WebSphere Application Server Network Deployment V8.0' features='-'/>
<offering id='com.ibm.websphere.ND.v80' version='8.0.3.20120320_0536' profile='IBM WebSphere Application Server Network Deployment V8.0' features='core.feature,ejbdeploy,thinclient,embeddablecontainer,com.ibm.sdk.6_64bit' installFixes='none'/>
<offering id='com.ibm.websphere.PORTAL.SERVER.v80' version='8.0.0.20120421_0828' profile='IBM WebSphere Portal Server V8' features='ce.install,portal.binary,portal.profile' installFixes='none'/>
<offering id='com.ibm.websphere.PORTAL.ENABLE.v80' version='8.0.0.20120421_0909' profile='IBM WebSphere Portal Server V8' features='enable.upsell' installFixes='none'/>
</install>
<profile id='IBM WebSphere Portal Server V8' installLocation='/opt/IBM/WebSphere/PortalServer'>
<data key='eclipseLocation' value='/opt/IBM/WebSphere/PortalServer'/>
<data key='user.import.profile' value='false'/>
<data key='cic.selector.os' value='linux'/>
<data key='cic.selector.ws' value='gtk'/>
<data key='cic.selector.arch' value='x86'/>
<data key='user.was.installLocation,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/AppServer'/>
<data key='user.profile.config.mode,com.ibm.websphere.PORTAL.SERVER.v80' value='standard'/>
<data key='user.wp.install.type,com.ibm.websphere.PORTAL.SERVER.v80' value='full'/>
<data key='user.iim.currentlocale,com.ibm.websphere.PORTAL.SERVER.v80' value='en'/>
<data key='user.wp.hostname,com.ibm.websphere.PORTAL.SERVER.v80' value='wp8d.uk.ibm.com'/>
<data key='user.wp.cellname,com.ibm.websphere.PORTAL.SERVER.v80' value='wp8dCell'/>
<data key='user.wp.nodename,com.ibm.websphere.PORTAL.SERVER.v80' value='wp8dNode'/>
<data key='user.wp.userid,com.ibm.websphere.PORTAL.SERVER.v80' value='wpsadmin'/>
<data key='user.wp.password,com.ibm.websphere.PORTAL.SERVER.v80' value='rbN1IaMAWYYtQxLf6KdNyA=='/>
<data key='user.wp.admin.port,com.ibm.websphere.PORTAL.SERVER.v80' value='10000'/>
<data key='user.wp.portal.port,com.ibm.websphere.PORTAL.SERVER.v80' value='10025'/>
<data key='user.was.forward.installLocation,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/AppServer'/>
<data key='user.wp.profilename,com.ibm.websphere.PORTAL.SERVER.v80' value='wp_profile'/>
<data key='user.common.installPath,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere'/>
<data key='user.configengine.profileLocation,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/wp_profile/ConfigEngine'/>
<data key='user.configengine.binaryLocation,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/ConfigEngine'/>
<data key='user.configengine.forward.binaryLocation,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/ConfigEngine'/>
<data key='user.wp.profilepath,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/wp_profile'/>
<data key='user.wp.forward.profilepath,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/wp_profile'/>
<data key='user.was.uninstall.selected,com.ibm.websphere.PORTAL.SERVER.v80' value='false'/>
<data key='user.wp.uri.values.changed,com.ibm.websphere.PORTAL.SERVER.v80' value='false'/>
<data key='cic.selector.nl' value='en'/>
</profile>
<preference name='com.ibm.cic.common.core.preferences.eclipseCache' value='/opt/IBM/IMShared'/>
<preference name='com.ibm.cic.common.core.preferences.connectTimeout' value='30'/>
<preference name='com.ibm.cic.common.core.preferences.readTimeout' value='45'/>
<preference name='com.ibm.cic.common.core.preferences.downloadAutoRetryCount' value='0'/>
<preference name='offering.service.repositories.areUsed' value='true'/>
<preference name='com.ibm.cic.common.core.preferences.ssl.nonsecureMode' value='false'/>
<preference name='com.ibm.cic.common.core.preferences.http.disablePreemptiveAuthentication' value='false'/>
<preference name='http.ntlm.auth.kind' value='NTLM'/>
<preference name='http.ntlm.auth.enableIntegrated.win32' value='true'/>
<preference name='com.ibm.cic.common.core.preferences.preserveDownloadedArtifacts' value='true'/>
<preference name='com.ibm.cic.common.core.preferences.keepFetchedFiles' value='false'/>
<preference name='PassportAdvantageIsEnabled' value='false'/>
<preference name='com.ibm.cic.common.core.preferences.searchForUpdates' value='false'/>
<preference name='com.ibm.cic.agent.ui.displayInternalVersion' value='false'/>
<preference name='com.ibm.cic.common.sharedUI.showErrorLog' value='true'/>
<preference name='com.ibm.cic.common.sharedUI.showWarningLog' value='true'/>
<preference name='com.ibm.cic.common.sharedUI.showNoteLog' value='true'/>
</agent-input>


Note that I have highlighted the four lines that relate to the WAS / fixes / WP repositories that I'm using.

I've also highlighted the password that I used - bear in mind that this is a throw-away demo installation, so my password WAS actually passw0rd.

If it helps, you can see how Installation Manager "encrypts" passwords, using the following utility: -

$ /opt/IBM/InstallationManager/eclipse/tools/imutilsc encryptstring passw0rd

rbN1IaMAWYYtQxLf6KdNyA==

Obviously, in a production environment, we'll be using MUCH more secure passwords AND also federating in a LDAP repository PDQ after installation.

Here's the command that I used to run the installation: -

$ /opt/IBM/InstallationManager/eclipse/IBMIM -input ~/install_WP8_NEW.rsp -log ~/install_WP8_NEW.log -silent -acceptLicense

and here's the final output: -

Installed 8.0.0.3-WS-WAS-TFPM59935_8.0.3.20120309_1201 to the /opt/IBM/WebSphere/AppServer directory.
Installed 8.0.0.3-WS-WAS-TFPM60670_8.0.3.20120319_1949 to the /opt/IBM/WebSphere/AppServer directory.
Installed 8.0.0.3-WS-WAS-TFPM61934_8.0.3.20120409_1230 to the /opt/IBM/WebSphere/AppServer directory.
Installed 8.0.0.3-WS-WASProd-TFPM60134_8.0.3.20120312_1656 to the /opt/IBM/WebSphere/AppServer directory.
Installed com.ibm.websphere.ND.v80_8.0.3.20120320_0536 to the /opt/IBM/WebSphere/AppServer directory.
Installed com.ibm.websphere.PORTAL.SERVER.v80_8.0.0.20120421_0828 to the /opt/IBM/WebSphere/PortalServer directory.
Installed com.ibm.websphere.PORTAL.ENABLE.v80_8.0.0.20120421_0909 to the /opt/IBM/WebSphere/PortalServer directory.


I'm continuing to enjoy my voyage of discovery that is WebSphere Portal 8, and will have more posts to follow in the near future ....

#LifeIsGood

Wednesday 29 August 2012

Ubuntu Linux - DVD Ripping Fun n' Games

I recently upgraded my home PC ( Orac ) to Ubuntu 12.04 ( Precise Pangolin ), having been running a much older version ( 10.04 ) for some time.

Prior to the upgrade, I'd been able to "rip" DVDs to various movie file formats, including MP4 and AVI, since the move to 12.04, I was finding that the display quality was TERRIBLE, with the picture breaking up on almost every frame.

I saw this problem with Handbrake, which I'd previously used, both on Ubuntu and OS X, and also with AcidRip and Thoggen.

I knew that the hardware was OK, so that left the software.

Given that the problem affected three different ripping packages, I wondered what else might be broken / missing.

In the back of my mind, I remembered an Ubuntu library that I'd needed to install / use whilst I was running 10.04 - the library name was libdvdcss.

I Google'd around, and stumbled upon this rather useful page: -

RestrictedFormats/PlayingDVDs

which says, in part: -

<snip>
Installing libdvdcss

Legal Warning: Check with your local laws to make sure usage of libdvdcss2 would be legal in your area.

Ubuntu 10.04 (i386, amd64), 10.10, 11.04, 11.10 and 12.04 (i386, amd64)

Works for old releases that are no longer supported if you have repositories on Cd/Dvd or somewhere. So, anything from 9.04 onwards. The latest LTS, 10.04, and the radically different 11.04 also work this way.

1.    Install the libdvdread4 package (no need to add third party repositories) via Synaptic or command line:

sudo apt-get install libdvdread4

2.    Then open a terminal window and execute:

sudo /usr/share/doc/libdvdread4/install-css.sh

3.    Rebooting may be necessary.
</snip>

Having verified that I already had the required library - I chose the full-fat installation of 12.04: -

$ sudo dpkg --list  | grep -i dvdc
[sudo] password for hayd:

ii  libdvdcss2                             1.2.12-0.0medibuntu1                    Simple foundation for reading DVDs - runtime libraries


I reckoned that I'd missed the second step.

I checked the recommended documentation directory: -

$ ls /usr/share/doc/libdvdread4/

AUTHORS  changelog.Debian.gz  copyright  install-css.sh  README  README.css


and then ran the script: -

$ sudo /usr/share/doc/libdvdread4/install-css.sh

--2012-08-29 18:43:59--  http://packages.medibuntu.org/dists/precise/free/binary-i386/Packages
Resolving packages.medibuntu.org (packages.medibuntu.org)... 88.191.127.22
Connecting to packages.medibuntu.org (packages.medibuntu.org)|88.191.127.22|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7942 (7.8K) [application/octet-stream]
Saving to: `/tmp/dvdcss-cOHKyE/Packages'

100%[============================================================================================>] 7,942       --.-K/s   in 0.1s   

2012-08-29 18:44:00 (65.2 KB/s) - `/tmp/dvdcss-cOHKyE/Packages' saved [7942/7942]

--2012-08-29 18:44:00--  http://packages.medibuntu.org/pool/free/libd/libdvdcss/libdvdcss2_1.2.12-0.0medibuntu1_i386.deb
Resolving packages.medibuntu.org (packages.medibuntu.org)... 88.191.127.22
Connecting to packages.medibuntu.org (packages.medibuntu.org)|88.191.127.22|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 39684 (39K) [application/octet-stream]
Saving to: `/tmp/dvdcss-cOHKyE/libdvdcss.deb'

100%[============================================================================================>] 39,684       220K/s   in 0.2s   

2012-08-29 18:44:00 (220 KB/s) - `/tmp/dvdcss-cOHKyE/libdvdcss.deb' saved [39684/39684]

Selecting previously unselected package libdvdcss2.
(Reading database ... 258577 files and directories currently installed.)
Unpacking libdvdcss2 (from .../dvdcss-cOHKyE/libdvdcss.deb) ...
Setting up libdvdcss2 (1.2.12-0.0medibuntu1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place


Once done, I re-ran the ripping process, using Thoggen, and ..... the resulting file ( in .OGV format ) looks AND sounds absolutely peachy.

Interestingly, prior to this, I found that ripping this particular DVD ( Star Trek 5 - An Undiscovered Country ) always resulted in a non-English audio track. This was the case BEFORE and AFTER the Ubuntu upgrade.

So I'm not sure whether the combination of 12.04 AND the libdvdcss2 code OR the use of Thoggen has solved the problem.

I'll try Handbrake and see what happens ...

Tuning IBM WebSphere Portal and IBM Web Content Manager for best anonymous page performance

This came into my in-box earlier today, and I thought it was worth posting: -

Tuning IBM WebSphere Portal and IBM Web Content Manager for best anonymous page performance 

IBM WebSphere Portal (hereafter called "Portal"), with or without IBM Web Content Manager (hereafter called WCM), performs well only with effective caching. There are multiple levels and types of caching within Portal/WCM, including HTTP caching, DynaCache caching, and other custom JavaTM caches.

Out of the box, Portal/WCM is not configured (from a caching perspective) for production loads; instead, it's configured for development usage with all features enabled. For a production environment, Portal (without cache enablement and tuning) is not able to support medium to large transaction rates effectively. 

Preparing Portal for a production environment requires effective caching to improve the performance of the Portal/WCM server. This includes improving the caching of the pages, portlets, themes, and static resources.

Although there are various layers of caching available, the single most effective cache option is to cache the HTML rendered for the whole Portal page, including caching the static resources referenced by the page. 

The next most effective solution is to cache the HTML for each portlet prior to rendering (portlet caching), and this solution is followed by caching the content of each portlet so that dynamic generation of the portlet is faster. 

Note that, as pages and portlets become more cached (that is, there is a higher probability that what the user needs already exists in a cache), the content must become less personalized to the user.

The authors are too of IBM's finest minds: -

Alex Lang joined IBM in 1982, since which time he has had various technical and management assignments in networking, digital signal processing, Java advocacy, and IBM WebSphere. He is currently the Technical Team Lead for the WebSphere Portal SEAL team. His primary focus is resolving critical customer situations involving the architecture, deployment, and operation of WebSphere Portal and Web Content Manager. You can reach Alex at alex_lang@us.ibm.com.

Thomas Hurek is a Software Architect at IBM's Research Triangle Park Development Lab. He has worked on the WebSphere Portal development team for ten years, focusing on various components including security and virtual portals. In his current role he supports clients as a lab-based services consultant and works as Chief Programmer on the development of the product. You can contact Thomas at thurek@us.ibm.com.

both of whom have been of help to me over the past year or so, as I've been working on a complex-but-enjoyable social portal project for a client here in the UK.

Alex is also a bit of a whiz on virtualization, and has provided some fascinating insights into the performance of WebSphere-based workloads on VMware.

The article is in the Wiki here.

Tuesday 28 August 2012

Ubuntu Linux - Failure to Launch

I hit an issue with a fresh install of Ubuntu 12.04 earlier today - having booted, and installed, from a DVD containing a Live CD, I expected my PC to happily reboot, once I'd removed the DVD and pressed [Enter].

Sadly, it booted as far as a black screen, with a flashing cursor :-( I tried a number of times, but to no avail.

I re-booted from the Live CD, and checked that the disk looked good, using the Ubuntu Disk Utility tool ( sweetly named palimpsest ) and also checked the partition layout, using another tool - partitionmanager.

All looked fine, so I jumped onto the Mac for a spot of Googling.

Using the search terms "ubuntu 12.04 boot loader", I hit upon this blog post: -


which led me to believe that the Grub boot loader might be at fault.

The author, Josh B, had a clear set of instructions that applied to me, having booted from the Live CD: -

If you just have the Ubuntu Live CD try these steps:

• Boot from Live CD
• Open a terminal from the Live CD, and run the following commands:

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair
boot-repair

• Follow the Recommended Repair option. Press "Advanced" to check what it will do.

• The stressful bit. Now reboot and you will be able to use Grub.

I did as advised and, upon reboot, was back in the game.

Am now happily using 12.04 ( Precise Pangolin ) without any further woes :-)

Thanks, Josh :-)

Friday 24 August 2012

WebSphere Portal 8 and Lotus Domino 8.5.1 Together - Can you say Doh! ?

I hit a problem earlier today that harks back to my very first experiences with WebSphere Portal 5 and Lotus Domino 6, back in the mid-noughties.

Having used the new(to me) web-based wizard to configure my newly installed WebSphere Portal 8 server to connect to a Lotus Domino 8.5.1 FP1 server for LDAP, I was surprised to see errors such as: -

[8/24/12 15:00:06:221 BST] 0000000c Servlet       E com.ibm.wps.engine.Servlet init EJPFD0016E: Initialization of service failed.
                                 com.ibm.wps.ac.DomainAdministratorNotFoundException: EJPSB0107E: Exception occurred while retrieving the identity of the domain admin user/admingroup cn=padmins.

Caused by: com.ibm.portal.puma.MemberNotFoundException: EJPSG0002E: Requested Member does not exist.cn=padmins
        at com.ibm.wps.services.puma.PumaServiceImpl.findGroupById(PumaServiceImpl.java:381)
        at com.ibm.wps.services.puma.Puma.findGroupById(Puma.java:406)
        at com.ibm.wps.ac.impl.AccessControlDataManagementServiceImpl.convertDNtoObjectID(AccessControlDataManagementServiceImpl.java:1143)
        ... 40 more
Caused by: com.ibm.wps.um.exceptions.impl.MemberNotFoundExceptionImpl: com.ibm.portal.puma.MemberNotFoundException: EJPSG0002E: Requested Member does not exist.cn=padmins/null
        at com.ibm.wps.um.VMMExceptionHelper.rethrowSystemMNF(VMMExceptionHelper.java:227)
        at com.ibm.wps.um.PumaEngineHelper.loadWithBaseAttributes(PumaEngineHelper.java:771)


[8/24/12 15:00:08:151 BST] 0000000b InitServlet   E   INI8504E:One or more initialization step failed. Please check the server log for details.
                                 javax.jcr.RepositoryException: RT7508E: Unable to initialize RepositoryFactory due to exception of type: java.lang.ExceptionInInitializerError with message: null.


etc.

I dug around, reviewing a whole bunch of IBM Technotes etc. and, eventually, realised my mistake.

Broadly put, Lotus Domino doesn't like / allow / support ( delete as appropriate ) groups to be suffixed with the organisation name. Therefore, whilst a user / person ID can be written as CN=padmin,O=ibm, group names are never suffixed, but are written as CN=padmins.

When I ran the wizard to hook WebSphere Portal up to Lotus Domino via LDAP, one of the attributes that the wizard requires is the Base Distinguished Name ( BaseDN ), which I entered as: -

standalone.ldap.baseDN=o=ibm

That was my mistake :-)

The solution ? Well, the hack :-)

Edit: -

/opt/IBM/WebSphere/wp_profile/config/cells/wp8cell/wim/config/wimconfig.xml

and change: -

      <config:baseEntries name="o=ibm" nameInRepository="o=ibm"/>
        <config:participatingBaseEntries name="o=ibm"/>

to: -

      <config:baseEntries name="" nameInRepository=""/>
        <config:participatingBaseEntries name=""/>

and then restart the portal.

Once I did that, Portal started without exceptions, and I was able to log in using the Domino user - padmin - which is now the primary admin. account.

For the record, hacking wimconfig.xml in this way is almost certainly NOT advisable, and would be a very bad thing in a federated repository environment ( where you have multiple directories in WIM, including LDAP, file system, database etc. ).

The better solution would be to fix the problem via the wizard ( or update wkplc.properties ), and re-run the Portal -> Domino configuration process again.

For the record, here's the rest of the properties, including the WRONGLY entered Base DN: -

standalone.ldap.baseDN=o=ibm
standalone.ldap.bindDN=cn=domino,o=ibm
standalone.ldap.bindPassword=passw0rd
standalone.ldap.et.group.objectClasses=groupOfUniqueNames
standalone.ldap.et.group.objectClassesForCreate=
standalone.ldap.et.group.searchBases=
standalone.ldap.et.personaccount.objectClasses=inetorgperson
standalone.ldap.et.personaccount.searchBases=
standalone.ldap.gm.dummyMember=uid=dummy
standalone.ldap.gm.groupMemberName=uniqueMember
standalone.ldap.gm.objectClass=groupOfUniqueNames
standalone.ldap.gm.scope=direct
standalone.ldap.groupFilter=(&(cn=%v)(|(objectclass=dominoGroup)(objectclass=groupOfNames)(objectclass=groupOfUniqueNames)))
standalone.ldap.groupIdMap=*:cn
standalone.ldap.groupMemberIdMap=
standalone.ldap.groupParent=
standalone.ldap.groupRdnProperties=cn
standalone.ldap.host=wp8.uk.ibm.com
standalone.ldap.ldapServerType=DOMINO
standalone.ldap.personAccountParent=
standalone.ldap.personAccountRdnProperties=uid
standalone.ldap.port=389
standalone.ldap.primaryAdminId=cn=padmin,o=ibm
standalone.ldap.primaryAdminPassword=passw0rd
standalone.ldap.primaryPortalAdminGroup=cn=padmins
standalone.ldap.primaryPortalAdminId=cn=padmin,o=ibm
standalone.ldap.primaryPortalAdminPassword=passw0rd
standalone.ldap.realm=domino85
standalone.ldap.serverId=cn=domino,o=ibm
standalone.ldap.serverPassword=passw0rd
standalone.ldap.userFilter=(&(|(cn=%v)(uid=%v))(|(objectlass=dominoPerson)(objectclass=inetOrgPerson)))
standalone.ldap.userIdMap=*:cn
WasPassword=passw0rd


Tuesday 21 August 2012

Eureka, Mac OS X File Permissions - I did not know that

Ah, well, again I learn something new every day ...

I've been battling against a strange problem with OS X file permissions on an external USB drive.

I was able to create files in a particular directory, but not delete them :-(

From a command prompt, I could do things such as: -

$ cd /Volumes/DaveHay/Software/WP8/Fixes
$ touch foo

but was unable to remove the newly created file: -

rm foo

rm: foo: Operation not permitted

even as the "super user".

$ sudo bash
$ rm foo

rm: foo: Operation not permitted

I'd checked for, and where necessary, removed the Lock bit using Finder


but to no avail.

I'd also experimented with the chown, chmod and chflags commands, but again to no avail: -

chown 1000:1000 foo
$ chmod 777 foo
chflags nouchg foo

I'd also tried changing the higher-level group ownership: -

chgrp -R 1000 Fixes/

but no dice.

The strange thing was that the ls command returned a strange attribute for ownership: -

$ ls -al

total 2461040
drwxrwxr-x  12 1000      1000            408 21 Aug 10:39 .
drwxrwxrwx  10 1000      1000            340 21 Aug 10:02 ..
-rwxrwxrwx@  1 _unknown  _unknown       6148 21 Aug 10:31 .DS_Store
-rw-rw-r--@  1 1000      1000          65328 13 Aug 15:44 8.0.0.0-WP-IFPM64172.zip
-rwxrwxrwx@  1 1000      1000           1523 13 Aug 15:44 8.0.0.0-WP-WCM-Combined-CFPM65285-CF01_Readme.txt
-rwxrwxrwx@  1 1000      1000      629983062 13 Aug 15:44 8.0.0.0-WP-WCM-Combined-CFPM65285-Server-CF01.zip
drwxrwxrwx   6 1000      1000            204 13 Aug 15:44 Combined
-rw-r--r--@  1 1000      1000      629979568 13 Aug 15:44 PM65285_Server.zip
-rwxr-xr-x@  1 1000      1000           2809 13 Aug 15:45 WP8CF01Rollback-Server-sample.xml
-rwxr-xr-x@  1 1000      1000           4004 13 Aug 15:44 WP8CF01Update-Server-sample.xml
-rwxrwxrwx   1 _unknown  _unknown          0 21 Aug 10:04 foo
drwxr-xr-x   2 _unknown  _unknown         68 21 Aug 10:39 untitled folder


The solution ?

To run the chflags command again, but with the nouappnd attribute: -

chflags -R nouappnd Fixes/

This then let me change the ownership: -

$ chown 1000:1000 foo
$ chown 1000:1000 untitled\ folder/

etc. and, more importantly, remove the unwanted objects.

Various websites helped me reach the solution, but this particular one: -


provided the final piece of the jigsaw: -

chflags   - Change a file or folder's flags. These flags are supported:

arch   - the archived flag
opaque   - the opaque flag
nodump   - the nodump flag
sappnd   - the system-controlled append-only flag
schg   - the system-controlled immutable flag
uappnd   - the user append-only flag
uchg   - the user immutable flag (on files, this is equivalent to locking the file in the Finder's Show Info box).

Most flags require root access to set or clear; the uappnd and uchg flags can also be controlled by the file's owner; the sappnd and schg flags cannot be removed (even by root) except in single-user mode. To remove a flag, use "no" in front of the flag's name (this can be a bit confusing - nouchg means the file can be changed, while uchg means it cannot).

So, in conclusion, the problem wasn't with the uchg ( user immutable flag ), it was with the uappnd ( user append-only flag ), which explained why I could create but not delete files and folders.

Simple when you know how :-)

Tuesday 14 August 2012

WebSphere Portal v8 on Red Hat Enterprise Linux - revisited

As promised last time around, I have spent more time documenting and scripting the installation of WebSphere Portal 8 on Linux, and have overcome many of the challenges that I saw then, partly because I paid more attention to the documentation, including the WP8 Wiki: -


For the record, I'm using Red Hat Enterprise Linux 6.3 x86-64 and a download of WebSphere Portal Enable v8, unpacked using the following script: -

mkdir /tmp/WP8
unzip /mnt/CI7N3ML.zip -d /tmp/WP8
unzip /mnt/CI7N4ML.zip -d /tmp/WP8
unzip /mnt/CI7N5ML.zip -d /tmp/WP8
unzip /mnt/CI7N6ML.zip -d /tmp/WP8
unzip /mnt/CI7N7ML.zip -d /tmp/WP8
unzip /mnt/CI7N8ML.zip -d /tmp/WP8
unzip /mnt/CI7N9ML.zip -d /tmp/WP8
unzip /mnt/CI7NAML.zip -d /tmp/WP8
tar -xvzf /mnt/CI7NDML.tar.gz -C /tmp/WP8
unzip /mnt/CI7V6ML.zip -d /tmp/WP8
unzip /mnt/CI7V7ML.zip -d /tmp/WP8

As I was installing on a VM, using VMware Fusion on the MacBook, I had the source media mounted as /mnt/hgfs.

So, in the words of Morpheus, here we go ...

Install the required libraries, if needed

yum install -y gtk2.i686
yum install -y libXtst.i686
yum install -y gtk2-engines.i686
yum install -y libcanberra-gtk2.i686
yum install -y PackageKit-gtk-module.i686

Check the file descriptor ( -n ) and file size ( -f ) limits

$ ulimit -n

- returned 1024

$ ulimit -f

- returned unlimited

Increased the file descriptor limits

$ vi /etc/security/limits.conf 

- added: -

* hard nofile 10240
* soft nofile 10240
reboot 

$ ulimit -n

- returns 10240

Install IBM Installation Manager

/mnt/WP8/Setup/IIM/linux_x86/installc -acceptLicense -record ~/install_IIM.rsp -skipInstall skip

- results in install_IM.rsp

<?xml version="1.0" encoding="UTF-8"?>
<agent-input>
<server>
<repository location='/tmp/installerRepository5232553412336074951.tmp'/>
<repository location='/mnt/WP8/Setup/IIM/linux_x86'/>
</server>
<profile id='IBM Installation Manager' installLocation='/opt/IBM/InstallationManager/eclipse' kind='self'>
<data key='eclipseLocation' value='/opt/IBM/InstallationManager/eclipse'/>
<data key='user.import.profile' value='false'/>
<data key='cic.selector.os' value='linux'/>
<data key='cic.selector.ws' value='gtk'/>
<data key='cic.selector.arch' value='x86'/>
</profile>
<install modify='false'>
<offering id='com.ibm.cic.agent' version='1.5.2000.20120223_0907' profile='IBM Installation Manager' features='agent_core,agent_jre' installFixes='none'/>
</install>
<preference name='com.ibm.cic.common.core.preferences.connectTimeout' value='30'/>
<preference name='com.ibm.cic.common.core.preferences.readTimeout' value='45'/>
<preference name='com.ibm.cic.common.core.preferences.downloadAutoRetryCount' value='0'/>
<preference name='offering.service.repositories.areUsed' value='true'/>
<preference name='com.ibm.cic.common.core.preferences.ssl.nonsecureMode' value='false'/>
<preference name='com.ibm.cic.common.core.preferences.http.disablePreemptiveAuthentication' value='false'/>
<preference name='http.ntlm.auth.kind' value='NTLM'/>
<preference name='http.ntlm.auth.enableIntegrated.win32' value='true'/>
<preference name='com.ibm.cic.common.core.preferences.preserveDownloadedArtifacts' value='true'/>
<preference name='com.ibm.cic.common.core.preferences.keepFetchedFiles' value='false'/>
<preference name='PassportAdvantageIsEnabled' value='false'/>
<preference name='com.ibm.cic.common.core.preferences.searchForUpdates' value='false'/>
<preference name='com.ibm.cic.agent.ui.displayInternalVersion' value='false'/>
<preference name='com.ibm.cic.common.sharedUI.showErrorLog' value='true'/>
<preference name='com.ibm.cic.common.sharedUI.showWarningLog' value='true'/>
<preference name='com.ibm.cic.common.sharedUI.showNoteLog' value='true'/>
</agent-input>


Update IBM Installation Manager (IIM)

$ /opt/IBM/InstallationManager/eclipse/IBMIM

- Choose File -> Preferences
- Select the Updates tab
- Check Search for Installation Manager updates
- Click OK
- This returned: -

A new version of IBM Installation Manager is available.  If you do not update the Installation Manager you will not be allowed to install some packages that require the new version of the Installation Manager.

Do you want to update the Installation Manager?
  Running Installation Manager version 1.5.2 (internal version 1.5.2000.20120223_0907).
  Found Installation Manager version 1.5.3 (internal version 1.5.3000.20120531_1954).

- Post-update, restart IIM

Record a response file for the WP8 installation

/opt/IBM/InstallationManager/eclipse/IBMIM -record ~/install_WP8.rsp -skipInstall /tmp

- Choose File > Preferences
- Select the Repositories tab
- Add the following repositories: -


- Click Install
- Select WebSphere Application Server Network Deployment, WebSphere Portal Server and WebSphere Portal Enable
- Click Next
- Select the listed WAS iFixes - four at this time; that may change over time
- Click Next
- Read and then Accept the license agreement
- Click Next
- Accept the default shared resources directory - /opt/IBM/WebSphere/IMShared
- Click Next

- Click Next

- Click Next
- Click Next
- Select your required Profile Template type - I chose Full
- Click Next
- Select your configuration mode - I chose Standard
- Click Next
- Complete the configuration details for your environment - I chose: -

Host name rhel6.uk.ibm.com
Node name rhel6node
Cell name  rhel6cell
Administrator user ID wpsadmin
Administrator password passw0rd

- Click Next
- Confirm the summary, and then click Install

This should take 30 seconds or so, and then return back a nice friendly installation complete message :-) Of course, this is JUST recording the response file, not performing the actual installation

- Choose File -> Exit to close IIM

- This is the resulting response file: -

<?xml version="1.0" encoding="UTF-8"?>
<!--The "acceptLicense" attribute has been deprecated. Use "-acceptLicense" command line option to accept license agreements.-->
<agent-input acceptLicense='true'>
<server>
<repository location='/mnt/hgfs/WP8/WAS'/>
<repository location='/mnt/hgfs/WP8/Portal'/>
<repository location='/mnt/hgfs/WP8/Enable'/>

</server>
<profile id='IBM WebSphere Application Server Network Deployment V8.0' installLocation='/opt/IBM/WebSphere/AppServer'>
<data key='eclipseLocation' value='/opt/IBM/WebSphere/AppServer'/>
<data key='user.import.profile' value='false'/>
<data key='cic.selector.os' value='linux'/>
<data key='cic.selector.ws' value='gtk'/>
<data key='cic.selector.arch' value='x86'/>
<data key='cic.selector.nl' value='en'/>
</profile>
<install modify='false'>
<offering id='8.0.0.3-WS-WAS-TFPM59935' version='8.0.3.20120309_1201' profile='IBM WebSphere Application Server Network Deployment V8.0' features='-'/>
<offering id='8.0.0.3-WS-WAS-TFPM60670' version='8.0.3.20120319_1949' profile='IBM WebSphere Application Server Network Deployment V8.0' features='-'/>
<offering id='8.0.0.3-WS-WAS-TFPM61934' version='8.0.3.20120409_1230' profile='IBM WebSphere Application Server Network Deployment V8.0' features='-'/>
<offering id='8.0.0.3-WS-WASProd-TFPM60134' version='8.0.3.20120312_1656' profile='IBM WebSphere Application Server Network Deployment V8.0' features='-'/>
<offering id='com.ibm.websphere.ND.v80' version='8.0.3.20120320_0536' profile='IBM WebSphere Application Server Network Deployment V8.0' features='core.feature,ejbdeploy,thinclient,embeddablecontainer,com.ibm.sdk.6_64bit' installFixes='none'/>
<offering id='com.ibm.websphere.PORTAL.SERVER.v80' version='8.0.0.20120421_0828' profile='IBM WebSphere Portal Server V8' features='ce.install,portal.binary,portal.profile' installFixes='none'/>
<offering id='com.ibm.websphere.PORTAL.ENABLE.v80' version='8.0.0.20120421_0909' profile='IBM WebSphere Portal Server V8' features='enable.upsell' installFixes='none'/>
</install>
<profile id='IBM WebSphere Portal Server V8' installLocation='/opt/IBM/WebSphere/PortalServer'>
<data key='eclipseLocation' value='/opt/IBM/WebSphere/PortalServer'/>
<data key='user.import.profile' value='false'/>
<data key='cic.selector.os' value='linux'/>
<data key='cic.selector.ws' value='gtk'/>
<data key='cic.selector.arch' value='x86'/>
<data key='user.was.installLocation,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/AppServer'/>
<data key='user.profile.config.mode,com.ibm.websphere.PORTAL.SERVER.v80' value='standard'/>
<data key='user.wp.install.type,com.ibm.websphere.PORTAL.SERVER.v80' value='full'/>
<data key='user.iim.currentlocale,com.ibm.websphere.PORTAL.SERVER.v80' value='en'/>
<data key='user.wp.hostname,com.ibm.websphere.PORTAL.SERVER.v80' value='rhel6.uk.ibm.com'/>
<data key='user.wp.cellname,com.ibm.websphere.PORTAL.SERVER.v80' value='rhel6cell'/>
<data key='user.wp.nodename,com.ibm.websphere.PORTAL.SERVER.v80' value='rhel6node'/>
<data key='user.wp.userid,com.ibm.websphere.PORTAL.SERVER.v80' value='wpsadmin'/>
<data key='user.wp.password,com.ibm.websphere.PORTAL.SERVER.v80' value='4taxKp1Gj5q5aCi+LjSKHQ=='/>
<data key='user.wp.admin.port,com.ibm.websphere.PORTAL.SERVER.v80' value='10000'/>
<data key='user.wp.portal.port,com.ibm.websphere.PORTAL.SERVER.v80' value='10025'/>
<data key='user.was.forward.installLocation,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/AppServer'/>
<data key='user.wp.profilename,com.ibm.websphere.PORTAL.SERVER.v80' value='wp_profile'/>
<data key='user.common.installPath,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere'/>
<data key='user.configengine.profileLocation,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/wp_profile/ConfigEngine'/>
<data key='user.configengine.binaryLocation,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/ConfigEngine'/>
<data key='user.configengine.forward.binaryLocation,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/ConfigEngine'/>
<data key='user.wp.profilepath,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/wp_profile'/>
<data key='user.wp.forward.profilepath,com.ibm.websphere.PORTAL.SERVER.v80' value='/opt/IBM/WebSphere/wp_profile'/>
<data key='user.was.uninstall.selected,com.ibm.websphere.PORTAL.SERVER.v80' value='false'/>
<data key='user.wp.uri.values.changed,com.ibm.websphere.PORTAL.SERVER.v80' value='false'/>
<data key='cic.selector.nl' value='en'/>
</profile>
<preference name='com.ibm.cic.common.core.preferences.eclipseCache' value='/opt/IBM/WebSphere/IMShared'/>
<preference name='com.ibm.cic.common.core.preferences.connectTimeout' value='30'/>
<preference name='com.ibm.cic.common.core.preferences.readTimeout' value='45'/>
<preference name='com.ibm.cic.common.core.preferences.downloadAutoRetryCount' value='0'/>
<preference name='offering.service.repositories.areUsed' value='true'/>
<preference name='com.ibm.cic.common.core.preferences.ssl.nonsecureMode' value='false'/>
<preference name='com.ibm.cic.common.core.preferences.http.disablePreemptiveAuthentication' value='false'/>
<preference name='http.ntlm.auth.kind' value='NTLM'/>
<preference name='http.ntlm.auth.enableIntegrated.win32' value='true'/>
<preference name='com.ibm.cic.common.core.preferences.preserveDownloadedArtifacts' value='true'/>
<preference name='com.ibm.cic.common.core.preferences.keepFetchedFiles' value='false'/>
<preference name='PassportAdvantageIsEnabled' value='false'/>
<preference name='com.ibm.cic.common.core.preferences.searchForUpdates' value='false'/>
<preference name='com.ibm.cic.agent.ui.displayInternalVersion' value='false'/>
<preference name='com.ibm.cic.common.sharedUI.showErrorLog' value='true'/>
<preference name='com.ibm.cic.common.sharedUI.showWarningLog' value='true'/>
<preference name='com.ibm.cic.common.sharedUI.showNoteLog' value='true'/>
</agent-input>

Note that the order of the repositories is important: -

<repository location='/mnt/hgfs/WP8/WAS'/>
<repository location='/mnt/hgfs/WP8/Portal'/>
<repository location='/mnt/hgfs/WP8/Enable'/>

I previously had this: -

<repository location='/mnt/hgfs/WP8/Enable'/>
<repository location='/mnt/hgfs/WP8/Portal'/>
<repository location='/mnt/hgfs/WP8/Setup/Repository'/>
<repository location='/mnt/hgfs/WP8/WAS'/>


but kept seeing this exception: -

<result>
<error uid="CRIMA1154E">
  Error installing.
</error>
<error>
  The silent installation process does not support installing packages that are contained on multiple media discs.</error>
</result>


After much faffing around, I looked at one of the provided sample response file - /mnt/hgfs/WP8/Setup/responsefiles/enable_standalone_full.xml. : -

    <!-- Fill in the locations of the WAS and Portal installation repositories -->
    <!-- that are accessible from the system where the install will be run.    -->
    <!-- You can fill in the repositories separately, or you may point to      -->
    <!-- a consolidated repository that defines all products.                  -->
    <!-- If using separate repositories, be sure to list them in this order:   -->
    <!--  repository location='/repository/path/for/WAS'                       -->
    <!--  repository location='/repository/path/for/WAS-fixes'                 -->
    <!--  repository location='/repository/path/for/Server Portal'             -->
    <!--  repository location='/repository/path/for/Enable Portal'             -->

Perform the installation

$ /opt/IBM/InstallationManager/eclipse/IBMIM -input install_WP8.rsp -log install_WP8.log -silent

Installed 8.0.0.3-WS-WAS-TFPM59935_8.0.3.20120309_1201 to the /opt/IBM/WebSphere/AppServer directory.
Installed 8.0.0.3-WS-WAS-TFPM60670_8.0.3.20120319_1949 to the /opt/IBM/WebSphere/AppServer directory.
Installed 8.0.0.3-WS-WAS-TFPM61934_8.0.3.20120409_1230 to the /opt/IBM/WebSphere/AppServer directory.
Installed 8.0.0.3-WS-WASProd-TFPM60134_8.0.3.20120312_1656 to the /opt/IBM/WebSphere/AppServer directory.
Installed com.ibm.websphere.ND.v80_8.0.3.20120320_0536 to the /opt/IBM/WebSphere/AppServer directory.
Installed com.ibm.websphere.PORTAL.SERVER.v80_8.0.0.20120421_0828 to the /opt/IBM/WebSphere/PortalServer directory.
Installed com.ibm.websphere.PORTAL.ENABLE.v80_8.0.0.20120421_0909 to the /opt/IBM/WebSphere/PortalServer directory.
WARNING: Problem at line 3, column 35: The "acceptLicense" attribute has been deprecated. Use "-acceptLicense" command line option to accept license agreements.


with the same warning repeated in install_WP8.log: -

<?xml version="1.0" encoding="UTF-8"?>
<result>
</result>
tail: install_WP8.log: file truncated
<?xml version="1.0" encoding="UTF-8"?>
<result>
<warning>
  Problem at line 3, column 35: The "acceptLicense" attribute has been deprecated. Use "-acceptLicense" command line option to accept license agreements.
</warning>
</result>


which is fine.

Next time around, I'll install like this: -

/opt/IBM/InstallationManager/eclipse/IBMIM -input install_WP8.rsp -log install_WP8.log -silent -acceptLicense

In the meantime, Portal is working perfectly, and the problem that I'd seen previously ( where the New... button doesn't appear in WCM ) has gone away.

For the record, the missing button was because I'd installed WebSphere Portal Server rather than Enable, meaning that WCM wasn't properly installed.

If anyone wants to know how I solved it, please let me know - I've got a PDF that walks through the process of adding WCM to an existing Portal Server installation.

Final point - unlike last time around the WPVersionInfo.sh command works perfectly.

For the record, this is what I now have: -

/opt/IBM/WebSphere/AppServer/bin/versionInfo.sh

Name                  IBM WebSphere Application Server Network Deployment
Version               8.0.0.3
ID                    ND
Build Level           cf031212.03
Build Date            3/20/12
Package               com.ibm.websphere.ND.v80_8.0.3.20120320_0536
Architecture          x86-64 (64 bit)
Installed Features    IBM 64-bit SDK for Java, Version 6
                      EJBDeploy tool for pre-EJB 3.0 modules
                      Embeddable EJB container
                      Stand-alone thin clients and resource adapters



/opt/IBM/WebSphere/PortalServer/bin/WPVersionInfo.sh

Name           IBM WebSphere Portal MultiPlatform
Version        8.0.0.0
ID             MP
Build Level    wp800_404_02 2012-04-21
Build Date     04/21/2012

Name           IBM Web Content Manager
Version        8.0.0.0
ID             WCM
Build Level    wp800_404_02 (8.0.0.0_build_24.274)
Build Date     04/21/2012

Name           IBM WebSphere Portal Configuration Framework
Version        8.0.0.0
ID             CFGFW
Build Level    wp800_404_01 2012-04-20
Build Date     04/20/2012

Tuesday 7 August 2012

DB2 UDB - Interesting quirk with auto-start on Linux

I've posted about DB2 auto-starting issues before: -

Automagically starting DB2 UDB on Linux - revisited

but I found an interesting and quirky new challenge with DB2 UDB 9.7 today.

I'm using Red Hat Enterprise Linux 6.3 x86-64 under VMware Fusion 4 on an Apple Mac.

$ /opt/ibm/db2/V9.7/bin/db2level 

DB21085I  Instance "db2inst1" uses "64" bits and DB2 code release "SQL09075" 
with level identifier "08060107".
Informational tokens are "DB2 v9.7.0.5", "s111017", "IP23292", and Fix Pack 
"5".
Product is installed at "/opt/ibm/db2/V9.7".


The major symptom was that DB2 wasn't auto-starting after a reboot, despite my following all my previous advice.

One difference between now and then is that, with RHEL 6.3, the DB2 Fault Monitor is no longer started by /etc/inittab but is instead started by /etc/init/db2fmcd.conf.

This is described in various Technotes, including: -


...
As of RHEL 6, the /etc/inittab file has been deprecated. Specifying this option removes the db2fmcd.conf file.
...

So I checked my system, and could see /etc/init/db2fmcd.conf which contained: -

# DB2 fault monitor 
# Starts fmcd
# Note: any customizations to this file will be lost the next time this is updated

description 'Fault Monitor is the DB2 database facility that monitors DB2 database manager instances, and restarting any instance that exits permaturely.'
version 'DB2 v9.7.0.5'

start on stopped rc RUNLEVEL=[2345]
stop on starting rc RUNLEVEL=[016]

console output
respawn
respawn limit 10 120

exec /opt/ibm/db2/V9.7/bin/db2fmcmd


So being me, I checked to see whether the listed program - /opt/ibm/db2/V9.7/bin/db2fmcmd - actually exists.

$ ls -al /opt/ibm/db2/V9.7/bin/db2fmcmd

which returned: -

ls: cannot access /opt/ibm/db2/V9.7/bin/db2fmcmd: No such file or directory

However, we do have: -

$ ls -al /opt/ibm/db2/V9.7/bin/db2fmcd 

-r-xr-xr-x 1 bin bin 145964 Aug  1 18:10 /opt/ibm/db2/V9.7/bin/db2fmcd

So I updated /etc/init/db2fmcd.conf as follows: -

# DB2 fault monitor 
# Starts fmcd
# Note: any customizations to this file will be lost the next time this is updated

description 'Fault Monitor is the DB2 database facility that monitors DB2 database manager instances, and restarting any instance that exits permaturely.'
version 'DB2 v9.7.0.5'

start on stopped rc RUNLEVEL=[2345]
stop on starting rc RUNLEVEL=[016]

console output
respawn
respawn limit 10 120

# exec /opt/ibm/db2/V9.7/bin/db2fmcmd
exec /opt/ibm/db2/V9.7/bin/db2fmcd


and rebooted.

Lo and behold, DB2 then automagically started.

Interesting ?

More on IBM Connections 3 and Response Files - Updating to 3.0.1.1

So I followed my previous post: -


by creating a new response file to install the 3.0.1.1 fix pack, which I'd previously downloaded from IBM Fix Central - here's the direct link to the fix pack.

So I started by recording the response file: -

$ /opt/IBM/InstallationManager/eclipse/IBMIM -record ~/LC_update.rsp -skipInstall skip

and noted that it's smart enough to install the update directly from the downloaded ZIP file: -

...
<repository location='/root/3.0.1.0-LC-Multi-FP001.zip'/>
...

and then used the response file to update Connections: -

$ /opt/IBM/InstallationManager/eclipse/IBMIM -silent -input ~/LC_update.rsp 

which resulted in: -

Update results : 
News updated successfully.
Search updated successfully.
Profiles updated successfully.
Activities updated successfully.
Blogs updated successfully.
Communities updated successfully.
Bookmarks updated successfully.
Files updated successfully.
Forums updated successfully.
Home page updated successfully.
Wikis updated successfully.
Mobile updated successfully.
Moderation updated successfully.


Very impressive.

Now to get the CR2 fixes ....

An Aide Memoire - IBM HTTP Server and IBM Connections / WebSphere Portal

Purely for my own recollection, these are the key directives that I need to add to IBM HTTP Server's configuration file - httpd.conf - in order to: -

(a) Enable SSL
(b) Force "redirection" from HTTP to HTTPS
(c) Always land on the Connections Homepage -OR- land at /wps/portal rather than the stock IHS welcome page - index.html 

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
<IfModule mod_ibm_ssl.c>
    Listen 443
    KeyFile /opt/IBM/HTTPServer/ssl/key.kdb
    SSLDisable
    SSLStashFile /opt/IBM/HTTPServer/ssl/key.sth
    <VirtualHost *:443>
ServerName ic301.uk.ibm.com
        SSLEnable
        SSLProtocolDisable SSLv2
    </VirtualHost>
</IfModule>

# IBM Connections specific

<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}/homepage [L]
        RewriteLog logs/rewrite.log
        RewriteLogLevel 4
</ifModule>

# WebSphere Portal specific

<ifModule mod_rewrite.c>
     RewriteEngine on
     RewriteCond %{SERVER_PORT} ^80$
     RewriteRule ^/$ /wps/portal/ [R=301,L]
     RewriteLog logs/rewrite.log
     RewriteLogLevel 4
</ifModule>

LoadModule was_ap22_module /opt/IBM/HTTPServer/Plugins/bin/32bits/mod_was_ap22_http.so
WebSpherePluginConfig /opt/IBM/HTTPServer/Plugins/config/webserver1/plugin-cfg.xml








Monday 6 August 2012

IBM Connections 3 - SCHD0063E: A task with ID 1 failed to run on Scheduler CommunitiesScheduler

Oops, having followed my previous posts, and moved from a Medium to a Small Deployment for IBM Connections 3, I then hit the following errors, seen in SystemOut.log, when starting my new small single-server cluster: -

...
[06/08/12 16:55:50:066 BST] 00000036 AlarmListener E   SCHD0063E: A task with ID 1 failed to run on Scheduler CommunitiesScheduler (scheduler/communities) because of an exception: com.ibm.websphere.scheduler.UserCalendarInvalid: SCHD0013E: The following error occurred while accessing the UserCalendar with JNDI Name com/ibm/websphere/scheduler/calendar/DefaultUserCalendarHome and specifier CRON : SCHD0137E: Unable to create EJB instance for UserCalendar: java.rmi.RemoteException: CORBA NO_IMPLEMENT 0x49421042 No; nested exception is:
        org.omg.CORBA.NO_IMPLEMENT:
        >> SERVER (id=11c328fe, host=ic301.uk.ibm.com) TRACE START:
        >>    org.omg.CORBA.NO_IMPLEMENT: No Cluster Data Available  vmcid: 0x49421000  minor code: 42  completed: No

[06/08/12 16:55:50:081 BST] 0000003b AlarmListener E   SCHD0063E: A task with ID 4 failed to run on Scheduler WikisScheduler (scheduler/wikis) because of an exception: com.ibm.websphere.scheduler.UserCalendarInvalid: SCHD0013E: The following error occurred while accessing the UserCalendar with JNDI Name com/ibm/websphere/scheduler/calendar/DefaultUserCalendarHome and specifier CRON : SCHD0137E: Unable to create EJB instance for UserCalendar: java.rmi.RemoteException: CORBA NO_IMPLEMENT 0x49421042 No; nested exception is:
        org.omg.CORBA.NO_IMPLEMENT:
        >> SERVER (id=11c328fe, host=ic301.uk.ibm.com) TRACE START:
        >>    org.omg.CORBA.NO_IMPLEMENT: No Cluster Data Available  vmcid: 0x49421000  minor code: 42  completed: No
...

Thankfully, this old-but-useful Technote came to my aid: -


In essence, I needed to clean up the databases ( for the Search Scheduler task ) and then refresh the Search task.

I started by stopping (!) my cluster, and then running the clearScheduler SQL script against some of the databases ( note that not all appear to have this option ): -

$ su - db2inst1
$ cd  /tmp/Wizards/Wizards/connections.sql

Activites

$ db2 -td@ -vf activities/db2/clearScheduler.sql 

Communities

$ db2 -td@ -vf communities/db2/clearScheduler.sql 

Files

$ db2 -td@ -vf files/db2/clearScheduler.sql 

Forums

$ db2 -td@ -vf forum/db2/clearScheduler.sql 

Homepage

$ db2 -tvf homepage/db2/clearScheduler.sql 

Profiles

$ db2 -tvf profiles/db2/clearScheduler.sql 

Wikis

$ db2 -td@ -vf wikis/db2/clearScheduler.sql 

before restarting the cluster 

I then jumped across to a completely different source of information, one that's more up-to-date: -


cd /opt/IBM/WebSphere/AppServer/profiles/Dmgr01/bin
$ ./wsadmin.sh -lang jython

wsadmin> execfile("connectionsConfig.py")
wsadmin> Scheduler.listAllTasks()
wsadmin> Scheduler.clearAllTasks()

and then restarted the cluster.

This time around, I get NO nasty scheduling errors.

Therefore, I'm not 100% sure that I actually needed to run the clearSchedule SQL script but it doesn't appear to have hurt :-)

Installing and Uninstalling IBM Connections 3 using response files

I know that I'm way behind the curve, but I've been getting to grips with the methods available to automate IBM Connections deployments, using IBM Installation Manager (IIM), which was introduced with IBM Connections 3 in late 2010 :-)

This will be of use for future blog posts, especially as more IBM products are now using IIM, including WebSphere Portal 8.

So the trick is to create your response files, which is useful in helping one understand how IIM works.

IBM Connections DOES come with a sample response file; for me, it was located here: -

/tmp/ic3/Lotus_Connections_Install/LotusConnections/LC.rsp

once I unpacked IBM_Connections301_LinAIX_CI3XPML.tar.

However, I chose to record a response file of my very own, for three reasons: -

(a) Education
(b) To reinstall the product using a different Deployment Topology ( Small rather than Medium )
(c) I'll surely need to use a response file in the future, where a GUI is not available to me e.g. at a customer site only using SSH/Telnet

The second point related to my wish to install everything ( Connections, DB2, TDI, WAS etc. ) on a single VM, *but* being constrained by VMware Fusion's 8 GB RAM limit ( 8 GB per VM ).

This caused problems: using the Medium Topology gave me three clusters, each of which were quite memory-hungry, causing the VM to start swapping RAM to disk, which made my MacBook an unhappy camper.

Having uninstalled the product, initially using the GUI, I then set about recording a new response file ( for Small rather than Medium ).

Response file recording requires the GUI, so it's not always achievable :-(

This is how I started the recording ( bearing in mind that IIM was already installed ): -

$ /opt/IBM/InstallationManager/eclipse/IBMIM -record ~/LC_small.rsp -skipInstall skip

The -skipInstall skip parameter tells IIM to ONLY generate the response file, and not install the products. Otherwise, you can do BOTH, which gives you a response file for future use.

Once recorded, the response file can be used as follows: -

/opt/IBM/InstallationManager/eclipse/IBMIM -silent -input ~/LC_small.rsp

Upon completion, I ended up with a working IC3 environment, and the following messages: -

...
java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:347)
at com.ibm.connections.install.BasicLogChecker.loadCheckPoints(BasicLogChecker.java:166)
at com.ibm.connections.install.BasicLogChecker.execute(BasicLogChecker.java:80)
at com.ibm.connections.install.ResultPanel.checkInstallLog(ResultPanel.java:34)
at com.ibm.connections.install.ResultPanel.checkInstallOperationLog(ResultPanel.java:402)
at com.ibm.connections.install.ResultPanel.run(ResultPanel.java:95)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at com.ibm.cic.agent.core.commonNativeInstallAdapter.Invoke$InvokeRunnable.run(Invoke.java:189)
at java.lang.Thread.run(Thread.java:810)

( repeating x 13 )

The following repositories are not connected:-/tmp/installerRepository30746.tmp

Install results : 
News installed successfully.
Search installed successfully.
Profiles installed successfully.
Activities installed successfully.
Blogs installed successfully.
Communities installed successfully.
Bookmarks installed successfully.
Files installed successfully.
Forums installed successfully.
Home page installed successfully.
Wikis installed successfully.
Mobile installed successfully.
Moderation installed successfully.
...

Not yet too sure what java.util.NoSuchElementException pertains to, but that's one for another day. It's worth noting that the error appeared 13 times, which is one per Connections service.

I also checked the installation logs here: -

/opt/IBM/LotusConnections/logs

but there were no obvious exceptions. Each of the 13 logs ended with: -

...
     [exec] action-post-config:
     [exec] Mon Aug 06 16:03:14 BST 2012
     [exec]      [echo] executing post-configuration tasks
     [exec] 
     [exec] BUILD SUCCESSFUL
     [exec] Total time: 2 minutes 13 seconds
     [exec] isIseries currently set to: null

...

Two final points: -

(a) If IIM is not yet install, you can generate the response file thusly: -

/tmp/ic3/Lotus_Connections_Install/IM/linux/generate_install_responsefile.sh

(b) Again, installing using the response file BEFORE IIM is installed goes something like this: -

/tmp/ic3/Lotus_Connections_Install/IM/linux/install.silent.sh -log -inpt ../../LotusConnections/LC_small.rsp 

On a related note, I did have an issue where I'd chosen an inappropriate node name, as per my blog post here. Having an uninstall response file helped, as I went back and forth through the install/uninstall process until I finally sorted it out.

CLFRP0037E: failed to be configured on WAS.

I saw this earlier during an IBM Connections 3.0.0 installation: -

CLFRP0037E: News failed to be configured on WebSphere Application Server.
CLFRP0037E: Search failed to be configured on WebSphere Application Server.
CLFRP0037E: Profiles failed to be configured on WebSphere Application Server.
CLFRP0037E: Activities failed to be configured on WebSphere Application Server.
CLFRP0037E: Blogs failed to be configured on WebSphere Application Server.
CLFRP0037E: Communities failed to be configured on WebSphere Application Server.
CLFRP0037E: Bookmarks failed to be configured on WebSphere Application Server.
CLFRP0037E: Files failed to be configured on WebSphere Application Server.
CLFRP0037E: Forums failed to be configured on WebSphere Application Server.
CLFRP0037E: Home page failed to be configured on WebSphere Application Server.
CLFRP0037E: Wikis failed to be configured on WebSphere Application Server.
CLFRP0037E: Mobile failed to be configured on WebSphere Application Server.
CLFRP0037E: Moderation failed to be configured on WebSphere Application Server.

IBM Installation Manager showed an error for each and every IC3 application: Activities, Blogs, News etc.

When I dug further into the logs, such as: -

/opt/IBM/LotusConnections/logs/activitiesInstall.log

I saw: -

     [exec] [wplc-create-server] Caused by: com.ibm.websphere.management.cmdframework.InvalidParameterValueException: ADMF0003E: Invalid parameter value ic301.uk.ibm.com for parameter nodeName for command createApplicationServer.

I realised the error of my ways.

I'd used an inappropriate node name - ic301.uk.ibm.com - rather than, say, ic301.

I was performing a silent installation using a response file, so it was easy to uninstall and then reinstall.

This is the section of the response file that I needed to change, from: -

...
<data key='user.lcinstallscript.path' value='/var/ibm/InstallationManager/../LCInstallScript'/>
<data key='user.clusterlist' value=''/>
<data key='user.nodeslist' value='ic301.uk.ibm.com,localhostNode01,'/><data key='user.clusterfullinfo' value=''/>
<data key='user.was.installlocation' value='/opt/IBM/WebSphere/AppServer'/>
<data key='user.was.userhome' value='/opt/IBM/WebSphere/AppServer/profiles/Dmgr01'/>
<data key='user.was.wasSoapPort' value='8879'/>

...

to: -

...
<data key='user.lcinstallscript.path' value='/var/ibm/InstallationManager/../LCInstallScript'/>
<data key='user.clusterlist' value=''/>
<data key='user.nodeslist' value='ic301,localhostNode01,'/>
<data key='user.clusterfullinfo' value=''/>
<data key='user.was.installlocation' value='/opt/IBM/WebSphere/AppServer'/>
<data key='user.was.userhome' value='/opt/IBM/WebSphere/AppServer/profiles/Dmgr01'/>
<data key='user.was.wasSoapPort' value='8879'/>

...

I did this once I'd cleared up my WAS cell - having a node called ic301.uk.ibm.com led to the problem; IIM had picked this up when I first recorded the response file.

Hey, it's all about life on the learning curve.

Visual Studio Code - Wow 🙀

Why did I not know that I can merely hit [cmd] [p]  to bring up a search box allowing me to search my project e.g. a repo cloned from GitHub...