flipje

local-init-backup-script

Aug 7th, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.54 KB | None | 0 0
  1. #!/bin/bash
  2. # checkt environment en bereid de backup lokaal voor, zodat alles naar de backup server gersynct kan worden
  3. # flip hess augustus 2012 [email protected]
  4.  
  5. # Global variables:
  6. PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
  7. SCRIPT_PATH="${0}"
  8. SQLAUTH="/root/.my.cnf"
  9. BASEDIR="/data/backup"
  10. LOG="/var/log/backup.log"
  11.  
  12. # files backup aan/uit te zetten
  13. FILES="yes"
  14. # sql backup aan/uit te zetten
  15. SQL="yes"
  16.  
  17. ## DEZE 4 REGELS VERWIJDEREN NA EDIT ##################################  # 1
  18. echo "Edit this script and change the BASEDIR variable!"                 # 2
  19. exit 1                                                                   # 3
  20. ######################################################################   # 4
  21.  
  22. # The Functions:
  23.  
  24.  # function die
  25.   function die() { echo -e "There was an error in ${SCRIPT_PATH}:\n \"${1}\" Script ended unsuccessfully" ; exit 1; }
  26.  
  27.  # function fCheck
  28.   function fCheck()
  29.   {
  30.    # First things first, dit script mag alleen als root draaien
  31.     [ "$(whoami)" = root ] || die "User must be root"
  32.  
  33.    # check for basedir empty or create
  34.     if [ ! -d "${BASEDIR}" ]; then
  35.       echo "Basedir ${BASEDIR} not found! Creating..."
  36.       mkdir -p "${BASEDIR}" || die "Failed to create Basedir ${BASEDIR}"
  37.     else
  38.       find "${BASEDIR}" -type f -delete  || die "Failed to empty ${BASEDIR}"
  39.     fi
  40.  
  41.    return 0
  42.   }
  43.  
  44.  # functie backup sql
  45.   function fSqlBackup()
  46.   {
  47.    # Sql lokatie
  48.     SQLDIR="${BASEDIR}/sql"
  49.  
  50.     # checken binaries
  51.      { test -x /usr/bin/mysqldump  && test -x /usr/bin/mysql && test -x /bin/gzip ; } || die "Sql-backup depends on mysql-common!"
  52.  
  53.     # check for basedir or create
  54.      [ -d "${SQLDIR}" ] || { mkdir -p "${SQLDIR}" || die "Failed to create Basedir ${SQLDIR}"; }
  55.  
  56.     # check op .my.cnf
  57.      [ -f "${SQLAUTH}" ] || die "${SQLAUTH} Not found!"
  58.  
  59.     # checken op connectiviteit
  60.      { mysql --defaults-file="${SQLAUTH}" -Be 'show databases' |grep -Eq '(information_schema|performance_schema|mysql)'; } || die "Failed to connect to database!"
  61.  
  62.     # backuppen ( en Exclude van DB's )
  63.      for DB in $( mysql --defaults-file="${SQLAUTH}" -Be "show databases" | sed '1d' |grep -Ev '(information_schema|performance_schema)')
  64.      do
  65.        # backup mysql database:
  66.         mysqldump --defaults-file="${SQLAUTH}" ${DB} | gzip \
  67.     > ${SQLDIR}/${DB}.sql.gz || { echo "${SCRIPT_PATH}: Failed to dump database ${DB} to ${SQLDIR}/${DB}.sql.gz" |tee -a ${LOG} ; continue; }
  68.      done
  69.  
  70.    return 0
  71.  }
  72.  
  73.  # function backup files
  74.   function fFilesBackup()
  75.   {
  76.    # lokatie
  77.     FILESDIR="${BASEDIR}/files"
  78.  
  79.    # check for basedir or create
  80.     [ -d "${FILESDIR}" ] || { mkdir -p "${FILESDIR}" || die "Failed to create Basedir ${FILESDIR}"; }
  81.  
  82.    # accounts
  83.     cat /etc/passwd  > ${FILESDIR}/passwd
  84.     cat /etc/group   > ${FILESDIR}/group
  85.     cat /etc/shadow  > ${FILESDIR}/shadow
  86.     cat /etc/sudoers > ${FILESDIR}/sudoers
  87.  
  88.    # packages
  89.     dpkg -l > "${FILESDIR}/pkgs-list"
  90.  
  91.    # cron
  92.     for CRON in $( find /var/spool/cron/crontabs/ -type f )
  93.     do cat "${CRON}" > "${FILESDIR}/$( basename ${CRON} )-crontab"
  94.     done
  95.  
  96.    # netstat
  97.     netstat -ntulp | sort > "${FILESDIR}/netstat"
  98.     netstat -ntulp | sed -r 's#^([a-z]{3}[[:blank:]]{2}|Proto)([[:blank:]]+[0-9]+[[:blank:]]+[0-9]+| Recv-Q Send-Q)#\1#;
  99.    s#([[:blank:]]+)[0-9]+/([^/]+)$#\1\2#' | sort > "${FILESDIR}/netstat-clean"
  100.  
  101.    # check ifconfig
  102.     ifconfig -a > "${FILESDIR}/ifconfig"
  103.  
  104.    # check route table
  105.     route -n > "${FILESDIR}/route"
  106.  
  107.    # uname
  108.     uname -a > "${FILESDIR}/uname"
  109.  
  110.    # firewall rules
  111.     if [ -x /sbin/iptables ]; then
  112.       iptables -L -n > "${FILESDIR}/iptables"
  113.       iptables -t nat -L -n > "${FILESDIR}/iptables-nat"
  114.     fi
  115.  
  116.    # check interface settings
  117.     if [ -x /sbin/ip ]; then
  118.       ip addr show > "${FILESDIR}/ip"
  119.     fi
  120.  
  121.    # check interface settings
  122.     if [ -x /sbin/ethtool ]; then
  123.       for INTERFACE in $(ifconfig | awk '/^eth[0-9+] / {print $1}')
  124.       do
  125.         ethtool "${INTERFACE}" >> "${FILESDIR}/ethtool"
  126.       done
  127.     fi
  128.  
  129.    # list filesystems
  130.     cat /proc/mounts | sort > "${FILESDIR}/mounts"
  131.  
  132.    # file listing
  133.     find / > "${FILESDIR}/file-listing"
  134.  
  135.    # permissions
  136.     find "${BASEDIR}" -type f -exec chmod 600 {} \; || die "Failed to set file permissions"
  137.  
  138.    # klaar
  139.    return 0
  140.  
  141.   }
  142.  
  143. # Start the program:
  144. if [ "${FILES}" = "yes" ] ; then
  145.    fFilesBackup
  146. fi
  147.  
  148. if [ "${SQL}" = "yes" ]; then
  149.    fSqlBackup
  150. fi
  151.  
  152. # Exit with previous return code:
  153. exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment