Apache TrafficServer AMIs for EC2
Author: Jason Giedymin

--TOC--
1.0 Ubuntu Based Images
1.1 Ubuntu AMI Details
1.2 What is installed?

2.0 Fedora Based Images
2.1 Fedora AMI Details
2.2 What is installed?

3.0 The ATS Installation
3.1 Additional Update Functionality
3.2 User customized settings
3.3 Script Breakout

4.0 FAQ
4.1 I use EC2 and I'm still confused!?
4.2 What is EC2?
4.3 I don't use EC2 or have an AWS account, can I still use these scripts on
    my Virtual Machine or dedicated Ubuntu/Fedora Linux Box?
4.4 How do I contact you for help?
4.5 Will these AMIs be updated in the future?

-------

1.0 Ubuntu Based Images
  This is the prefered image as Ubuntu is kept up to date by Canonical.

1.1 Ubuntu AMI Details
  Name: Amuxbit-Karmic-ApacheTrafficServer-AMI
  x86_64 AMI: ami-ada24cc4, kernel: aki-fd15f694, Ramdisk: ari-7b739e12
    i386 AMI: ami-5ba34d32, kernel: aki-5f15f636, Ramdisk: ari-d5709dbc

1.2 What is installed?
  All packages other than Apache TrafficServer are from the ec2 ubuntu
  package repositories.  All software installed should be open source.
    * Official Canonical Ubuntu Karmic 9.10 EC2 AMI
    * Dist Upgraded as of 4/1/2010
    * Apache TrafficServer - Trunk (can be updated at any time)
    * openjdk-6-jre (for ec2 tools)
    * ruby (for ec2 tools)
    * libopenssl-ruby (for ec2 tools)
    * Apache2 (httpd, used for testing)

2.0 Fedora Based Images

2.1 Fedora AMI Details
  Name: Amuxbit-Fedora8-ApacheTrafficServer-AMI
  x86_64 AMI: ami-c3a04eaa, kernel: aki-a3d737ca, Ramdisk: ari-7cb95a15
    i386 AMI: ami-53a04e3a, kernel: aki-6eaa4907, Ramdisk: ari-42b95a2b

2.2 What is installed?
  All packages other than Apache TrafficServer are from the ec2 fedora
  package repositories.  All software installed should be open source.
    * Official Fedora Core 8 EC2 AMI
    * Dist Upgraded as of 4/1/2010
    * Apache TrafficServer - Trunk (can be updated at any time)
    * java-1.7.0-icedtea (openjdk for ec2 tools)
    * openssl-devel (for ec2 tools)
    * ruby (for ec2 tools)
    * httpd (Apache web server, used for testing)

3.0 The ATS Installation
  Apache Traffic Server is installed in: '/ats'.
  The installation script used to install ATS is contained within the contrib
  directory, part of the ATS source distribution.  The script is included
  within the '/ats' folder for actual use.

3.1 Additional Update Functionality
  The EC2 images provided contain additional scripts to maintain freshness
  of the install scripts.  At one time the scripts provided 'auto-heal'
  functionality but that has been removed.  Running /ats/install_update.sh
  will keep the ATS installation up to date.

3.2 User customized settings
  Any customized settings will be lost if the update/install scripts are run.
  Upon executing the install/update scripts you may copy your files back into
  the config directory.  Users should periodically backup your config files,
  and keep abrest of any config changes as new versions of ATS are released.
  The latter reason being why I did not auto-copy configs.  While I've tried
  to lessen as much pain for any Sys Admins, ultimately you must take charge
  of these critical settings as updates will and do happen frequently to the
  ATS source.

  An example script which alters settings can be found in
    '/ats/contrib/set_trafficserver.sh'
  This has been used on the AMIs already provided.

3.3 Script Breakout

 ats
 |-- contrib
     | -- install_trafficserver.sh : installs ATS. Try not to run this directly.
     | -- set_trafficserver.sh : sample config/testing/benchmark base script.
            You may want to learn from/use this script.
     ` -- update_scripts.sh : used to update install_trafficserver.sh,
            and set_trafficserver.sh from trunk.
 |-- install_update.sh : the 'easy button' script to re-install ATS.
       Executes update_scripts.sh, then install_trafficserver.sh.
       This is what you want to run.
 `-- readme : extra information.

4.0 FAQ

4.1 I use EC2 and I'm still confused!?
  With your EC2 account, refer to one of the AMIs listed in this doc
  (Ubuntu/Fedora).  Image architectures provided are i386, and x86_64.
  64bit is offered for those who need to spin up a big high powered instances.
  Once running (and it may take a while) you will find yourself with a Linux
  distribution with Apache Traffic Server already installed.  If you'd like
  to re-install ATS against trunk, run '/ats/install_update.sh'.  Note that
  you will have to backup and/or optimize your configuration (see 3.2).
  To further setup ATS see the TrafficServer wiki @

    http://cwiki.apache.org/confluence/display/TS/

4.2 What is EC2?
  See http://aws.amazon.com/

4.3 I don't use EC2 or have an AWS account, can I still use these scripts on
    my Virtual Machine or dedicated Ubuntu/Fedora Linux Box?
  Absolutely!  The /contrib scripts are actually meant for Ubuntu/Linux
  Installs first, EC2 second.  You can find them on the ATS SVN/Git
  repository under '/contrib'.

4.4 How do I contact you for help?
  For mailing lists, and IRC information, visit our web page at

    https://trafficserver.apache.org/

4.5 Will these AMIs be updated in the future?
  Absolutely!
