Apache Traffic Server

Traffic Server is a high-performance building block for cloud services.
It's more than just a caching proxy server; it also has support for
plugins to build large scale web applications.

1. DIRECTORY STRUCTURE

  traffic/ ............... top src dir
  |-- ci/ ................ quality assurance and other CI tools and configs
  |-- cmd/ ............... various command applications
      |-- traffic_cop/ ... traffic_cop application
      |-- traffic_line/ .. Command line utilities and API
      |-- traffic_shell/ . traffic_shell application
      |-- traffic_top/ ... traffic_top application
  |-- contrib ............ various contributed auxiliary pieces
  |-- doc/ ...............
      |-- admin/ ......... Admin guide documentations
      |-- dot/ ........... Graphviz source files for docs pictures
      |-- man/ ........... Unix style man-pages
      |-- plugins/ ....... Documentation for our core plugins
      |-- sdk/ ........... Plugin developer guide
  |-- example/ ........... example plugins
  |-- install/ ........... installation programs and scripts
  |-- iocore/ ............
      |-- aio/ ........... Asynchronous I/O core
      |-- cache/ ......... Disk and RAM cache
      |-- cluster/ ....... Cache and configuration clustering
      |-- dns/ ........... DNS (asynchronous)
      |-- hostdb/ ........ Internal DNS cache
      |-- net/ ........... Network
  |-- lib/ ...............
      |-- cpp11api ....... C++ '11 wrapper for plugin developers
      |-- records/ ....... library for config files
      |-- perl/ .......... Perl libraries for e.g. mgmt access and configurations
      |-- ts/ ............ Base / core library
      |-- tsconfig/....... New config parser and library (experimental)
      |-- wccp/ .......... WCCP implementation
  |-- m4/ ................ custom macros for configure.ac
  |-- mgmt/ .............. Management server and tools (including traffic_manager)
  |-- plugins/ ........... Core plugins (stable and experiemental)
  |-- proxy/ ............. HTTP proxy logic
      |-- api/ ........... Plugin API includes
      |-- config/ ........ Configurations
      |-- congest/ ....... Congestion control
      |-- hdrs/ .......... Headers parsing and management
      |-- http/ .......... The actual HTTP protocol implementation
      |---http2/ ......... HTTP/2 implementation
      |-- logging/ ....... Flexible logging
      |-- spdy/ .......... SPDY implementation
  |-- README ............. intro, links, build info
  |-- README-EC2 ......... info on EC2 support
  |-- REVIEWERS .......... (incomplete) list of areas with committer interest
  |-- LICENSE ............ full license text
  `-- NOTICE ............. copyright notices

2. REQUIREMENTS

  This section outlines build requirements for different OS
  distributions. This may be out of date compared to the on-line
  requirements at

  <https://cwiki.apache.org/confluence/display/TS/Building>.

  Fedora 12-19 / CentOS / RHEL:
    autoconf
    automake
    pkgconfig
    libtool
    perl-ExtUtils-MakeMaker
    gcc-c++
    glibc-devel
    openssl-devel
    tcl-devel
    expat-devel
    pcre
    pcre-devel
    libcap-devel (optional, highly recommended)
    flex (optional, needed for e.g. WCCP)
    hwloc-devel (optional, highly recommended)
    lua-devel (optional)

  Fedora 8 EC2 (Kernel: 2.6.21.7-2.ec2.v1.2.fc8xen):
    FC8 on EC2 requires unique configure declarations, please see that section
    below.

    NOTE: Alternately you may use the install scripts in 'contrib' which
          automate this or use the pre-built public Fedora Core 8 EC2 AMI
          with ATS installed. Both of which are HIGHLY RECOMMENDED.
          See 'README-EC2' for further details.

    autoconf
    automake
    pkgconfig
    libtool
    perl-ExtUtils-MakeMaker
    gcc-c++
    glibc-devel
    openssl-devel
    tcl-devel
    expat-devel
    pcre

  Ubuntu 8.* - 13.*:
    autoconf
    automake
    pkg-config
    libtool
    libmodule-install-perl
    g++
    libssl-dev
    tcl-dev
    expat
    libexpat-dev
    libpcre3-dev
    libcap-dev (optional, highly recommended)
    flex (optional, required for e.g. WCCP)
    libhwloc-dev (optional, highly recommended)
    liblua5.1-dev or libluajit-5.1-dev (optional)
    libncurses5-dev (optional, required for e.g.: traffic_top)
    libcurl4-openssl-dev (optional, required for e.g.: traffic_top)

  Ubuntu EC2 9.10:
    NOTE: Alternately you may use the install scripts in 'contrib' which
          automate this or use the pre-built public Ubuntu EC2 AMI with
          ATS installed. Both of which are HIGHLY RECOMMENDED.
          See 'README-EC2' for further details.

    Install these packages:
    autoconf
    automake
    pkg-config
    libtool
    libmodule-install-perl
    g++
    libssl-dev
    tcl-dev
    expat
    libexpat-dev
    libpcre3-dev
    flex (optional)
    libhwloc-dev (optional, highly recommended)
    liblua-dev (optional)
    libncurses5-dev (optional, required for e.g.: traffic_top)
    libcurl3-openssl-dev (optional, required for e.g.: traffic_top)

  FreeBSD 7.2,8.0,9.0,9.1
    GCC 4.2.1 compiler suite or clang. You can install the following
	packages either from ports or via pkg_add or pkgng:
    devel/gmake
    devel/autoconf
    devel/automake
    devel/pkgconf
    devel/libtool
    lang/tcl85
    textproc/expat (or expat2)
    security/openssl
    devel/pcre
    textproc/flex (optional, install newer version from ports, fix PATH)
    devel/hwloc (optional, highly recommended)
    lang/lua (optional, on x64 don't use LuaJIT!)

  OmniOS:
    developer/gcc46
    developer/build/gnu-make
    developer/build/autoconf
    developer/build/automake-111
    developer/build/libtool
    omniti/runtime/tcl-8
    library/expat
    library/security/openssl
    library/pcre

  OSX 10.5:
    GCC 4.2.4 compiler suite (ports collection)
    autoconf
    automake
    pkgconfig
    libtool
    tcl
    expat
    openssl
    pcre

3. Building from distribution

You can download the latest source code from the official Apache Traffic
Server site:

       http://trafficserver.apache.org/downloads

(or via the URL shortener: http://s.apache.org/uG). Once downloaded,
follow the instructions:

   tar xf trafficserver-2.1.8-unstable.tar.bz2
   cd trafficserver-2.1.8-unstable
  ./configure            # configure the build environment to create Makefiles
  make                   # execute the compile

This will build with a destination prefix of /usr/local. You can finish
the installation with

  sudo make install

4. BUILDING FROM GIT REPO

  mkdir -p ~/dev         # make yourself a development dir
  cd ~/dev               # enter your development dir
  git clone ...          # get the source code from ASF Git repo
  cd trafficserver       # enter the checkout dir
  autoreconf -if         # generate the configure script and Makefile.in files
  ./configure            # configure the build environment to create Makefiles
  make                   # execute the compile

4b. Instructions for building on EC2
    NOTE: Alternately you may use the scripts under 'contrib' which will
          automate the install for trafficserver under EC2 which is
          HIGHLY RECOMMENDED. See 'README-EC2' for further details.

   # As root do the following when using Ubuntu
   mkdir -p /mnt          #EC2 Storage Mount, where storage is located
   cd /mnt
   git clone ...          # get the source code from ASF Git repo
   cd trafficserver       # enter the checkout dir
   autoreconf -i --force  # generate the configure script and Makefile.in files
   ./configure
   make

   # As root do the following when using Fedora Core 8 kernel
   mkdir -p /mnt          #EC2 Storage Mount, where storage is located
   cd /mnt
   git clone ...          # get the source code from ASF Git repo
   cd trafficserver       # enter the checkout dir
   autoreconf -i --force  # generate the configure script and Makefile.in files
   ./configure --disable-eventfd
   make

4c. Instructions for building on FreeBSD

   The only difference is how to run configure and make:

   MAKE=gmake ./configure # make sure that gmake is the make we use
   gmake

5. INSTALLATION

  DEFAULT DIR                        CONTENTS
  /usr/local/var/log/trafficserver   log files created at runtime
  /usr/local/var/trafficserver       runtime files
  /usr/local/etc/trafficserver       configuration files
  /usr/local/bin                     executable binaries
  /usr/local/libexec/trafficserver   plugins

6. CRYPTO NOTICE

  This distribution includes cryptographic software.  The country in
  which you currently reside may have restrictions on the import,
  possession, use, and/or re-export to another country, of
  encryption software.  BEFORE using any encryption software, please
  check your country's laws, regulations and policies concerning the
  import, possession, or use, and re-export of encryption software, to
  see if this is permitted.  See <http://www.wassenaar.org/> for more
  information.

  The U.S. Government Department of Commerce, Bureau of Industry and
  Security (BIS), has classified this software as Export Commodity
  Control Number (ECCN) 5D002.C.1, which includes information security
  software using or performing cryptographic functions with asymmetric
  algorithms.  The form and manner of this Apache Software Foundation
  distribution makes it eligible for export under the License Exception
  ENC Technology Software Unrestricted (TSU) exception (see the BIS
  Export Administration Regulations, Section 740.13) for both object
  code and source code.

  The following provides more details on the included cryptographic
  software:

    The functionality of OpenSSL <http://www.openssl.org/> is
    utilized in parts of the software.

7. ADDITIONAL INFO

  Web page: https://trafficserver.apache.org/
  Wiki: http://cwiki.apache.org/confluence/display/TS/
  User mailing list: users@trafficserver.apache.org
