Skip to content

Instantly share code, notes, and snippets.

@gustavohenrique
Created November 14, 2011 17:49
Show Gist options
  • Save gustavohenrique/1364585 to your computer and use it in GitHub Desktop.
Save gustavohenrique/1364585 to your computer and use it in GitHub Desktop.
Install hudson, maven, archiva, collabnet svn, tomcat and play! framework
#!/bin/bash
IPS_HOME="/opt/ips"
BUILD_DIR="$IPS_HOME/build"
DOWNLOAD_DIR="$DOWNLOAD_DIR"
TOMCAT_DIR="$IPS_HOME/tomcat7"
TOMCAT_USER="ips"
TOMCAT_PASSWORD="ips"
TOMCAT_PORT="8888"
WEBAPPS_DIR="$TOMCAT_DIR/webapps"
APACHE_DIR="/etc/apache2"
MAVEN2_DIR="$IPS_HOME/maven2"
MAVEN3_DIR="$IPS_HOME/maven3"
DEFAULT_MAVEN=$MAVEN3_DIR
SVN_DIR="$IPS_HOME/csvn"
DOWNLOAD_DIR="/tmp"
function create_ips_user() {
warn "Criando usuario do IPS... "
useradd -d /home/$1 -m -s /bin/bash -U $1
}
function create_ips_directory_skel() {
warn "Criando estrutura de diretorios $BUILD_DIR..."
mkdir -p $BUILD_DIR 2> /dev/null
}
function download() {
local url=$1
local file="$2"
if [ ! -f "$DOWNLOAD_DIR/$file" ]; then
warn "Baixando $url/$file..."
cd $DOWNLOAD_DIR
wget "$url/$file"
fi
if [ ! -f "$DOWNLOAD_DIR/$file" ]; then
error "O arquivo $DOWNLOAD_DIR/$file nao existe e nao foi possivel fazer o download dele."
exit 1
fi
}
function extract_tar_gz() {
local file=$1
cd $DOWNLOAD_DIR
warn "Descompactando $file..."
tar zxvf $file > /dev/null
}
function copy() {
local orig=$1
local dest=$2
local command="cp -rf"
if [ -d "$DOWNLOAD_DIR/$orig" ]; then
warn "Movendo $orig para $dest..."
rm -rf $dest 2> /dev/null
$command "$DOWNLOAD_DIR/$orig" $dest
elif [ -f "$DOWNLOAD_DIR/$orig" ]; then
$command "$DOWNLOAD_DIR/$orig" $dest
else
warn "Erro ao copiar. Arquivo/diretorio $orig nao existe."
exit 1
fi
}
function install_maven() {
local url="$1"
local file=$2
local dest_dir=$3
download $url $file
extract_tar_gz $file
local extracted_dir=`basename $file .tar.gz | cut -d "-" -f1-3`
copy $extracted_dir $dest_dir
}
function install_tomcat() {
local url=$1
local file=$2
local dest_dir=$3
download $url $file
extract_tar_gz $file
local extracted_dir=`basename $file .tar.gz`
copy $extracted_dir $dest_dir
}
function install_play_framework() {
local url=$1
local file=$2
local dest_dir=$3
download $url $file
cd $DOWNLOAD_DIR
unzip $file
local extracted_dir=`basename $file .zip`
copy $extracted_dir $dest_dir
}
function install_war_file() {
local url=$1
local file=$2
local dest_dir=$3
download $url $file
copy $file $dest_dir
}
function install_svn() {
local url=$1
local file=$2
local dest_dir=$3
download $url $file
extract_tar_gz $file
local extracted_dir="csvn"
copy $extracted_dir $dest_dir
}
function configure_tomcat() {
local user=$1
local pass=$2
local file=$3
warn "Adicionando o user $user no tomcat..."
echo "<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename=\"manager-gui\"/>
<role rolename=\"admin-gui\"/>
<user username=\"$user\" password=\"$pass\" roles=\"manager-gui, admin-gui\"/>
</tomcat-users>" > $file
# change port
echo -e "%s/8080/$TOMCAT_PORT/g\nwq" | ex -s $TOMCAT_DIR/conf/server.xml
}
function configure_apache_virtualhost() {
local server_name=$1
local file="ips"
warn "Configurando virtualhost para [$server_name]..."
echo "<VirtualHost *:80>
ServerName $server_name
DocumentRoot /var/www
<IfModule mod_proxy.c>
ProxyRequests off
ProxyPreserveHost On
keepalive Off
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
SSLProxyEngine on
<Location /csvn>
ProxyPass http://localhost:3343/csvn
ProxyPassReverse http://localhost:3343/csvn
Order Allow,Deny
Allow from all
</Location>
<Location /svn>
ProxyPass http://localhost:8080/svn
ProxyPassReverse http://localhost:8080/svn
Order Allow,Deny
Allow from all
</Location>
<Location /viewvc>
ProxyPass http://localhost:8080/viewvc
ProxyPassReverse http://localhost:8080/viewvc
Order Allow,Deny
Allow from all
</Location>
<Location /viewvc-static>
ProxyPass http://localhost:8080/viewvc-static
ProxyPassReverse http://localhost:8080/viewvc-static
Order Allow,Deny
Allow from all
</Location>
<Location /ips>
ProxyPass http://localhost:$TOMCAT_PORT/ connectiontimeout=30 timeout=30
ProxyPassReverse http://localhost:$TOMCAT_PORT/
Order Allow,Deny
Allow from all
</Location>
<Location /manager>
ProxyPass http://localhost:$TOMCAT_PORT/manager connectiontimeout=30 timeout=30
ProxyPassReverse http://localhost:$TOMCAT_PORT/manager
Order Allow,Deny
Allow from all
</Location>
<Location /archiva>
ProxyPass http://localhost:$TOMCAT_PORT/archiva connectiontimeout=30 timeout=30
ProxyPassReverse http://localhost:$TOMCAT_PORT/archiva
Order Allow,Deny
Allow from all
</Location>
<Location /hudson>
ProxyPass http://localhost:$TOMCAT_PORT/hudson connectiontimeout=30 timeout=30
ProxyPassReverse http://localhost:$TOMCAT_PORT/hudson
Order Allow,Deny
Allow from all
</Location>
</IfModule>
</VirtualHost>" > "$APACHE_DIR/sites-available/$file"
a2enmod proxy
a2enmod proxy_http
a2enmod ssl
a2ensite $file
}
function install_archiva() {
if [ ! -d "$TOMCAT_DIR" ]; then
warn "Instale o tomcat antes de instalar o archiva."
exit 1
fi
local url=$1
local file=$2
download $url $file
mkdir "$TOMCAT_DIR/archiva"
copy $file "$TOMCAT_DIR/archiva/"
# Archiva dependencies
download "http://mirrors.ibiblio.org/pub/mirrors/maven2/javax/mail/mail/1.4.1" "mail-1.4.1.jar"
download "http://mirrors.ibiblio.org/pub/mirrors/maven2/javax/activation/activation/1.1" "activation-1.1.jar"
download "http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/derby/derby/10.1.3.1" "derby-10.1.3.1.jar"
download "http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/derby/derbytools/10.1.3.1" "derbytools-10.1.3.1.jar"
# Copy dependencies to tomcat lib dir
cp "$DOWNLOAD_DIR/mail-1.4.1.jar" $TOMCAT_DIR/lib
cp "$DOWNLOAD_DIR/activation-1.1.jar" $TOMCAT_DIR/lib
cp "$DOWNLOAD_DIR/derby-10.1.3.1.jar" $TOMCAT_DIR/lib
cp "$DOWNLOAD_DIR/derbytools-10.1.3.1.jar" $TOMCAT_DIR/lib
# Create a archiva context
mkdir -p $TOMCAT_DIR/conf/Catalina/localhost
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<Context path=\"/archiva\" docBase=\"$TOMCAT_DIR/archiva/apache-archiva-1.3.5.war\">
<Resource name=\"jdbc/users\" auth=\"Container\" type=\"javax.sql.DataSource\" username=\"sa\" password=\"\" driverClassName=\"org.apache.derby.jdbc.EmbeddedDriver\" url=\"jdbc:derby:database/users;create=true\" />
<Resource name=\"jdbc/archiva\" auth=\"Container\" type=\"javax.sql.DataSource\" username=\"sa\" password=\"\" driverClassName=\"org.apache.derby.jdbc.EmbeddedDriver\" url=\"jdbc:derby:database/archiva;create=true\" />
<Resource name=\"mail/Session\" auth=\"Container\" type=\"javax.mail.Session\" mail.smtp.host=\"localhost\"/>
</Context>" > $TOMCAT_DIR/conf/Catalina/localhost/archiva.xml
}
function create_ips_init_script() {
local ips_script=$1
warn "Criando o script de inicializacao [$ips_script]..."
echo "#!/bin/bash
export CATALINA_HOME=$TOMCAT_DIR
export CATALINA_OPTS=\"-Dappserver.home=\$CATALINA_HOME -Dappserver.base=\$CATALINA_HOME\"
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export JAVA_OPTS=\"-Xms512m -Xmx1024m -Djava.awt.headless=true\"
export HUDSON_HOME=$BUILD_DIR
export MAVEN_HOME=$DEFAULT_MAVEN
export M2_HOME=\$MAVEN_HOME
export MAVEN_OPTS=\"-Xms512m -Xmx1024m\"
export PATH=\$PATH:\$MAVEN_HOME/bin
$TOMCAT_DIR/bin/startup.sh
$SVN_DIR/bin/csvn start
" > $ips_script
chmod +x $ips_script
}
function install_dependencies() {
warn "Instalando dependencias via apt-get..."
apt-get install apache2 sun-java6-jre git git-svn graphviz subversion subversion-tools
}
function warn() {
local blue='\e[0;34m'
local nocolor='\e[0m'
echo -e "\n${blue}$1${nocolor}"
}
function error() {
local red='\e[0;31m'
local nocolor='\e[0m'
echo -e "\n${blue}$1${nocolor}"
}
function main() {
create_ips_directory_skel
create_ips_user "ips"
install_maven "http://ftp.unicamp.br/pub/apache/maven/binaries" "apache-maven-2.2.1-bin.tar.gz" $MAVEN2_DIR
install_maven "http://ftp.unicamp.br/pub/apache/maven/binaries" "apache-maven-3.0.3-bin.tar.gz" $MAVEN3_DIR
install_tomcat "http://ftp.unicamp.br/pub/apache/tomcat/tomcat-7/v7.0.20/bin" "apache-tomcat-7.0.20.tar.gz" $TOMCAT_DIR
install_war_file "http://hudson-ci.org/downloads/war/2.1.1" "hudson.war" $WEBAPPS_DIR
install_archiva "http://ftp.unicamp.br/pub/apache/archiva/binaries" "apache-archiva-1.3.5.war"
install_svn "http://downloads-guests.open.collab.net/files/documents/61/4671" "CollabNetSubversionEdge-2.0.0_linux-x86.tar.gz" $SVN_DIR
install_play_framework "http://download.playframework.org/releases" "play-1.2.3.zip" "$IPS_HOME/play"
configure_tomcat $TOMCAT_USER $TOMCAT_PASSWORD "$TOMCAT_DIR/conf/tomcat-users.xml"
configure_apache_virtualhost "ipsdev.wdev.com.br"
create_ips_init_script "/etc/init.d/ips"
chown ips:ips -Rf $IPS_HOME
warn "Sucesso. Execute o script [/etc/init.d/ips] para comecar a usar o IPS."
}
if [ "$1" != "--skip-dependencies" ]; then
install_dependencies
fi
main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment