DrupALL (α) — обновление ядра Drupal всех сайтов

Ядро Drupal необходимо обновлять примерно раз в месяц, связано это с требованиями безопасности. В архив ядра входит более 1200 файлов, которые необходимо загружать на каждый сайт как можно быстрее, при выходе каждой новой версии. Задача по обновлению ядра легко решается на выделенном сервере посредством Drush, однако на обычных хостингах приходится обходиться классическим обновлением файлов по FTP. А когда сайтов становится больше и больше, их оперативное обновление становится рутиной.

DrupALL — скрипт, позволяющий массово обновлять ядра нескольких разных Drupal сайтов на разных хостингах. Для работы скрипту нужен файл drupall.accounts содержащий FTP аккаунты и директории назначения (собственно, где и установлены ядра). Необходимо принять меры по защите данного файла.

# This file contains accounts data: protocols, usernames, passwords, servers, destination folders
# Format:
# protocol username password server /destination/directory
# My Drupal sites:
ftp:// drupal_ftp_user1 drupal1password drupalsite1.com /public_html
ftp:// drupal_ftp_user2 drupal2password drupalsite2.net /www/drupalsite2.net
ftp:// drupal_ftp_user3 drupal3password drupalsite3.org /httpdocs/

Для работы скрипта необходима установка утилит NcFTP. Файл скрипта drupall.sh:

#!/bin/bash
date
echo DrupALL : Drupal core updater for all sites is ready!;

#TODO: Parse RSS feed to extract link
URL=`echo https://ftp.drupal.org/files/projects/drupal-7.60.tar.gz`;
ARC=`basename $URL`; # drupal-7.60.tar.gz

f_without_gz=${ARC%.*}; # cut .gz:  drupal-7.60.tar
DIR=${f_without_gz%.*}; # cut .tar: drupal-7.60


if [ ! -f $ARC ]; then
    echo Downloading $URL
    wget $URL
else
    echo $ARC already downloaded
fi

if [ ! -d $DIR ]; then
    echo Extracting $ARC
    tar -xvzf $ARC
    echo Edit .htaccess manually!
    exit
else
    echo $ARC already extracted
fi

cat drupall.accounts | grep ftp:// | while read LINE
do
    
    USER=`echo $LINE | awk '{print $2}'`;
    PASS=`echo $LINE | awk '{print $3}'`;
    HOST=`echo $LINE | awk '{print $4}'`;
    DEST=`echo $LINE | awk '{print $5}'`;
    
    date
    echo Uploading $DIR to $USER:********@$HOST/$DEST
    ncftpput -R -v -u $USER -p $PASS $HOST $DEST $DIR/* > /dev/null 2>&1
    date
    echo Finished  $DIR to $USER:********@$HOST/$DEST
done

date
echo DrupALL is finished! $DIR uploaded to all sites!