Sun Java logo     Previous      Contents      Index      Next     

Sun logo
Sun Java Enterprise System 2005Q4 Deployment Example: Telecommunications Provider Scenario 

Appendix A
Specialized Implementation Topics

This appendix covers topics and procedures that are used in the Telco deployment, but are too specialized to place in the main body of this document.

Enabling LMTP for Messaging Server MTA Interactions

LMTP is a protocol used by Messaging Server MTA components to interact with each other. LMTP is used in the Telco architecture for communication between the MTA components on jesIMR1 and jesIMR1 and the MTA component on the back-end messaging store (jesMCSb, jesMSc). LMTP must be enabled on both ends of the communication.

  1. Enable LMTP on jesMCSb and jesMSc.
    1. Edit the /global/jesMCSb/ms_data/var/opt/SUNWmsgsr/
      file. First, uncomment and edit the following lines:

      ! rfc 2033 LMTP server - native


    3. Edit the /global/jesMCSb/ms_data/var/opt/SUNWmsgsr/config
      file. Uncomment the following text:
    4. ! tcp_lmtpss (LMTP server - store)
      tcp_lmtpss lmtp subdirs 20

      ! tcp_lmtpsn (LMTP server - native)
      tcp_lmtpsn lmtp subdirs 20

    5. Execute the following commands:
    6. # cd /global/jesMCSb/ms_data/var/opt/SUNWmsgsr/sbin
      # ./imsimta cnbuild
      # ./imsimta restart

  2. Enable LMTP on jesIMR1.
    1. Activate text databases needed by LMTP.
    2. Edit the /global/jesIMR1/var/opt/SUNWmsgsr/config/option.dat file. Add the following lines:


    3. Create the general.txt database needed by LMTP.
    4. # cd /global/jesIMR1/opt/SUNWmsgsr/config/
      # vi general.txt

      LMTP_CS| lmtpcs-daemon

    5. Add the text shown in bold to the “rules” section of the imta.cnf file.
    6. ! tcp_local
      ! Rules for top level internet domains
      ! Do mapping lookup for internal IP addresses
      [] $E$R${INTERNAL_IP,$L}$U%[$L]@tcp_intranet-daemon
      ! Do general.txt lookup for lmtp hosts $S$U%$H$D@$(LMTP_CN|$U@$H$D) $S$U%$H$D@$(LMTP_CS|$H$D)
      ! tcp_intranet
      ! Do mapping lookup for internal IP addresses
      [] $E$R${INTERNAL_IP,$L}$U%[$L]@tcp_intranet-daemon $U%$
      * $U%$&

    7. In the “channel” section of the imta.conf file, uncomment the following lines.
    8. ! tcp_lmtpcs (LMTP client - store)
      tcp_lmtpcs defragment lmtp port 225 nomx single_sys subdirs   20 maxjobs 7 pool SMTP_POOL dequeue_removeroute

      ! tcp_lmtpcn (LMTP client - native)
      tcp_lmtpcn defragment lmtp port 226 nomx single_sys subdirs   20 maxjobs 7 pool SMTP_POOL dequeue_removeroute

    9. Execute the following commands:
    10. # cd /global/jesIMR1/opt/SUNWmsgsr/sbin
      # ./imsimta cnbuild
      # ./imsimta restart

  3. Verify the operation of LMTP.
    1. Test LMTP on jesIMR1.
    2. # cd /global/jesIMR1/opt/SUNWmsgsr/sbin

      # ./imsimta test -rewrite -debug


    3. If you see the following response, LMTP is operating correctly.
    4. Expanded address:
      Submitted address list:
      tcp_lmtpcs (orig, inter

    5. If you get the following response (note the string in bold), LMTP is not operating correctly:
    6. Expanded address:
      Submitted address list:
      tcp_intranet (orig, inter,

  4. Test LMTP on jesMCSb.
  5. Verify end-to-end routing for a test user (buser0001) by checking that the email account is located on jesMCSb.

    1. Execute the following commands:
    2. # cd /global/jesMCSb/ms_data/opt/ms_data/SUNWmsgsr/sbin

      # ./imsimta test -rewrite -debug

    3. If you get the following response, LMTP is operating correctly.
    4. .....

      Expanded address:
      Submitted address list: ims-ms
      buser0001@ims-ms-daemon (orig,
      inter, host ims-ms-daemon) *NOTIFY-FAILURES* *NOTIFY-DELAYS*

      The ims-ms means that it has found a local queue for buser0001 and does not have to route the email any further.

A Sample User Provisioning Script

The following script can be used to provision users for load testing the Telco deployment example. You can enter the number of users you wish to provision, and otherwise modify the script to meet your needs.

Code Example A-1  Sample User Provisioning Script 

#! /usr/bin/perl

local $comlocation = "/global/jesPAM1/opt/SUNWcomm/bin/";

sub createuser;

sub moduser;

my $curruser = "";

my $grade = "b";

my $domain = ",dc=net,dc=telco,dc=com";

for ($i=0; $i<=$#ARGV; $i++) {

if ($ARGV[$i] eq "-c") {

$grade = "c";

$domain = ",dc=net,dc=telco,dc=com"



print "\nTelecommunications Provider user provisioning script \n\n";

print "Enter starting user no: ";

$startuser = <STDIN>;


print "Enter end user no: ";

$stopuser = <STDIN>;


print "will attempt to provision users ",$grade,"user" , $startuser , " to ",$grade,"user" , $stopuser ,"\n";

for ($usecount=$startuser;$usecount <= $stopuser;$usecount ++) {

$curruser = sprintf("user%04d",$usecount);




sub createuser {

my $curruser = $_[0];

my $grade = $_[1];

my $domain = $_[2];

my $madmin = "admin";

if ($grade eq "c") {

$madmin = "";


my $creatstr1 = "commadmin user create -D \"$madmin\" -w password -n \"$domain\" -d \"$domain\" -l ";

my $creatstr2 = " -F user -L ";

my $creatstr3 = " -W password";

my $commstr = sprintf("%s%s%s%s%s%s%s%s",$comlocation,$creatstr1,

       $grade,$curruser ,$creatstr2,$grade,$curruser,$creatstr3);

print $commstr,"\n";

(system($commstr)) && die ("Cmd failed: $! \n");

sleep (2);


sub moduser {

my $curruser = $_[0];

my $grade = $_[1];

my $domain = $_[2];

my $mhost = "";

my $madmin = "admin";

if ($grade eq "c") {

$mhost = "";

$madmin = "";


my $modstr1 = "commadmin user modify -D \"$madmin\" -w password -n \"$domain\" -d \"$domain\" -l ";

my $modstr2 = " -S mail,cal";

my $modstr3 = " -A +objectclass:sunssoadapterperson";

my $modstr4 = " -A +objectclass:sunportaldesktopperson";

my $modstr5 = " -A mailhost:$mhost";

my $modstr6 = " -A +objectclass:sunportalnetfileservice";

my $commstr = sprintf("%s%s%s%s%s",$comlocation,$modstr1,$grade,$curruser,$modstr2);

print $commstr,"\n";

(system($commstr)) && die ("Cmd failed: $! \n");

sleep (2);

if ($grade eq "b") {

$commstr = sprintf("%s%s%s%s%s",$comlocation,$modstr1,$grade,$curruser,$modstr3);

print $commstr,"\n";

(system($commstr)) && die ("Cmd failed: $! \n");

sleep (2);

$commstr = sprintf("%s%s%s%s%s",$comlocation,$modstr1,$grade,$curruser,$modstr4);

print $commstr,"\n";

(system($commstr)) && die ("Cmd failed: $! \n");

sleep (2);


$commstr = sprintf("%s%s%s%s%s",$comlocation,$modstr1,$grade,$curruser,$modstr5);

print $commstr,"\n";

(system($commstr)) && die ("Cmd failed: $! \n");

sleep (2);

if ($grade eq "b"){

$commstr = sprintf("%s%s%s%s%s",$comlocation,$modstr1,$grade,$curruser,$modstr6);

print $commstr,"\n";

(system($commstr)) && die ("Cmd failed: $! \n");

sleep (2);



Sun Cluster Software Status Output

This section displays the output from the Sun Cluster Software status check performed at the end of Module #5: Business-class Messaging Server and Calendar Server on Sun Cluster Nodes. It also interprets the output for you.

The first section of the output is displayed in Code Example A-2. This part of the output describes the physical nodes that make up the cluster.

Code Example A-2  Cluster Node Section

- Cluster Nodes --

Node name Status

--------- ------

Cluster node: jesMCS1b Online

Cluster node: jesMCS2b Online

The second section of the output is displayed in Code Example A-3. This part of the output describes the private cluster interconnect interfaces and the fact that they are up. They have gigabit cross-over cables connected.

Code Example A-3  Cluster Transport Paths

-- Cluster Transport Paths --

Endpoint Endpoint Status

-------- -------- ------

Transport path: jesMCS1b:ce5 jesMCS2b:ce5 Path online

Transport path: jesMCS1b:ce1 jesMCS2b:ce1 Path online

The third section of the output is displayed in Code Example A-4. This part of the output describes how many votes are required for the cluster to function. It shows that each of the computers is contributing 1 vote to the cluster quorum and that one of the shared disks is being used to provide an additional vote. This means that the cluster will continue to function if at least one computer and the global disk device are alive.

Code Example A-4  Quorum Summary 


-- Quorum Summary --

Quorum votes possible: 3

Quorum votes needed: 2

Quorum votes present: 3

-- Quorum Votes by Node --

Node Name Present Possible Status

--------- ------- -------- ------

Node votes: jesMCS1b 1 1 Online

Node votes: jesMCS2b 1 1 Online

-- Quorum Votes by Device --

Device Name Present Possible Status

----------- ------- -------- ------

Device votes: /dev/did/rdsk/d18s2 1 1 Online

The fourth section of the output is displayed in Code Example A-5. This section describes the disk device groups set up through Solaris volume manager to support the messaging and calendar stores.

Code Example A-5  Device Group Status

-- Device Group Status -

repository for messaging and calendar

Device Group Status

------------ ------

Device group status: ms_data Online

Device group status: cs_data Online

The fifth section of the output is displayed in Code Example A-6. This part of the output reports that resource group IMS-RG consists of the logical cluster interface name jesMCSb and the messaging and calendar cluster agents.

Code Example A-6  Resource Groups and Resources 

Resource Groups and Resources --

Group Name Resources

---------- ---------

Resources: IMS-RG jesMCSb ims-rs scics-rs

-- Resource Groups --

Group Name Node Name State

---------- --------- -----

Group: IMS-RG jesMCS1b Offline

Group: IMS-RG jesMCS2b Online

-- Resources --

jesMCSb the logical hostname

ims-rs the messaging cluster agent

scics-rs the calendar cluster agent.

Resource Name Node Name State StatusMessage

------------- --------- ----- --------------

Resource:jesMCSb jesMCS1b Offline LogicalHostname offline. Resource:jesMCSb jesMCS2b Online LogicalHostname online.

Resource: ims-rs jesMCS1b Offline Offline - Stop Succeeded

Resource: ims-rs jesMCS2b Online O Online - Start succeeded.

Resource: scics-rs jesMCS1b Offline Offline

Resource: scics-rs jesMCS2b Online Online


Previous      Contents      Index      Next     

Part No: 819-5485-10.   Copyright 2006 Sun Microsystems, Inc. All rights reserved.