Use at own risk. Programs haven't been thoroughly tested.

script: ksecure_sync.bash

Info

Source Code

download source
#!/bin/bash
set +x
 
CMD_MYSQL="/usr/bin/mysql"
CMD_MYSQLDUMP="/usr/bin/mysqldump"
CMD_RSYNCDEL="rsync -a --itemize-changes --delete"
CMD_RSYNC="rsync -a --itemize-changes"
 
HOST_GET="impala.plutonia.nl"
HOST_PUT="localhost"
 
DB_USER_GET="root"
DB_PASS_GET="xxxxxxxx"
DB_HOST_GET="${HOST_GET}"
 
DB_USER_PUT="root"
DB_PASS_PUT="xxxxxxxx"
DB_HOST_PUT="${HOST_PUT}"
 
DO_SOURCES="0"
DO_PACKAGES="0"
DO_PEARPKG="1"
DO_ACCOUNTS="0"
DO_CONFIG="1"
DO_DATABASE="1"
DO_DIRS="0"
 
if [ "${HOST_GET}" != "localhost" ] && [ "${HOST_PUT}" != "localhost" ]; then
    echo "Error. Either HOST_GET or HOST_PUT needs to be localhost. Can't sync between 2 remote machines. I'm not superman."
    exit 0
fi
 
RSYNC_HOST_GET="${HOST_GET}:"
RSYNC_HOST_PUT="${HOST_PUT}:"
if [ "${RSYNC_HOST_GET}" = "localhost:" ]; then
    RSYNC_HOST_GET=""
fi
if [ "${RSYNC_HOST_PUT}" = "localhost:" ]; then
    RSYNC_HOST_PUT=""
fi
 
echo -n "package sources sync"
if [ "${DO_SOURCES}" = 1 ]; then
    ${CMD_RSYNC} ${RSYNC_HOST_GET}/etc/apt/sources.list  ${RSYNC_HOST_PUT}/etc/apt/
    ssh aptitude -y update && aptitude -y dist-upgrade
    echo " [done] "
else 
    echo " [skipped] "
fi
 
echo "package sync"
if [ "${DO_PACKAGES}" = 1 ]; then
    ssh ${HOST_GET} 'dpkg --get-selections > /tmp/dpkglist.txt'
    ${CMD_RSYNC} ${RSYNC_HOST_GET}/tmp/dpkglist.txt ${RSYNC_HOST_PUT}/tmp/
    ssh ${HOST_PUT} 'dpkg --set-selections < /tmp/dpkglist.txt'
    ssh ${HOST_PUT} 'apt-get -y update'
    ssh ${HOST_PUT} 'apt-get -y dselect-upgrade'
    echo " [done] "
else 
    echo " [skipped] "
fi
 
echo "PEAR package sync"
if [ "${DO_PEARPKG}" = 1 ]; then
    ssh ${HOST_GET} "sudo pear -q list | egrep 'alpha|beta|stable' |awk '{print \$1}' > /tmp/pearlist.txt"
    ${CMD_RSYNC} ${RSYNC_HOST_GET}/tmp/pearlist.txt ${RSYNC_HOST_PUT}/tmp/
    ssh ${HOST_PUT} "cat /tmp/pearlist.txt |awk '{print \"pear install -f \"\$0}' |sudo bash"
    echo " [done] "
else 
    echo " [skipped] "
fi
 
echo "account sync"
if [ "${DO_ACCOUNTS}" = 1 ]; then
    ${CMD_RSYNC} ${RSYNC_HOST_GET}/etc/passwd  ${RSYNC_HOST_PUT}/etc/
    ${CMD_RSYNC} ${RSYNC_HOST_GET}/etc/passwd- ${RSYNC_HOST_PUT}/etc/
    ${CMD_RSYNC} ${RSYNC_HOST_GET}/etc/shadow  ${RSYNC_HOST_PUT}/etc/
    ${CMD_RSYNC} ${RSYNC_HOST_GET}/etc/shadow- ${RSYNC_HOST_PUT}/etc/
    ${CMD_RSYNC} ${RSYNC_HOST_GET}/etc/group   ${RSYNC_HOST_PUT}/etc/
    echo " [done] "
else 
    echo " [skipped] "
fi
 
echo "config sync"
if [ "${DO_CONFIG}" = 1 ]; then
    ${CMD_RSYNCDEL} ${RSYNC_HOST_GET}/etc/mysql/   ${RSYNC_HOST_PUT}/etc/mysql
    ${CMD_RSYNCDEL} ${RSYNC_HOST_GET}/etc/apache2/ ${RSYNC_HOST_PUT}/etc/apache2
    ${CMD_RSYNCDEL} ${RSYNC_HOST_GET}/etc/php5/    ${RSYNC_HOST_PUT}/etc/php5
    ${CMD_RSYNCDEL} ${RSYNC_HOST_GET}/etc/postfix/ ${RSYNC_HOST_PUT}/etc/postfix
    echo " [done] "
else 
    echo " [skipped] "
fi
 
echo "database sync"
if [ "${DO_DATABASE}" = 1 ]; then
    DATABASES=`echo "SHOW DATABASES;" | ${CMD_MYSQL} -p${DB_PASS_GET} -u ${DB_USER_GET} -h ${DB_HOST_GET}`
    for DATABASE in $DATABASES; do
        if [ "${DATABASE}" != "Database" ]; then
            echo "transmitting ${DATABASE}"
            echo "CREATE DATABASE IF NOT EXISTS ${DATABASE}" | ${CMD_MYSQL} -p${DB_PASS_PUT} -u ${DB_USER_PUT} -h ${DB_HOST_PUT}
            ${CMD_MYSQLDUMP} -Q -B --create-options --delayed-insert --complete-insert --quote-names --add-drop-table -p${DB_PASS_GET} -u${DB_USER_GET} -h${DB_HOST_GET} ${DATABASE} | ${CMD_MYSQL} -p${DB_PASS_PUT} -u ${DB_USER_PUT} -h ${DB_HOST_PUT} ${DATABASE}
        fi
    done
    echo " [done] "
else 
    echo " [skipped] "
fi
 
echo "directory sync"
if [ "${DO_DIRS}" = 1 ]; then
    # root must be copied like /*, because of ssh keys
    # actually, don't do root at all because of sync script!
    #${CMD_RSYNCDEL} ${RSYNC_HOST_GET}/root/* ${RSYNC_HOST_PUT}/root/
    ${CMD_RSYNCDEL} ${RSYNC_HOST_GET}/home/ ${RSYNC_HOST_PUT}/home
    ${CMD_RSYNCDEL} ${RSYNC_HOST_GET}/var/www/ ${RSYNC_HOST_PUT}/var/www
    #${CMD_RSYNCDEL} ${RSYNC_HOST_GET}/var/lib/svn/ ${RSYNC_HOST_PUT}/var/lib/svn
    echo " [done] "
else 
    echo " [skipped] "
fi

Add comment

» Currently away on vacation. I can reply your message the 24th of July 2008. Please post anyway and check back then. Thank you!

for syntax highlighting

[CODE="Javascript"]
your_code_here();
[/CODE]

Replace "Javascript"
with "php", "text", etc.
code (to make sure you are not a spammer)

Comments

No comments. Be the first!