windows-notes-20050630
[openafs.git] / doc / txt / winnotes / msi-deployment-guide.txt
1
2 OpenAFS for Windows
3                          MSI Deployment Guide
4 ----------------------------------------------------------------------
5
6      Contents
7
8      1.  Introduction
9      1.1   Requirements
10
11      2.  Configuration options
12      2.1   Configurable properties
13      2.2   Existing registry values
14      2.3   Replacing Configuration Files
15      2.4   Adding Domain Specific Registry Keys
16      2.5   Adding Site Specific Freelance Registry Keys
17
18      3.  Additional resources
19
20      4.  Upgrades
21
22      5.  FAQ
23
24
25 ----------------------------------------------------------------------
26
27 1.  Introduction
28
29     Beginning with OpenAFS for Windows version 1.3.65 a MSI installer
30     option is available for those who wish to use Windows
31     Installer for installing OpenAFS and for organizations that wish
32     to deploy OpenAFS through Group Policy.
33
34     This document provides a guide for authoring transforms used to
35     customize the MSI package for a particular organization.  Although 
36     many settings can be deployed via transforms, in an Active 
37     Directory environment it is advisable to deploy registry settings
38     and configuration files through group policy and/or startup 
39     scripts so that machines where OpenAFS for Windows is already
40     installed will pick up these customizations.
41
42 1.1 Requirements
43
44     The information in this document applies to MSI packages
45     distributed with OpenAFS for Windows releases from 1.3.65 and
46     onwards or MSI packages built from corresponding source
47     releases. Not all releases support all the configuration options
48     documented here.
49
50     Authoring a "Windows Installer" transform requires additional
51     software for editing the MSI database tables and generating the
52     transform from the modified MSI package.  ORCA.EXE and MSITRAN.EXE
53     which are included in the Windows Platform SDK ("Windows Installer"
54     SDK) can be used for this purpose.
55
56     For reference, the schema for the MSI package is based on
57     SCHEMA.MSI distributed with the Platform SDK.
58
59     For general information about "Windows Installer", refer to :
60
61     http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp
62
63     For general information about authoring MSI transforms, refer to :
64
65     http://msdn.microsoft.com/library/en-us/msi/setup/transforms.asp
66
67     The remainder of this document assumes some familiarity with
68     authoring transforms.  While the MSDN documentation for Windows
69     Installer is a bit dense, it is recommended that you read through
70     the guide on MSI transforms found at the second link above.  Also
71     MSDN includes a step-by-step example for creating a transform at:
72
73     http://msdn.microsoft.com/library/en-us/msi/setup/a_customization_transform_example.asp
74
75 1.2  Authoring a Transform
76
77     Transforms describe a set of modifications to be performed on an
78     existing MSI for the purpose of customizing it.  This is
79     ordinarily done by making a copy of the MSI to be customized,
80     modifying the copy and then using the old and the new MSI to
81     generate a transform.
82
83     E.g:
84        > copy openafs.msi openafs-modified.msi
85        
86        (edit the openafs-modified.msi to include the necessary changes)
87
88        > msitran -g openafs.msi openafs-modified.msi openafs-transform.mst
89
90        (generates openafs-transform.mst, which is the transform)
91
92     Transforms have an extension of .mst.  'msitran' is a tool
93     distributed as part of the "Windows Installer" SDK (which in turn is
94     a part of the Windows Platform SDK).
95
96     You can test a transform by :
97
98        > copy openafs.msi openafs-test.msi
99        > msitran -a openafs-transform.mst openafs-test.msi
100
101     and then checking the resulting openafs-test.msi to see if all the
102     changes you have made above to openafs-modified.msi is present in
103     openafs-test.msi.  'msitran' will complain if some modification in the
104     transform can not be successfully applied.
105
106     As mentioned above, you can use a tool like ORCA.EXE to edit the
107     MSI databases directly when editing openafs-modified.msi.  More
108     details are given below.
109
110 ----------------------------------------------------------------------
111
112 2.  Configuration Options
113
114     The logic necessary to implement many of the settings described in
115     the registry.txt file are present in the MSI.  Most of these can be
116     controlled by setting the corresponding properties to the desired
117     value.  Some settings may require modifying existing registry
118     entries (though not recommended) or adding new resources (like
119     files or registry keys).  Instructions for performing these tasks
120     are below.
121
122 2.1 Configurable Properties
123
124     Most configurable properties correspond to registry keys or
125     values.  Please refer to the release notes for more information
126     about how these registry settings are used.
127
128     Due to the logic invoked based on the existence of these registry
129     keys or values, they are only set if the associated property is
130     defined to have a non null value.  If the associated property is
131     not defined in the MSI, the registry key or value will not be
132     touched.  By default, the MSI does not contain these properties
133     and hence will not set the registry keys.  You will need to add
134     properties as needed to the MSI.
135
136     When one of the configurable properties is set, the installer will
137     use the property value to set the corresponding setting in the
138     HKEY_LOCAL_MACHINE registry hive.  HKEY_CURRENT_USER hive is not
139     touched by the installer.
140
141     For each property, the associated registry setting is referenced
142     by the same text used in the registry.txt file.
143
144     Strings are quoted using single quotes (e.g. 'a string'). An empty
145     string is denoted as ''.  Note that you can't author null values
146     into the 'Property' table.
147
148     Numeric values should be authored as decimal strings.
149
150 2.1.1  Setting Properties
151
152     In order to set a property,
153
154     a.  Open the MSI in ORCA.EXE
155
156     b.  Select the 'Property' table from the list of tables on the left.
157
158     c.  Find the property in the list of properties on the right,
159         double click the value and type the new value.
160
161     d.  If the property does not exist in the property list, right
162         click the list and select 'Add Row', type the property name
163         and the desired value.
164
165
166 2.1.2   OpenAFS for Windows properties
167
168     (Service parameters):
169     [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]
170
171     (Network provider):
172     [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]
173
174     (OpenAFS Client):
175     [HKLM\SOFTWARE\OpenAFS\Client]
176
177     The configurable properties are as follows:
178
179     AFSCACHEPATH
180         Registry key    : (Service parameters)
181         Registry value  : CachePath
182         Valid values    : string
183
184     AFSCACHESIZE
185         Registry key    : (Service parameters)
186         Registry value  : CacheSize
187         Valid values    : numeric
188
189     AFSCELLNAME
190
191         Registry key    : (Service parameters)
192         Registry value  : Cell
193         Valid values    : string
194
195     CREDSAUTOINIT
196         Valid values    : '-a' or ''
197         
198         Option for AFSCREDS.EXE.  Enables automatic initialization.
199         (see below)
200
201     CREDSIPCHDET
202         Valid values    : '-n' or ''
203
204         Option for AFSCREDS.EXE.  Enables IP address change detection.
205         (see below)
206
207     CREDSQUIET
208         Valid values    : '-q' or ''
209
210         Option for AFSCREDS.EXE.  Enables quiet mode.
211         (see below)
212
213     CREDSRENEWDRMAP
214         Valid values    : '-m' or ''
215
216         Option for AFSCREDS.EXE.  Enables renewing drive map at
217         startup.
218         (see below)
219
220     CREDSSHOW
221         Valid values    : '-s' or ''
222
223         Option for AFSCREDS.EXE.  Enables displaying the credential
224         manager window when AFSCREDS starts up.
225
226         The five properties above determine the behavior of the AFS
227         credential manager ( AFSCREDS.EXE ).  Each property adds a
228         command line option to the shortcut that will be created in
229         the Program Menu, both under 'OpenAFS' and 'Startup' folders
230         (see CREDSSTARTUP).
231
232         The way in which the options are specified was chosen for easy
233         integration with the Windows Installer user interface.
234         Although you can come up with creative ways to provide other
235         options to AFSCREDS.EXE, we advise against it because such
236         transforms may not apply to future releases of OpenAFS.
237
238     CREDSSTARTUP
239         Valid values    : '1' or '0'
240
241         Controls whether AFSCREDS.EXE starts up automatically when a
242         user logs on.  When CREDSSTARTUP is '1' a shortcut is added
243         to the 'Startup' folder in the 'Program menu' which starts
244         AFSCREDS.EXE with the options that are determined by the
245         other CREDS* properties.
246
247     FREELANCEMODE
248
249         Registry key    : (Service parameters)
250         Registry value  : FreelanceClient
251         Valid values    : '1' or '0'
252
253     HIDEDOTFILES
254
255         Registry key    : (Service parameters)
256         Registry value  : HideDotFiles
257         Valid values    : '1' or '0'
258
259     LOGONOPTIONS
260
261         Registry key    : (Network provider)
262         Registry value  : LogonOptions
263         Valid values    : '0','1' or '3'
264
265         See section 2.1 of registry.txt (Domain specific configuration
266         keys for Network Provider) and section [filler] of this
267         document (filler) for more details.
268
269     MOUNTROOT
270
271         Registry key    : (Service parameters)
272         Registry value  : Mountroot
273         Valid values    : string
274
275     NETBIOSNAME
276
277         Registry key    : (Service parameters)
278         Registry value  : NetbiosName
279         Valid values    : string (at most 15 characters)
280
281     NOFINDLANABYNAME
282
283         Registry key    : (Service parameters)
284         Registry value  : NoFindLanaByName
285         Valid values    : '1' or '0'
286
287     RXMAXMTU
288
289         Registry key    : (Service parameters)
290         Registry value  : RxMaxMTU
291         Valid values    : numeric
292
293     SECURITYLEVEL
294
295         Registry key    : (Service parameters)
296         Registry value  : SecurityLevel
297         Valid values    : '1' or '0'
298
299     SMBAUTHTYPE
300
301         Registry key    : (Service parameters)
302         Registry value  : SMBAuthType
303         Valid values    : '0','1' or '2'
304
305     STOREANSIFILENAMES
306
307         Registry key    : (OpenAFS Client)
308         Registry value  : StoreAnsiFilenames
309         Valid values    : '0' or '1'
310
311     USEDNS
312
313         Registry key    : (Service parameters)
314         Registry value  : UseDNS
315         Valid values    : '1' or '0'
316
317
318 2.2 Existing Registry Entries
319
320     You can change existing registry values subject to the
321     restrictions mentioned in the Windows Platform SDK.  Pay special
322     attention to component keypaths and try to only change the 'Value'
323     column in the 'Registry' table.  If you want to add additional
324     registry keys please refer to section 3 (Additional Resources).
325
326 2.3 Replacing Configuration Files
327
328     The OpenAFS configuration files (CellServDB)
329     can be replaced by your own configuration files.  These files are
330     contained in separate MSI components so that you can disable them
331     individually.
332
333     The recommended method for replacing these files is to first
334     disable the components containing the configuration files that you
335     want to replace, and then add new components for the replacement
336     files.  This is outlined below (assuming you are using ORCA.EXE to
337     author the transform).
338
339     Note that transforms are not a good way to add a new file as an
340     embedded stream.  The method outlined here places the file in the
341     same directory as the MSI for deployment.
342
343     The walkthrough below is to add a custom 'CellServDB' file.
344
345     1) Disable the component that contains the configuration file that
346        you want to replace.
347
348        1.1) Locate and select the 'Component' table in the 'Tables'
349             list.
350
351        1.2) In the Component table, locate the component you need to
352             change ( Ctrl-F invokes the 'Find' dialog).  The component
353             names are listed below in section 2.3.1.  For this
354             example, the component name is 'elf_CellServDB'.
355
356        1.3) Go to the 'Condition' column of the component.
357
358        1.4) Enter a condition that evaluates to
359             false. I.e. 'DONOTINSTALL'. (Note that an undefined
360             property always evaluates to false).
361
362        Note that you can also use this step to disable other
363        configuration files without providing replacements.
364
365     2) Add a new component containing the new configuration file.
366
367        2.1) Select the 'Component' table in the 'Tables' list.
368
369        2.2) Select 'Tables'->'Add Row' (Ctrl-R).
370
371        2.3) Enter the following :
372
373             Component     : cmf_my_CellServDB
374             ComponentId   : {7019836F-BB2C-4AF6-9463-0D6EC9035CF1}
375             Directory_    : dirClient
376             Attributes    : 144
377             Condition     :
378             KeyPath       : fil_my_CellServDB
379
380             Note that the ComponentId is an uppercase GUID.  You can
381             generate one using GUIDGEN.EXE or UUIDGEN.EXE, both of
382             which are included in the Platform SDK.
383
384             The Attributes value of 144 is a sum of
385             msidbComponentAttributesPermanent (16) and
386             msidbComponentAttributesNeverOverwrite (128).  This
387             ensures that local modifications are not overwritten or
388             lost during an installation or uninstallation.  These are
389             the same settings used on the default configuration files.
390
391             'fil_my_CellServDB' is a key into the 'File' table which we
392             will fill later.
393
394     3) Add a new feature to hold the new component.
395
396        3.1) Select the 'Feature' table.
397
398        3.2) Add a new row (Ctrl-R or 'Tables'->'Add Row') with the
399             following values:
400
401             Feature       : fea_my_CellServDB
402             Feature_Parent: feaClient
403             Title         :
404             Description   :
405             Display       : 0
406             Level         : 30
407             Directory_    :
408             Attributes    : 8
409
410             It is important to create the new feature under the
411             'feaClient' feature, which will ensure that the
412             configuration file will be installed when the client
413             binaries are installed.
414
415             Setting 'Display' to 0 will hide this feature from the
416             feature selection dialog during an interactive
417             installation.  A value of 30 for 'Level' allows this
418             feature to be installed by default (on a 'Typical'
419             installation).
420
421             The 'Attributes' value is
422             msidbFeatureAttributesDisallowAdvertise (8), which is set
423             on all features in the OpenAFS MSI.  The OpenAFS MSI is not
424             designed for an advertised installation.
425
426     4) Join the component and the feature.
427
428        4.1) Select the 'FeatureComponents' table.
429
430        4.2) Add a new row with the following values:
431
432             Feature    : fea_my_CellServDB
433             Component  : cmf_my_CellServDB
434
435     5) Add an entry to the 'File' table.
436
437        5.1) Select the 'File' table.
438
439        5.2) Add a new row with the following values:
440
441             File        : fil_my_CellServDB
442             Component_  : cmf_my_CellServDB
443             FileName    : CellServDB
444             FileSize    : (enter file size here)
445             ...
446             Attributes  : 8192
447             Sequence    : 1000
448             (leave other fields blank)
449
450             The 'Attributes' value is msidbFileAttributesNonCompressed
451             (8192).  This is because we will be placing this file in
452             the same directory as the MSI instead of embedding the
453             file in it.  Transforms do not support updating compressed
454             sources or adding new cabinet streams.
455
456             Finally, the 'Sequence' value of 1000 will be used later
457             to distinguish the file as being in a separate source
458             location than the other files in the MSI.
459
460     6) Set a media source for the file.
461
462        6.1) Select the 'Media' table.
463
464        6.2) Add a row with the following values :
465
466             DiskId       : 2
467             LastSequence : 1000
468             ...
469             (leave other fields blank)
470
471             The sequence number of 1000 designates this as the media
472             source for the newly added file.
473
474 2.3.1 Components for Configuration Files
475
476       CellServDB : 'cpf_CellServDB' (ID {D5BA4C15-DBEC-4292-91FC-B54C30F24F2A})
477
478 2.4 Adding Domain Specific Registry Keys
479
480     Following is an example for adding domain specific registry keys.
481     Refer to section 2.1 in REGISTRY.TXT for more information.
482
483     Columns that are unspecified should be left empty.
484
485     We create a new feature and component to hold the new registry keys.
486
487     'Feature' table:
488
489     (new row)
490         Feature         : 'feaDomainKeys'
491         Feature Parent  : 'feaClient'
492         Display         : 0
493         Level           : 30
494         Attributes      : 10
495
496     'Component' table:
497
498         (new row)
499     Component   : 'rcm_DomainKeys'
500         ComponentId     : '{4E3FCBF4-8BE7-40B2-A108-C47CF743C627}'
501         Directory       : 'TARGETDIR'
502         Attributes      : 4
503         KeyPath         : 'reg_domkey0'
504
505     'FeatureComponents' table:
506
507     (new row)
508         Feature         : 'feaDomainKeys'
509         Component       : 'rcm_DomainKeys'
510
511     'Registry' table:
512
513         (new row)
514         Registry        : 'reg_domkey0'
515         Root            : 2
516         Key             : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain'
517         Component       : 'rcm_DomainKeys'
518
519         (new row)
520         Registry        : 'reg_domkey1'
521         Root            : 2
522         Key             : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain'
523         Name            : '*'
524         Component       : 'rcm_DomainKeys'
525
526         (new row)
527         Registry        : 'reg_domkey2'
528         Root            : 2
529         Key             : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\ATHENA.MIT.EDU'
530         Name            : '*'
531         Component       : 'rcm_DomainKeys'
532
533         (new row)
534         Registry        : 'reg_domkey3'
535         Root            : 2
536         Key             : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\ATHENA.MIT.EDU'
537         Name            : 'LogonOptions'
538         Value           : 1
539         Component       : 'rcm_DomainKeys'
540
541         (new row)
542         Registry        : 'reg_domkey4'
543         Root            : 2
544         Key             : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'
545         Name            : '*'
546         Component       : 'rcm_DomainKeys'
547
548         (new row)
549         Registry        : 'reg_domkey5'
550         Root            : 2
551         Key             : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'
552         Name            : 'LogonOptions'
553         Value           : 0
554         Component       : 'rcm_DomainKeys'
555
556         (new row)
557         Registry        : 'reg_domkey6'
558         Root            : 2
559         Key             : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'
560         Name            : 'FailLoginsSilently'
561         Value           : 1
562         Component       : 'rcm_DomainKeys'
563
564     The example adds domain specific keys for 'ATHENA.MIT.EDU' (enable
565     integrated logon) and 'LOCALHOST' (disable integrated logon and
566     fail logins silently).
567
568 2.5 Adding Site Specific Freelance Registry Keys
569
570     Following is an example for adding site specific Freelance registry keys
571     to pre-populate the Mountpoints and Symlinks in the fake root.afs volume.
572
573     Columns that are unspecified should be left empty.
574
575     We create a new feature and component to hold the new registry keys.
576
577     'Feature' table:
578
579     (new row)
580         Feature         : 'feaFreelanceKeys'
581         Feature Parent  : 'feaClient'
582         Display         : 0
583         Level           : 30
584         Attributes      : 10
585
586     'Component' table:
587
588         (new row)
589     Component   : 'rcm_FreelanceKeys'
590         ComponentId     : '{4E3B3CBF4-9AE7-40C3-7B09-C48CF842C583}'
591         Directory       : 'TARGETDIR'
592         Attributes      : 4
593         KeyPath         : 'reg_freekey0'
594
595     'FeatureComponents' table:
596
597     (new row)
598         Feature         : 'feaFreelanceKeys'
599         Component       : 'rcm_FreelanceKeys'
600
601     'Registry' table:
602
603         (new row)
604         Registry        : 'reg_freekey0'
605         Root            : 2
606         Key             : 'SOFTWARE\OpenAFS\Client\Freelance'
607         Component       : 'rcm_FreelanceKeys'
608
609         (new row)
610         Registry        : 'reg_freekey1'
611         Root            : 2
612         Key             : 'SOFTWARE\OpenAFS\Client\Freelance'
613         Name            : '0'
614         Value           : 'athena.mit.edu#athena.mit.edu:root.cell.'
615         Component       : 'rcm_FreelanceKeys'
616
617         (new row)
618         Registry        : 'reg_freekey2'
619         Root            : 2
620         Key             : 'SOFTWARE\OpenAFS\Client\Freelance'
621         Name            : '1'
622         Value           : '.athena.mit.edu%athena.mit.edu:root.cell.'
623         Component       : 'rcm_FreelanceKeys'
624
625         (new row)
626         Registry        : 'reg_freekey3'
627         Root            : 2
628         Key             : 'SOFTWARE\OpenAFS\Client\Freelance\Symlinks'
629         Component       : 'rcm_FreelanceKeys'
630
631         (new row)
632         Registry        : 'reg_freekey4'
633         Root            : 2
634         Key             : 'SOFTWARE\OpenAFS\Client\Freelance\Symlinks'
635         Name            : '0'
636         Value           : 'athena:athena.mit.edu.'
637         Component       : 'rcm_FreelanceKeys'
638
639         (new row)
640         Registry        : 'reg_freekey5'
641         Root            : 2
642         Key             : 'SOFTWARE\OpenAFS\Client\Freelance\Symlinks'
643         Name            : '1'
644         Value           : '.athena:.athena.mit.edu.'
645         Component       : 'rcm_FreelanceKeys'
646
647     The example adds a read-only mountpoint to the athena.mit.edu
648     cell's root.afs volume as well as a read-write mountpoint.  Aliases
649     are also provided using symlinks.
650
651 ----------------------------------------------------------------------
652
653 3   Additional Resources
654
655     If you want to add registry keys or files you need to create new
656     components and features for those.  Refer to the Windows Platform
657     SDK for details.
658
659     It is beyond the scope of this document to provide a comprehensive
660     overview of how to add new resources through a transform.  Please
661     refer to the "Windows Installer" documentation for details.  The
662     relevant section is at :
663
664     http://msdn.microsoft.com/library/en-us/msi/setup/using_transforms_to_add_resources.asp
665
666     A sample walkthrough of adding a new configuration file is in
667     section 2.3.
668
669     Add new features under the 'feaClient' or 'feaServer' as
670     appropriate and set the 'Level' column for those features to equal
671     the 'Level' for their parent features for consistency.  Note that
672     none of the features in the OpenAFS for Windows MSI package are
673     designed to be installed to run from 'source' or 'advertised'.  It
674     is recommended that you set 'msidbFeatureAttributesFavorLocal' (0),
675     'msidbFeatureAttributesFollowParent' (2) and
676     'msidbFeatureAttributesDisallowAdvertise' (8) attributes for new
677     features.
678
679     If you are creating new components, retain the same component GUID
680     when creating new transforms against new releases of the OpenAFS
681     MSI package.
682
683     After making the adjustments to the MSI database using ORCA.EXE
684     you can generate a transform with MSITRAN.EXE as follows :
685
686     (Modified MSI package is 'openafs-en_US_new.msi' and the original
687     MSI package is 'openafs-en_US.msi'.  Generates transform
688     'openafs-transform.mst')
689
690     > msitran.exe -g openafs-en_US.msi openafs-en_US_new.msi openafs-transform.mst
691
692     See the Platform SDK documentation for information on command line
693     options for MSITRAN.EXE.
694
695 ----------------------------------------------------------------------
696
697 4.  Upgrades
698
699     The MSI package is designed to uninstall previous versions of
700     OpenAFS for Windows during installation.  Note that it doesn't
701     directly upgrade an existing installation.  This is intentional
702     and ensures that development releases which do not have strictly
703     increasing version numbers are properly upgraded.
704
705     Versions of OpenAFS that are upgraded by the MSI package are :
706
707     1) OpenAFS MSI package
708        Upgrade code {6823EEDD-84FC-4204-ABB3-A80D25779833}
709        Upto current release
710
711     2) MIT's Transarc AFS MSI package
712        Upgrade code {5332B94F-DE38-4927-9EAB-51F4A64193A7}
713        Upto version 3.6.2
714
715     3) OpenAFS NSIS package
716        All versions
717
718        Note that versions of the OpenAFS NSIS package prior to 1.3.65
719        had a bug where it couldn't be uninstalled properly in
720        unattended mode.  Therefore the MSI package will not try to
721        uninstall an OpenAFS NSIS package if running unattended.  This
722        means that group policy based deployments will fail on machines
723        that have the OpenAFS NSIS package installed.
724
725     If you have used a different MSI package to install OpenAFS and
726     wish to upgrade it you can author rows into the 'Upgrade' table as
727     described in the Platform SDK.
728
729     When performing an upgrade with msiexec.exe execute the MSI with
730     the repair options "vomus".
731
732 ----------------------------------------------------------------------
733
734 5.  FAQ
735
736     (Q/A's will be added here as needed)
737
738 ----------------------------------------------------------------------
739 $Id$