Guest User

Untitled

a guest
Jan 8th, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.39 KB | None | 0 0
  1. #!/bin/bash
  2. ###########################################
  3. # Backup a Raspberry Pi to CIFS share
  4. ###########################################
  5. # autor : Neives
  6. VERSION="2017.12.13"
  7. # licence type : Creative Commons Attribution-NoDerivatives 4.0 (International)
  8. # licence info : http://creativecommons.org/licenses/by-nd/4.0/
  9. ###########################################
  10.  
  11. ### VARIAVEIS ###
  12. DESTINO="//10.0.0.245/NAS/Backup_HA"
  13. DESTINOMNT="/mnt/cifs/synology"
  14. DESTINONOME="CIFS NAS Synology"
  15. USERNAME="admin"
  16. PASSWORD="n2311984"
  17. ### FIM DAS VARIAVEIS ###
  18.  
  19. # __________________ NAO MODIFICAR NADA ABAIXO DESTA LINHA __________________ #
  20.  
  21. DATE=$(date +%Y-%m-%d_%Hh%M)
  22. TAR=$(hostname -s)"-${DATE}.tar.gz"
  23.  
  24. ipserver=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'`
  25. locpath=`dirname "${BASH_SOURCE[0]}"` # caminho do script
  26. scriptpath=`basename $0` # script.sh
  27.  
  28. bold=$(tput bold)
  29. underline=$(tput sgr 0 1)
  30. reset=$(tput sgr0)
  31.  
  32. rouge=$( tput setaf 1)
  33. vert=$( tput setaf 2)
  34. jaune=$( tput setaf 3)
  35. bleu=$( tput setaf 4)
  36. violet=$( tput setaf 5)
  37. cyan=$( tput setaf 6)
  38. gris=$( tput setaf 7)
  39.  
  40. # Funcoes
  41. shw_norm () { echo -en "${bold}$(tput setaf 9)${@}${reset}"; }
  42. shw_info () { echo -en "${bold}${cyan}${@}${reset}"; }
  43. shw_OK () { echo -en "${bold}${vert}OK!${@}${reset}"; }
  44. shw_warn () { echo -en "${bold}${violet}${@}${reset}"; }
  45. shw_err () { echo -en "${bold}${rouge}${@}${reset}"; }
  46. gris() { echo -en "${bold}${gris}${@}${reset}"; }
  47. header() { echo -e "${bold}${jaune}$*${reset}"; }
  48. headerU() { echo -e "${underline}${bold}${jaune}$*${reset}"; }
  49.  
  50. # Inicio do script
  51. clear && echo -e "\n\n"
  52. header "****************************************************************************"
  53. header "*** bm-PiBackup by @xhark - Creative Commons BY-ND 4.0 (v${VERSION}) ***"
  54. headerU "****************************************************************************"
  55.  
  56. shw_info "\n\n=== Arranque do backup Raspberry Pi em $(date +'%d/%m/%Y a %Hh%M'):\n\n"
  57.  
  58. # Verificacao de execucao como 'root'
  59. shw_norm "\t::: A executar como root... "
  60. if [[ $EUID -ne 0 ]]; then
  61. sudo "$0" "$@" || (shw_err "Este script deve ser executado com permissoes 'root'. A parar o script.\n" ; exit 1)
  62. else
  63. shw_OK
  64. fi
  65.  
  66. # Verificacao do destino
  67. shw_norm "\n\t::: Verificacao do destino ($DESTINONOME)... "
  68. if grep -qs $DESTINOMNT /proc/mounts; then
  69. shw_OK
  70. else
  71. # Mount drive de rede se não existir
  72. [ -d $DESTINOMNT ] || mkdir -p $DESTINOMNT
  73. # Ligacao ao DESTINO Syno
  74. mount.cifs $DESTINO $DESTINOMNT -o user=${USERNAME},pass="${PASSWORD}" && shw_OK
  75. if [[ $? -ne 0 ]]; then
  76. shw_err "\n\t ERRO: Ligação impossivel $DESTINO -- A parar o script \n"
  77. exit 1
  78. fi
  79. fi
  80.  
  81. # Listagem do backup cron
  82. for user in $(cut -f1 -d: /etc/passwd); do echo -e "\n\n==> $user:" ; crontab -u $user -l ; done > /tmp/crontab 2>&1
  83.  
  84. cd $DESTINOMNT || (shw_err "\n\t ERRO: cd impossivel"; exit 1)
  85.  
  86. # criacao do arquivo
  87. shw_norm "\n\t::: Criacao do arquivo ${TAR}... "
  88. # Listagem de pastas para efectuar backup. Uma linha por ficheiro/pasta.
  89. tar zcf "$TAR" \
  90. /boot/*.txt \
  91. /etc/cron.daily \
  92. /etc/cron.hourly \
  93. /etc/cron.monthly \
  94. /etc/fstab \
  95. /etc/init.d \
  96. /etc/network/interfaces \
  97. /etc/modules \
  98. /etc/modprobe.d/ \
  99. /etc/ssh/sshd_config \
  100. /etc/udev \
  101. /etc/wpa_supplicant \
  102. /home/pi \
  103. /home/homeassistant \
  104. /root/*.sh* \
  105. /root/.bash* \
  106. /root/bash_xhark \
  107. /var/www \
  108. /tmp/crontab \
  109. --exclude '/home/pi/.node-*' \
  110. > /dev/null 2>&1
  111.  
  112. tarsize=$(du -sh "$TAR")
  113.  
  114. if [[ $? -ne 0 ]]; then
  115. shw_err "\n\t ERRO: Impossivel criar ficheiro $TAR \n"
  116. umount -l $DESTINOMNT && shw_warn "\n\t Desligar DESTINO e parar o script!"
  117. exit 1
  118. fi
  119. shw_OK
  120.  
  121. # Desligar drive rede
  122. shw_norm "\n\t::: Desligar DESTINO... "
  123. if umount -l $DESTINOMNT; then
  124. shw_OK
  125. else
  126. shw_err "IMPOSSIVEL!"
  127. fi
  128.  
  129. gris "\n\n\t=> Tamanho do backup: $tarsize"
  130.  
  131. shw_info "\n\n=== Fim do Backup de $(date +'%d/%m/%Y as %Hh%M')"
  132. shw_info "\n=== Script executado a partir de ${ipserver}:${locpath}/${scriptpath}\n\n"
  133.  
  134. # Limpeza de ficheiros temporarios
  135. rm -f /tmp/crontab
  136.  
  137. #Criacao de ficheiro com data
  138.  
  139. cd /home/pi/backup/
  140.  
  141. rm last_backup_date.txt
  142. echo $(date +'%d-%m-%Y, %H:%M') > last_backup_date.txt
  143.  
  144. #rm last_backup_hour.txt
  145. #echo $(date +%H:%M) > last_backup_hour.txt
  146.  
  147. #rm last_backup_size.txt
  148. #echo "$tarsize" > last_backup_size.txt
  149.  
  150. exit 0
Add Comment
Please, Sign In to add comment