#!/bin/bash # # Drupal management script. # BASE="<%= apache_www_folder %>" SERIES="5 6" # Get drupal major version function get_major { echo $1 | sed -e 's/\(^.\).*/\1/' } # Deploy a fresh drupal tree function drupal_deploy { if [ "$#" != "1" ]; then echo "Usage: `basename $0` deploy " exit 1 fi # Setup new="$1" cd $BASE # Deploy a fresh drupal tree wget http://ftp.drupal.org/files/projects/drupal-$new.tar.gz tar zxvf drupal-$new.tar.gz && rm drupal-$new.tar.gz chown -R root.root drupal-$new/ cd drupal-$new && rm -rf sites } # Update all drupal instances in the host function drupal_update { for version in $SERIES; do # Setup base and sites folders base="$BASE/drupal-$version" cd $base/sites drupals="`ls -I default -I all`" # Issue updates for drupal in $drupals; do # Ignore symlinks so sites are updated just once if [ ! -h $drupal ]; then echo "Processing $drupal..." drush -l $drupal update fi done # Fix permissions chown -R root.root $base/sites/all/modules chown -R root.root $base/sites/all/themes done } # Upgrade a drupal instance using upstream source. function drupal_upgrade { if [ "$#" != "2" ]; then echo "Usage: `basename $0` upgrade " exit 1 fi # Setup old="$1" new="$2" old_major="`get_major $old`" new_major="`get_major $new`" extra_folders="" if [ "$old_major" != "$new_major" ]; then echo "Major versions doesn't match" exit 1 fi # Set drupal series if [ "$new_MAJOR" == "4" ]; then # Get minor versions new_minor="`echo $new | sed -e "s/^$new_major\.//"`" old_minor="`echo $old | sed -e "s/^$old_major\.//"`" if [ "$old_minor" != "$new_minor" ]; then echo "Minor versions doesn't match" exit 1 fi drupal_series="$new_MAJOR.$MINOR" else drupal_series="$new_MAJOR" fi cd $BASE # Deploy a fresh drupal tree drupal_deploy $new # Copy files cp -Rp ../drupal-$old/{.htaccess,favicon.ico,files/,sites/} . &> /dev/null for extra_folder in $extra_folders; do if [ -d ../drupal-$old/$extra_folder ]; then cp -Rp ../drupal-$old/$extra_folder . fi done # Legacy stuff for Drupal 4.x.x if [ "$new_MAJOR" == "4" ]; then rsync -av ../drupal-$old/themes/ themes/ for module in `ls ../drupal-$old/modules`; do if [ -d "../drupal-$old/modules/$module" ]; then cp -Rp ../drupal-$old/modules/$module modules/ fi done fi # Copy installation profiles for Drupal 5.x or newer if [ "$new_MAJOR" != "4" ]; then rsync -av --exclude=default ../drupal-$old/profiles/ profiles/ fi # Change symlink to point to the new location cd $BASE ; rm drupal-$drupal_series && ln -s drupal-$new drupal-$drupal_series # Done echo "Check procedure and remove drupal-$old once you make sure that everything is fine." } # Main procedure if [ -z "$1" ]; then echo "Usage: `basename $0` [arguments]" exit 1 elif [ "$1" == "deploy" ]; then shift drupal_deploy $* elif [ "$1" == "update" ]; then shift drupal_update $* elif [ "$1" == "upgrade" ]; then shift drupal_upgrade $* fi