AWIPS LDAD Web Dissemination System Manager's Manual


 


Table of Contents
 

  1. Purpose
  2. Introduction
  3. LDAD Data Routing/Flow
    1. 3.1    AWIPS Data
      3.2    PollForData
      3.3    HmIngest
      3.4    Web
      3.5    Start/Stop
  4. Web Server Configuration
    1. 4.1    Netscape FastTrack on HPUX
      4.2    Apache on HPUX or Linux
  5. Installation Instructions
    1. 5.1    Introduction
      5.2    Intended Audience
      5.3    Package Components
      5.4    Pre-Installation Verification
      5.5    Installation
      5.6    Post Installation/Localization
        5.6.1    Web Dissemination Localization Procedure
        5.6.2    Web Dissemination Map Localization Procedure
        5.6.3    Stopping pollForData Process
        5.6.4    Starting the External Processes
        5.6.5    Localizing the EMDS Application/Applet for Your Local Data Providers
  6. Utilities
    1. Map Clipper and Compressor
      Synchronization between Client and Server
  1. EMDS GUI Configuration
  2. EMDS User Guide
  3. Appendix A: magnus.conf -- Netscape FastTrack HTTP server configuration file
  4. Appendix B: obj.conf -- Netscape FastTrack HTTP server configuration file
  5. Appendix C: mime.types-- Netscape FastTrack HTTP server configuration file
  6. Appendix D: httpd.conf -- Apache HTTP server configuration file
  7. Appendix E: access.conf -- Apache HTTP server configuration file
  8. Appendix F: srm.conf -- Apache HTTP server configuration file
  9. Appendix G: dbmmanage -- Apache /usr/bin/dbmmanage file
  10. Appendix H: Downloading the Build 4.2 or Higher LDAD Web Dissemination Software


Section Divider

1.0    Purpose


This System Manager's Manual for the Advanced Weather Interactive Processing System (AWIPS) Local Data Acquisition and Dissemination (LDAD) system provides the necessary information to set up and configure the web based data dissemination system.  Please refer to the official AWIPS LDAD SMM for more information abouth the LDAD architecture and other pertinant information.
 

2.0    Introduction

Advanced weather dissemination to support emergency preparedness and the acquisition and processing of non-federal local meteorological observations are critical to the AWIPS enhancements program of Build 5.0 and beyond.   The current method of alphanumeric weather dissemination cannot capture the detail of mesoscale weather events or convey the critical significance of AWIPS weather information to support effective emergency management response to hazardous weather.
The Local Data Acquisition and Dissemination (LDAD) Web Dissemination system will help the NWS test, evaluate and deploy the AWIPS Web interface technology for modernized local Weather Forecast Offices.  This component of AWIPS will help improve the  NWS WFO dissemination capabilities by using advanced web-based technologies that:
LDAD data is made available to the public via the Emergency Manager Decision Support (EMDS) system, which provides weather data to many users from the well-trained meteorologist to the general public.  Its variety of products and display capabilities, however, is mainly intended for use in decision-making among the emergency response community.  Formal training in meteorology is unlikely for much of the emergency response community.  Nonetheless, many of their decisions hinge on timely weather status and prediction.  The process of product selection has been designed to accommodate the user's skills, familiarity, and the potentially urgent nature of their tasks.  Additionally, the EMDS system allows you to set up the display to your preferences.
There are many varied data types that are made available for dissemination via the EMDS system, such as gridded weather data sets; cross-correlated, quality-controlled weather observation data; radar data, and National Weather Service weather advisory and forecast text messages.  The LDAD web dissemination works in conjunction with a data processing system to make these data sets available to the public.

3.0    LDAD Data Routing/Flow

The LDAD system resides on two separate AWIPS machines separated by a security firewall.   Figure 3.1 shows schematically both sides of the LDAD system.   The box on the right side of the Figure represents the part of LDAD that resides on the AWIPS LDAD Server (LS) machine which is accessible by the public.  The left side of the Figure represents the AWIPS Data Server (DS) machine which is separated from the LS machine by a security firewall, as shown by the red box in the Figure.  The four items contained in the boxes in the Figure: AWIPS Data, PollForData, HmIngest, and Web are all components of the LDAD web dissemination system and will be described in further detail in this document.

Figure 3.1  Simplified Data Flow Schematic
 

3.1    AWIPS Data

As mentioned above, there are many varied weather data types that are made available for dissemination via the EMDS system.  These weather data sets include: Most of these data sets are archived on the AWIPS DS machine in Network Common Data Form (netCDF) data files.
For more information about the netCDF file format, please refer to the UNIDATA web site at: www.unidata.ucar.edu/packages/netcdf/index.html.  These netCDF data files are read by the AWIPS D-2D interactive weather forecaster workstation for display, and these files are also read by the LDAD EMDS web application for display as well.

Other data in addition to these weather data sets can also be incorporated into the LDAD web dissemination EMDS display, such as:

Each of the weather data sets listed above reside on the AWIPS DS machine and are monitored by the PollForData process to see when new data is available.
3.2    PollForData
The PollForData process monitors a specific set of AWIPS data sets on a timed basis which are to be sent to the AWIPS LDAD Server (LS) machine for dissemination.  The PollForData sub-system is made up of two (2) components.  The first component is the pollForData.pl Perl script, and the second component is the pollForData.conf configuration file.  The pollForData.pl Perl script is the process that runs on the AWIPS DS machine.  At start-up, The pollForData.pl Perl script reads in the pollForData.conf configuration file which lists the AWIPS data files that are to be monitored.  Here is a few line sample from the pollForData.conf file:
 
###################################################################
pollForData.conf: configuration file for the LDAD polling function
#
#  Each line describes one dataset via 7 fields
#  Tag                  Source of data (unused)
#  Key                 Description of the data
#  Type               "model, obs, radar, nwstext, localtext"
#  Source            "laps, msas, ifp, maps40, ruc, eta, mesoeta, avn, mrf";
#                         "metar, qcmesonet, hydro, manual";
#                         "r1r, r2r"; (radar IDs substituted during localization)
#                         "warning, watch, forecast, outlook, report, statement, qctext";
#                         "warning, watch, forecast, outlook, report, statement, qctext"
#  DataType       "Reflectivity, 1HourRain, 3HourRain, TotalRain, Tornado"
#                             (This field applies to radar only.)
#  Scale              "local, national" (dissemination system display scale)
#  SrcDir             Source directory (on ds).
#  Time(s)           The source directory is checked at these times (minutes past
#                               the hour) to see if the data have updated. If -1, checks at
#                               each pollForData cycle (30 seconds).
#  Script               "/awips/ldad/bin/sendLDADnotification.pl"
#  Arguments       Parameters passed to the script - always 'R "KKK FFF" HHH PPP'
#                               R means send to ls and notify hmIngest
#                               pollForData.pl makes substitutions for the rest with the key,
#                               file name, host, and internal port number, respectively.
#  DestDir            Destination directory (on ls).
#
###################################################################
# LAPS Analysis
FSL|model:laps:local|/data/fxa/Grid/FSL/netCDF/LAPS_Grid/LAPS|30,35,40|
  /awips/ldad/bin/sendLDADnotification.pl R "KKK FFF" HHH PPP|
  /data/ldad/public/Grid/LAPS
# MSAS Analysis
FSL|model:msas:national|/data/fxa/Grid/FSL/netCDF/MSAS|30,35|
   /awips/ldad/bin/sendLDADnotification.pl R "KKK FFF" HHH PPP|
  /data/ldad/public/Grid/MSAS

Each of the lines that have a "#" character in the first column are comment lines.  The first non-comment lines in the file start after the "# LAPS Analysis" comment line and are shown in bold type in the example shown here.  Each of the pipe (|)  symbols are delimiters separating individual columns for each line in this table.  Each column in this table is documented in the pollForData.conf file. Each field is described below:
 
Column 1:     Tag Source of data (unused)
Column 2:     Factor dataType:dataSource:dataScale
       types:     "model, obs, radar, nwstext, localtext, radar"
       sources:  "laps, msas, ifp, eta, metar, qcmesonet"
       scales:     "local, national"
Column 3:     Source Dir Source directory on DS machine.
Column 4:     Time(s) The source directory is checked at these times (minutes past the hour) to see if the data have updated.  If set to "-1" then checks every pollForData cycle (30 seconds).
Column 5:     Script Script that is run (sendLDADnotification.pl) when new data is available
Column 6:     Arguments Parameters passed to "Script" - always  'R "KKK FF" HHH PP', where:
     R means send to the LDAD machine and notify hmIngest
     The pollForData.pl script makes substitutions for the rest with the key, file
     name, host, and internal port number, respectively.
Column 7:     DestDir Destination directory on the LDAD machine where the netCDF file (un-processed) will be written for public access.

Using this line from the pollForData.conf file as an example:
# LAPS Analysis
FSL|model:laps:local|/data/fxa/Grid/FSL/netCDF/LAPS_Grid/LAPS|30,35,40|
  /awips/ldad/bin/sendLDADnotification.pl|  R "KKK FFF" HHH PPP|/data/ldad/public/Grid/LAPS

In this example, LAPS analysis netCDF data files located in the /data/fxa/Grid/FSL/netCDF/LAPS_Grid/LAPS
directory will be checked at 30, 35, and 40 minutes after the hour for new data.  If a new file is found, the HmIngest sub-system (See Section 3.4, below) running on the LS machine is notified.  The HmIngest sub-system processes the data and writes the processed data file to the /data/ldad/public/javadata directory where it is made available to the EMDS
web application application.  Finally, the original netCDF file is written to the /data/ldad/public/Grid/LAPS for public access.

The second argument in the example shown above, model:laps:local, is the Factor name.  A Factor is an abstraction that allows classification of any particular type of data, such as temperature, humidity, latitude, wind, etc., as a generic Factor type.  All of these types of data are classified simply as "factors".  The format for the Factor name as described above is dataType:dataSource:dataScale. The first part of the Factor name, dataType, describes the type of data represented by this Factor.  Typical data types are model (gridded model data sets), obs (observation data) , radar (radar data sets), and nwstext (NWS text messages).  The middle part of the Factor name, dataSource, describes the source of the data.  Data sources include: "laps (LAPS gridded data), msas (MSAS gridded data), eta (Eta-model gridded data), metar (METAR surface weather observation data), qcmesonet (Local quality controlled surface mesonet observation data), and ifp (Interactive Forecaster Preparation model grids).  The last part of the Factor name, dataScale, is the scale that the data is to be displayed on.  The possible scales are local (local scale), and national (national scale).

The Factor name field in the pollForData.conf file is passed along with the name of the file that is to be processed to the HmIngest sub-system running on the AWIPS LDAD Server (LS) machine.  The HmIngest sub-system is described  below.

3.3    HmIngest
The HmIngest sub-system is a made up of set of software components written in Java that takes AWIPS data sets and makes them available to the public via the LDAD EMDS web dissemination system.  The HmIngest sub-system runs entirely on the AWIPS LDAD Server (LS) machine, as shown in Figure 3.1, above.  The process that runs the HmIngest sub-system is called the hmingestd.class executable, which is a server process in a clinet/server architecture that gets notified when new data is available for dissemination.  The hmingestd server is a persistent process that functions as a data pre-processor.  It reads in raw AWIPS data files in netCDF or other standard formats and using various configuration files, generates a smaller, compressed Java serialized data file for use by the Java applets or applications. Here is a hierarchical listing of the main pieces of Java source code that make up the HmIngest subsystem of LDAD:

 Figure 3.2    Herarchical listing of hmIngest Classes
 
StreamMill.java   This file handles all data that is in a byte stream format (e.g. radar data sets).
TextFactorMill.java   This file handles all the NWS text message data.
GridFactorMill.java   This file handles all gridded data sets (e.g. LAPS, MSAS, etc.).
ObsFactorMill.java   This file handles all surface weather observation data (e.g. METAR, LDAD mesonet data, etc.).

Each of these Java files are "FactorMills", which means that they process Factors.  As mentioned above, a Factor is an abstraction that allows classification of any particular type of data, such as temperature, humidity, latitude, wind, etc., as a generic Factor type.  The hmingestd.class file resides on the AWIPS LDAD Server (LS) machine in the /ldad/bin directory.  All the Java class files needed by the hmingestd process at run-time are stored on the LS machine in the /ldad/classes directory.  The class files for the FactorMills listed above are located in the /ldad/classes/hmserve/ingest directory.

When the netCDF data arrives on the AWIPS LS machine it is put into the /data/ldad/hmIngest directory, and the hmingestd process gets notified of the data's arrival.  The hmingestd process will use one of the FactorMill classes described above to process the raw netCDF data file and write the processed Java Serialized Object (JSO) files to the /data/ldad/public/javadata directory where they are available for Web Dissemination.  Each individual FactorMill can process a certain set of data types.  As shown above, the GridFactorMill processes all gridded data sets, such as the LAPS analysis grids.  Each individual data set that a particular FactorMill processes may contain many different weather parameters (Factors) such as temperature, wind, sea level pressure, etc.  When the hmingestd process gets a new file to process it is sent a FactorName of the format of dataType:dataSource:dataScale, as described above.  The hmingestd process will instantiate the appropriate FactorMill from the list of four (4) above based upon the FactorName that it received.  The FactorMill will use this FactorName to read in configuration files that completely describe the data.

All of the LDAD data that is made available for dissemination via the web are defined by configuration .cnf files.  These files completely describe the data such as, data type, units, and maximum and minimum values.  These configuration files are stored on the LS machine in the /ldad/data/factor directory.  In addition to these configuration files that describe each individual Factor, there is also a set of configuration files that describe how the data is to
be processed. These configuration files map the individual data types to one of the four (4) FactorMills described above, which process and store the data.  In addition, these configuration files map the raw data to the units that are to be displayed on the EMDS Web dissemination system.  This second set of  configuration files are stored on the LS machine in the /ldad/data/ingest directory.

3.4    Web


3.5    Start/Stop

There are two ways that the LDAD system can be stopped and started.  The first way is to use the LDAD System Monitor and Control System, which is a Web-based system that allows the site to monitor LDAD connectivity and processes.
The Monitor checks on all LDAD processes, systems, and data to provide a visual interface of current LDAD performance for the site LDAD Administrator. The primary interface is via a WWW browser to the LDAD Monitor Summary portion of the AWIPS System Monitor.  See the LDAD System's Managers Manual for a detailed description on System Monitor and Control, and refer to Section 8.1.2 which deals with Restarting the system.

The second method for stopping and re-starting the LDAD system is to "do it by hand".  Here is a listing of the persistent LDAD processes that should be running on both the AWIPS DS and LS machines:
 
 
AWIPS DS MACHINE AWIPS LS MACHINE
watchDogInternal.sh newLDADdataNotification
pollForData.pl MakeLDApage
ldadServer watchDogExternal.sh
routerStoreNetcdf java -mx65536000 hmingestd
listener CO_serv
CommsRouter MakePROCpage
DataController
routerStoreText
routerShefEncoder
routerLdadDecoder

 
 



To Stop the LDAD system, follow these steps:

(1) Log onto the AWIPS DS machine.
(2) Become "ldad"  (sudo su - ldad).
(3) Change directories to the ${LDAD_HOME}/bin directory.
(4) Run the LDAD Stop script:   stopLDAD.sh



To Start the LDAD system, follow these steps:

(1) Log onto the AWIPS DS machine.
(2) Become "ldad"  (sudo su - ldad).
(3) Change directories to the ${LDAD_HOME}/bin directory.
(4) Run the LDAD Start script:   startLDAD.csh
 
 



Section Divider


4.0    LDAD Web Server Configuration

There are many web servers that could be utilized to serve data to an LDAD EMDS client.  In particular, AWIPS has been using Netscape's FastTrack Web Server on their Application and LDAD servers and and some regional headquarters and other sites have been using the Apache web server on either the Windows NT or the Linux platforms.  Since the server that the EMDS client could be connecting to could be either Netscape FastTrack or the Apache, this section contains both Netscape FastTrack and the Apache web servers configuration files.  Additional guidance will be provided on the creation of these configuration files.  For a more in depth review and understanding of these server, the reader is encouraged to view the documentation that is available for both web servers.

Both the Apache and Netscape's FastTrack are based on the original NCSA Http Server, thus making them very similar in their configuration items.  The basic differences are in the interfaces in performing the configuration.  In this chapter, we assume that the FastTrack Web Server is on a HP platform running HPUX and the Apache Web server is on a Linux platform.
 

4.1    Netscape FastTrack on HPUX

This document describes briefly how to setup, configure and administer the Netscape FastTrack V2.0.  This web server has a GUI for the administration of the web server.  You can start/stop and configure a new web server from the ground up using this interface.  However, as a default, this administration interface will not be available until you start it up. The current settings of AWIPS does not automatically start this administration interface for security reasons.  Setting the administration GUI to be secure just requires that it only allows specified hosts to be able to access it.  See the Netscape FastTrack Administration documentation for more information.
 

Starting the Web Admin Interface.

As root on the web server:
cd /opt/ns-fasttrack
./start-admin
The system will respond with a status message indicating a success or failure.  Then using a browser running on the web server machine, type in the following URL:
http://YourWebSite.YourDomain:17482
You will be prompted with a user name and password.  Enter in the password that was provided to you by the installer of the web server.  If for some reason, that is unavailable, do the following as root:
vi /opt/ns-fasttrack/admserv/admpw
You should see something like the following:

root:XXXXXXXXX

Remove the XXXXXXXX part and save.  Then go to http://YourWebSite.YourDomain:17482.  Type in root for the Username and then click the OK button.  You will have to use the Admin interface to change the password.  See the FastTrack Admin documentation on how to do this.  This document, admguide.ps.gz, (in a compressed postscript format) is normally located in the /opt/ns-fasttrack/doc directory.

Web Server Settings

Using the Admin GUI, make the appropriate changes to the Web Server to the following Settings.  Alternatively, you can cut and save the configuration files: magnus.conf, obj.conf and mime.types to the /opt/ns-fasttrack/[YOURWEBSITEDIR] directory where [YOURWEBSITEDIR] refers to the name of your website or httpd-default.  Note:  When you change the configuration, you will get a response form the Admin GUI upon login that there were changes.  Click on the accept changes and Reload button.   This will synchronize the Admin GUI and the settings in the configuration files.

The table below list the System Settings screen shot for the webserver at a test site.  Each item that has been changed from the defaults are highlighted and linked to the appropriate location in the configuration file.  A brief comment about that item is provided in the  configuration file.  For a more in depth understanding of these variables, please refer to the Netscape FastTrack Web Server documentation.
 
 
 


View Server Settings

httpd-ls1-fsld: The server is currently up.

Technical Settings (magnus.conf)
Server Root: /opt/ns-fasttrack/httpd-ls1-fsld.
Hostname: ls1-fsld.fsl.noaa.gov.
IP address: 137.75.59.53.
Port: 80.
Error log: /opt/ns-fasttrack/httpd-ls1-fsld/logs/errors.
User: ldad.
Processes: 2.
Minimum threads: 4.
Maximum threads: 32
DNS: off.
Security: off.

Content Settings (obj.conf)
For the entire server:
Additional Document Directory:
     Prefix /ns-icons.
     Directory /opt/ns-fasttrack/ns-icons.
Additional Document Directory:
     Prefix /mc-icons.
     Directory /opt/ns-fasttrack/ns-icons.
CGI directory:
     Prefix /cgi-bin.
     Directory /data/ldad/emwww/cgi-bin.
Primary Document Directory:
     Directory /data/ldad/emwww/htdocs.
Index filenames:
     File names index.cgi,index.shtml,index.html.
Restrict access: Read allowed.
Restrict access: Write denied.
Default MIME type: text/plain.
Directory indexing: fancy.
CGI file type: active.
Server parsed HTML: with exec tag.
Access log:
     Path /opt/ns-fasttrack/httpd-ls1-fsld/logs/access.
Table 4.1: View of the NS FastTrack Web Server Settings

Restricting Access to the Web Server

After the server setup, use the GUI Admin tool to restrict access to this website to everyone but those registered to this site.  You can do this via the Access Control Button at the top of the GUI.  Clicking that button will take you to another interface where you will the table of contents shown below:

AccessControl Table of Contents
Figure 4.1.   Table of Contents of the Access Control button.

Clicking the Restrict Access link on the Table above  or the Restrict Access link in View server Settings link will take you to the next window:

Figure 4.2. Restrict Access Window

If the "Access Control" lable in the third row states Access Control is Off, then Click the button "Turn On access control".  The screen should like like the above.  Set both access types to be "Deny".  Then Click the Permissions button for Read and set the permissions as follows:

Figure 4.3. Read Access window to specify who has read access to the web server.

The "Hosts Always Allowed Access" should include all those IP addresses that you would like to be able to access the web server without any additional authentication.  Those users that may not have a static IP address, you could generate groups and users using this GUI and specifying these users/and or groups.  The default load of the Web Disemination package includes 3 default groups:
    1) WFO - Should include all users in the WFO
    2) Coop Agencies - All cooperative agencies users
    3) Emergency Managers - All EM type users.

In addition, the default load includes the following users, where each user belongs to 1 or more of the above groups.:
    1) ldad:WFO
    2) soo:WFO
    3) mic:WFO
    4) testCoop:Coop. Agencies
    5) testEM: Emergency Managers

The default password for these users is the username plus the number 1.  For example, the password of soo is soo1.  Please change these passwords and/or remove these test accounts immediately.  To create users and groups use the "Create User" and "Create Group" link shown in Figure 1.  Follow the directions as specified in the NS FastTrack documentation.

Once the users are created and designated into one of the groups, then acces to the web server can be determined b groups, rather that listing all the individual users who has access.  The reason, for separating out Coop Agencies users and Emergency Manager users into their groups is to enable the possibility that these types of users may eventually have a different set of capabilities on the Web Server.  A user can belong to more than one group.  Then the users takes on the privileges and capabilities of both groups.

Note:  If you make changes using the admin GUI, be sure to hit the "Save and Apply" button.  This action will force the system to update the configuration file and do a soft restart of the web server with the new settings.

Note:  If you make changes via editing the configuration files manually, then be sure that the next time you use the admin GUI, to "OK" the reload of the changes.  This message will be displayed because there is an inconsistency between what the admin GUI thinks is the configuration and the web server.  By accepting and clicking "OK to update, it syncrhonizes the configuration file and the admin GUI.


4.2    Apache on HPUX or Linux

The Apache Web server has a proven record in providing a stable efficient web access to clients.  Although a freeware, it is being used by numerous commercial sites for their web server.  It is more scalable than the Netscape FastTrack but does not have a GUI administration interface.  On a Linux system, one can use Linuxconf to configure some parts of Apache, but this document will only describe how to configure Apache via editing the configuration files directly and using a command line program to create/manage users and groups.

The example configuration files provided in Appendix D, E, F are for a Linux PC running Apache V1.3.6  This server uses a virtual host setup where you could potentially host multiple websites form this same server.  Items that have been changed from the default configuratin files are in the BernhardMod BT font.

There are 3 configuration files that Apache uses:
    1) httpd.conf - The primary configuration file that tells the server which modules to use.
    2) srm.conf - Here you define the name space that users see of your http server.  This file also defines server settings which affect how requests are serviced, and how results should be formatted.
    3) access.conf - Global access configuration.  This is where you set the users, group and domain/Ip accessibility.

You can use the files in the Appendices to configure your Apache website.  Change all references in the BernhardMod BT font to the appropriate values for your site.  There are three main items:

    YOURWEBSITEDIR - This is the root directory for this web site.
    YOURWEBSITENAME - The URL name for this web server
    WebMaster@YourDomain - The email address for the WebMaster.

One caveat however is that the dbmmanage program that comes standard with Apache does not perform any kind of group management.  Listed in Appendix G is a hacked version of dbmmanage that fixes this oversight.  Use dbmmanage to generate a user/group file in a location that is not accessible from the web.  e.g. /etc/httpd/users.  dbmmanage is a perl script and is usually located in /usr/bin.  Using this version of dbmmanage, generate the users and groups that you want.

    e.g.To add a new user called Kevin in the DBM file named /etc/httpd/users who is in the EmergencyManagers group and user soo in the WFO group:
 

    cd /etc/httpd
    dbmmanage users adduser Kevin Kevin'sPassword EmergencyManagers
    dbmmanage users adduser soo soo'sPassword WFO


    Once you update the config files, if the Apache web server is running, send a signal to the Apache web server to re-read the configuration files.  As root:

    export httpPid=`cat /var/run/httpd.pid`
    kill -USR1 $httpPid


    Or, if the web server is not running, start the web server.  As root:
 

    /etc/rc.d/init.d/httpd start




Section Divider


5.0    LDAD Web Dissemination Installation Guide

5.1    Introduction

The following installation instructions are used to update the LDAD Web Dissemination component on an AWIPS 4.2 or higher version system. The web dissemination system is a module that can be loaded separately on top of an existing AWIPS system without negatively impacting current processes. The LDAD system was designed with the dissemination component included in the LDAD package. Therefore, network traffic across the firewall and LAN issues should not be a major concern.

Note: If you received an official release of software from NWS or PRC on CDs or other media, follow the instructions included with that release. In this event, disregard these installation instructions and proceed as directed in the supplied instructions.
 

5.2    Intended Audience

This installation guide is intended to be utilized by the ESA at the WFO offices. The LDAD Web Dissemination Installation Guide describes the procedure for successfully installing the LDAD Web Dissemination software in the WFO.
 

AWIPS Build4.2 or Higher LDAD Installation

5.3    Package Components

The software supplied for the upgrade to an AWIPS Build4.2 or higher system is comprised of one tar file containing files that are changed from the existing AWIPS LDAD system and an installation script.
 

5.4    Pre-Installation Verification

  1. Verify that the following directories exist on the LDAD Server (LS). If the directories do not exist, create them.
    1.  
      /data/ldad/emwww/
      /data/ldad/pubwww/
      /data/ldad/www/
      /data/ldad/public/
      /data/ldad/public/Grid/
      /data/ldad/public/Grid/ifp/
      /data/ldad/public/Grid/ifp/Official
      /data/ldad/public/Grid/ifp/Eta
      /data/ldad/public/Grid/ifp/RUC
      /data/ldad/public/Grid/ifp/MRF
      /data/ldad/public/Grid/AVN/
      /data/ldad/public/Grid/Eta/
      /data/ldad/public/Grid/LAPS/
      /data/ldad/public/Grid/MAPS40/
      /data/ldad/public/Grid/MRF/
      /data/ldad/public/Grid/MSAS/
      /data/ldad/public/Grid/MesoEta/
      /data/ldad/public/Grid/RUC/
      /data/ldad/public/javadata/
      /data/ldad/public/nexrad/
      /data/ldad/public/nwswwas/
      /data/ldad/public/point/
      /data/ldad/public/point/hydro/
      /data/ldad/public/point/manual/
      /data/ldad/public/point/mesonet/
      /data/ldad/public/point/metar/
      /data/ldad/public/point/qcmesonet/
      /data/ldad/public/qcmessages/
      /data/ldad/public/qcobs/
  2. Verify that the correct version of Java is loaded on the LS and exists in /opt/java/bin. The following command will return the version of Java currently on the system:

  3.  

     
     
     
     
     

    /opt/java/bin/java -version

    This command should return:

    java version "HP-UX Java C.01.17.01 99/04/21"
     

          or
    java version "HP-UX Java B.01.12.01 1997/07/31"

    If the above command returns the second response, then you are using Java version 1.12. The system will run, however, we have seen 2-3 times performance improvement of the hmIngest daemon when using Java version 1.17. Java Version 1.17 is the version to be used in Build5.0.
     

  4. cd /data/ldad/emwww/htdocs as userid root and verify that all files and links are owned by ldad.

  5.  

     
     
     
     
     

    cd /data/ldad/emwww/htdocs
    ls -al

    If links are owned by userid root then:

    chown -h ldad:ldad [link files]
     

5.5    Installation

  1. On the LDAD Server (LS) as userid ldad, copy the ldadjavaA.tar file to a location having adequate space, e.g. /data/ldad.
  2. Copy the ldadjavaA.install file to /ldad/bin
  3. chmod 744 /ldad/bin/ldadjavaA.install
  4. cd ~ldad/bin
  5. To capture the output from the script execution in Step 5, type

  6.  

     
     
     
     
     

    script ldadjavaA.install.out
     

  7. Execute the ldadjavaA.install script:

  8.  

     
     
     
     
     

    /ldad/bin/ldadjavaA.install [Web Site Name] [Tar File]

    For example: /ldad/bin/ldadjavaA.install emwww /data/ldad/ldadjavaA.tar
     

  9. Type exit to terminate the script command in Step 4. Sample output from executing the ldadjavaA.install script can be found in Appendix A.
  10. On the Data Server (ds1) as userid ldad, save files and then copy new file from the LDAD Server (LS):

  11.  

     
     
     
     
     

    cp -p ~ldad/bin/pollForData.pl ~ldad/bin/pollForData.pl.ORIG
    cp -p ~ldad/bin/runPerlCmd.pl ~ldad/bin/runPerlCmd.pl.ORIG
    cp -p ~ldad/bin/LocalizeWWW.pl ~ldad/bin/LocalizeWWW.pl.ORIG
    cp -p ~ldad/bin/map_localization.pl ~ldad/bin/map_localization.pl.ORIG
    cp -p ~ldad/data/pollForData.conf ~ldad/data/pollForData.conf.ORIG
    cd ~ldad/bin
    rcp ls1:/ldad/bin/pollForData.pl pollForData.pl
    rcp ls1:/ldad/bin/runPerlCmd.pl runPerlCmd.pl
    rcp ls1:/ldad/bin/map_localization.pl map_localization.pl
    rcp ls1:/ldad/bin/LocalizeWWW.pl LocalizeWWW.pl
    chmod 755 pollForData.pl runPerlCmd.pl
    chmod 755 LocalizeWWW.pl map_localization.pl
    cd ~ldad/data
    rcp ls1:/ldad/data/pollForData.conf pollForData.conf
    rcp ls1:/ldad/data/localizeWWW.conf localizeWWW.conf
    rcp ls1:/ldad/data/syncFiles.txt syncFiles.txt

    Note: The runPerlCmd.pl, LocalizeWWW.pl, map_localization.pl, localizeWWW.conf and syncFiles.txt may not be on your system. If they are not, that is OK.

    Note: For failover purposes, perform the above steps on the failover node (ds2).
     

5.6    Post Installation/Localization

5.6.1    Web Dissemination Localization Procedure

  1. Log on the Data Server as userid ldad.
  2. Change directory to ~ldad/bin

  3.  

     
     
     
     
     

    cd ~ldad/bin
     

  4. Capture the output from executing the Web Dissemination localization script:

  5.  

     
     
     
     
     

    script LocalizeWWW.out
     

  6. Execute the Web Dissemination localization script:

  7.  

     
     
     
     
     

    ~ldad/bin/LocalizeWWW.pl -c CCC -x XXX -r kxxx -d 7 -i [site id]

    where:

       
        c - CCC (from AFOS id)
        x - XXX  (from AFOS id)
        r - radar associated with your localization
        d - level of debug (values 1 through 10)
        i - 3-letter site id


    For example:

    ~ldad/bin/LocalizeWWW.pl -c DEN -x DEN -r kftg -d 7 -i BOU

    Note: For multiple site radars, the syntax would be like this:

    ~ldad/bin/LocalizeWWW.pl -c CCC -x XXX -r kxxx:kxxx -d 7 -i [site id]
     

  8. Type exit to terminate the script command in Step 3.
  9. Refer to Appendix B for an example of output from executing the LocalizeWWW.pl script.

5.6.2    Web Dissemination Map Localization Procedure

  1. Log on the Data Server as userid ldad.
  2. Change directory to ~ldad/bin.

  3.  

     
     
     
     
     

    cd ~ldad/bin
     

  4. Capture the output from the executing the map localization script:

  5.  

     
     
     
     
     

    script map_localization.out

       
  6. Execute the map localization script:

  7.  

     
     
     
     
     

    /usr/local/perl5/bin/perl  map_localization.pl -i [site id] -d 7

    where:
     

        i - 3-letter site id
        d - level of debug (values 1 through 10)
    Example:

    ~ldad/bin/map_localization.pl -i BOU -d 7
     

  8. Type exit to terminate the script command in Step 3.
  9. Refer to Appendix C for an example of output from executing the map_localization.pl script.

  10.  

5.6.3    Stopping pollForData Process

  1. As userid ldad, stop the pollForData process. The watchDog will restart it!

  2.  

     
     
     
     
     

    setenv pollPID `ps -aef | grep pollForData.pl | grep -v grep | awk '{print $2}'`
    kill $pollPID

    Wait for 30 seconds......

    ps -aef | grep pollForData.pl
     

  3. If the process is not running, check for the existence of the file /awips/fxa/bin/Signal.pm and /awips/fxa/bin/SignalHandler.pm on the Data Server.

  4.  

     
     
     
     
     

    ls -al /awips/fxa/bin/Signal.pm
    ls -al /awips/fxa/bin/SignalHandler.pm

    If the above two files do not exist, copy them from the LS.

    rcp ls1:/ldad/bin/Signal.pm ~ldad/bin/Signal.pm
    rcp ls1:/ldad/bin/SignalHandler.pm ~ldad/bin/SignalHandler.pm
     
     

            and
    As userid fxa

    cp ~ldad/bin/Signal.pm ~fxa/bin/Signal.pm
    cp ~ldad/bin/SignalHandler.pm ~fxa/bin/SignalHandler.pm
    chmod 755 ~fxa/bin/Signal.pm ~fxa/bin/SignalHandler.pm
     

5.6.4    Starting the External Processes

  1. On the external server (ls1) as userid ldad, copy the /ldad/bin/startLDADexternal.csh file and then change the hmIngest start command.

  2.  

     
     
     
     
     

    cp -p /ldad/bin/startLDADexternal.csh /ldad/bin/startLDADexternal.csh.ORIG
    vi /ldad/bin/startLDADexternal.csh

    Add -Drun.log.dir=${LDAD_EXTERNAL_LOGDIR} to the command as shown below:
     

    $JAVA-DIR/java -mx65536000 -Drun.root.dir=$LDAD_EXTERNAL_HOME \
    -Drun.config.dir=$LDAD_EXTERNAL_HOME/data \
    -Drun.data.dir=/data/ldad/public/javadata \
    -Drun.log.dir=${LDAD_EXTERNAL_LOGDIR} \
    -Drun.ldaddata.dir=/ldad/data \
    hmingestd -d -t $LDAD_EXTERNAL_HOME>> $logFnm 2>&1 &
     

  3. Copy the /ldad/bin/watchDogExternal.sh file and then change the hmIngest start command:

  4.  

     
     
     
     
     

    cp -p /ldad/bin/watchDogExternal.sh /ldad/bin/watchDogExternal.sh.ORIG
    vi /ldad/bin/watchDogExternal.sh

    Add -Drun.log.dir=${LDAD_EXTERNAL_LOGDIR} to the command as shown below:

    $JAVA_DIR/java -mx65536000 -Drun.root.dir=$LDAD_EXTERNAL_HOME \
    -Drun.config.dir=$LDAD_EXTERNAL_HOME/data \
    -Drun.data.dir=/data/ldad/public/javadata \
    -Drun.log.dir=${LDAD_EXTERNAL_LOGDIR} \
    -Drun.ldaddata.dir=/ldad/data \
    hmingestd -d $LDAD_EXTERNAL_HOME>> $logFnm 2>&1 &
     

  5. Change the FXA_SITE_ID to match the Site ID used in this install.
    vi /ldad/.environs

    (Make sure that the value of FXA_SITE_ID matches the Site ID that you used in this install.)
     

  1. As userid ldad, restart the external processes:

  2.  

     
     
     
     
     

    /ldad/bin/startLDADexternal.csh
     
     

5.6.5    Localizing the EMDS Application/Applet for Your Local Data Providers

    This step will populate the Quality Control (QC) menus for the EMDS application/applet (see Section 3.4 , above) with the names of the local (LDAD) data providers at your site.  This step is to be run after you have re-started LDAD and then let it run for two (2) days.  You must wait two days, or so, in order to allow the MSAS QC system running at your site to ingest all of the data providers that are available in your LDAD system.
     
    1. Log on the LDAD Server (LS) machine as userid ldad.
    2. Change directory to /ldad/bin.

    3.  

       

      cd /ldad/bin

      Make sure that the file "PostConfigure.pl" is in the /ldad/bin directory.  If it isn't, then get it from the ~ldad/bin directory on the Data Server (DS) macine.
       

         
    4. Execute the script to localize your EMDS application/applet for your local data providers:

    5.  

       
       

      /usr/local/perl5/bin/perl  PostConfigure.pl -t qc -i [site id]

      where:
       

          i - 3-letter site id
           
      Example:

      /usr/local/perl5/bin/perl PostConfigure.pl -t qc  -i BOU
       
       




    Section Divider

    6.0    Utilities

    The EMDS system includes 2 utility programs; MapClipper and Sync.  MapClipper is used to store map data as a compressed (gzip) serialized file and sync allows the client to be notified and allows the users to synchronize with their registered WFO's.

    6.1    Map Clipper and Compressor - MapClipper

    MapClipper is used to store map data as a compressed (gzip) serialized class.  It is a java program that you can start in both command mode or by using the MapClipper icon (for users who have downloaded and installed the EMDS application.  Mapclipper saves the clipped and compressed files to the current working directory.  They must still be copied the the "..../localizations/[siteId]/mapdata" directory or the "localConfig" directory to be used.  MapClipper requires 11 parameters as shown below:
     
    Shapefile Name (without the suffix).
    "Clip" 
    North West corner in degrees longitude.
    North West corner in degrees latitude.
    North East corner in degrees longitude.
    North East corner in degrees latitude.
    South West corner in degrees longitude
    South West corner in degrees latitude.
    South East corner in degrees longitude
    South East corner in degrees latitude.
    3 character siteId.

    Both options will be described below.
     

    6.1.1    MapClipper in interactive mode.


    Users can start MapClipper in interactive mode in 2 ways.  For those users who have installed the EMDS gui on their PC's, you will see an icon labeled MapClipper on your desktop.  Double-clik this icon and MapClipper is started.  On a Unix/Linux system you will have to start in using the following command:
        java ldadapp.shape.MapClipper
    (Make sure that the CLASSPATH is defined and points to the directory where the EMDS is installed.)

    Upon startup, a dialog box describing MapClipper is displayed and then a series of dialogs requesting the input of the various parameters MapClipper requires.  The first dialog is a "File Open" dialog allowing you to browse the disk for the appropriate shape file (*.shp).  (Note:  You have to have the 2 other associated shape file i.e. *.dbf and *.shx in the same directory) The a series of dialogs requesting input for the clip region will be displayed.  Enter each corner longitude and latitude one at a time.  After completion, you will have to copy the generated files i.e. *.shpm.gzip and *.dbfm.gzip to the appropriate location.

    Figure 6.1    MapClipper startup dialog

    If you are the WFO LDAD administrator: Move them to /ldad/data/localizations/[siteId]/mapdata.  Then add these filenames to the file /data/ldad/emwww/syncFiles.txt.  Adding these filenames will push out these added files to the users.

    If you are a user: Move them to the ...."EMDS installation directory"/localConfig.  Then you can add the menu items that will display these shape file using the Configurator.
     

    6.1.2    MapClipper in batch mode.

    The batch mode option for MapClipper is also available to allow for user to clip multiple files in a batch file.  You can list out a number of files to be clipped in a batch file and then run the batch file.  You have to provide the full path to the file and remember that the program puts the resultant file in the same directory as the original.

    For each file to be clipped add a command line that follows this pattern.  Note that all <> parameters are required.

    java -mx54536000 ldadapp.shape.MapClipper <filename (without suffix)> Clip <NW Lon> <NW Lat> <NE Lon> <NE Lat> <SW Lon> <SW Lat> <SE Lon> <SE Lat> <Site Id>
     

    Examples:

    java -mx54536000 ldadapp.shape.MapClipper northamerica_001 Clip -152.856 49.500 -49.385 49.500 -133.459 12.190 -65.091 14.335 BOU
    java -mx54536000 ldadapp.shape.MapClipper cous_0005 Clip -107.8875 41.9901 -100.70689 42.407955 -107.74974 37.022182 -101.0305 36.56353 BOU
     
     

    6.2    Synchronization between Client and Server - Sync

    Everytime the users starts up the EMDS application, they will be provided with a dialog to synchronize with their registered WFO.  (The registered WFO is the WFO Web Server URL that the user selected when they first ran sync.)  Clicking yes to perform a Sync check could take a couple of minutes.  Upon startup, users will be provided with a dialog listing the current registered website that they will be sync-ing to.  User could select any other site at this point and they will be sync-ed to that website.  (Note: Sync-ing to a different site will require registration with that site and require a manual change of the siteId.txt file.) Upon completion, Sync will report whether there are newer files on the server to be downloaded.  Users have a choice to Sync or not to Sync.  Although a good question, it is recommended that they Sync.  This process will update all the default files from the LDAD Web Server.  It will not modify or delete any file in their localConfig directory or make any changes to the menus etc that they have created.

    Sync can also be started up as an independent application using the Sync icon, running  "java Sync" in a command line or by using the Synchronize Application menuitem in teh File menu of EMDS.

    Figure 6.2    Sync startup dialog.
     


    Section Divider


    Appendix A: magnus.conf -- Netscape FastTrack HTTP server configuration file

    # #
    # # magnus.conf -- Netscape FastTrack HTTP server configuration file
    # #
    # The directory for this server's config files etc.  The standard one is /opt/ns-fasttrack/httpd-default unless
    # you create one that is named for the webserver name.
    #ServerRoot /opt/ns-fasttrack/httpd-ls1-fsld
    # ServerName is the URL of your web Server e.g. www.crh.noaa.gov etc
    ServerName ls1-fsld.fsl.noaa.gov
    #Address is the IP address of your server
    Address 137.75.59.53
    Port 80
    LoadObjects obj.conf
    RootObject default
    ErrorLog /opt/ns-fasttrack/httpd-ls1-fsld/logs/errors
    PidLog /opt/ns-fasttrack/httpd-ls1-fsld/logs/pid
    # The user you want the web server to run as.
    User ldad
    #MaxProcs - Choose a number that is reasonable for your webserver.  For the standard LS use the following numbers.
    # If you have a powerful dual-proc system that has a better backplane maybe a D350, then by all means increase to 10.
    MaxProcs 5
    # Similar analysis for Threads.
    MinThreads 8
    MaxThreads 32
    DNS off
    Security off
    Ciphers +rc4,+rc4export,+rc2,+rc2export,+des,+desede3
    SSL3Ciphers +rsa_rc4_128_md5,+rsa_3des_sha,+rsa_des_sha,+rsa_rc4_40_md5,+rsa_rc2_40_md5,-rsa_null_md5
    ACLFile /opt/ns-fasttrack/httpacl/generated.httpd-ls1-fsld.acl


    Appendix B: obj.conf -- Netscape FastTrack HTTP server configuration file

    # #
    # # obj.conf -- Netscape FastTrack HTTP server configuration file
    # #
    # Netscape Communications Corporation - obj.conf
    # You can edit this file, but comments and formatting changes
    # might be lost when the admin server makes changes.

    Init fn="flex-init" format.access="%Ses->client.ip% - %Req->vars.auth-user% [%SYSDATE%] \"%Req->reqpb.clf-request%\" %Req->srvhdrs.clf-status% %Req->srvhdrs.content-length%" access="/opt/ns-fasttrack/httpd-ls1-fsld/logs/access"
    Init fn="load-types" mime-types="mime.types"

    <Object name="default">
    NameTrans fn="pfx2dir" from="/ns-icons" dir="/opt/ns-fasttrack/ns-icons"
    NameTrans fn="pfx2dir" from="/mc-icons" dir="/opt/ns-fasttrack/ns-icons"
    # This creates an alias between /cgi-bin to the directory that we want it to go to
    # i.e. /data/ldad/emwww/cgi-bin.  Also, it tells the web server that whatever is in this directory can
    # be called as a CGI script.
    NameTrans from="/cgi-bin" fn="pfx2dir" dir="/data/ldad/emwww/cgi-bin" name="cgi"
    # Tells the webserver where the root directory is.  This is the directory where http://yourWebsitename/ points to.
    NameTrans root="/data/ldad/emwww/htdocs" fn="document-root"
    PathCheck fn="unix-uri-clean"
    PathCheck fn="find-pathinfo"
    PathCheck fn="find-index" index-names="index.cgi,index.shtml,index.html"
    PathCheck fn="check-acl" acl="httpd-ls1-fsld_formgen-READ-ACL_allow-8971"
    PathCheck fn="check-acl" acl="httpd-ls1-fsld_formgen-WRITE-ACL_deny-8971"
    ObjectType fn="type-by-extension"
    ObjectType fn="force-type" type="text/plain"
    Service fn="imagemap" method="(GET|HEAD)" type="magnus-internal/imagemap"
    Service fn="index-common" method="(GET|HEAD)" type="magnus-internal/directory"
    Service fn="send-cgi" type="magnus-internal/cgi"
    #Make sure that you add this as contact.shtml uses a serve-side include (SSI) to
    # perform a simple calculation of the number of hits to the website
    Service fn="parse-html" method="(GET|HEAD)" type="magnus-internal/parsed-html"
    Service fn="send-file" method="(GET|HEAD)" type="*~magnus-internal/*"
    AddLog fn="flex-log" name="access"
    </Object>

    <Object name="cgi">
    ObjectType fn="force-type" type="magnus-internal/cgi"
    Service fn="send-cgi"
    </Object>


    Appendix C: mime.types-- Netscape FastTrack HTTP server configuration file

    # #
    # # mime.types -- Netscape FastTrack HTTP server configuration file
    # #
    #--Netscape Communications Corporation MIME Information
    # Do not delete the above line. It is used to identify the file type.

    # New Microsoft MIME types
    type=application/msword             exts=doc
    type=application/vnd.ms-excel       exts=xls,xlw,xla,xlc,xlm,xlt
    type=application/vnd.ms-powerpoint  exts=ppt,pps,pot
    type=application/vnd.ms-project     exts=mpp
    type=application/x-msaccess         exts=mdb
    type=application/x-mspublisher      exts=pub
    type=application/x-msschedule       exts=scd
    type=application/winhlp             exts=hlp
    type=application/x-mscardfile       exts=crd
    type=application/x-msclip           exts=clp
    type=application/x-msmediaview      exts=m13,m14
    type=application/x-msmetafile       exts=wmf
    type=application/x-msmoney          exts=mny
    type=application/x-msterminal       exts=trm
    type=application/x-mswrite          exts=wri

    type=application/octet-stream  exts=bin
    type=application/astound       exts=asd,asn
    type=application/fastman       exts=lcc
    type=application/mac-binhex40  exts=hqx
    type=application/mbedlet       exts=mbd
    type=application/oda           exts=oda
    type=application/pdf           exts=pdf
    type=application/postscript    exts=ai,eps,ps
    type=application/rtf           exts=rtf
    type=application/studiom       exts=smp
    type=application/timbuktu      exts=tbt
    type=application/x-javascript  exts=js
    type=application/x-asap        exts=asp
    type=application/x-csh         exts=csh
    type=application/x-dot         exts=dot
    type=application/x-dvi         exts=dvi
    type=application/x-earthtime   exts=etc
    type=application/x-envoy       exts=evy
    type=application/x-excel       exts=xls,xlc,xll,xlm,xlw
    type=application/x-gtar        exts=gtar
    type=application/x-hdf         exts=hdf
    type=application/x-latex       exts=latex
    type=application/x-maker       exts=fm
    type=application/x-mif         exts=mif,mi
    type=application/x-mocha       exts=mocha,moc
    type=application/x-NET-Install exts=ins
    type=application/x-netcdf      exts=nc,cdf
    type=application/x-ns-proxy-autoconfig  exts=proxy
    type=application/x-pointplus   exts=css
    type=application/x-salsa       exts=slc
    type=application/x-sh          exts=sh
    type=application/x-shar        exts=shar
    type=application/x-sprite      exts=spr,sprite
    type=application/x-tar         exts=tar
    type=application/x-tcl         exts=tcl
    type=application/x-tex         exts=tex
    type=application/x-texinfo     exts=texinfo,texi
    type=application/x-timbuktu    exts=tbp
    type=application/x-tkined      exts=tki,tkined
    type=application/x-troff-man   exts=man
    type=application/x-troff-me    exts=me
    type=application/x-troff-ms    exts=ms
    type=application/x-troff       exts=t,tr,roff
    type=application/x-wais-source exts=src
    type=application/zip           exts=zip

    type=audio/basic               exts=au,snd
    type=audio/echospeech          exts=es,esl
    type=audio/midi                exts=midi,mid
    type=audio/x-aiff              exts=aif,aiff,aifc
    #type=audio/x-midi              exts=midi,mid
    type=audio/x-wav               exts=wav
    type=audio/x-pn-realaudio      exts=ra,ram
    type=audio/x-pac               exts=pac
    type=audio/x-epac              exts=pae

    type=image/fif                 exts=fif
    type=image/gif                 exts=gif
    type=image/ief                 exts=ief
    type=image/ifs                 exts=ifs
    type=image/jpeg                exts=jpeg,jpg,jpe
    type=image/png                 exts=png
    type=image/tiff                exts=tiff,tif
    type=image/vnd                 exts=dwg,svf
    type=image/wavelet             exts=wi
    type=image/bmp                 exts=bmp
    type=image/x-cmu-raster        exts=ras
    type=image/x-portable-anymap   exts=pnm
    type=image/x-portable-bitmap   exts=pbm
    type=image/x-portable-graymap  exts=pgm
    type=image/x-portable-pixmap   exts=ppm
    type=image/x-rgb               exts=rgb
    type=image/x-xbitmap           exts=xbm
    type=image/x-xpixmap           exts=xpm
    type=image/x-xwindowdump       exts=xwd

    type=text/html                 exts=htm,html
    type=text/plain                exts=txt
    type=text/richtext             exts=rtx
    type=text/tab-separated-values exts=tsv
    type=text/x-setext             exts=etx
    type=text/x-speech             exts=talk

    type=video/isivideo            exts=fvi
    type=video/mpeg                exts=mpeg,mpg,mpe
    type=video/msvideo             exts=avi
    type=video/quicktime           exts=qt,mov
    type=video/vivo                exts=viv,vivo
    type=video/wavelet             exts=wv
    #type=video/x-msvideo           exts=avi
    type=video/x-sgi-movie         exts=movie

    type=x-world/x-svr             exts=svr
    type=x-world/x-vrml            exts=wrl
    type=x-world/x-vrt             exts=vrt

    type=x-conference/x-cooltalk   exts=ice

    enc=x-gzip                     exts=gz
    enc=x-compress                 exts=z
    enc=x-uuencode                 exts=uu,uue

    type=magnus-internal/imagemap    exts=map
    type=magnus-internal/parsed-html exts=shtml
    #type=magnus-internal/cgi       exts=cgi,exe,bat
    type=magnus-internal/cgi       exts=cgi,bat

    type=emds/jar                  exts=jar
    type=emds/exe                  exts=exe


    Appendix D: httpd.conf -- Apache HTTP server configuration file

    # #
    # # httpd.conf -- Apache HTTP server configuration file
    # #

    # This is the main server configuration file. See URL http://www.apache.org/
    # for instructions.

    # Do NOT simply read the instructions in here without understanding
    # what they do, if you are unsure consult the online docs. You have been
    # warned.

    # Originally by Rob McCool

    # Dynamic Shared Object (DSO) Support

    # To be able to use the functionality of a module which was built as a DSO you
    # have to place corresponding `LoadModule' lines at this location so the
    # directives contained in it are actually available _before_ they are used.
    # Please read the file README.DSO in the Apache 1.3 distribution for more
    # details about the DSO mechanism and run `httpd -l' for the list of already
    # built-in (statically linked and thus always available) modules in your httpd
    # binary.

    # Example:
    # LoadModule foo_module libexec/mod_foo.so

    # Documentation for modules is in "/home/httpd/manual/mod" in HTML format.

    # LoadModule mmap_static_module modules/mod_mmap_static.so
    LoadModule env_module         modules/mod_env.so
    LoadModule config_log_module  modules/mod_log_config.so
    LoadModule agent_log_module   modules/mod_log_agent.so
    LoadModule referer_log_module modules/mod_log_referer.so
    # LoadModule mime_magic_module  modules/mod_mime_magic.so
    LoadModule mime_module        modules/mod_mime.so
    LoadModule negotiation_module modules/mod_negotiation.so
    LoadModule status_module      modules/mod_status.so
    LoadModule info_module        modules/mod_info.so
    LoadModule includes_module    modules/mod_include.so
    LoadModule autoindex_module   modules/mod_autoindex.so
    LoadModule dir_module         modules/mod_dir.so
    LoadModule cgi_module         modules/mod_cgi.so
    LoadModule asis_module        modules/mod_asis.so
    LoadModule imap_module        modules/mod_imap.so
    LoadModule action_module      modules/mod_actions.so
    # LoadModule speling_module     modules/mod_speling.so
    LoadModule userdir_module     modules/mod_userdir.so
    LoadModule proxy_module       modules/libproxy.so
    LoadModule alias_module       modules/mod_alias.so
    LoadModule rewrite_module     modules/mod_rewrite.so
    LoadModule access_module      modules/mod_access.so
    LoadModule auth_module        modules/mod_auth.so
    LoadModule anon_auth_module   modules/mod_auth_anon.so
    # LoadModule dbm_auth_module    modules/mod_auth_dbm.so
    LoadModule db_auth_module     modules/mod_auth_db.so
    LoadModule digest_module      modules/mod_digest.so
    # LoadModule cern_meta_module   modules/mod_cern_meta.so
    LoadModule expires_module     modules/mod_expires.so
    LoadModule headers_module     modules/mod_headers.so
    LoadModule usertrack_module   modules/mod_usertrack.so
    # LoadModule example_module     modules/mod_example.so
    # LoadModule unique_id_module   modules/mod_unique_id.so
    LoadModule setenvif_module    modules/mod_setenvif.so

    # Extra Modules
    # LoadModule php_module         modules/mod_php.so
    # LoadModule php3_module        modules/libphp3.so
    # LoadModule perl_module        modules/libperl.so

    # Reconstruction of the complete module list from all available modules
    # (static and shared ones) to achieve correct module execution order.
    # [WHENEVER YOU CHANGE THE LOADMODULE SECTION ABOVE UPDATE THIS, TOO]
    ClearModuleList
    # AddModule mod_mmap_static.c
    AddModule mod_env.c
    AddModule mod_log_config.c
    AddModule mod_log_agent.c
    AddModule mod_log_referer.c
    # AddModule mod_mime_magic.c
    AddModule mod_mime.c
    AddModule mod_negotiation.c
    AddModule mod_status.c
    AddModule mod_info.c
    AddModule mod_include.c
    AddModule mod_autoindex.c
    AddModule mod_dir.c
    AddModule mod_cgi.c
    AddModule mod_asis.c
    AddModule mod_imap.c
    AddModule mod_actions.c
    # AddModule mod_speling.c
    AddModule mod_userdir.c
    AddModule mod_proxy.c
    AddModule mod_alias.c
    AddModule mod_rewrite.c
    AddModule mod_access.c
    AddModule mod_auth.c
    AddModule mod_auth_anon.c
    # AddModule mod_auth_dbm.c
    AddModule mod_auth_db.c
    AddModule mod_digest.c
    # AddModule mod_cern_meta.c
    AddModule mod_expires.c
    AddModule mod_headers.c
    AddModule mod_usertrack.c
    # AddModule mod_example.c
    # AddModule mod_unique_id.c
    AddModule mod_so.c
    AddModule mod_setenvif.c
     

    # Extra Modules
    # AddModule mod_php.c
    # AddModule mod_php3.c
    # AddModule mod_perl.c

    # ServerType is either inetd, or standalone.

    ServerType standalone

    # If you are running from inetd, go to "ServerAdmin".

    # Port: The port the standalone listens to. For ports < 1023, you will
    # need httpd to be run as root initially.

    Port 80

    # Number of servers to start --- should be a reasonable ballpark figure.

    StartServers 10

    # Server-pool size regulation.  Rather than making you guess how many
    # server processes you need, Apache dynamically adapts to the load it
    # sees --- that is, it tries to maintain enough server processes to
    # handle the current load, plus a few spare servers to handle transient
    # load spikes (e.g., multiple simultaneous requests from a single
    # Netscape browser).

    # It does this by periodically checking how many servers are waiting
    # for a request.  If there are fewer than MinSpareServers, it creates
    # a new spare.  If there are more than MaxSpareServers, some of the
    # spares die off.  These values are probably OK for most sites ---

    MinSpareServers 8
    MaxSpareServers 20

    # KeepAlive: Whether or not to allow persistent connections (more than
    # one request per connection). Set to "Off" to deactivate.

    KeepAlive 0

    # KeepAliveTimeout: Number of seconds to wait for the next request

    KeepAliveTimeout 15

    # Limit on total number of servers running, i.e., limit on the number
    # of clients who can simultaneously connect --- if this limit is ever
    # reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
    # It is intended mainly as a brake to keep a runaway server from taking
    # Unix with it as it spirals down...

    MaxClients 150

    # MaxRequestsPerChild: the number of requests each child process is
    # allowed to process before the child dies.
    # The child will exit so as to avoid problems after prolonged use when
    # Apache (and maybe the libraries it uses) leak.  On most systems, this
    # isn't really needed, but a few (such as Solaris) do have notable leaks
    # in the libraries.

    MaxRequestsPerChild 100

    # If you would like to have an agent and referer logfile uncomment the
    # following directives.

    # CustomLog logs/referer_log referer
    # CustomLog logs/agent_log agent

    # If you prefer a single logfile with access, agent and referer information
    # (Combined Logfile Format) you can use the following directive.

    # CustomLog logs/access_log combined

    # PidFile: The file the server should log its pid to
    PidFile /var/run/httpd.pid

    # CacheNegotiatedDocs: By default, Apache sends Pragma: no-cache with each
    # document that was negotiated on the basis of content. This asks proxy
    # servers not to cache the document. Uncommenting the following line disables
    # this behavior, and proxies will be allowed to cache the documents.

    # CacheNegotiatedDocs

    # Timeout: The number of seconds before receives and sends time out

    Timeout 300

    # ScoreBoardFile: File used to store internal server process information.
    # Not all architectures require this.  But if yours does (you'll know because
    # this file is created when you run Apache) then you *must* ensure that
    # no two invocations of Apache share the same scoreboard file.
    ScoreBoardFile /var/run/httpd.scoreboard

    # ServerRoot: The directory the server's config, error, and log files
    # are kept in.
    # NOTE!  If you intend to place this on a NFS (or otherwise network)
    # mounted filesystem then please read the LockFile documentation,
    # you will save yourself a lot of trouble.

    ServerRoot /etc/httpd

    # HostnameLookups: Log the names of clients or just their IP numbers
    # e.g.   www.apache.org (on) or 204.62.129.132 (off)
    # The default is off because it'd be overall better for the net if people
    # had to knowingly turn this feature on.

    HostnameLookups off

    # ServerAdmin: Your address, where problems with the server should be
    # e-mailed.

    #ServerAdmin cvsubra@fsl.noaa.gov
    ServerAdmin [WebMaster]@[YOUR DOMAIN]

    # The LockFile directive sets the path to the lockfile used when Apache
    # is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or
    # USE_FLOCK_SERIALIZED_ACCEPT. This directive should normally be left at
    # its default value. The main reason for changing it is if the logs
    # directory is NFS mounted, since the lockfile MUST BE STORED ON A LOCAL
    # DISK. The PID of the main server process is automatically appended to
    # the filename.

    # LockFile /var/lock/httpd.lock

    # ServerName allows you to set a host name which is sent back to clients for
    # your server if it's different than the one the program would get (i.e. use
    # "www" instead of the host's real name).

    # Note: You cannot just invent host names and hope they work. The name you
    # define here must be a valid DNS name for your host. If you don't understand
    # this, ask your network administrator.

    #ServerName emdev2.fsl.noaa.gov
    #DocumentRoot /home/mirror/ls1-fsld.fsl.noaa.gov/htdocs/
    ServerName [YOURSERVER NAME]
    DocumentRoot [YOURSERVERDIR]/htdocs/

    # BindAddress: You can support virtual hosts with this option. This option
    # is used to tell the server which IP address to listen to. It can either
    # contain "*", an IP address, or a fully qualified Internet domain name.
    # See also the VirtualHost directive.

    # BindAddress *

    # ErrorLog: The location of the error log file. If this does not start
    # with /, ServerRoot is prepended to it.

    ErrorLog logs/error_log

    # If you wish httpd to run as a different user or group, you must run
    # httpd as root initially and it will switch.

    # User/Group: The name (or #number) of the user/group to run httpd as.
    # On SCO (ODT 3) use User nouser and Group nogroup
    # On HPUX you may not be able to use shared memory as nobody, and the
    # suggested workaround is to create a user www and use that user.
    # NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
    # when the value of (unsigned)Group is above 60000;
    # don't use Group nobody on these systems!

    User nobody
    Group nobody
    Options ExecCgi Includes FollowSymlinks

    # LogLevel: Control the number of messages logged to the error_log.
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.

    LogLevel warn

    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent

    # The location of the access logfile (Common Logfile Format).
    # If this does not start with /, ServerRoot is prepended to it.

    CustomLog logs/access_log common

    # UseCanonicalName:  (new for 1.3)  With this setting turned on, whenever
    # Apache needs to construct a self-referencing URL (a url that refers back
    # to the server the response is coming from) it will use ServerName and
    # Port to form a "canonical" name.  With this setting off, Apache will
    # use the hostname:port that the client supplied, when possible.  This
    # also affects SERVER_NAME and SERVER_PORT in CGIs.
    UseCanonicalName on

    # MaxKeepAliveRequests: The maximum number of requests to allow
    # during a persistent connection. Set to 0 to allow an unlimited amount.
    # We reccomend you leave this number high, for maximum performance.

    MaxKeepAliveRequests 100

    <VirtualHost 137.75.60.164>
     #ServerAdmin cvsubra@fsl.noaa.gov
     #ServerName ls1-fsld.fsl.noaa.gov
     #DocumentRoot /home/mirror/ls1-fsld.fsl.noaa.gov/htdocs
     #ErrorLog logs/ls1-fsld.fsl.noaa.gov/error_log
     #TransferLog logs/ls1-fsld.fsl.noaa.gov/access_log
     ServerAdmin [WebMaster]@[YourDomain]
     ServerName [YOURWEBSITENAME]
     DocumentRoot [YOURWEBSITEDIR]/htdocs
     ErrorLog logs/[YOURWEBSITENAME]/error_log
     TransferLog logs/[YOURWEBSITENAME]/access_log
     User nobody
     Group nobody
     Options ExecCgi Includes
    </VirtualHost>


    Appendix E: access.conf -- Apache HTTP server configuration file

    ##
    ## access.conf -- Apache HTTP server configuration file
    ## /etc/httpd/conf/access.conf
    ##

    # access.conf: Global access configuration
    # Online docs at http://www.apache.org/

    # This file defines server settings which affect which types of services
    # are allowed, and in what circumstances.

    # Each directory to which Apache has access, can be configured with respect
    # to which services and features are allowed and/or disabled in that
    # directory (and its subdirectories).

    # Originally by Rob McCool

    # First, we configure the "default" to be a very restrictive set of
    # permissions.

    <Directory />
    Options None
    AllowOverride None
    </Directory>

    # Note that from this point forward you must specifically allow
    # particular features to be enabled - so if something's not working as
    # you might expect, make sure that you have specifically enabled it
    # below.

    # This should be changed to whatever you set DocumentRoot to.

    #<Directory /home/httpd/html>
    #<Directory /home/mirror/ls1-fsld.fsl.noaa.gov/htdocs>
    <Directory [YOURWEBSITEDIR]/htdocs>

    # This may also be "None", "All", or any combination of "Indexes",
    # "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews".

    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.

    Options Indexes Includes FollowSymLinks

    # This controls which options the .htaccess files in directories can
    # override. Can also be "All", or any combination of "Options", "FileInfo",
    # "AuthConfig", and "Limit"

    AllowOverride None

    # Controls who can get stuff from this server.
    #No Restrictions
    #order allow,deny
    #allow from all

    #With Groups and/or Users and/or IP address Restrictions
    order deny,allow
    deny from all
    #Allow from any AWIPS Network
    allow from 165.92
    AuthType Basic
    AuthName "LDAD Restricted Access"
    AuthDBGroupFile /etc/httpd/users
    AuthDBUserFile /etc/httpd/users
    #require valid-user
    require group EmergencyManagers WFO
    satisfy any
    </Directory>

    # /home/httpd/cgi-bin should be changed to whatever your ScriptAliased
    # CGI directory exists, if you have that configured.

    #<Directory /home/httpd/cgi-bin>
    #<Directory /home/mirror/ls1-fsld.fsl.noaa.gov/cgi-bin>
    <Directory [YOURWEBSITEDIR]/cgi-bin>
    AllowOverride None
    Options ExecCGI
    </Directory>

    # Allow server status reports, with the URL of http://servername/server-status
    # Change the ".your_domain.com" to match your domain to enable.

    #<Location /server-status>
    #SetHandler server-status

    #order deny,allow
    #deny from all
    #allow from .your_domain.com
    #</Location>

    # Allow access to local system documentation from localhost
    Alias /doc /usr/doc
    <Directory /usr/doc>
    order deny,allow
    deny from all
    allow from localhost
    Options Indexes FollowSymLinks
    </Directory>

    # There have been reports of people trying to abuse an old bug from pre-1.1
    # days.  This bug involved a CGI script distributed as a part of Apache.
    # By uncommenting these lines you can redirect these attacks to a logging
    # script on phf.apache.org.  Or, you can record them yourself, using the script
    # support/phf_abuse_log.cgi.

    #<Location /cgi-bin/phf*>
    #deny from all
    #ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
    #</Location>

    # You may place any other directories or locations you wish to have
    # access information for after this one.


    Appendix F: srm.conf -- Apache HTTP server configuration file

    ##
    ## srm.conf -- Apache HTTP server configuration file
    ## /etc/httpd/conf/srm.conf
    ##

    # With this document, you define the name space that users see of your http
    # server.  This file also defines server settings which affect how requests are
    # serviced, and how results should be formatted.

    # See the tutorials at http://www.apache.org/ for
    # more information.

    # Originally by Rob McCool; Adapted for Apache
     

    # DocumentRoot: The directory out of which you will serve your
    # documents. By default, all requests are taken from this directory, but
    # symbolic links and aliases may be used to point to other locations.

    DocumentRoot /home/mirror/ls1-fsld.fsl.noaa.gov/htdocs

    # UserDir: The name of the directory which is appended onto a user's home
    # directory if a ~user request is recieved.

    UserDir public_html

    # DirectoryIndex: Name of the file or files to use as a pre-written HTML
    # directory index.  Separate multiple entries with spaces.

    DirectoryIndex index.html index.shtml index.cgi

    # FancyIndexing is whether you want fancy directory indexing or standard

    FancyIndexing on

    # AddIcon tells the server which icon to show for different files or filename
    # extensions

    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

    AddIconByType (TXT,/icons/text.gif) text/*
    AddIconByType (IMG,/icons/image2.gif) image/*
    AddIconByType (SND,/icons/sound2.gif) audio/*
    AddIconByType (VID,/icons/movie.gif) video/*

    AddIcon /icons/binary.gif .bin .exe
    AddIcon /icons/binhex.gif .hqx
    AddIcon /icons/tar.gif .tar
    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
    AddIcon /icons/a.gif .ps .ai .eps
    AddIcon /icons/layout.gif .html .shtml .htm .pdf
    AddIcon /icons/text.gif .txt
    AddIcon /icons/c.gif .c
    AddIcon /icons/p.gif .pl .py
    AddIcon /icons/f.gif .for
    AddIcon /icons/dvi.gif .dvi
    AddIcon /icons/uuencoded.gif .uu
    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
    AddIcon /icons/tex.gif .tex
    AddIcon /icons/bomb.gif core

    AddIcon /icons/back.gif ..
    AddIcon /icons/hand.right.gif README
    AddIcon /icons/folder.gif ^^DIRECTORY^^
    AddIcon /icons/blank.gif ^^BLANKICON^^

    # DefaultIcon is which icon to show for files which do not have an icon
    # explicitly set.

    DefaultIcon /icons/unknown.gif

    # AddDescription allows you to place a short description after a file in
    # server-generated indexes.
    # Format: AddDescription "description" filename

    # ReadmeName is the name of the README file the server will look for by
    # default. Format: ReadmeName name
    #
    # The server will first look for name.html, include it if found, and it will
    # then look for name and include it as plaintext if found.
    #
    # HeaderName is the name of a file which should be prepended to
    # directory indexes.

    ReadmeName README
    HeaderName HEADER

    # IndexIgnore is a set of filenames which directory indexing should ignore
    # Format: IndexIgnore name1 name2...

    IndexIgnore .??* *~ *# HEADER* README* RCS

    # AccessFileName: The name of the file to look for in each directory
    # for access control information.

    AccessFileName .htaccess

    # TypesConfig describes where the mime.types file (or equivalent) is
    # to be found.

    TypesConfig /etc/mime.types

    # DefaultType is the default MIME type for documents which the server
    # cannot find the type of from filename extensions.

    DefaultType text/plain

    # AddEncoding allows you to have certain browsers (Mosaic/X 2.1+) uncompress
    # information on the fly. Note: Not all browsers support this.

    AddEncoding x-compress Z
    AddEncoding x-gzip gz

    # AddLanguage allows you to specify the language of a document. You can
    # then use content negotiation to give a browser a file in a language
    # it can understand.  Note that the suffix does not have to be the same
    # as the language keyword --- those with documents in Polish (whose
    # net-standard language code is pl) may wish to use "AddLanguage pl .po"
    # to avoid the ambiguity with the common suffix for perl scripts.

    AddLanguage en .en
    AddLanguage fr .fr
    AddLanguage de .de
    AddLanguage da .da
    AddLanguage el .el
    AddLanguage it .it

    # LanguagePriority allows you to give precedence to some languages
    # in case of a tie during content negotiation.
    # Just list the languages in decreasing order of preference.

    LanguagePriority en fr de

    # Redirect allows you to tell clients about documents which used to exist in
    # your server's namespace, but do not anymore. This allows you to tell the
    # clients where to look for the relocated document.
    # Format: Redirect fakename url
     

    # Aliases: Add here as many aliases as you need (with no limit). The format is
    # Alias fakename realname

    # Note that if you include a trailing / on fakename then the server will
    # require it to be present in the URL.  So "/icons" isn't aliased in this
    # example.

    #Alias /icons/ /home/httpd/icons/

    # ScriptAlias: This controls which directories contain server scripts.
    # Format: ScriptAlias fakename realname

    #ScriptAlias /cgi-bin/ /home/mirror/ls1-fsld.fsl.noaa.gov/cgi-bin/
    ScriptAlias /cgi-bin/ YOURWEBSITEDIR]/cgi-bin/

    # If you want to use server side includes, or CGI outside
    # ScriptAliased directories, uncomment the following lines.

    # AddType allows you to tweak mime.types without actually editing it, or to
    # make certain files to be certain types.
    # Format: AddType type/subtype ext1

    # For example, the PHP3 module (not part of the Apache distribution)
    # will typically use:
    #AddType application/x-httpd-php3 .php3
    #AddType application/x-httpd-php3-source .phps
    # The following is for PHP/FI (PHP2):
    #AddType application/x-httpd-php .phtml

    # AddHandler allows you to map certain file extensions to "handlers",
    # actions unrelated to filetype. These can be either built into the server
    # or added with the Action command (see below)
    # Format: AddHandler action-name ext1

    # To use CGI scripts:
    #AddHandler cgi-script .cgi

    # To use server-parsed HTML files
    AddType text/html .shtml
    AddHandler server-parsed .shtml

    # Uncomment the following line to enable Apache's send-asis HTTP file
    # feature
    #AddHandler send-as-is asis

    # If you wish to use server-parsed imagemap files, use
    AddHandler imap-file map

    # To enable type maps, you might want to use
    #AddHandler type-map var

    # To enable the perl module (if you have it installed), uncomment
    # the following section
    #
    #Alias /perl/ /home/httpd/perl/
    #<Location /perl>
    #SetHandler perl-script
    #PerlHandler Apache::Registry
    #Options +ExecCGI
    #</Location>

    # Action lets you define media types that will execute a script whenever
    # a matching file is called. This eliminates the need for repeated URL
    # pathnames for oft-used CGI file processors.
    # Format: Action media/type /cgi-script/location
    # Format: Action handler-name /cgi-script/location

    # MetaDir: specifies the name of the directory in which Apache can find
    # meta information files. These files contain additional HTTP headers
    # to include when sending the document

    #MetaDir .web

    # MetaSuffix: specifies the file name suffix for the file containing the
    # meta information.

    #MetaSuffix .meta

    # Customizable error response (Apache style)
    #  these come in three flavors
    #
    #    1) plain text
    #ErrorDocument 500 "The server made a boo boo.
    #  n.b.  the (") marks it as text, it does not get output
    #
    #    2) local redirects
    #ErrorDocument 404 /missing.html
    #  to redirect to local url /missing.html
    #ErrorDocument 404 /cgi-bin/missing_handler.pl
    #  n.b. can redirect to a script or a document using server-side-includes.
    #
    #    3) external redirects
    #ErrorDocument 402 http://some.other_server.com/subscription_info.html
    #

    # mod_mime_magic allows the server to use various hints from the file itself
    # to determine its type.
    #MimeMagicFile /etc/httpd/conf/magic

    # The following directives disable keepalives and HTTP header flushes.
    # The first directive disables it for Netscape 2.x and browsers which
    # spoof it. There are known problems with these.
    # The second directive is for Microsoft Internet Explorer 4.0b2
    # which has a broken HTTP/1.1 implementation and does not properly
    # support keepalive when it is used on 301 or 302 (redirect) responses.

    BrowserMatch "Mozilla/2" nokeepalive
    BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0

    # The following directive disables HTTP/1.1 responses to browsers which
    # are in violation of the HTTP/1.0 spec by not being able to grok a
    # basic 1.1 response.

    BrowserMatch "RealPlayer 4\.0" force-response-1.0
    BrowserMatch "Java/1\.0" force-response-1.0
    BrowserMatch "JDK/1\.0" force-response-1.0


    Appendix G: dbmmanage -- Apache /usr/bin/dbmmanage file


    #!/usr/local/bin/perl

    #
    ===================================================================
    # This program has been modified to mimic an earlier distribution
    # of dbmmanage.  Don't worry, this is actually an improvement.
    # The command "adduser" now supports groups and does not prompt
    # a user for the password.  Also, "adduser" modifies a preexisting
    # user without bawking.
    #         ***   DO NOT USE THE NORMAL DISTRIBUTION ***
    # of this program or the password updating job will break.
    #    9/99 : Modified by DAS
    #
    ===================================================================

    #
    ====================================================================
    # Copyright (c) 1995-1999 The Apache Group.  All rights reserved.
    #
    # Redistribution and use in source and binary forms, with or without
    # modification, are permitted provided that the following conditions
    # are met:
    #
    # 1. Redistributions of source code must retain the above copyright
    #    notice, this list of conditions and the following disclaimer.
    #
    # 2. Redistributions in binary form must reproduce the above copyright
    #    notice, this list of conditions and the following disclaimer in
    #    the documentation and/or other materials provided with the
    #    distribution.
    #
    # 3. All advertising materials mentioning features or use of this
    #    software must display the following acknowledgment:
    #    "This product includes software developed by the Apache Group
    #    for use in the Apache HTTP server project (http://www.apache.org/)."
    #
    # 4. The names "Apache Server" and "Apache Group" must not be used to
    #    endorse or promote products derived from this software without
    #    prior written permission. For written permission, please contact
    #    apache@apache.org.
    #
    # 5. Products derived from this software may not be called "Apache"
    #    nor may "Apache" appear in their names without prior written
    #    permission of the Apache Group.
    #
    # 6. Redistributions of any form whatsoever must retain the following
    #    acknowledgment:
    #    "This product includes software developed by the Apache Group
    #    for use in the Apache HTTP server project (http://www.apache.org/)."
    #
    # THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
    # EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
    THE
    # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    PARTICULAR
    # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
    # ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    CONTRACT,
    # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    ADVISED
    # OF THE POSSIBILITY OF SUCH DAMAGE.
    #
    ====================================================================
    #
    # This software consists of voluntary contributions made by many
    # individuals on behalf of the Apache Group and was originally based
    # on public domain software written at the National Center for
    # Supercomputing Applications, University of Illinois, Urbana-Champaign.
    # For more information on the Apache Group and the Apache HTTP server
    # project, please see <http://www.apache.org/>.

    #for more functionality see the HTTPD::UserAdmin module:
    # http://www.perl.com/CPAN/modules/by-module/HTTPD/HTTPD-Tools-x.xx.tar.gz
    #
    # usage: dbmmanage <DBMfile> <command> <key> <value>

    package dbmmanage;
    #                               -ldb    -lndbm    -lgdbm
    #BEGIN { @AnyDBM_File::ISA = qw(DB_File NDBM_File GDBM_File) }
    BEGIN { @AnyDBM_File::ISA = qw( NDBM_File DB_File NDBM_File GDBM_File) }
    use strict;
    use Fcntl;
    use AnyDBM_File ();

    my($file,$command,$key,$crypted_pwd,$group) = @ARGV;
    my($value); # added by DAS, temp var to hold passwd for printed message

    usage() unless $file and $command and $key and defined &{$dbmc::{$command}};

    # if your osname is in $newstyle_salt, then use new style salt (starts with '_' and contains
    # four bytes of iteration count and four bytes of salt).  Otherwise, just use
    # the traditional two-byte salt.
    # see the man page on your system to decide if you have a newer crypt() lib.
    # I believe that 4.4BSD derived systems do (at least BSD/OS 2.0 does).
    # The new style crypt() allows up to 20 characters of the password to be
    # significant rather than only 8.
    my $newstyle_salt = join '|', qw{bsdos}; #others?

    # remove extension if any
    my $chop = join '|', qw{db.? pag dir};
    $file =~ s/\.($chop)$//;

    my $is_update = $command eq "update";
    my $Is_Win32  = $^O eq "MSWin32";
    my %DB = ();
    my @range = ();
    my($mode, $flags) = $command =~
        /^(?:view|check)$/ ? (0644, O_RDONLY) : (0644, O_RDWR|O_CREAT);

    tie %DB, "AnyDBM_File", $file, $flags, $mode || die "Can't tie $file: $!";
    dbmc->$command();
    untie %DB;

    sub usage {
        my $cmds = join "|", sort keys %dbmc::;
        die "usage: $0 filename [$cmds] username [password] [group]\n";
    }

    my $x;
    sub genseed {
        my $psf;
        for (qw(-xlwwa -le)) {
            `ps $_ 2>/dev/null`;
            $psf = $_, last unless $?;
        }
        srand (time ^ $$ ^ unpack("%L*", `ps $psf | gzip -f`));
        @range = (qw(. /), '0'..'9','a'..'z','A'..'Z');
        $x = int scalar @range;
    }

    sub randchar {
        join '', map $range[rand $x], 1..shift||1;
    }

    sub salt {
        my $newstyle = $^O =~ /(?:$newstyle_salt)/;
        genseed() unless @range;
        return $newstyle ?
            join '', "_", randchar, "a..", randchar(4) :
            randchar(2);
    }

    sub getpass {
        my $prompt = shift || "Enter password:";

        unless($Is_Win32) {
            open STDIN, "/dev/tty" or warn "couldn't open /dev/tty $!\n";
            system "stty -echo;";
        }

        my($c,$pwd);
        print STDERR $prompt;
        while (($c = getc(STDIN)) ne '' and $c ne "\n" and $c ne "\r") {
            $pwd .= $c;
        }

        system "stty echo" unless $Is_Win32;
        print STDERR "\n";
        die "Can't use empty password!\n" unless length $pwd;
        return $pwd;
    }

    sub dbmc::update {
        die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
        dbmc->adduser;
    }

    sub dbmc::add {
        die "Can't use empty password!\n" unless $crypted_pwd;
    #   removed by DAS
    #    unless($is_update) {
    #       die "Sorry, user `$key' already exists!\n" if $DB{$key};
    #    }
        $crypted_pwd .= ":$group" if $group ne "" && $command eq "add";  # added by DAS
        $DB{$key} = $crypted_pwd;
        my $action = $is_update ? "updated" : "added";
        if ( $value ) { print "User $key $action with password $value encrypted to $DB{$key}\n";
    }
        else { print "User $key $action with password $DB{$key}\n"; }
    }

    sub dbmc::adduser {
    #   removed by DAS
    #    my $value = getpass "New password:";
    #    die "They don't match, sorry.\n" unless getpass("Re-type new password:") eq $value;
        $value = $crypted_pwd;                      # added by DAS
        $crypted_pwd = crypt $value, caller->salt;
        $crypted_pwd .= ":$group" if $group ne "";  # added by DAS
        dbmc->add;
    }

    sub dbmc::delete {
        die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
        delete $DB{$key}, print "`$key' deleted\n";
    }

    sub dbmc::view {
        print $key ? "$key:$DB{$key}\n" : map { "$_:$DB{$_}\n" if $DB{$_} } keys %DB;
    }

    sub dbmc::check {
        die "Sorry, user `$key' doesn't exist!\n" unless $DB{$key};
        print crypt(getpass(), $DB{$key}) eq $DB{$key} ? "password ok\n" : "password
    mismatch\n";
    }

    sub dbmc::import {
        while(defined($_ = <STDIN>) and chomp) {
            ($key,$crypted_pwd) = split /:/, $_, 2;
            dbmc->add;
        }
    }
     
     



    Appendix H: Downloading the Build 4.2 or Higher LDAD Web Dissemination Software

    Package Components

    The software supplied for the upgrade to an AWIPS Build 4.2 or higher system is comprised of one tar file containing files that are changed from the existing AWIPS LDAD system and an installation script.
     


    These files can be downloaded via anonymous ftp from the following site:  bora.fsl.noaa.gov (137.75.1.174).

    Use anonymous as your name when you ftp to bora, and then enter your complete email address as your password.

    Next, cd to pub/ldad
    The two files listed above are in the pub/ldad directory.

    Download then to your machine.