I have create this (first version) script to automatize the creation of all the services related with a new software development project.
The script creates…
- A new Subversion repository to host the source code of the project.
- A new MySQL database to store the data of the Trac instance.
- A new instance of Trac, linked to the just created Subversion repository, to be used like the project’s portal.
- A configuration file for Apache2 in order to made accesible the Trac repository.
The structure of the new Subversion repository is as follows:
-> branches -> tags -> trunk -> docs -> src
The environment used was the following
- Ubuntu Server 11.04 64 bits
- Apache/2.2.17 (installed from the Ubuntu repositories)
- MySQL Server 5.1.541ub (installed from the Ubuntu repositories)
- Subversion 1.6.12 (installed from the Ubuntu repositories)
- Python 2.7.1+ (installed from the Ubuntu repositories)
- Trac 0.12
TODO
- Implement checking to ensure that the different elements do not exists before trying to create them (for example the Subversion repository, or the MySQL database).
- Implement the installation of the Subversion hooks that ensure that the Trac instance keeps in sync with the Subversion repository
#!/bin/bash # Author: Jorge Tomé Hernando <jorge@jorgetome.info> # Date: August 2011 # Version: 1.0 # # Description # ----------- # This scripts creates all the environment needed to support # a new software development project. # # It creates a new Subversion repository, a new Trac instance # (and the associated MySQL database) and a configuration file # for the Apache2 web server. # # It also restart the Apache2 server in order to apply the new # configuration. # # It has been developed and tested in an Ubuntu 11.04 environment. usage() { cat<<EOF usage:$0 options This script creates a new support environment for a software development project including: Subversion repository and Trac instance. Options: -h Shows this message -p Name of the project -u User name of the project's administrator EOF } if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" 1>&2 exit 1 fi PROJECT_NAME= PROJECT_ADMIN= while getopts ":hp:u:" opt; do case $opt in h) usage exit 1 ;; p) PROJECT_NAME=$OPTARG ;; u) PROJECT_ADMIN=$OPTARG ;; ?) usage exit ;; esac done if [ -z $PROJECT_NAME ] || [ -z $PROJECT_ADMIN ] then usage exit 1 fi # Configuration variables SVN_HOME=/srv/svn TRAC_HOME=/srv/trac DB_PREFIX=trac_ DB_USR=MyUserForTrac DB_PWD=MyPasswordForTheUserForTrac DB_HOST=localhost DB_PORT=3306 APACHE_USR=www-data APACHE_CONF_DIR=/etc/apache2/projects.d # Utility variables PROJECT_DIR=`echo ${PROJECT_NAME,,}` DB_NAME=${DB_PREFIX}${PROJECT_DIR} SVN_DIR=${SVN_HOME}/${PROJECT_DIR} TRAC_DIR=${TRAC_HOME}/${PROJECT_DIR} # First we create the Subversion repository svnadmin create --fs-type fsfs ${SVN_DIR} svn mkdir -m "Initialization of the repository" \ --parents \ file://${SVN_DIR}/trunk/docs \ file://${SVN_DIR}/trunk/src \ file://${SVN_DIR}/branches \ file://${SVN_DIR}/tags # Second we have to create the MySQL database to support Trac mysql -u root -p <<QUERY_INPUT CREATE DATABASE ${DB_NAME}; GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO ${DB_USR}@${DB_HOST} IDENTIFIED BY '${DB_PWD}'; QUERY_INPUT # Third we have to create the Trac instance trac-admin ${TRAC_DIR} initenv ${PROJECT_NAME} mysql://${DB_USR}:${DB_PWD}@${DB_HOST}:${DB_PORT}/${DB_NAME} trac-admin ${TRAC_DIR} repository add ${PROJECT_DIR} ${SVN_DIR} svn trac-admin ${TRAC_DIR} repository resync ${PROJECT_DIR} trac-admin ${TRAC_DIR} permission add ${PROJECT_ADMIN} TRAC_ADMIN trac-admin ${TRAC_DIR} deploy ${TRAC_DIR}/deploy # Fourth we have to create the Apache2 configuration file cat > ${APACHE_CONF_DIR}/${PROJECT_DIR}.conf <<EOF WSGIScriptAlias /trac/${PROJECT_DIR} ${TRAC_DIR}/deploy/cgi-bin/trac.wsgi <Directory ${TRAC_DIR}/deploy/cgi-bin> WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all </Directory>https://www.jorgetome.info/bash-script-to-create-a-full-software-development-environment.html <Location "/trac/${PROJECT_DIR}/login"> AuthType Basic AuthName "Trac" AuthUserFile /srv/trac/.htpasswd Require valid-user </Location> EOF # Last we have to adjust the permissions on the directories and # restart the web server chown -R ${APACHE_USR}:${APACHE_USR} ${SVN_DIR} ${TRAC_DIR} apache2ctl restart