v_upd_sys_user_backups 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. #!/bin/bash
  2. # info: updating current backups for
  3. #----------------------------------------------------------#
  4. # Variable&Function #
  5. #----------------------------------------------------------#
  6. # Importing variables
  7. source $VESTA/conf/vars.conf
  8. source $V_CONF/vesta.conf
  9. source $V_FUNC/shared.func
  10. # Argument defenition
  11. user=$1
  12. type="${2-$BACKUP_SYSTEM}"
  13. # Defining tar parser function
  14. get_backup_info() {
  15. backup=$1 # full path to backup
  16. backup_type="$2" # backup type
  17. backup_name=$(basename $backup )
  18. backup_date=$(echo $backup_name |cut -f 2 -d '.' )
  19. backup_time=$(stat --printf=%y $backup |cut -f 2 -d ' ' |cut -f 1 -d '.')
  20. backup_size=$(du -sm $backup |cut -f 1 )
  21. backup_data=$(tar -tf $backup)
  22. # Checking system data
  23. vst_data=$(echo "$backup_data" |grep "^./vesta/" |grep -v "^./vesta/$")
  24. if [ -z "$vst_data" ]; then
  25. vst=''
  26. else
  27. vst='yes'
  28. fi
  29. # Checking pam
  30. pam_data=$(echo "$backup_data" |grep "^./pam/" |grep -v "^./pam/$")
  31. if [ -z "$pam_data" ]; then
  32. pam=''
  33. else
  34. pam='yes'
  35. fi
  36. # Checking web data
  37. web_data=$(echo "$backup_data" |grep "^./web/" |grep -v "^./web/$" |sort)
  38. if [ -z "$web_data" ]; then
  39. web=''
  40. else
  41. i=1
  42. for domain in $web_data; do
  43. domain="$(basename $domain|sed -e 's/.tar.gz$//')"
  44. if [ "$i" -eq 1 ]; then
  45. web="$domain"
  46. i=2
  47. else
  48. web="$web,$domain"
  49. fi
  50. done
  51. fi
  52. # Checking dns data
  53. dns_data=$(echo "$backup_data" |grep "^./dns/" |grep ".db$" |sort)
  54. if [ -z "$dns_data" ]; then
  55. dns=''
  56. else
  57. i=1
  58. for domain in $dns_data; do
  59. domain="$(basename $domain|sed -e 's/.db$//')"
  60. if [ "$i" -eq 1 ]; then
  61. dns="$domain"
  62. i=2
  63. else
  64. dns="$dns,$domain"
  65. fi
  66. done
  67. fi
  68. # Checking mail
  69. mail_data=$(echo "$backup_data"|grep "^./mail/"|grep -v "^./mail/$"|sort)
  70. if [ -z "$mail_data" ]; then
  71. ml=''
  72. else
  73. i=1
  74. for domain in $mail_data; do
  75. domain="$(basename $domain|sed -e 's/.tar.gz$//')"
  76. if [ "$i" -eq 1 ]; then
  77. ml="$domain"
  78. i=2
  79. else
  80. ml="$ml,$domain"
  81. fi
  82. done
  83. fi
  84. # Checking databases
  85. db_data=$(echo "$backup_data"|grep "^./db/"|grep ".sql.gz$"|sort)
  86. if [ -z "$db_data" ]; then
  87. db=''
  88. else
  89. i=1
  90. for dbase in $db_data; do
  91. dbase=$(basename $dbase|sed -e "s/.\(my\|pg\)sql.sql.gz$//")
  92. if [ "$i" -eq 1 ]; then
  93. db="$dbase"
  94. i=2
  95. else
  96. db="$db,$dbase"
  97. fi
  98. done
  99. fi
  100. # Checking certificates
  101. ssl_data=$(echo "$backup_data"|grep "^./ssl/"|grep ".crt$"|sort)
  102. if [ -z "$ssl_data" ]; then
  103. ssl=''
  104. else
  105. i=1
  106. for certificate in $ssl_data; do
  107. certificate="$(basename $certificate|sed -e "s/.crt$//")"
  108. if [ "$i" -eq 1 ]; then
  109. ssl="$certificate"
  110. i=2
  111. else
  112. ssl="$ssl,$certificate"
  113. fi
  114. done
  115. fi
  116. # Checking cron data
  117. cron_data=$(echo "$backup_data" |grep "^./cron/" |grep -v "^./cron/$")
  118. if [ -z "$cron_data" ]; then
  119. cron=''
  120. else
  121. cron='yes'
  122. fi
  123. echo -n "DATE='$backup_date' TIME='$backup_time' RUNTIME='0'"
  124. echo -n " SIZE='$backup_size' TYPE='$backup_type' VESTA='$vst' PAM='$pam'"
  125. echo " WEB='$web' DNS='$dns' MAIL='$ml' DB='$db' SSL='$ssl' CRON='$cron'"
  126. }
  127. # Defining ftp command function
  128. ftpc() {
  129. ftp -n $HOST $PORT <<EOF
  130. quote USER $USERNAME
  131. quote PASS $PASSWORD
  132. binary
  133. cd $BPATH
  134. $1
  135. quit
  136. EOF
  137. }
  138. init_ftp_variables() {
  139. # Checking config
  140. source $V_CONF/ftp.backup.conf
  141. if [ -z "$HOST" ] || [ -z "$USERNAME" ] || [ -z "$PASSWORD" ] ||\
  142. [ -z "$BPATH" ]; then
  143. echo "Error: Parsing error"
  144. log_event 'debug' "$E_PARSING $V_EVENT"
  145. exit $E_PARSING
  146. fi
  147. }
  148. check_ftp_connection(){
  149. # Checking ftp permission
  150. ftmpdir=$(mktemp -u -p $BPATH)
  151. command="mkdir $ftmpdir
  152. ls $ftmpdir
  153. rm $ftmpdir"
  154. if [ ! -z "$(ftpc "$command")" ] ; then
  155. echo "Error: FTP error"
  156. log_event 'debug' "$E_FTP $V_EVENT"
  157. exit $E_FTP
  158. fi
  159. }
  160. #----------------------------------------------------------#
  161. # Verifications #
  162. #----------------------------------------------------------#
  163. # Checking arg number
  164. check_args '1' "$#" 'user'
  165. # Checking backup system is enabled
  166. is_system_enabled 'backup'
  167. # Checking argument format
  168. format_validation 'user'
  169. # Checking user
  170. is_user_valid
  171. # Checking load averages
  172. la=$(cat /proc/loadavg |cut -f 1 -d ' '|cut -f 1 -d '.')
  173. if [ "$la" -ge "$V_BACKUP_LA_LIMIT" ]; then
  174. log_event 'debug' "$E_LA $V_EVENT"
  175. exit $E_LA
  176. fi
  177. #----------------------------------------------------------#
  178. # Action #
  179. #----------------------------------------------------------#
  180. # Checking tmp file
  181. tmp_file="$V_USERS/$user/backup.conf_tmp"
  182. if [ -e "$tmp_file" ]; then
  183. rm -f $tmp_file
  184. fi
  185. # Checking local
  186. if [ "$type" = 'local' ]; then
  187. backups=$(ls $V_BACKUP |grep "^$user."|sort)
  188. for backup in $backups; do
  189. get_backup_info $V_BACKUP/$backup $type >> $tmp_file
  190. done
  191. fi
  192. # Checking ftp
  193. if [ "$type" = 'ftp' ]; then
  194. tmpdir=$(mktemp -p $V_BACKUP -d)
  195. ftmpdir=$(basename $tmpdir)
  196. init_ftp_variables
  197. check_ftp_connection
  198. backups=$(ftpc ls|awk '{print $9}'|grep "^$user.")
  199. for backup in $backups; do
  200. cd $tmpdir
  201. if [ ! -z "$(ftpc "get $backup")" ]; then
  202. echo "Error: FTP transfer error"
  203. log_event 'debug' "$E_FTP $V_EVENT"
  204. exit $E_FTP
  205. fi
  206. get_backup_info $tmpdir/$backup $type >> $tmp_file
  207. rm -f $tmpdir/$backup
  208. done
  209. rm -rf $tmpdir
  210. fi
  211. # Checking both local and ftp
  212. if [ "$type" = 'ftp,local' ] || [ "$type" = 'local,ftp' ]; then
  213. tmpdir=$(mktemp -p $V_BACKUP -d)
  214. ftmpdir=$(basename $tmpdir)
  215. init_ftp_variables
  216. check_ftp_connection
  217. ftp_backups=$(ftpc ls|awk '{print $9}'|grep "^$user.")
  218. local_backups=$(ls $V_BACKUP/ |grep "^$user." |sort)
  219. backups=$(echo -e "$local_backups\n$ftp_backups" |\
  220. sort |uniq -c | awk '{print $1" "$2}')
  221. for backup in $(echo "$backups"|grep "^1 "|cut -f 2 -d ' '); do
  222. check_ftp=$(echo $ftp_backups|grep -w $backup)
  223. if [ ! -z "$check_ftp" ]; then
  224. cd $tmpdir
  225. if [ ! -z "$(ftpc "get $backup")" ]; then
  226. echo "Error: FTP transfer error"
  227. log_event 'debug' "$E_FTP $V_EVENT"
  228. exit $E_FTP
  229. fi
  230. get_backup_info $tmpdir/$backup ftp >> $tmp_file
  231. rm -f $tmpdir/$backup
  232. else
  233. get_backup_info $V_BACKUP/$backup local >> $tmp_file
  234. fi
  235. done
  236. for backup in $(echo "$backups"|grep "^2 "|cut -f 2 -d ' '); do
  237. get_backup_info $V_BACKUP/$backup $type >> $tmp_file
  238. done
  239. rm -rf $tmpdir
  240. fi
  241. # Checking if there was any output
  242. if [ -e "$tmp_file" ]; then
  243. cat $tmp_file | sort > $V_USERS/$user/backup.conf
  244. rm $tmp_file
  245. else
  246. rm $V_USERS/$user/backup.conf
  247. touch $V_USERS/$user/backup.conf
  248. fi
  249. #----------------------------------------------------------#
  250. # Vesta #
  251. #----------------------------------------------------------#
  252. # Logging
  253. log_event 'system' "$V_EVENT"
  254. exit