Skip to content

Commit 5e09a91

Browse files
committed
backup system 92% is done
1 parent adf54b9 commit 5e09a91

File tree

4 files changed

+197
-18
lines changed

4 files changed

+197
-18
lines changed

bin/v_backup_sys_user

Lines changed: 107 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@ check_args '1' "$#" 'user [output]'
2727
# Checking argument format
2828
format_validation 'user'
2929

30-
# Checking web system is enabled
30+
# Checking backup system is enabled
3131
is_system_enabled 'backup'
3232

3333
# Checking user
3434
is_user_valid
3535

36+
# Checking user backups
37+
is_backup_enabled
3638

3739

3840
#----------------------------------------------------------#
@@ -56,8 +58,31 @@ fi
5658
echo "1.0" >$tmpdir/backup_version
5759
echo "$VERSION" > $tmpdir/vesta_version
5860

61+
# Checking excludes
62+
OLD_IFS="$IFS"
63+
IFS=$'\n'
64+
if [ -e "$V_USERS/$user/backup.excludes" ]; then
65+
if [ -z "$output" ]; then
66+
echo "-- Excludes --"
67+
fi
68+
69+
for exclude in $(cat $V_USERS/$user/backup.excludes); do
70+
if [ -z "$output" ]; then
71+
echo -e "\t $exclude"
72+
fi
73+
# Indirect variable references (a bit of black magic)
74+
eval ${exclude%%=*}=${exclude#*=}
75+
done
76+
77+
if [ -z "$output" ]; then
78+
echo
79+
fi
80+
fi
81+
IFS="$OLD_IFS"
82+
5983
# WEB domains
60-
if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
84+
if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ] && [ "$WEB" != '*' ]
85+
then
6186
if [ -z "$output" ]; then
6287
echo "-- WEB --"
6388
fi
@@ -68,8 +93,17 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
6893
field='$DOMAIN'
6994
search_string='DOMAIN='
7095
domains=$(dom_clear_search)
96+
domain_list=''
7197

98+
# Cleaning excludes
7299
for domain in $domains; do
100+
check_exl=$(echo "$WEB"|grep -w $domain)
101+
if [ -z "$check_exl" ]; then
102+
web_list="$web_list $domain"
103+
fi
104+
done
105+
106+
for domain in $web_list; do
73107
if [ -z "$output" ]; then
74108
echo -e "\t$(date +%H:%m:%S) $domain"
75109
fi
@@ -139,7 +173,10 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
139173
tar -rf $tmpdir/web/$domain/$domain.tar conf cert
140174
mv $tmpdir/web/$domain/$domain.tar $tmpdir/web/
141175
rm -rf $tmpdir/web/$domain
142-
gzip -$V_BACKUP_GZIP $tmpdir/web/$domain.tar
176+
177+
if [ ! -z "$V_BACKUP_GZIP" ]; then
178+
gzip -$V_BACKUP_GZIP $tmpdir/web/$domain.tar
179+
fi
143180

144181
done
145182
if [ -z "$output" ]; then
@@ -149,7 +186,8 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
149186
fi
150187

151188
# DNS domains
152-
if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
189+
if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ] && [ "$DNS" != '*' ]
190+
then
153191
if [ -z "$output" ]; then
154192
echo "-- DNS --"
155193
fi
@@ -161,7 +199,15 @@ if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
161199
search_string='DOMAIN='
162200
domains=$(dom_clear_search)
163201

202+
# Cleaning excludes
164203
for domain in $domains; do
204+
check_exl=$(echo "$DNS"|grep -w $domain)
205+
if [ -z "$check_exl" ]; then
206+
dns_list="$dns_list $domain"
207+
fi
208+
done
209+
210+
for domain in $dns_list; do
165211
if [ -z "$output" ]; then
166212
echo -e "\t$(date +%H:%m:%S) $domain"
167213
fi
@@ -189,7 +235,7 @@ fi
189235
# TBD
190236

191237
# DatbaBases
192-
if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
238+
if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ] && [ "$DB" != '*' ]; then
193239
if [ -z "$output" ]; then
194240
echo "-- DB --"
195241
fi
@@ -201,10 +247,34 @@ if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
201247
search_string='DB='
202248
dbs=$(dom_clear_search)
203249

204-
for db in $dbs; do
250+
# Cleaning excludes
251+
for database in $dbs; do
252+
check_exl=$(echo "$DB"|grep -w $database)
253+
if [ -z "$check_exl" ]; then
254+
db_list="$db_list $database"
255+
fi
256+
done
257+
258+
for database in $db_list; do
259+
type=$(get_db_value '$TYPE')
260+
host=$(get_db_value '$HOST')
261+
db_user=$(get_db_value '$USER')
262+
dump="$tmpdir/db/$database.$type.sql"
263+
grants="$tmpdir/db/$database.$type.$db_user"
264+
205265
if [ -z "$output" ]; then
206-
echo -e "\t$(date +%H:%m:%S) $db"
266+
echo -e "\t$(date +%H:%m:%S) $database $type"
267+
fi
268+
269+
case $type in
270+
mysql) dump_db_mysql ;;
271+
pgsql) dump_db_pgsql ;;
272+
esac
273+
274+
if [ ! -z "$V_BACKUP_GZIP" ]; then
275+
gzip -$V_BACKUP_GZIP $dump
207276
fi
277+
208278
done
209279

210280
if [ -z "$output" ]; then
@@ -214,7 +284,8 @@ if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
214284
fi
215285

216286
# Cron jobs
217-
if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
287+
if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ] && [ "$CRON" != '*' ]
288+
then
218289
if [ -z "$output" ]; then
219290
echo "-- CRON --"
220291
fi
@@ -238,7 +309,7 @@ if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
238309
fi
239310

240311
# SSL CERTIFICATES
241-
if [ ! -z "$WEB_SSL" ] && [ "$WEB_SSL" != 'no' ]; then
312+
if [ ! -z "$WEB_SSL" ] && [ "$WEB_SSL" != 'no' ] && [ "$SSL" != '*' ]; then
242313
if [ -z "$output" ]; then
243314
echo "-- CERTIFICATES --"
244315
fi
@@ -293,6 +364,33 @@ if [ -e "$V_USERS/$user/history.log" ]; then
293364
cp -r $V_USERS/$user/history.log $tmpdir/vesta/
294365
fi
295366

367+
if [ -e "$V_USERS/$user/backup.excludes" ]; then
368+
if [ -z "$output" ]; then
369+
echo -e "\t$(date +%H:%m:%S) backup.excludes"
370+
fi
371+
cp -r $V_USERS/$user/backup.excludes $tmpdir/vesta/
372+
fi
373+
374+
if [ -z "$output" ]; then
375+
echo
376+
fi
377+
378+
# Move tmp backup to local storage
379+
if [ "$BACKUP_SYSTEM" = 'local' ]; then
380+
if [ -z "$output" ]; then
381+
echo "ARCHIVE $V_BACKUP/$user.$V_DATE.tar"
382+
fi
383+
384+
# Checking retention
385+
check_ret=$()
386+
387+
cd $tmpdir
388+
tar -cf $V_BACKUP/$user.$V_DATE.tar .
389+
fi
390+
391+
cd /
392+
rm -rf $tmpdir
393+
296394
if [ -z "$output" ]; then
297395
echo
298396
fi

conf/vars.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ V_LOCK=/var/lock/vesta
2323
V_HOME='/home'
2424
V_TMP='/tmp'
2525
V_BACKUP='/backup'
26-
V_BACKUP_GZIP='5'
2726

2827
# Other vars
28+
V_BACKUP_GZIP='5'
2929
V_SUSPEND_URL='vestacp.com/faq/acc_suspended/'
3030
V_SCRIPT=$(basename $0)
3131
V_EVENT="$(date +%m-%d-%y" "%H:%m:%S) $V_SCRIPT $*"

func/db_func.sh

Lines changed: 80 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ create_db_pgsql() {
432432

433433
$sql "CREATE ROLE $db_user WITH LOGIN PASSWORD '$db_password'"
434434
$sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user"
435-
export PGPASSWORD='pgsqk'
435+
export PGPASSWORD='pgsql'
436436
}
437437

438438
is_db_host_new() {
@@ -563,7 +563,7 @@ change_db_pgsql_password() {
563563
fi
564564

565565
$sql "ALTER ROLE $db_user WITH LOGIN PASSWORD '$db_password'" >/dev/null
566-
export PGPASSWORD='pgsqk'
566+
export PGPASSWORD='pgsql'
567567
}
568568

569569
get_db_value() {
@@ -670,7 +670,7 @@ del_db_pgsql() {
670670
else
671671
$sql "REVOKE ALL PRIVILEGES ON $database FROM $db_user">/dev/null
672672
fi
673-
export PGPASSWORD='pgsqk'
673+
export PGPASSWORD='pgsql'
674674
}
675675

676676

@@ -687,6 +687,77 @@ del_db_vesta() {
687687
sed -i "$string d" $conf
688688
}
689689

690+
dump_db_mysql() {
691+
# Defining vars
692+
host_str=$(grep "HOST='$host'" $V_DB/mysql.conf)
693+
for key in $host_str; do
694+
eval ${key%%=*}=${key#*=}
695+
done
696+
sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
697+
dumper="mysqldump -h $HOST -u $USER -p$PASSWORD -P$PORT -r"
698+
699+
# Checking empty vars
700+
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
701+
echo "Error: config is broken"
702+
log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
703+
exit $E_PARSE_ERROR
704+
fi
705+
706+
# Checking connection
707+
$sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
708+
if [ '0' -ne "$code" ]; then
709+
echo "Error: Connect failed"
710+
log_event 'debug' "$E_DBHOST_UNAVAILABLE $V_EVENT"
711+
exit $E_DBHOST_UNAVAILABLE
712+
fi
713+
714+
# Dumping database
715+
$dumper $dump $database
716+
717+
# Dumping user grants
718+
$sql "SHOW GRANTS FOR $db_user@localhost" | grep -v "Grants for" > $grants
719+
$sql "SHOW GRANTS FOR $db_user@'%'" | grep -v "Grants for" >> $grants
720+
}
721+
722+
dump_db_pgsql() {
723+
# Defining vars
724+
host_str=$(grep "HOST='$host'" $V_DB/pgsql.conf)
725+
for key in $host_str; do
726+
eval ${key%%=*}=${key#*=}
727+
done
728+
729+
export PGPASSWORD="$PASSWORD"
730+
sql="psql -h $HOST -U $USER -d $TPL -p $PORT -c"
731+
dumper="pg_dump -h $HOST -U $USER -p $PORT -c -d -O -x -i -f"
732+
# Checking empty vars
733+
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
734+
echo "Error: config is broken"
735+
log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
736+
exit $E_PARSE_ERROR
737+
fi
738+
739+
# Checking connection
740+
$sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
741+
if [ '0' -ne "$code" ]; then
742+
echo "Error: Connect failed"
743+
log_event 'debug' "$E_DBHOST_UNAVAILABLE $V_EVENT"
744+
exit $E_DBHOST_UNAVAILABLE
745+
fi
746+
747+
# Dumping database
748+
$dumper $dump $database
749+
750+
# Dumping user grants
751+
md5=$($sql "SELECT rolpassword FROM pg_authid WHERE rolname='$db_user';")
752+
md5=$(echo "$md5" | head -n 1 | cut -f 2 -d ' ')
753+
pw_str="UPDATE pg_authid SET rolpassword='$md5' WHERE rolname='$db_user';"
754+
gr_str="GRANT ALL PRIVILEGES ON DATABASE $database to '$db_user'"
755+
echo -e "$pw_str\n$gr_str" >> $grants
756+
export PGPASSWORD='pgsql'
757+
}
758+
759+
760+
690761
is_db_host_free() {
691762
# Defining vars
692763
host_str=$(grep "HOST='$host'" $V_DB/$type.conf)
@@ -801,7 +872,7 @@ suspend_db_pgsql() {
801872

802873
# Suspending user
803874
$sql "REVOKE ALL PRIVILEGES ON $database FROM $db_user">/dev/null
804-
export PGPASSWORD='pgsqk'
875+
export PGPASSWORD='pgsql'
805876
}
806877

807878
unsuspend_db_mysql() {
@@ -859,7 +930,7 @@ unsuspend_db_pgsql() {
859930

860931
# Unsuspending user
861932
$sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user" >/dev/null
862-
export PGPASSWORD='pgsqk'
933+
export PGPASSWORD='pgsql'
863934
}
864935

865936
db_clear_search() {
@@ -946,17 +1017,18 @@ get_disk_db_pgsql() {
9461017
fi
9471018

9481019
# Raw query
1020+
9491021
raq_query=$($sql "SELECT pg_database_size('$database');")
950-
raw_size=$(echo raq_query | grep -v "-" | grep -v 'row' | sed -e "/^$/d"|\
951-
awk '{print $1}')
1022+
raw_size=$(echo "$raq_query" | grep -v "-" | grep -v 'row' |\
1023+
sed -e "/^$/d" |grep -v "pg_database_size" | awk '{print $1}')
9521024

9531025
# Checking null output (this means error btw)
9541026
if [ -z "$raw_size" ]; then
9551027
raw_size='0'
9561028
fi
9571029

9581030
# Converting to MB
959-
size=$(expr $raw_size \ 1048576)
1031+
size=$(expr $raw_size / 1048576)
9601032

9611033
# Rounding zero size
9621034
if [ "$size" -eq '0' ]; then

func/shared_func.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,3 +1364,12 @@ get_config_value() {
13641364
# Print value
13651365
echo "$value"
13661366
}
1367+
1368+
is_backup_enabled() {
1369+
backups=$(grep "BACKUPS='" $V_USERS/$user/user.conf |cut -f 2 -d \')
1370+
if [ -z "$backups" ] || [[ "$backups" -le '0' ]]; then
1371+
echo "Error: User backups are disabled"
1372+
log_event 'debug' "$E_BACKUP_DISABLED $V_EVENT"
1373+
exit $E_BACKUP_DISABLED
1374+
fi
1375+
}

0 commit comments

Comments
 (0)