VM IMAP Beta Release 1.6.1 Installation
IMPORTANT NOTE: The index structure used by Beta Release 1.6 and higher is not compatible with the index structure used by earlier beta levels. If you were running a level of the IMAP server prior to Beta Release 1.5, you MUST delete and re-enroll all users so that they will end up with the new index structure. If you're running level 1.5 you can either delete and re-enroll all users or you can use the IMAP5TO6 sample exec to convert their existing indexes in the mailstore to the new format. Don't forget - if you choose to change index formats by deleting and re-enrolling users, deleting a user causes all their existing mail and folders to be removed from the mailstore. |
1) SETTING UP THE IMAP SERVER VIRTUAL MACHINE: ------------------------------------------- - minimum system requirements o VM 2.3.0, CMS14, TCP/IP 310 o LE 1.8 o SMTP APAR PQ31576 required o SMTP APAR PQ41591 recommended o CMS APAR VM61477 recommended o CMS APAR VM62318 recommended o CMS APAR VM61821 and TCPIP APAR PQ17871 only required if you want to use a translate table other than the default one (note - you should also review PQ26583 and PQ31152) o CMS APAR VM62679 recommended o CP APAR VM62662 recommended - requires an "IUCV *SPL" directory statement to allow the server to connect to the *SPL system service in order to asynchronously read in mail as it arrives in the server's reader - requires an "IUCV ANY" (or an "IUCV sfs_server_id") directory statement to allow it to connect to the Mailstore SFS server (the IMAP server also must have SFS admin authority to the SFS filepool) Note: This directory statement for the IMAP server will allow it to connect to the SFS server as opposed to the usual method of having an IUCV ALLOW statement in the SFS server's directory. This is necessary because we do not want IMAP users able to directly connect to the SFS server and corrupt the directory structure or the data residing in the filepool. If you have other users that will need to access the SFS server (eg: backup machines) you will need to add an IUCV sfs_server_id to their directory entries too. - requires an "IUCV ALLOW" to enable the IMAP server for incoming APPC/VM conversations which will be initiated by any IMAP administrators that have been specified in the CMS private resource registration file on the IMAP server's A disk and which use the queue-based administrative interface that is provided in the IMAP SAMPEXEC - requires an "OPTION MAXCONN 2000" directory statement to allow up to 2000 IUCV connections to the SFS server. - if running with AUTHENTICATE CP, requires privilege class B in order to issue DIAG 84 to validate passwords. If running with AUTHENTICATE ESM, this may not be required, but some authorizations will need to be configured on the ESM. - sample IMAP server directory entry might look like: USER IMAP XXXXXXXX 128M 256M BG ACCOUNT XXX ACIGROUP SERVER IUCV ALLOW IUCV ANY IUCV *SPL MACHINE XC OPTION MAXCONN 2000 QUICKDSP IPL CMS PARM AUTOCR CONSOLE 0009 3215 T SPOOL 000C 2540 READER * SPOOL 000D 2540 PUNCH A SPOOL 000E 1403 A LINK MAINT 0190 0190 RR LINK MAINT 019E 019E RR LINK TCPMAINT 0592 0592 RR MDISK 0191 3390 3316 2 K1E41A MR - requires a $SERVER$ NAMES file (private resource registration file) on an accessed disk with the following VMIPC entry to list any virtual machines that will be using the queue-based administrative interface (IMAP SAMPEXEC) to issue commands to the IMAP server (such as ENROLL USERID): +---------------------------------+ | :nick.VMIPC | | :list.user1 user2 user3 ... | +---------------------------------+ - requires an IMAP CONFIG file (userid CONFIG is also allowed) on an accessed disk which specifies configuration information for the IMAP server (FILEPOOLID and BADFILEID are required IMAP configuration file statements to specify the filepool id of the mailstore and the userid to which bad mail files should be sent, if these are not configured the server will not start). The following are the currently supported statements that can be specified in the IMAP CONFIG file: FILEPOOLID userid - userid of the SFS server containing IMAP's mailstore. No default. BADFILEID userid - userid to whom reader files are transferred when the IMAP server has difficulty delivering them. No default. MAILORIGINID userid ... - userids from whom mail arriving in the reader must originate. Default is obtained from the TCPIP DATA file. If not present in the TCPIP DATA file, defaults to SMTP. Up to 32 userids may be listed. TRACE ALL - turns all tracing on (CODEFLOW, SOCKLIBCALLS, and SOCKETIO). TRACE CODEFLOW - turns module entry/exit tracing on. TRACE SOCKLIBCALLS - turns socket library call tracing on. TRACE SOCKETIO [ipaddr] - turns tracing of all data sent or received on a socket on. If an IP address is given, only sockets active from that IP address will be displayed. AUTHENTICATE CP|ESM - whether userids should be authenticated by CP (the directory) or by an external security manager. Default is CP. PORT integer - TCP port number on which the IMAP server will listen. If omitted IMAP listens on port 143. READERTHREADS integer - number of threads to create to handle incoming reader files. Default is 1 thread. IDLETIMEOUT integer integer - first integer is the amount of time (in seconds) that an unauthenticated connection can be idle (have no activity). The second integer is the amount of time (in seconds) that an authenticated connection can be be idle. Default values are 60 and 0 (0 means infinity). RFC 2060 section 5.4 restricts the second number to a minimum of 1800 (30 minutes). ENROLLDEFAULTS integer integer - first integer is the number of blocks to allocate for a user if no value is provided on the ENROLL command. The second number is the storage group the user should be enrolled in. Defaults are 100 and 2 respectively. Blank lines are allowed, and comment lines must begin with a semicolon. - the PROFILE EXEC for the IMAP server should be updated to activate the C runtime library (GLOBAL LOADLIB SCEERUN), and (optionally) to start up the IMAP server (IMAPMAIN MODULE) - to provide a custom translate table follow the directions in the TCPIP documentation for creating a TCPXLBIN file (or copy an existing file with the desired translation). The IMAP server follows the standard hierarchy for translation tables. It first looks for IMAP TCPXLBIN, if that is not found it looks for STANDARD TCPXLBIN. Lastly if neither are found it uses a hardcoded translate table that is adequate for most purposes. It is strongly recommended that IMAP be configured to use the same translation table as SMTP is using. 2) SETTING UP THE MAILSTORE SFS SERVER VIRTUAL MACHINE: ---------------------------------------------------- - we strongly recommend a dedicated SFS server be used as the IMAP mailstore. For details on setup and configuring an SFS filepool please refer to the Filepool Planning, Administration and Operation manual for your VM release. What we're documenting here are the differences from a "normal" filepool setup. - requires an "IUCV *IDENT" directory statement to identify itself as a resource owner, but no "IUCV ALLOW" since we do not want enrolled user's to be able to connect to the server and corrupt the directory structure or the data residing in the filepool - requires an "OPTION MAXCONN 2000 APPLMON" directory statement to allow up to 2000 APPC connections to the server. One APPC connection is used for each active user. 2000 is a reasonable initial default. If you expect to have more than 2000 concurrent users you should adjust it upward to match the expected number of users. This number should be the same for the IMAP server and the IMAP mailstore. - make sure that the IMAP server virtual machine has SFS admin authority for the filepool - sample IMAP mailstore SFS server directory entry might look like: USER IMAPSFS XXXXXXXX 128M 512M G ACCOUNT G28G GXX/BOX 002 ACIGROUP SERVER IUCV *IDENT RESANY GLOBAL REVOKE MACHINE XC OPTION MAXCONN 2000 APPLMON QUICKDSP IPL CMS PARM AUTOCR CONSOLE 0009 3215 T SPOOL 000C 2540 READER * SPOOL 000D 2540 PUNCH A SPOOL 000E 1403 A LINK MAINT 0190 0190 RR LINK MAINT 019D 019D RR LINK MAINT 019E 019E RR MDISK 0191 3390 3336 1 K1E419 MR MDISK 0301 3390 2906 ? K1E400 MR MDISK 0302 3390 3336 ? K1E400 MR MDISK 0303 3390 3337 ? K1E400 MR MDISK 0304 3390 3338 ? K1E400 MR MDISK 0305 3390 3336 ? K1E418 MR 3) SETTING UP ANY IMAP ADMINISTRATIVE VIRTUAL MACHINES: ---------------------------------------------------- - an administrative virtual machine will be used to enroll and delete users in the IMAP Mailstore as well as issue other administrator commands (eg: shutdown the server, set an alert, etc.). This may be the systems programmer's personal id or someone else's id or an id purposely created for IMAP administration. - make sure that the administrator userid(s) are specified in the private resource registration file ($SERVER$ NAMES) on the IMAP server virtual machine. Keep in mind that each userid listed in $SERVER$ NAMES has access to the full suite of administrator commands and can DELETE users, shut the server down, or in other ways cause havoc. - requires the IMAP SAMPEXEC to communicate with the IMAP server using the queue-based administrative interface - IMAP SAMPEXEC should be renamed to have a filename matching the IMAP server virtual machine userid, a filetype of exec and then must reside on an accessed disk so that the administer can run the exec to issue administrative commands Example: For an IMAP server with a userid of IMAP, the exec would be renamed to IMAP EXEC and "IMAP ENROLL SMITH" would enroll userid SMITH into the IMAP mailstore. - the following are the currently implemented administrator commands: ALERT [optional text] If no text is supplied then the current alert is cleared. If text is supplied it becomes the alert text that will be forwarded to each client on their next transaction. CP command The specified command is passed UNCHANGED (it is not uppercased for example) to CP for execution via a DIAGnose 08. The command's return code is returned. This is useful for spooling console closed, etc.. DELETE userid Un-enroll the specified userid ENROLL userid [blocks [storage_group]] Enroll a userid in the mailstore, optionally an initial block allocation and storage group can be specified. If omitted, their values default to those specified on EnrollDefaults in the config file. HELP Returns a list of supported commands MODIFY userid +/-blocks Increase or decrease the number of blocks a user is authorised to consume in the mailstore. SHAREFOLDER to_user foldername owning_user foldername This adds an entry in the to user's mailbox index table for a folder with foldername. The entry actually points to owning_user's folder (see usage note below). SHUTDOWN Shut down the IMAP server STARTRDR Start an additional thread to process reader files. STATS [RESET] Return a list of server statistic counters, and optionally reset the counters. TRACE ALL|CODEFLOW|SOCKLIBCALLS|SOCKETIO [ipaddr] [ON|OFF] TRACE ALL [ON] turns on all (codeflow, socklibcalls and socketio (for all IP addresses)) tracing. TRACE ALL OFF turns off all (codeflow, socklibcalls and socketio) tracing. TRACE CODEFLOW [ON] turns on just module entry and exit tracing. TRACE CODEFLOW OFF turns off module entry and exit tracing. TRACE SOCKETIO [ON] turns on display of all data sent and received on a socket. You can optionally specify an IP address. Only sockets active from that IP address will have their socket data displayed. TRACE SOCKETIO OFF turns off socket I/O tracing. TRACE SOCKLIBCALLS [ON] traces each socket library call. TRACE SOCKLIBCALLS OFF turns off socket library call tracing. - the needed SFS authorities must be in place before issuing the SHAREFOLDER command. The folder owner must have granted read access to their MAILBOX INDEX file in their highest level directory and also read access to each file in the directory being shared. SHAREFOLDER does not attempt to issue the needed grant commands because there are a number of SFS ESMs each of which handles the granting of authorities in their own way. If you would find an exit useful at this point (so the granting may be automated) please let us know. 4) CONFIGURING THE SMTP MACHINE TO ROUTE MAIL TO THE IMAP SERVER: -------------------------------------------------------------- In general we recommend a dedicated SMTP server for use with IMAP. This does not require a dedicated stack, since you can use multihoming support. However you must be at FL 320 before the multihoming support works with SMTP. We do have beta customers running on FL 310, using the command exit on their primary SMTP (with FL 310 and FL 320) or not using our IMAPCMDX at all since they run with a mailer (they have developed similar function for use with their mailer (IMAP determines who the mail is destined for by examining netdata text unit INMTUID (x1002), the important thing is that it be set correctly)). So the recommendation to use a dedicated server is flexible. - if you are not calling your IMAP server IMAP you must edit IMAPCMDX and update the servername variable (while in there, verify the at sign character is defined as expected for your code page (generally only a concern in Scandinavia)) - place the IMAPCMDX EXEC and IMAP123 REXX files on SMTP's 191 (or somewhere in it's access order, eg: TCPMAINT's 198) - in order to have mail sent to the IMAP mailstore, the SMTP virtual machine must be configured to send local mail to the IMAP virtual machine. This is done using the command exit for the PUNCH command. Add the following to your SMTP's config: SMTPCMDS EXIT IMAPCMDX EXEC FOR PUNCH ON ENDSMTPCMDS - this will cause SMTP to call our exit which will send a file over to the IMAP virtual machine whenever local mail arrives - the IMAP virtual machine will determine if the mail is for a registered IMAP user and automatically place it in the INBOX for that user (if it is not for a registered IMAP user, then it will transfer it directly to the user) 5) STARTING UP THE IMAP SERVER: ---------------------------- - once all of the appropriate setup work has taken place, start the IMAP server by invoking the IMAPMAIN MODULE from the command line or profile of the IMAP server virtual machine - IMAPMAIN performs the following: -- read and process the configuration information from the configuration file (it first looks for a serverid CONFIG * file, if that is not found it looks for an IMAP CONFIG * file) -- create a thread to process console input -- create a thread to process mail arriving through the spool -- create a thread to handle administration requests -- create a thread to listen for new connections on the IMAP port (this thread will create an additional thread for every new client connection to the server) 6) ENROLLING IMAP USERS: --------------------- - when the IMAP server is up and running, the administrative interface is used to enroll new users - from an administrative virtual machine, invoke the sample exec (which has been renamed from IMAP SAMPEXEC to the name of the IMAP server with filetype exec) to enroll a user eg: IMAP ENROLL SMITH - this will cause the IMAP server to perform the following: -- enroll the userid in the SFS filepool -- create an INBOX directory for the user -- create the MAILBOX INDEX file in the user's root directory to contain a list of the user's folders and add the INBOX folder to the table - note that the CSL routines called to Enroll and Delete users can only be called synchronously. Bulk enrolls and deletes should not be done at a peak time for client use since their response will be impacted. - there is only a single thread processing administrator requests. Multiple concurrent requests will be processed synchronously. 7) MAIL COMING INTO THE IMAP SERVER: --------------------------------- - if the SMTP machine has been configured to route mail to the IMAP server then all local mail for the system will be routed over to the IMAP server. - the IMAP server's mail arrival thread will use the *SPL system service to read in the note data and, if the mail is destined for an enrolled IMAP user, it will add the message to the user's INBOX by doing the following: -- generating a UID (unique identifier) message attribute for the message -- parsing the note and writing the data into a file in the user's INBOX directory using the UID for a filename and a filetype of NOTE (if the note was a multipart note an index of the parts will also be created also using the UID for a filename and a filetype of PARTINDX) -- adding an entry to INBOX's NOTE INDEX file for the new message -- updating the entry for INBOX in MAILBOX INDEX to have updated counts of total messages, unseen messages, etc. - if the note is for a user that is not a registered IMAP user the file is transferred to their virtual reader. 8) CLIENT INTERACTION WITH THE IMAP SERVER: ---------------------------------------- - while the IMAP server is up and running, users can use any client that supports the IMAP4rev1 protocol (RFC2060) to connect to the IMAP server and perform IMAP client functions (such as creating/deleting/renaming mailboxes, checking for new messages, deleting messages, etc.) - in order for the client to get into the authenticated state, it is necessary to send a LOGIN command (rather than the AUTHENTICATE command). The initial release of the server requires that the userid and password be a valid VM userid/password pair and the userid must be enrolled in the IMAP mailstore (LOGIN processing checks that the user has an INBOX directory in the filepool) - The IMAP server supports all of the IMAP commands documented in RFC 2060 with the following exceptions: -- optional AUTHENTICATE command is not supported (the LOGIN command must be used to get to the authenticated state) (we hope to provide an AUTHENTICATE exit in the future that would allow a site to use what ever form of authentication they wish). -- there are no experimental commands supported 9) SERVER SIZING RECOMMENDATIONS ----------------------------- - we recommend that the IMAP server initially be given a storage size between 128M and 256M. If you're expecting heavy usage (>3000 concurrent users) you should increase this amount. Beta level 1.6 requires significantly less storage to support a given workload than earlier levels did (the threading logic has been redesigned, each client connection no longer requires a dedicated thread).