aboutsummaryrefslogtreecommitdiff
path: root/templates/drupal.sh.erb
diff options
context:
space:
mode:
Diffstat (limited to 'templates/drupal.sh.erb')
-rw-r--r--templates/drupal.sh.erb453
1 files changed, 0 insertions, 453 deletions
diff --git a/templates/drupal.sh.erb b/templates/drupal.sh.erb
deleted file mode 100644
index 36e0650..0000000
--- a/templates/drupal.sh.erb
+++ /dev/null
@@ -1,453 +0,0 @@
-#!/bin/bash
-#
-# Drupal management script.
-#
-
-SITES="<%= scope.lookupvar('drupal::sites_folder') %>"
-BASE="<%= scope.lookupvar('drupal::www_folder') %>"
-SERIES="5 6 7"
-
-# Read a parameter from user
-function drupal_user_input {
- local input
- param="$1"
- default="$2"
- shift 2
-
- if echo $param | grep -q 'passwd'; then
- read -s -rep "$* (defaults to $default): " input
- else
- read -rep "$* (defaults to $default): " input
- fi
-
- if [ -z "$input" ]; then
- export $param="$default"
- else
- export $param="$input"
- fi
-}
-
-# Get drupal major version
-function drupal_get_major {
- echo $1 | sed -e 's/\(^.\).*/\1/'
-}
-
-# Check for existing installations
-function drupal_check_existing {
- if [ -e "$BASE/drupal-$1" ]; then
- echo "Folder $BASE/drupal-$1 already exists, skipping"
- exit 1
- fi
-}
-
-# Check for non existing installations
-function drupal_check_not_existing {
- if [ ! -e "$BASE/drupal-$1" ]; then
- echo "Folder $BASE/drupal-$1 does not exist, skipping"
- exit 1
- fi
-}
-
-# Iterate through all drupal instances
-function drupal_iterate {
- local command="$1"
-
- if [ -z "$command" ]; then
- return
- fi
-
- if [ "$command" != "cron" ] && [ "$SILENT" != "yes" ]; then
- echo "Issuing $command in all installed instances..."
- fi
-
- for version in $SERIES; do
- # Setup base folder
- base="$BASE/drupal-$version"
-
- if [ ! -d "$base/sites" ]; then
- continue
- fi
-
- # Setup site folders with .onion sites in the end of the list
- # and ignoring site names without dots
- cd $base/sites
- drupals="`ls -1 -I default -I all -I example.sites.php -I '*.onion' | grep "\." | xargs`"
- drupals="$drupals `ls -1 | grep '.onion$' | xargs`"
-
- # Issue updates
- for drupal in $drupals; do
- if [ -e "$drupal/settings.php" ]; then
- hash="`sha1sum $drupal/settings.php | cut -d ' ' -f 1`"
- # Process sites just once, avoiding symlinks
- if echo $settings_hash | grep -q -v "$command:$hash"; then
- settings_hash="$settings_hash-$command:$hash"
- if [ "$command" != "cron" ] && [ "$SILENT" != "yes" ]; then
- echo "Processing $drupal..."
- fi
-
- if [ "$command" == "update" ] || [ "$command" == "cron-update" ]; then
- shift
- drupal_update $command $drupal $*
- else
- drush -l $drupal $*
- fi
- fi
- fi
- done
-
- # Fix permissions
- if [ -e "$base/sites/all/modules" ]; then
- chown -R root.root $base/sites/all/modules
- fi
- if [ -e "$base/sites/all/themes" ]; then
- chown -R root.root $base/sites/all/themes
- fi
- done
-}
-
-# Update a drupal instance
-function drupal_update {
- local method="$1"
- local instance="$2"
- local confirm
- local line
- shift 2
-
- if [ "$method" == "cron-update" ]; then
- confirm="-y"
- fi
-
- # See https://drupal.org/node/823146#comment-3319070
- drush -l $instance up -u 1 --pipe | \
- grep -v -E 'Unknown|Up-to-date|Atualizado|Desconhecido|^Array$|^\($|^\)$|OK' | while read line ; do
- # Avoid automated core updates
- code="`echo $line | cut -d " " -f1`"
- if [ "$code" == "drupal" ]; then
- echo "Core update available: $line"
- else
- echo "Updating $code on instance $instance..."
- drush -l $instance up -u 1 $confirm $* $code
- fi
- done
-}
-
-# Deploy a fresh drupal tree
-function drupal_download {
- if [ -z "$1" ]; then
- echo "Usage: `basename $0` download <version> [--upgrade]"
- exit 1
- fi
-
- # Setup
- new="$1"
- drupal_series="`drupal_get_major $new`"
- cd $BASE
- drupal_check_existing $new
-
- # 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/
-
- # Upgrade mode, erase sites folder as the previous should be copied.
- if [ "$2" == "--upgrade" ]; then
- cd drupal-$new && rm -rf sites
- fi
-
- # Make symlink if needed.
- if [ ! -e "$BASE/drupal-$drupal_series/CHANGELOG.txt" ]; then
- # Deal with a possibly empty drupal folder
- rmdir $BASE/drupal-$drupal_series &> /dev/null
- ( cd $BASE && ln -s drupal-$new drupal-$drupal_series )
- fi
-}
-
-# Upgrade a drupal instance using upstream source
-function drupal_upgrade {
- if [ "$#" != "2" ]; then
- echo "Usage: `basename $0` upgrade <old_version> <new_version>"
- exit 1
- fi
-
- # Setup
- old="$1"
- new="$2"
- old_major="`drupal_get_major $old`"
- new_major="`drupal_get_major $new`"
- extra_folders=""
-
- if [ "$old_major" != "$new_major" ]; then
- echo "Major versions doesn't match"
- exit 1
- fi
-
- drupal_check_existing $new
- drupal_check_not_existing $old
-
- # 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.$new_minor"
- else
- drupal_series="$new_major"
- fi
-
- cd $BASE
-
- # Deploy a fresh drupal tree
- drupal_download $new --upgrade
-
- # Ensure we're in the new drupal folder
- cd $BASE/drupal-$new
-
- # Copy files
- for file in .htaccess favicon.ico files sites; do
- if [ ! -h "../drupal-$old/$file" ]; then
- cp -a ../drupal-$old/$file . &> /dev/null
- else
- # Symlink handling
- ln -sf $file `readlink ../drupal-$old/$file`
- fi
- done
-
- # Extra folder
- 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
-
- # Misc: copy image.imagemagick.inc to includes/ folder
- if [ -e "../drupal-$old/sites/all/modules/image/image.imagemagick.inc" ]; then
- cp ../drupal-$old/sites/all/modules/image/image.imagemagick.inc includes/
- fi
-
- # Modules that need stuff in the root folder
- if [ -d "sites/all/modules/chatroom" ]; then
- ln -s sites/all/modules/chatroom/chatroomread.php
- fi
-
- # Change symlink to point to the new location
- cd $BASE ; rm -rf drupal-$drupal_series && ln -s drupal-$new drupal-$drupal_series
-
- # Done
- echo "Audit: `du -hs drupal-$old`"
- echo "Audit: `du -hs drupal-$new`"
- echo "Check procedure and remove drupal-$old once you make sure that everything is fine."
-}
-
-# Run a drupal makefile
-function drupal_make {
- if [ -z "$1" ]; then
- echo "Usage: `basename $0` make <series>"
- exit 1
- fi
-
- series="$1"
- base="$BASE/drupal-$series"
- makefile="/usr/local/share/drupal/drupal$series.make"
- makefile_themes="/usr/local/share/drupal/themes$series.make"
-
- if [ -e "$makefile" ]; then
- if [ ! -e "$base" ]; then
- echo "Please download drupal code at $base first"
- exit 1
- fi
- drush dl drush_make
- ( cd $base && drush make -y --no-core $makefile )
- ( cd $base && drush make -y --no-core $makefile_themes )
- else
- echo "Makefile not found: $makefile"
- exit 1
- fi
-}
-
-# Run the video scheduler
-function drupal_video_scheduler {
- if [ -z "$2" ]; then
- echo "Usage: `basename $0` video-scheduler <site> <series>"
- exit 1
- fi
-
- site="$1"
- version="$2"
- drupal_folder="$BASE/drupal-$version"
- scheduler="$drupal_folder/sites/all/modules/video/video_scheduler.php"
- site_folder="$drupal_folder/sites/$site"
-
- if [ -f "$scheduler" ] && [ -e "$site" ]; then
- php $scheduler -r $drupal_folder -s $site
- fi
-}
-
-# Install a new instance
-function drupal_install {
- if [ -z "$2" ]; then
- echo "Usage: `basename $0` install <series> <name> [aliases]"
- exit 1
- fi
-
- # Required arguments
- series="$1"
- site="$2"
- shift 2
-
- # Site aliases
- aliases="$*"
-
- # Other parameters
- domain="`facter domain`"
-
- if [ "$series" != "6" ]; then
- # Installation parameters
- drupal_user_input name "$site" "Site name"
- drupal_user_input site_email "$site@$domain" "Site email"
- drupal_user_input profile "standard" "Installation profile"
- drupal_user_input locale "pt-br" "Installation language"
- drupal_user_input admin "$site" "Admin user"
- drupal_user_input admin_email "$admin@$domain" "Admin email"
- fi
-
- if [ -e "$BASE/drupal-$series/sites/$site" ]; then
- echo "Drupal $site already installed at $BASE/drupal-$series"
- echo "Installation will be overwritten"
- else
- # Check installation
- if [ ! -e "$BASE/drupal-$series" ]; then
- echo "Please download your drupal $series farm first"
- exit 1
- fi
-
- echo "Creating $SITES/$site/drupal/ structure..."
- mkdir -p $SITES/$site/drupal/{files,themes,modules,libraries}
-
- echo "Copying default configuration file..."
- cp $BASE/drupal-$series/sites/default/default.settings.php $SITES/$site/drupal/settings.php
- chmod 640 $SITES/$site/drupal/settings.php
-
- (
- echo "Creating symlinks..."
- cd $BASE/drupal-$series/sites
- ln -s $SITES/$site/drupal $site
- ln -s $SITES/$site/drupal $site.$domain
-
- for alias in $aliases; do
- ln -s $SITES/$site/drupal $alias
- done
- )
-
- # Aditional parameters
- drupal_user_input dbname "$site" "Database name"
- drupal_user_input dbuser "$site" "Database user"
- drupal_user_input dbpasswd "$site" "Database passwd"
- echo ""
-
- echo "Configuring settings.php"
- if [ "$series" == "7" ]; then
- cat >> $SITES/$site/drupal/settings.php <<-EOF
-\$databases['default']['default'] = array(
-'driver' => 'mysql',
-'database' => '$dbname',
-'username' => '$dbuser',
-'password' => '$dbpasswd',
-'host' => 'localhost',
-'prefix' => '',
-);
-EOF
- elif [ "$series" == "6" ]; then
- cat >> $SITES/$site/drupal/settings.php <<-EOF
-\$db_url = 'mysql://$dbuser:$dbpasswd@localhost/$dbname';
-EOF
- fi
- fi
-
- if [ "$series" != "6" ]; then
- (
- echo "Installing drupal $series for $site using $profile profile..."
- cd $BASE/drupal-$series/
- drush site-install $profile --site-name="$name" --site-mail="$site_email" --locale=$locale \
- --uri="$site" --sites-subdir="$site" --account-name="$admin" --account-mail="$admin_email"
- )
- fi
-
- # Fix permissions
- if grep -qe "^$site:" /etc/passwd; then
- chown root.$site $SITES/$site/drupal/settings.php
- chown $site.$site $SITES/$site/drupal/{files,themes,modules,libraries}
- else
- chown root.www-data $SITES/$site/drupal/settings.php
- chown www-data.www-data $SITES/$site/drupal/{files,themes,modules,libraries}
- fi
-
- if [ "$series" == "6" ]; then
- echo "Now please access http://$site.$domain/install.php to continue with the installation."
- else
- echo "Done. Please check your installation."
- fi
-}
-
-# Main procedure
-if [ -z "$1" ]; then
- echo "Usage: `basename $0` <cron|download|update|updatedb|upgrade|run|make|video-scheduler|install> [arguments]"
- exit 1
-elif [ "$1" == "cron" ]; then
- drupal_iterate cron
-elif [ "$1" == "cron-update" ]; then
- SILENT="yes"
- drupal_iterate pm-refresh &> /dev/null
- drupal_iterate cron-update
-elif [ "$1" == "download" ] || [ "$1" == "dl" ]; then
- shift
- drupal_download $*
-elif [ "$1" == "update" ]; then
- shift
- drupal_iterate pm-refresh
- drupal_iterate update $*
-
- # Update alone might not trigger updatedb in a farm for all instances.
- drupal_iterate updatedb $*
- drupal_iterate cc all $*
-elif [ "$1" == "updatedb" ]; then
- shift
- drupal_iterate updatedb $*
-elif [ "$1" == "upgrade" ]; then
- shift
- drupal_upgrade $*
-elif [ "$1" == "run" ]; then
- shift
- drupal_iterate $*
-elif [ "$1" == "make" ]; then
- shift
- drupal_make $*
-elif [ "$1" == "video-scheduler" ]; then
- shift
- drupal_video_scheduler $*
-elif [ "$1" == "install" ]; then
- shift
- drupal_install $*
-else
- echo "No action $1"
- exit 1
-fi