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!
Comments
No comments. Be the first!