fabfile.py

#

This fabric file will launch a standalone instance running catmaid

#

Imports

from __future__ import with_statement
from fabric.api import *
from fabric.contrib.console import confirm
from fabric.contrib.files import exists
from fabric.contrib.files import sed
import boto
from boto.s3.key import Key
from boto import ec2
import sys, pprint, time
from datetime import datetime
#

Amazon web configuration

update with your settings

aws_access_key_id = ''		# access key for account with launch priviledges 
aws_secret_access_key = ''	# secret key, set EC2 keypair below!
aws_size = 'm1.large' 		# or t1.micro
aws_keypair = 'ec2-keypair'	# your ec2 keypair
aws_AMI = 'ami-63be790a'	# ubuntu 10.04 LTS on US-East
env.user = 'ubuntu' 		# default user
#

Creates a new instance with desired settings on aws

def buildApp():
	'''Creates a new instance on ec2 and returns the ip address and summary information'''
	with settings(warn_only = True):

		conn = ec2.EC2Connection(aws_access_key_id, aws_secret_access_key)
		reservation = conn.run_instances(aws_AMI, instance_type=aws_size, key_name=aws_keypair)
		instance = reservation.instances[0]
		
		print 'Starting instance %s' %(instance)
		while not instance.update() == 'running':
			time.sleep(1)
			sys.stdout.write('.')
			sys.stdout.flush()
			
		instance.add_tag('Name', 'incf_catmaid')					
		print 'Instance started: %s' % instance.__dict__['id']
		print 'Public DNS: %s\n' % instance.__dict__['public_dns_name']
		
		print '************** Waiting 30 seconds for boot to finish **************\n'
		time.sleep(30)

		env.user = 'ubuntu'
		env.host_string = instance.__dict__['public_dns_name']

		installBasePackages()
		installImageComponents()
		installCatmaid()
		installFIJI()
		
		print 'Instance has been launched successfully'
		print 'To access, open a browser to http://%s/catmaid/' % (instance.__dict__['public_dns_name'])
#

Basic packages for building, version control

def installBasePackages():
	'''Basic packages for building, version control'''
	with settings(warn_only=True):
#

Update image and install needed base components

		run("sudo apt-get -y update", pty = True)
		run("sudo apt-get -y upgrade", pty = True)		
		packagelist = ['git-core', 'mercurial', 'subversion', 'unzip', 'build-essential', 'g++']
		for each_package in packagelist: 
			print each_package
			run('sudo apt-get -y install %s' % each_package, pty = True)
#

Basic packages for catmaid

def installCatmaid():
	'''Basic packages for building, version control'''
	with settings(warn_only=True):
#

Update image and install needed base components

		packagelist = ['libapache2-mod-php5', 'php5-pgsql', 'imagemagick', 'python-psycopg2', 'python-yaml', 'postgresql','pgadmin3','phppgadmin','postgresql-contrib']
		for each_package in packagelist: 
			print each_package
			run('sudo apt-get -y install %s' % each_package, pty = True)

		run('git clone https://github.com/acardona/CATMAID.git')
		sudo('rm -rvf /var/www/CATMAID')
		sudo('ln -s /home/ubuntu/CATMAID /var/www/CATMAID')
		sudo('mkdir -p /var/log/apache2/catmaid/')

		put('apache.conf')
		sudo('chown root:root apache.conf')
		sudo('mv -vf /home/ubuntu/apache.conf /etc/phppgadmin/apache.conf')

		put('catmaid')
		sudo('chown root:root catmaid')
		sudo('mv -vf /home/ubuntu/catmaid /etc/apache2/sites-available/catmaid')
		sudo('a2dissite default')
		sudo('a2ensite catmaid')
		sudo('/etc/init.d/apache2 reload')

		put('setup.inc.php')
		sudo('chown root:root setup.inc.php')
		sudo('mv -vf /home/ubuntu/setup.inc.php /home/ubuntu/CATMAID/inc/setup.inc.php')

		put('pg_hba.conf')
		sudo('chown root:root pg_hba.conf')
		sudo('chmod 600 pg_hba.conf')
		sudo('mv -vf /home/ubuntu/pg_hba.conf /etc/postgresql/8.4/main/pg_hba.conf')

		with cd('CATMAID'):
			run('sudo -u postgres psql < docs/createuser.sql')
			
#
def installFIJI():
	with settings(warn_only=True):
		sudo('apt-get install -y libxtst-dev')
		run('wget http://fiji.sc/downloads/Madison/fiji-linux64-20110307.tar.bz2')
		run('tar xvjf fiji-linux64-20110307.tar.bz2')
#

Install Jpeg2000 (kakadu) utils

def installImageComponents():
    with settings(warn_only=True):
            
            packagelist = ['libjpeg62-dev', 'libtiff-dev']
            for each_package in packagelist: 
                    print each_package
                    run('sudo apt-get -y install %s' % each_package, pty = True)
    
#

install kakadu libraries here

            kakadu_tools = 'http://s3.amazonaws.com/wholeslide/installs/Kakadu_v6_3_1-00781N_Linux-64-bit-Compiled.tar.gz' 
            
            run("mkdir kakadu")	
            with cd('kakadu'):
                    run('wget %s' % kakadu_tools)
                    run('tar -xvzf Kakadu_v6_3_1-00781N_Linux-64-bit-Compiled.tar.gz')			
                    
                    run('sudo mv ./bin/* /usr/local/bin/')
                    run('sudo mv ./lib/* /usr/local/lib/')
                    run('sudo /sbin/ldconfig')
                    
            run('rm -rvf kakadu')
#

this has to be run AFTER visiting http://domain/catmaid/

def installExampleData():
	with settings(warn_only=True):
		with cd('CATMAID'):
			run('sudo -u postgres psql < docs/createuser.sql')
			run('sudo -u postgres psql catmaid < docs/example-projects.sql')