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 beeen 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

    http://trafficserver.apache.org/

4.5 Will these AMIs be updated in the future?
  Absolutely!
