mirror of
https://github.com/myvesta/vesta
synced 2025-08-19 21:04:07 -07:00
backup system 92% is done
This commit is contained in:
parent
adf54b9ae9
commit
5e09a913fd
4 changed files with 198 additions and 19 deletions
|
@ -27,12 +27,14 @@ check_args '1' "$#" 'user [output]'
|
||||||
# Checking argument format
|
# Checking argument format
|
||||||
format_validation 'user'
|
format_validation 'user'
|
||||||
|
|
||||||
# Checking web system is enabled
|
# Checking backup system is enabled
|
||||||
is_system_enabled 'backup'
|
is_system_enabled 'backup'
|
||||||
|
|
||||||
# Checking user
|
# Checking user
|
||||||
is_user_valid
|
is_user_valid
|
||||||
|
|
||||||
|
# Checking user backups
|
||||||
|
is_backup_enabled
|
||||||
|
|
||||||
|
|
||||||
#----------------------------------------------------------#
|
#----------------------------------------------------------#
|
||||||
|
@ -56,8 +58,31 @@ fi
|
||||||
echo "1.0" >$tmpdir/backup_version
|
echo "1.0" >$tmpdir/backup_version
|
||||||
echo "$VERSION" > $tmpdir/vesta_version
|
echo "$VERSION" > $tmpdir/vesta_version
|
||||||
|
|
||||||
|
# Checking excludes
|
||||||
|
OLD_IFS="$IFS"
|
||||||
|
IFS=$'\n'
|
||||||
|
if [ -e "$V_USERS/$user/backup.excludes" ]; then
|
||||||
|
if [ -z "$output" ]; then
|
||||||
|
echo "-- Excludes --"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for exclude in $(cat $V_USERS/$user/backup.excludes); do
|
||||||
|
if [ -z "$output" ]; then
|
||||||
|
echo -e "\t $exclude"
|
||||||
|
fi
|
||||||
|
# Indirect variable references (a bit of black magic)
|
||||||
|
eval ${exclude%%=*}=${exclude#*=}
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$output" ]; then
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
IFS="$OLD_IFS"
|
||||||
|
|
||||||
# WEB domains
|
# WEB domains
|
||||||
if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
|
if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ] && [ "$WEB" != '*' ]
|
||||||
|
then
|
||||||
if [ -z "$output" ]; then
|
if [ -z "$output" ]; then
|
||||||
echo "-- WEB --"
|
echo "-- WEB --"
|
||||||
fi
|
fi
|
||||||
|
@ -68,8 +93,17 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
|
||||||
field='$DOMAIN'
|
field='$DOMAIN'
|
||||||
search_string='DOMAIN='
|
search_string='DOMAIN='
|
||||||
domains=$(dom_clear_search)
|
domains=$(dom_clear_search)
|
||||||
|
domain_list=''
|
||||||
|
|
||||||
|
# Cleaning excludes
|
||||||
for domain in $domains; do
|
for domain in $domains; do
|
||||||
|
check_exl=$(echo "$WEB"|grep -w $domain)
|
||||||
|
if [ -z "$check_exl" ]; then
|
||||||
|
web_list="$web_list $domain"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for domain in $web_list; do
|
||||||
if [ -z "$output" ]; then
|
if [ -z "$output" ]; then
|
||||||
echo -e "\t$(date +%H:%m:%S) $domain"
|
echo -e "\t$(date +%H:%m:%S) $domain"
|
||||||
fi
|
fi
|
||||||
|
@ -139,7 +173,10 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
|
||||||
tar -rf $tmpdir/web/$domain/$domain.tar conf cert
|
tar -rf $tmpdir/web/$domain/$domain.tar conf cert
|
||||||
mv $tmpdir/web/$domain/$domain.tar $tmpdir/web/
|
mv $tmpdir/web/$domain/$domain.tar $tmpdir/web/
|
||||||
rm -rf $tmpdir/web/$domain
|
rm -rf $tmpdir/web/$domain
|
||||||
gzip -$V_BACKUP_GZIP $tmpdir/web/$domain.tar
|
|
||||||
|
if [ ! -z "$V_BACKUP_GZIP" ]; then
|
||||||
|
gzip -$V_BACKUP_GZIP $tmpdir/web/$domain.tar
|
||||||
|
fi
|
||||||
|
|
||||||
done
|
done
|
||||||
if [ -z "$output" ]; then
|
if [ -z "$output" ]; then
|
||||||
|
@ -149,7 +186,8 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# DNS domains
|
# DNS domains
|
||||||
if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
|
if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ] && [ "$DNS" != '*' ]
|
||||||
|
then
|
||||||
if [ -z "$output" ]; then
|
if [ -z "$output" ]; then
|
||||||
echo "-- DNS --"
|
echo "-- DNS --"
|
||||||
fi
|
fi
|
||||||
|
@ -161,7 +199,15 @@ if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
|
||||||
search_string='DOMAIN='
|
search_string='DOMAIN='
|
||||||
domains=$(dom_clear_search)
|
domains=$(dom_clear_search)
|
||||||
|
|
||||||
|
# Cleaning excludes
|
||||||
for domain in $domains; do
|
for domain in $domains; do
|
||||||
|
check_exl=$(echo "$DNS"|grep -w $domain)
|
||||||
|
if [ -z "$check_exl" ]; then
|
||||||
|
dns_list="$dns_list $domain"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for domain in $dns_list; do
|
||||||
if [ -z "$output" ]; then
|
if [ -z "$output" ]; then
|
||||||
echo -e "\t$(date +%H:%m:%S) $domain"
|
echo -e "\t$(date +%H:%m:%S) $domain"
|
||||||
fi
|
fi
|
||||||
|
@ -189,7 +235,7 @@ fi
|
||||||
# TBD
|
# TBD
|
||||||
|
|
||||||
# DatbaBases
|
# DatbaBases
|
||||||
if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
|
if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ] && [ "$DB" != '*' ]; then
|
||||||
if [ -z "$output" ]; then
|
if [ -z "$output" ]; then
|
||||||
echo "-- DB --"
|
echo "-- DB --"
|
||||||
fi
|
fi
|
||||||
|
@ -201,12 +247,36 @@ if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
|
||||||
search_string='DB='
|
search_string='DB='
|
||||||
dbs=$(dom_clear_search)
|
dbs=$(dom_clear_search)
|
||||||
|
|
||||||
for db in $dbs; do
|
# Cleaning excludes
|
||||||
if [ -z "$output" ]; then
|
for database in $dbs; do
|
||||||
echo -e "\t$(date +%H:%m:%S) $db"
|
check_exl=$(echo "$DB"|grep -w $database)
|
||||||
|
if [ -z "$check_exl" ]; then
|
||||||
|
db_list="$db_list $database"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
for database in $db_list; do
|
||||||
|
type=$(get_db_value '$TYPE')
|
||||||
|
host=$(get_db_value '$HOST')
|
||||||
|
db_user=$(get_db_value '$USER')
|
||||||
|
dump="$tmpdir/db/$database.$type.sql"
|
||||||
|
grants="$tmpdir/db/$database.$type.$db_user"
|
||||||
|
|
||||||
|
if [ -z "$output" ]; then
|
||||||
|
echo -e "\t$(date +%H:%m:%S) $database $type"
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $type in
|
||||||
|
mysql) dump_db_mysql ;;
|
||||||
|
pgsql) dump_db_pgsql ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ ! -z "$V_BACKUP_GZIP" ]; then
|
||||||
|
gzip -$V_BACKUP_GZIP $dump
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
if [ -z "$output" ]; then
|
if [ -z "$output" ]; then
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
@ -214,7 +284,8 @@ if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Cron jobs
|
# Cron jobs
|
||||||
if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
|
if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ] && [ "$CRON" != '*' ]
|
||||||
|
then
|
||||||
if [ -z "$output" ]; then
|
if [ -z "$output" ]; then
|
||||||
echo "-- CRON --"
|
echo "-- CRON --"
|
||||||
fi
|
fi
|
||||||
|
@ -238,7 +309,7 @@ if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# SSL CERTIFICATES
|
# SSL CERTIFICATES
|
||||||
if [ ! -z "$WEB_SSL" ] && [ "$WEB_SSL" != 'no' ]; then
|
if [ ! -z "$WEB_SSL" ] && [ "$WEB_SSL" != 'no' ] && [ "$SSL" != '*' ]; then
|
||||||
if [ -z "$output" ]; then
|
if [ -z "$output" ]; then
|
||||||
echo "-- CERTIFICATES --"
|
echo "-- CERTIFICATES --"
|
||||||
fi
|
fi
|
||||||
|
@ -293,6 +364,33 @@ if [ -e "$V_USERS/$user/history.log" ]; then
|
||||||
cp -r $V_USERS/$user/history.log $tmpdir/vesta/
|
cp -r $V_USERS/$user/history.log $tmpdir/vesta/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -e "$V_USERS/$user/backup.excludes" ]; then
|
||||||
|
if [ -z "$output" ]; then
|
||||||
|
echo -e "\t$(date +%H:%m:%S) backup.excludes"
|
||||||
|
fi
|
||||||
|
cp -r $V_USERS/$user/backup.excludes $tmpdir/vesta/
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$output" ]; then
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Move tmp backup to local storage
|
||||||
|
if [ "$BACKUP_SYSTEM" = 'local' ]; then
|
||||||
|
if [ -z "$output" ]; then
|
||||||
|
echo "ARCHIVE $V_BACKUP/$user.$V_DATE.tar"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Checking retention
|
||||||
|
check_ret=$()
|
||||||
|
|
||||||
|
cd $tmpdir
|
||||||
|
tar -cf $V_BACKUP/$user.$V_DATE.tar .
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd /
|
||||||
|
rm -rf $tmpdir
|
||||||
|
|
||||||
if [ -z "$output" ]; then
|
if [ -z "$output" ]; then
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -23,9 +23,9 @@ V_LOCK=/var/lock/vesta
|
||||||
V_HOME='/home'
|
V_HOME='/home'
|
||||||
V_TMP='/tmp'
|
V_TMP='/tmp'
|
||||||
V_BACKUP='/backup'
|
V_BACKUP='/backup'
|
||||||
V_BACKUP_GZIP='5'
|
|
||||||
|
|
||||||
# Other vars
|
# Other vars
|
||||||
|
V_BACKUP_GZIP='5'
|
||||||
V_SUSPEND_URL='vestacp.com/faq/acc_suspended/'
|
V_SUSPEND_URL='vestacp.com/faq/acc_suspended/'
|
||||||
V_SCRIPT=$(basename $0)
|
V_SCRIPT=$(basename $0)
|
||||||
V_EVENT="$(date +%m-%d-%y" "%H:%m:%S) $V_SCRIPT $*"
|
V_EVENT="$(date +%m-%d-%y" "%H:%m:%S) $V_SCRIPT $*"
|
||||||
|
|
|
@ -432,7 +432,7 @@ create_db_pgsql() {
|
||||||
|
|
||||||
$sql "CREATE ROLE $db_user WITH LOGIN PASSWORD '$db_password'"
|
$sql "CREATE ROLE $db_user WITH LOGIN PASSWORD '$db_password'"
|
||||||
$sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user"
|
$sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user"
|
||||||
export PGPASSWORD='pgsqk'
|
export PGPASSWORD='pgsql'
|
||||||
}
|
}
|
||||||
|
|
||||||
is_db_host_new() {
|
is_db_host_new() {
|
||||||
|
@ -563,7 +563,7 @@ change_db_pgsql_password() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$sql "ALTER ROLE $db_user WITH LOGIN PASSWORD '$db_password'" >/dev/null
|
$sql "ALTER ROLE $db_user WITH LOGIN PASSWORD '$db_password'" >/dev/null
|
||||||
export PGPASSWORD='pgsqk'
|
export PGPASSWORD='pgsql'
|
||||||
}
|
}
|
||||||
|
|
||||||
get_db_value() {
|
get_db_value() {
|
||||||
|
@ -670,7 +670,7 @@ del_db_pgsql() {
|
||||||
else
|
else
|
||||||
$sql "REVOKE ALL PRIVILEGES ON $database FROM $db_user">/dev/null
|
$sql "REVOKE ALL PRIVILEGES ON $database FROM $db_user">/dev/null
|
||||||
fi
|
fi
|
||||||
export PGPASSWORD='pgsqk'
|
export PGPASSWORD='pgsql'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -687,6 +687,77 @@ del_db_vesta() {
|
||||||
sed -i "$string d" $conf
|
sed -i "$string d" $conf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dump_db_mysql() {
|
||||||
|
# Defining vars
|
||||||
|
host_str=$(grep "HOST='$host'" $V_DB/mysql.conf)
|
||||||
|
for key in $host_str; do
|
||||||
|
eval ${key%%=*}=${key#*=}
|
||||||
|
done
|
||||||
|
sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
|
||||||
|
dumper="mysqldump -h $HOST -u $USER -p$PASSWORD -P$PORT -r"
|
||||||
|
|
||||||
|
# Checking empty vars
|
||||||
|
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
|
||||||
|
echo "Error: config is broken"
|
||||||
|
log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
|
||||||
|
exit $E_PARSE_ERROR
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Checking connection
|
||||||
|
$sql "SELECT VERSION()" >/dev/null 2>&1; code="$?"
|
||||||
|
if [ '0' -ne "$code" ]; then
|
||||||
|
echo "Error: Connect failed"
|
||||||
|
log_event 'debug' "$E_DBHOST_UNAVAILABLE $V_EVENT"
|
||||||
|
exit $E_DBHOST_UNAVAILABLE
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Dumping database
|
||||||
|
$dumper $dump $database
|
||||||
|
|
||||||
|
# Dumping user grants
|
||||||
|
$sql "SHOW GRANTS FOR $db_user@localhost" | grep -v "Grants for" > $grants
|
||||||
|
$sql "SHOW GRANTS FOR $db_user@'%'" | grep -v "Grants for" >> $grants
|
||||||
|
}
|
||||||
|
|
||||||
|
dump_db_pgsql() {
|
||||||
|
# Defining vars
|
||||||
|
host_str=$(grep "HOST='$host'" $V_DB/pgsql.conf)
|
||||||
|
for key in $host_str; do
|
||||||
|
eval ${key%%=*}=${key#*=}
|
||||||
|
done
|
||||||
|
|
||||||
|
export PGPASSWORD="$PASSWORD"
|
||||||
|
sql="psql -h $HOST -U $USER -d $TPL -p $PORT -c"
|
||||||
|
dumper="pg_dump -h $HOST -U $USER -p $PORT -c -d -O -x -i -f"
|
||||||
|
# Checking empty vars
|
||||||
|
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
|
||||||
|
echo "Error: config is broken"
|
||||||
|
log_event 'debug' "$E_PARSE_ERROR $V_EVENT"
|
||||||
|
exit $E_PARSE_ERROR
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Checking connection
|
||||||
|
$sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
|
||||||
|
if [ '0' -ne "$code" ]; then
|
||||||
|
echo "Error: Connect failed"
|
||||||
|
log_event 'debug' "$E_DBHOST_UNAVAILABLE $V_EVENT"
|
||||||
|
exit $E_DBHOST_UNAVAILABLE
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Dumping database
|
||||||
|
$dumper $dump $database
|
||||||
|
|
||||||
|
# Dumping user grants
|
||||||
|
md5=$($sql "SELECT rolpassword FROM pg_authid WHERE rolname='$db_user';")
|
||||||
|
md5=$(echo "$md5" | head -n 1 | cut -f 2 -d ' ')
|
||||||
|
pw_str="UPDATE pg_authid SET rolpassword='$md5' WHERE rolname='$db_user';"
|
||||||
|
gr_str="GRANT ALL PRIVILEGES ON DATABASE $database to '$db_user'"
|
||||||
|
echo -e "$pw_str\n$gr_str" >> $grants
|
||||||
|
export PGPASSWORD='pgsql'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
is_db_host_free() {
|
is_db_host_free() {
|
||||||
# Defining vars
|
# Defining vars
|
||||||
host_str=$(grep "HOST='$host'" $V_DB/$type.conf)
|
host_str=$(grep "HOST='$host'" $V_DB/$type.conf)
|
||||||
|
@ -801,7 +872,7 @@ suspend_db_pgsql() {
|
||||||
|
|
||||||
# Suspending user
|
# Suspending user
|
||||||
$sql "REVOKE ALL PRIVILEGES ON $database FROM $db_user">/dev/null
|
$sql "REVOKE ALL PRIVILEGES ON $database FROM $db_user">/dev/null
|
||||||
export PGPASSWORD='pgsqk'
|
export PGPASSWORD='pgsql'
|
||||||
}
|
}
|
||||||
|
|
||||||
unsuspend_db_mysql() {
|
unsuspend_db_mysql() {
|
||||||
|
@ -859,7 +930,7 @@ unsuspend_db_pgsql() {
|
||||||
|
|
||||||
# Unsuspending user
|
# Unsuspending user
|
||||||
$sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user" >/dev/null
|
$sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user" >/dev/null
|
||||||
export PGPASSWORD='pgsqk'
|
export PGPASSWORD='pgsql'
|
||||||
}
|
}
|
||||||
|
|
||||||
db_clear_search() {
|
db_clear_search() {
|
||||||
|
@ -946,9 +1017,10 @@ get_disk_db_pgsql() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Raw query
|
# Raw query
|
||||||
|
|
||||||
raq_query=$($sql "SELECT pg_database_size('$database');")
|
raq_query=$($sql "SELECT pg_database_size('$database');")
|
||||||
raw_size=$(echo raq_query | grep -v "-" | grep -v 'row' | sed -e "/^$/d"|\
|
raw_size=$(echo "$raq_query" | grep -v "-" | grep -v 'row' |\
|
||||||
awk '{print $1}')
|
sed -e "/^$/d" |grep -v "pg_database_size" | awk '{print $1}')
|
||||||
|
|
||||||
# Checking null output (this means error btw)
|
# Checking null output (this means error btw)
|
||||||
if [ -z "$raw_size" ]; then
|
if [ -z "$raw_size" ]; then
|
||||||
|
@ -956,7 +1028,7 @@ get_disk_db_pgsql() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Converting to MB
|
# Converting to MB
|
||||||
size=$(expr $raw_size \ 1048576)
|
size=$(expr $raw_size / 1048576)
|
||||||
|
|
||||||
# Rounding zero size
|
# Rounding zero size
|
||||||
if [ "$size" -eq '0' ]; then
|
if [ "$size" -eq '0' ]; then
|
||||||
|
|
|
@ -1364,3 +1364,12 @@ get_config_value() {
|
||||||
# Print value
|
# Print value
|
||||||
echo "$value"
|
echo "$value"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_backup_enabled() {
|
||||||
|
backups=$(grep "BACKUPS='" $V_USERS/$user/user.conf |cut -f 2 -d \')
|
||||||
|
if [ -z "$backups" ] || [[ "$backups" -le '0' ]]; then
|
||||||
|
echo "Error: User backups are disabled"
|
||||||
|
log_event 'debug' "$E_BACKUP_DISABLED $V_EVENT"
|
||||||
|
exit $E_BACKUP_DISABLED
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue