mirror of
https://github.com/myvesta/vesta
synced 2025-08-14 18:49:21 -07:00
backup/restore procedure
This commit is contained in:
parent
236448303c
commit
e23249a997
29 changed files with 1638 additions and 583 deletions
|
@ -40,7 +40,7 @@ is_object_unsuspended 'user' 'USER' "$user"
|
|||
is_package_full 'CRON_JOBS'
|
||||
get_next_cronjob
|
||||
validate_format 'job'
|
||||
is_object_free 'cron' 'JOB' "$job"
|
||||
is_object_new 'cron' 'JOB' "$job"
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
|
|
|
@ -46,7 +46,7 @@ is_system_enabled "$DB_SYSTEM"
|
|||
is_type_valid "$DB_SYSTEM" "$type"
|
||||
is_object_valid 'user' 'USER' "$user"
|
||||
is_object_unsuspended 'user' 'USER' "$user"
|
||||
is_object_free 'db' 'DB' "$database"
|
||||
is_object_new 'db' 'DB' "$database"
|
||||
get_next_dbhost
|
||||
is_object_valid "../../../conf/$type" 'HOST' "$host"
|
||||
is_object_unsuspended "../../../conf/$type" 'HOST' "$host"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/bash
|
||||
# info: add new database server
|
||||
# options: TYPE HOST PORT DBUSER DBPASS [MAX_DB] [CHARSETS] [TEMPLATE]
|
||||
# options: TYPE HOST DBUSER DBPASS [MAX_DB] [CHARSETS] [TEMPLATE]
|
||||
#
|
||||
# The function add new database server to the server pool. It supports local
|
||||
# and remote database servers, which is useful for clusters. By adding a host
|
||||
|
@ -16,10 +16,9 @@
|
|||
# Argument defenition
|
||||
type=$1
|
||||
host=$2
|
||||
port=$3
|
||||
dbuser=$4
|
||||
dbpass=$5
|
||||
A5='******'
|
||||
dbuser=$3
|
||||
dbpass=$4
|
||||
A4='******'
|
||||
charsets=${7-UTF8,LATIN1,WIN1250,WIN1251,WIN1252,WIN1256,WIN1258,KOI8}
|
||||
template=${8-template1}
|
||||
|
||||
|
@ -36,9 +35,9 @@ max_db=${6-500}
|
|||
# Verifications #
|
||||
#----------------------------------------------------------#
|
||||
|
||||
args_usage='TYPE HOST PORT DBUSER DBPASS [MAX_DB] [CHARSETS] [TPL]'
|
||||
args_usage='TYPE HOST DBUSER DBPASS [MAX_DB] [CHARSETS] [TPL]'
|
||||
check_args '5' "$#" "$args_usage"
|
||||
validate_format 'host' 'port' 'dbuser' 'dbpass' 'max_db' 'charsets' 'template'
|
||||
validate_format 'host' 'dbuser' 'dbpass' 'max_db' 'charsets' 'template'
|
||||
is_system_enabled "$DB_SYSTEM"
|
||||
is_type_valid "$DB_SYSTEM" "$type"
|
||||
is_dbhost_new
|
||||
|
@ -54,10 +53,10 @@ esac
|
|||
|
||||
# Concatentating db host string
|
||||
case $type in
|
||||
mysql) str="HOST='$host' USER='$dbuser' PASSWORD='$dbpass' PORT='$port'";
|
||||
mysql) str="HOST='$host' USER='$dbuser' PASSWORD='$dbpass'";
|
||||
str="$str CHARSETS='$charsets' MAX_DB='$max_db' U_SYS_USERS=''";
|
||||
str="$str U_DB_BASES='0' SUSPENDED='no' TIME='$TIME' DATE='$DATE'";;
|
||||
pgsql) str="HOST='$host' USER='$dbuser' PASSWORD='$dbpass' PORT='$port'";
|
||||
pgsql) str="HOST='$host' USER='$dbuser' PASSWORD='$dbpass'";
|
||||
str="$str CHARSETS='$charsets' TPL='$template' MAX_DB='$max_db'";
|
||||
str="$str U_SYS_USERS='' U_DB_BASES='0' SUSPENDED='no'";
|
||||
str="$str TIME='$TIME' DATE='$DATE'";;
|
||||
|
|
|
@ -46,7 +46,7 @@ is_object_unsuspended 'dns' 'DOMAIN' "$domain"
|
|||
is_package_full 'DNS_RECORDS'
|
||||
get_next_dnsrecord
|
||||
validate_format 'id'
|
||||
is_object_free "dns/$domain" 'ID' "$id"
|
||||
is_object_new "dns/$domain" 'ID' "$id"
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
|
|
|
@ -39,20 +39,11 @@ is_object_unsuspended 'user' 'USER' "$user"
|
|||
|
||||
# Get ip if it wasn't defined
|
||||
if [ -z "$ip" ]; then
|
||||
ip=$(grep -H "OWNER='$user'" $VESTA/data/ips/* 2>/dev/null|head -n1)
|
||||
ip=$(echo "$ip" | cut -f 7 -d / | cut -f 1 -d :)
|
||||
ip=$(get_user_ip $user)
|
||||
if [ -z "$ip" ]; then
|
||||
# Check shared ips
|
||||
admin_ips=$(grep -H "OWNER='admin'" $VESTA/data/ips/* 2>/dev/null)
|
||||
admin_ips=$(echo "$admin_ips" | cut -f 7 -d / | cut -f 1 -d :)
|
||||
for admin_ip in $admin_ips; do
|
||||
if [ -z "$ip" ]; then
|
||||
shared=$(grep "STATUS='shared'" $VESTA/data/ips/$admin_ip)
|
||||
if [ ! -z "$shared" ]; then
|
||||
ip=$admin_ip
|
||||
fi
|
||||
fi
|
||||
done
|
||||
echo "Error: no avaiable IP address"
|
||||
log_event "$E_NOTEXIST" "$EVENT"
|
||||
exit $E_NOTEXIST
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
|
@ -54,9 +54,9 @@ else
|
|||
email=$(grep CONTACT $VESTA/data/users/admin/user.conf | cut -f 2 -d \')
|
||||
fi
|
||||
if [ -e "$VESTA/web/inc/mail-wrapper.php" ]; then
|
||||
mail="$VESTA/web/inc/mail-wrapper.php"
|
||||
send_mail="$VESTA/web/inc/mail-wrapper.php"
|
||||
else
|
||||
mail=$(which mail)
|
||||
send_mail=$(which mail)
|
||||
fi
|
||||
|
||||
# Check load average
|
||||
|
@ -67,7 +67,7 @@ while [ "$la" -ge "$BACKUP_LA_LIMIT" ]; do
|
|||
echo
|
||||
sleep 60
|
||||
if [ "$i" -ge "15" ]; then
|
||||
echo "LoadAverage $i is above threshold" | $mail -s "$subj" $email
|
||||
echo "LoadAverage $i is above threshold" | $send_mail -s "$subj" $email
|
||||
echo "Error: LA is too high"
|
||||
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
|
||||
log_event "$E_LA" "$EVENT"
|
||||
|
@ -79,9 +79,10 @@ done
|
|||
# Creating temporary directory
|
||||
tmpdir=$(mktemp -p $BACKUP -d)
|
||||
if [ "$?" -ne 0 ]; then
|
||||
echo "Can't create tmp dir $tmpdir" | $mail -s "$subj" $email
|
||||
echo "Can't create tmp dir $tmpdir" | $send_mail -s "$subj" $email
|
||||
echo "Error: can't create tmp dir"
|
||||
log_event "$E_NOTEXIST" "$EVENT"
|
||||
exit $E_NOTEXIST
|
||||
fi
|
||||
|
||||
# Backingup system configs
|
||||
|
@ -316,7 +317,7 @@ then
|
|||
cd $HOMEDIR/$user/mail/$domain
|
||||
accounts=$(ls)
|
||||
if [ ! -z "$accounts" ]; then
|
||||
tar -cf $tmpdir/mail/$domain/accounts.tar $accounts
|
||||
tar -cpf $tmpdir/mail/$domain/accounts.tar $accounts
|
||||
fi
|
||||
|
||||
if [ ! -z "$BACKUP_GZIP" ] && [ ! -z $accounts ]; then
|
||||
|
@ -484,7 +485,8 @@ local_backup(){
|
|||
|
||||
if [ "$disk_usage" -ge "$BACKUP_DISK_LIMIT" ]; then
|
||||
rm -rf $tmpdir
|
||||
echo "Not enough disk space to run backup" | $mail -s "$subj" $email
|
||||
echo "Not enough disk space to run backup" |\
|
||||
$send_mail -s "$subj" $email
|
||||
echo "Error: Not enough disk space"
|
||||
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
|
||||
log_event "$E_DISK" "$EVENT"
|
||||
|
@ -522,7 +524,7 @@ ftp_backup() {
|
|||
# Checking config
|
||||
if [ ! -e "$VESTA/conf/ftp.backup.conf" ]; then
|
||||
ftp_conf_error="Can't open $VESTA/conf/ftp.backup.conf"
|
||||
echo "$ftp_conf_error" | $mail -s "$subj" $email
|
||||
echo "$ftp_conf_error" | $send_mail -s "$subj" $email
|
||||
echo "Error: $VESTA/conf/ftp.backup.conf does not exist"
|
||||
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
|
||||
log_event "$E_NOTEXIST" "$EVENT"
|
||||
|
@ -535,7 +537,8 @@ ftp_backup() {
|
|||
# Checking variables
|
||||
if [ -z "$HOST" ] || [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then
|
||||
rm -rf $tmpdir
|
||||
echo "Can't parse ftp backup configuration" | $mail -s "$subj" $email
|
||||
echo "Can't parse ftp backup configuration" |\
|
||||
$send_mail -s "$subj" $email
|
||||
echo "Error: Parsing error"
|
||||
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
|
||||
log_event "$E_PARSING" "$EVENT"
|
||||
|
@ -549,7 +552,8 @@ ftp_backup() {
|
|||
# Checking ftp connection
|
||||
if [ ! -z "$(ftpc)" ]; then
|
||||
rm -rf $tmpdir
|
||||
echo "Can't login to ftp://$USERNAME@$HOST" | $mail -s "$subj" $email
|
||||
echo "Can't login to ftp://$USERNAME@$HOST" |\
|
||||
$send_mail -s "$subj" $email
|
||||
echo "Error: can't login to ftp"
|
||||
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
|
||||
log_event "$E_FTP" "$EVENT"
|
||||
|
@ -562,7 +566,8 @@ ftp_backup() {
|
|||
ftp_result=$(ftpc "mkdir $ftmpdir" "rm $ftmpdir")
|
||||
if [ ! -z "$ftp_result" ] ; then
|
||||
rm -rf $tmpdir
|
||||
echo "Can't create ftp backup folder" | $mail -s "$subj" $email
|
||||
echo "Can't create ftp backup folder" |\
|
||||
$send_mail -s "$subj" $email
|
||||
echo "Error: cant's create ftp folder"
|
||||
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
|
||||
log_event "$E_FTP" "$EVENT"
|
||||
|
@ -660,7 +665,7 @@ sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
|
|||
if [ "$notify" != 'no' ]; then
|
||||
subj="$user → backup has been completed"
|
||||
email=$(get_user_value '$CONTACT')
|
||||
echo -e "$msg" | $mail -s "$subj" $email
|
||||
echo -e "$msg" | $send_mail -s "$subj" $email
|
||||
fi
|
||||
|
||||
# Logging
|
||||
|
|
|
@ -69,7 +69,7 @@ is_object_valid "../../conf/$type" 'HOST' "$host"
|
|||
|
||||
# Defining fileds to select
|
||||
conf=$VESTA/conf/$type.conf
|
||||
fields='$HOST $PORT $CHARSETS $MAX_DB $U_SYS_USERS $U_DB_BASES $TPL $SUSPENDED'
|
||||
fields='$HOST $CHARSETS $MAX_DB $U_SYS_USERS $U_DB_BASES $TPL $SUSPENDED'
|
||||
fields="$fields \$TIME \$DATE"
|
||||
|
||||
# Listing database
|
||||
|
|
|
@ -31,14 +31,14 @@ check_args '1' "$#" 'TYPE [FORMAT]'
|
|||
|
||||
# Defining fileds to select
|
||||
conf=$VESTA/conf/$type.conf
|
||||
fields='$HOST $PORT $CHARSETS $MAX_DB $U_SYS_USERS $U_DB_BASES $TPL $SUSPENDED'
|
||||
fields='$HOST $CHARSETS $MAX_DB $U_SYS_USERS $U_DB_BASES $TPL $SUSPENDED'
|
||||
fields="$fields \$TIME \$DATE"
|
||||
|
||||
# Listing database
|
||||
case $format in
|
||||
json) json_list ;;
|
||||
plain) nohead=1; shell_list;;
|
||||
shell) fields='$HOST $PORT $MAX_DB $U_DB_BASES $SUSPENDED $DATE';
|
||||
shell) fields='$HOST $MAX_DB $U_DB_BASES $SUSPENDED $DATE';
|
||||
shell_list | column -t ;;
|
||||
*) check_args '2' '0' 'TYPE [FORMAT]'
|
||||
esac
|
||||
|
|
107
bin/v-list-user-backup
Executable file
107
bin/v-list-user-backup
Executable file
|
@ -0,0 +1,107 @@
|
|||
#!/bin/bash
|
||||
# info: list user backup
|
||||
# options: USER BACKUP [FORMAT]
|
||||
#
|
||||
# The function of obtaining the list of backup parameters. This call, just as
|
||||
# all v_list_* calls, supports 3 formats - json, shell and plain.
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
# Variable&Function #
|
||||
#----------------------------------------------------------#
|
||||
|
||||
# Argument defenition
|
||||
user=$1
|
||||
backup=$2
|
||||
format=${3-shell}
|
||||
|
||||
# Includes
|
||||
source $VESTA/func/main.sh
|
||||
|
||||
# Json function
|
||||
json_list_backup() {
|
||||
i=1
|
||||
fileds_count=$(echo "$fields" | wc -w)
|
||||
line=$(grep "BACKUP='$backup'" $conf)
|
||||
|
||||
# Print top bracket
|
||||
echo '{'
|
||||
|
||||
# Assing key=value
|
||||
eval $line
|
||||
|
||||
# Starting output loop
|
||||
for field in $fields; do
|
||||
# Parsing key=value
|
||||
eval value=$field
|
||||
|
||||
# Checking first field
|
||||
if [ "$i" -eq 1 ]; then
|
||||
echo -e "\t\"$value\": {"
|
||||
else
|
||||
if [ "$fileds_count" -eq "$i" ]; then
|
||||
echo -e "\t\t\"${field//$/}\": \"$value\""
|
||||
else
|
||||
echo -e "\t\t\"${field//$/}\": \"$value\","
|
||||
fi
|
||||
fi
|
||||
# Updating iterator
|
||||
(( ++i))
|
||||
done
|
||||
|
||||
# If there was any output
|
||||
if [ -n "$value" ]; then
|
||||
echo -e ' }'
|
||||
fi
|
||||
# Printing bottom json bracket
|
||||
echo -e "}"
|
||||
}
|
||||
|
||||
# Shell function
|
||||
shell_list_backup() {
|
||||
line=$(grep "BACKUP='$backup'" $conf)
|
||||
|
||||
# Parsing key=value
|
||||
eval $line
|
||||
|
||||
# Print result line
|
||||
for field in $fields; do
|
||||
eval key="$field"
|
||||
echo "${field//$/}: $key "
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
# Verifications #
|
||||
#----------------------------------------------------------#
|
||||
|
||||
check_args '2' "$#" 'USER BACKUP [FORMAT]'
|
||||
is_object_valid 'user' 'USER' "$user"
|
||||
is_object_valid 'backup' 'BACKUP' "$backup"
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
# Action #
|
||||
#----------------------------------------------------------#
|
||||
|
||||
# Defining config and fields to select
|
||||
conf=$USER_DATA/backup.conf
|
||||
|
||||
fields="\$BACKUP \$TYPE \$SIZE \$VESTA \$PAM \$WEB \$DNS \$DB"
|
||||
fields="$fields \$MAIL \$CRON \$RUNTIME \$TIME \$DATE"
|
||||
|
||||
# Listing backup
|
||||
case $format in
|
||||
json) json_list_backup ;;
|
||||
plain) nohead=1; shell_list_backup ;;
|
||||
shell) shell_list_backup |column -t ;;
|
||||
*) check_args '2' '0' 'USER BACKUP [FORMAT]'
|
||||
esac
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
# Vesta #
|
||||
#----------------------------------------------------------#
|
||||
|
||||
exit
|
|
@ -16,6 +16,7 @@ user=$1
|
|||
source $VESTA/conf/vesta.conf
|
||||
source $VESTA/func/main.sh
|
||||
source $VESTA/func/db.sh
|
||||
source $VESTA/func/rebuild.sh
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
|
@ -34,12 +35,16 @@ is_object_valid 'user' 'USER' "$user"
|
|||
|
||||
# Starting rebuild loop
|
||||
for database in $(search_objects 'db' 'SUSPENDED' "no" 'DB'); do
|
||||
|
||||
# Get database values
|
||||
get_database_values
|
||||
|
||||
# Switching on db type
|
||||
case $TYPE in
|
||||
mysql) rebuild_mysql_database ;;
|
||||
pgsql) rebuild_pgsql_database ;;
|
||||
esac
|
||||
|
||||
done
|
||||
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ restart=$2
|
|||
source $VESTA/conf/vesta.conf
|
||||
source $VESTA/func/main.sh
|
||||
source $VESTA/func/domain.sh
|
||||
source $VESTA/func/rebuild.sh
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
|
@ -52,54 +53,7 @@ sed -i "/\/$user\/conf\/dns/d" /etc/named.conf
|
|||
|
||||
# Starting loop
|
||||
for domain in $(search_objects 'dns' 'DOMAIN' "*" 'DOMAIN'); do
|
||||
# Defining variables
|
||||
get_domain_values 'dns'
|
||||
domain_idn=$(idn -t --quiet -a "$domain")
|
||||
|
||||
# Checking zone file
|
||||
if [ ! -e "$USER_DATA/dns/$domain.conf" ]; then
|
||||
cat $DNSTPL/$TPL.tpl |\
|
||||
sed -e "s/%ip%/$IP/g" \
|
||||
-e "s/%domain_idn%/$domain_idn/g" \
|
||||
-e "s/%domain%/$domain/g" \
|
||||
-e "s/%ns1%/$ns1/g" \
|
||||
-e "s/%ns2%/$ns2/g" \
|
||||
-e "s/%ns3%/$ns3/g" \
|
||||
-e "s/%ns4%/$ns4/g" \
|
||||
-e "s/%time%/$TIME/g" \
|
||||
-e "s/%date%/$DATE/g" > $USER_DATA/dns/$domain.conf
|
||||
fi
|
||||
|
||||
# Sorting records
|
||||
sort_dns_records
|
||||
|
||||
# Updating zone
|
||||
update_domain_zone
|
||||
|
||||
# Set file permissions
|
||||
chmod 640 $HOMEDIR/$user/conf/dns/$domain.db
|
||||
chown root:named $HOMEDIR/$user/conf/dns/$domain.db
|
||||
|
||||
# Bind config check
|
||||
nconf='/etc/named.conf'
|
||||
if [ "$SUSPENDED" = 'yes' ]; then
|
||||
rm_string=$(grep -n /etc/namedb/$domain.db $nconf | cut -d : -f 1)
|
||||
if [ ! -z "$rm_string" ]; then
|
||||
sed -i "$rm_string d" $nconf
|
||||
fi
|
||||
suspended_dns=$((suspended_dns + 1))
|
||||
else
|
||||
if [ -z "$(grep /$domain.db $nconf)" ]; then
|
||||
named="zone \"$domain_idn\" {type master; file"
|
||||
named="$named \"$HOMEDIR/$user/conf/dns/$domain.db\";};"
|
||||
echo "$named" >> /etc/named.conf
|
||||
fi
|
||||
fi
|
||||
user_domains=$((user_domains + 1))
|
||||
records=$(wc -l $USER_DATA/dns/$domain.conf | cut -f 1 -d ' ')
|
||||
user_records=$((user_records + records))
|
||||
update_object_value 'dns' 'DOMAIN' "$domain" '$RECORDS' "$records"
|
||||
|
||||
rebuild_dns_domain_conf
|
||||
done
|
||||
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ user=$1
|
|||
source $VESTA/conf/vesta.conf
|
||||
source $VESTA/func/main.sh
|
||||
source $VESTA/func/domain.sh
|
||||
source $VESTA/func/rebuild.sh
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
|
@ -48,120 +49,7 @@ fi
|
|||
|
||||
# Starting loop
|
||||
for domain in $(search_objects 'mail' 'SUSPENDED' "*" 'DOMAIN'); do
|
||||
# Defining variables
|
||||
get_domain_values 'mail'
|
||||
|
||||
# Rebuilding config structure
|
||||
rm -f /etc/exim/domains/$domain
|
||||
mkdir -p $HOMEDIR/$user/conf/mail/$domain
|
||||
ln -s $HOMEDIR/$user/conf/mail/$domain /etc/exim/domains/
|
||||
rm -f $HOMEDIR/$user/conf/mail/$domain/aliases
|
||||
rm -f $HOMEDIR/$user/conf/mail/$domain/protection
|
||||
rm -f $HOMEDIR/$user/conf/mail/$domain/passwd
|
||||
touch $HOMEDIR/$user/conf/mail/$domain/aliases
|
||||
touch $HOMEDIR/$user/conf/mail/$domain/protection
|
||||
touch $HOMEDIR/$user/conf/mail/$domain/passwd
|
||||
chown -R dovecot:mail $HOMEDIR/$user/conf/mail/$domain
|
||||
chown -R dovecot:mail /etc/exim/domains/$domain
|
||||
chmod 770 $HOMEDIR/$user/conf/mail/$domain
|
||||
chmod 660 $HOMEDIR/$user/conf/mail/$domain/*
|
||||
chmod 770 /etc/exim/domains/$domain
|
||||
|
||||
# Adding antispam protection
|
||||
if [ "$ANTISPAM" = 'yes' ]; then
|
||||
echo 'antispam' >> $HOMEDIR/$user/conf/mail/$domain/protection
|
||||
fi
|
||||
|
||||
# Adding antivirus protection
|
||||
if [ "$ANTIVIRUS" = 'yes' ]; then
|
||||
echo 'antivirus' >> $HOMEDIR/$user/conf/mail/$domain/protection
|
||||
fi
|
||||
|
||||
# Adding dkim
|
||||
if [ "$DKIM" = 'yes' ]; then
|
||||
U_MAIL_DKMI=$((U_MAIL_DKMI + 1))
|
||||
pem="$USER_DATA/mail/$domain.pem"
|
||||
pub="$USER_DATA/mail/$domain.pub"
|
||||
openssl genrsa -out $pem 512 &>/dev/null
|
||||
openssl rsa -pubout -in $pem -out $pub &>/dev/null
|
||||
chmod 660 $USER_DATA/mail/$domain.*
|
||||
|
||||
cp $pem $HOMEDIR/$user/conf/mail/$domain/dkim.pem
|
||||
chown root:mail $HOMEDIR/$user/conf/mail/$domain/dkim.pem
|
||||
chmod 660 $HOMEDIR/$user/conf/mail/$domain/dkim.pem
|
||||
|
||||
# Deleting old dkim records
|
||||
records=$($BIN/v-list-dns-domain-records $user $domain plain)
|
||||
dkim_records=$(echo "$records" |grep -w '_domainkey'|cut -f 1 -d ' ')
|
||||
for id in $dkim_records; do
|
||||
$BIN/v-delete-dns-domain-record $user $domain $id
|
||||
done
|
||||
|
||||
# Adding dkim dns records
|
||||
check_dns_domain=$(is_object_valid 'dns' 'DOMAIN' "$domain")
|
||||
if [ "$?" -eq 0 ]; then
|
||||
p=$(cat $pub|grep -v ' KEY---'|tr -d '\n')
|
||||
record='_domainkey'
|
||||
policy="\"t=y; o=~;\""
|
||||
$BIN/v-add-dns-domain-record $user $domain $record TXT "$policy"
|
||||
|
||||
record='mail._domainkey'
|
||||
slct="\"k=rsa\; p=$p\""
|
||||
$BIN/v-add-dns-domain-record $user $domain $record TXT "$slct"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Removing symbolic link
|
||||
if [ "$SUSPENDED" = 'yes' ]; then
|
||||
SUSPENDED_MAIL=$((SUSPENDED_MAIL +1))
|
||||
rm -f /etc/exim/domains/$domain
|
||||
fi
|
||||
|
||||
if [ ! -e $HOMEDIR/$user/mail/$domain ]; then
|
||||
mkdir $HOMEDIR/$user/mail/$domain
|
||||
fi
|
||||
chown $user:mail $HOMEDIR/$user/mail/$domain
|
||||
chmod 770 $HOMEDIR/$user/mail/$domain
|
||||
|
||||
dom_aliases=$HOMEDIR/$user/conf/mail/$domain/aliases
|
||||
if [ ! -z "$CATCHALL" ]; then
|
||||
echo "*@$domain:$CATCHALL" >> $dom_aliases
|
||||
fi
|
||||
|
||||
# Rebuild domain accounts
|
||||
accs=0
|
||||
dom_diks=0
|
||||
if [ -e "$USER_DATA/mail/$domain.conf" ]; then
|
||||
accounts=$(search_objects "mail/$domain" 'SUSPENDED' "no" 'ACCOUNT')
|
||||
else
|
||||
accounts=''
|
||||
fi
|
||||
|
||||
for account in $accounts; do
|
||||
(( ++accs))
|
||||
dom_diks=$((dom_diks + U_DISK))
|
||||
object=$(grep "ACCOUNT='$account'" $USER_DATA/mail/$domain.conf)
|
||||
eval "$object"
|
||||
if [ "$SUSPENDED" = 'yes' ]; then
|
||||
MD5='SUSPENDED'
|
||||
fi
|
||||
|
||||
str="$account:$MD5:$user:mail::$HOMEDIR/$user:$QUOTA"
|
||||
echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd
|
||||
|
||||
for malias in ${ALIAS//,/ }; do
|
||||
echo "$malias@$domain:$account@$domain" >> $dom_aliases
|
||||
done
|
||||
if [ ! -z "$FWD" ]; then
|
||||
echo "$account@$domain:$FWD" >> $dom_aliases
|
||||
fi
|
||||
|
||||
done
|
||||
update_object_value 'mail' 'DOMAIN' "$domain" '$ACCOUNTS' "$accs"
|
||||
update_object_value 'mail' 'DOMAIN' "$domain" '$U_DISK' "$dom_diks"
|
||||
U_MAIL_ACCOUNTS=$((U_MAIL_ACCOUNTS + accs))
|
||||
U_DISK_MAIL=$((U_DISK_MAIL + dom_diks))
|
||||
U_MAIL_DOMAINS=$((U_MAIL_DOMAINS + 1))
|
||||
rebuild_mail_domain_conf
|
||||
done
|
||||
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ source $VESTA/conf/vesta.conf
|
|||
source $VESTA/func/main.sh
|
||||
source $VESTA/func/domain.sh
|
||||
source $VESTA/func/ip.sh
|
||||
source $VESTA/func/rebuild.sh
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
|
@ -50,195 +51,7 @@ rm -f $HOMEDIR/$user/conf/tmp_*.conf
|
|||
# Starting loop
|
||||
for domain in $(shell_list); do
|
||||
((++ domain_counter))
|
||||
|
||||
# Rebuilding directories
|
||||
mkdir -p $HOMEDIR/$user/web/$domain \
|
||||
$HOMEDIR/$user/web/$domain/public_html \
|
||||
$HOMEDIR/$user/web/$domain/public_shtml \
|
||||
$HOMEDIR/$user/web/$domain/document_errors \
|
||||
$HOMEDIR/$user/web/$domain/cgi-bin \
|
||||
$HOMEDIR/$user/web/$domain/private \
|
||||
$HOMEDIR/$user/web/$domain/stats \
|
||||
$HOMEDIR/$user/web/$domain/logs
|
||||
|
||||
ln -f -s /var/log/httpd/domains/$domain.log \
|
||||
$HOMEDIR/$user/web/$domain/logs/$domain.log
|
||||
ln -f -s /var/log/httpd/domains/$domain.error.log \
|
||||
$HOMEDIR/$user/web/$domain/logs/$domain.error.log
|
||||
|
||||
if [ ! -e "$WEBTPL/skel/document_errors/" ]; then
|
||||
cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/
|
||||
fi
|
||||
|
||||
touch /var/log/httpd/domains/$domain.bytes \
|
||||
/var/log/httpd/domains/$domain.log \
|
||||
/var/log/httpd/domains/$domain.error.log
|
||||
|
||||
chmod 551 $HOMEDIR/$user/web/$domain
|
||||
chmod 751 $HOMEDIR/$user/web/$domain/private
|
||||
chmod 751 $HOMEDIR/$user/web/$domain/cgi-bin
|
||||
chmod 751 $HOMEDIR/$user/web/$domain/public_html
|
||||
chmod 751 $HOMEDIR/$user/web/$domain/public_shtml
|
||||
chmod 751 $HOMEDIR/$user/web/$domain/document_errors
|
||||
chmod 551 $HOMEDIR/$user/web/$domain/stats
|
||||
chmod 551 $HOMEDIR/$user/web/$domain/logs
|
||||
chmod 640 /var/log/httpd/domains/$domain.*
|
||||
|
||||
chown $user:$user $HOMEDIR/$user/web/$domain
|
||||
chown $user:$user $HOMEDIR/$user/web/$domain/private
|
||||
chown $user:$user $HOMEDIR/$user/web/$domain/cgi-bin
|
||||
chown $user:$user $HOMEDIR/$user/web/$domain/public_html
|
||||
chown $user:$user $HOMEDIR/$user/web/$domain/public_shtml
|
||||
chown -R $user:$user $HOMEDIR/$user/web/$domain/document_errors
|
||||
chown root:$user /var/log/httpd/domains/$domain.*
|
||||
chown root:apache $conf
|
||||
|
||||
# Parsing domain values
|
||||
domain_idn=$(idn -t --quiet -a "$domain")
|
||||
get_domain_values 'web'
|
||||
ip=$(get_real_ip $IP)
|
||||
|
||||
# Preparing domain values for the template substitution
|
||||
upd_web_domain_values
|
||||
|
||||
# Adding domain to the tmp_httpd.conf
|
||||
tpl_file="$WEBTPL/apache_$TPL.tpl"
|
||||
conf="$HOMEDIR/$user/conf/web/tmp_httpd.conf"
|
||||
add_web_config
|
||||
chown root:apache $conf
|
||||
chmod 640 $conf
|
||||
|
||||
# Running template trigger
|
||||
if [ -x $WEBTPL/apache_$TPL.sh ]; then
|
||||
$WEBTPL/apache_$TPL.sh $user $domain $ip $HOMEDIR $docroot
|
||||
fi
|
||||
|
||||
# Checking aliases
|
||||
if [ ! -z "$ALIAS" ]; then
|
||||
aliases=$(echo "$ALIAS"|tr ',' '\n'| wc -l)
|
||||
user_aliases=$((user_aliases + aliases))
|
||||
fi
|
||||
|
||||
# Checking stats
|
||||
if [ ! -z "$STATS" ]; then
|
||||
cat $WEBTPL/$STATS.tpl |\
|
||||
sed -e "s/%ip%/$ip/g" \
|
||||
-e "s/%web_port%/$WEB_PORT/g" \
|
||||
-e "s/%web_ssl_port%/$WEB_SSL_PORT/g" \
|
||||
-e "s/%proxy_port%/$PROXY_PORT/g" \
|
||||
-e "s/%proxy_ssl_port%/$PROXY_SSL_PORT/g" \
|
||||
-e "s/%domain_idn%/$domain_idn/g" \
|
||||
-e "s/%domain%/$domain/g" \
|
||||
-e "s/%user%/$user/g" \
|
||||
-e "s/%home%/${HOMEDIR////\/}/g" \
|
||||
-e "s/%alias%/${aliases//,/ }/g" \
|
||||
-e "s/%alias_idn%/${aliases_idn//,/ }/g" \
|
||||
> $HOMEDIR/$user/conf/web/$STATS.$domain.conf
|
||||
|
||||
|
||||
if [ "$STATS" == 'awstats' ]; then
|
||||
if [ ! -e "/etc/awstats/$STATS.$domain_idn.conf" ]; then
|
||||
ln -s $HOMEDIR/$user/conf/web/$STATS.$domain.conf \
|
||||
/etc/awstats/$STATS.$domain_idn.conf
|
||||
fi
|
||||
fi
|
||||
|
||||
webstats="$BIN/v-update-web-domain-stat $user $domain"
|
||||
check_webstats=$(grep "$webstats" $VESTA/data/queue/webstats.pipe)
|
||||
if [ -z "$check_webstats" ]; then
|
||||
echo "$webstats" >> $VESTA/data/queue/webstats.pipe
|
||||
fi
|
||||
|
||||
if [ ! -z "$STATS_USER" ]; then
|
||||
# Definining statistic dir
|
||||
stats_dir="$HOMEDIR/$user/web/$domain/stats"
|
||||
|
||||
# Adding htaccess file
|
||||
echo "AuthUserFile $stats_dir/.htpasswd" > $stats_dir/.htaccess
|
||||
echo "AuthName \"Web Statistics\"" >> $stats_dir/.htaccess
|
||||
echo "AuthType Basic" >> $stats_dir/.htaccess
|
||||
echo "Require valid-user" >> $stats_dir/.htaccess
|
||||
|
||||
# Generating htaccess user and password
|
||||
echo "$STATS_USER:$STATS_CRYPT" > $stats_dir/.htpasswd
|
||||
fi
|
||||
fi
|
||||
|
||||
# Checking ssl
|
||||
if [ "$SSL" = 'yes' ]; then
|
||||
# Adding domain to the shttpd.conf
|
||||
conf="$HOMEDIR/$user/conf/web/tmp_shttpd.conf"
|
||||
tpl_file="$WEBTPL/apache_$TPL.stpl"
|
||||
add_web_config
|
||||
chown root:apache $conf
|
||||
chmod 640 $conf
|
||||
|
||||
cp -f $USER_DATA/ssl/$domain.crt \
|
||||
$HOMEDIR/$user/conf/web/ssl.$domain.crt
|
||||
cp -f $USER_DATA/ssl/$domain.key \
|
||||
$HOMEDIR/$user/conf/web/ssl.$domain.key
|
||||
cp -f $USER_DATA/ssl/$domain.pem \
|
||||
$HOMEDIR/$user/conf/web/ssl.$domain.pem
|
||||
if [ -e "$USER_DATA/ssl/$domain.ca" ]; then
|
||||
cp -f $USER_DATA/ssl/$domain.ca \
|
||||
$HOMEDIR/$user/conf/web/ssl.$domain.ca
|
||||
fi
|
||||
|
||||
# Running template trigger
|
||||
if [ -x $WEBTPL/apache_$TPL.sh ]; then
|
||||
$WEBTPL/apache_$TPL.sh $user $domain $ip $HOMEDIR $sdocroot
|
||||
fi
|
||||
|
||||
user_ssl=$((user_ssl + 1))
|
||||
ssl_change='yes'
|
||||
fi
|
||||
|
||||
# Checking nginx
|
||||
if [ ! -z "$NGINX" ]; then
|
||||
tpl_file="$WEBTPL/nginx_$NGINX.tpl"
|
||||
conf="$HOMEDIR/$user/conf/web/tmp_nginx.conf"
|
||||
add_web_config
|
||||
chown root:nginx $conf
|
||||
chmod 640 $conf
|
||||
|
||||
if [ "$SSL" = 'yes' ]; then
|
||||
tpl_file="$WEBTPL/nginx_$NGINX.stpl"
|
||||
conf="$HOMEDIR/$user/conf/web/tmp_snginx.conf"
|
||||
add_web_config
|
||||
chown root:nginx $conf
|
||||
chmod 640 $conf
|
||||
fi
|
||||
ngix_change='yes'
|
||||
fi
|
||||
if [ "$SUSPENDED" = 'yes' ]; then
|
||||
suspended_web=$((suspended_web + 1))
|
||||
fi
|
||||
user_domains=$((user_domains + 1))
|
||||
|
||||
# Checking ftp
|
||||
if [ ! -z "$FTP_USER" ]; then
|
||||
if [ -z "$(grep ^$FTP_USER: /etc/passwd)" ]; then
|
||||
/usr/sbin/adduser -o -u $(id -u $user) -g $user -s /sbin/nologin \
|
||||
-M -d "$HOMEDIR/$user/web/$domain" $FTP_USER > /dev/null 2>&1
|
||||
|
||||
shadow='/etc/shadow'
|
||||
shdw=$(grep "^$FTP_USER:" $shadow)
|
||||
shdw3=$(echo "$shdw" | cut -f3 -d :)
|
||||
shdw4=$(echo "$shdw" | cut -f4 -d :)
|
||||
shdw5=$(echo "$shdw" | cut -f5 -d :)
|
||||
shdw6=$(echo "$shdw" | cut -f6 -d :)
|
||||
shdw7=$(echo "$shdw" | cut -f7 -d :)
|
||||
shdw8=$(echo "$shdw" | cut -f8 -d :)
|
||||
shdw9=$(echo "$shdw" | cut -f9 -d :)
|
||||
chmod u+w $shadow
|
||||
sed -i "/^$FTP_USER:*/d" $shadow
|
||||
shdw_str="$FTP_USER:$FTP_MD5:$shdw3:$shdw4:$shdw5:$shdw6"
|
||||
shdw_str="$shdw_str:$shdw7:$shdw8:$shdw9"
|
||||
echo "$shdw_str" >> $shadow
|
||||
chmod u-w $shadow
|
||||
fi
|
||||
fi
|
||||
|
||||
rebuild_web_domain_conf
|
||||
done
|
||||
|
||||
# Config path
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/bash
|
||||
# info: restore user
|
||||
# options: USER BACKUP
|
||||
# options: USER BACKUP [WEB] [DNS] [MAIL] [DB] [CRON] [UDIRS] [NOTIFY]
|
||||
#
|
||||
# The function for resotring user from backup.
|
||||
|
||||
|
@ -12,28 +12,598 @@
|
|||
# Argument defenition
|
||||
user=$1
|
||||
backup=$2
|
||||
web=$3
|
||||
dns=$4
|
||||
mail=$5
|
||||
db=$6
|
||||
cron=$7
|
||||
u_dirs=$8
|
||||
notify=${9-no}
|
||||
|
||||
# Define backup dir
|
||||
if [ -z "$BACKUP" ]; then
|
||||
BACKUP=/home/backup/
|
||||
fi
|
||||
|
||||
# Includes
|
||||
source $VESTA/conf/vesta.conf
|
||||
source $VESTA/func/main.sh
|
||||
source $VESTA/func/domain.sh
|
||||
source $VESTA/func/ip.sh
|
||||
source $VESTA/func/db.sh
|
||||
source $VESTA/func/rebuild.sh
|
||||
|
||||
# Check backup function
|
||||
is_backup_valid() {
|
||||
if [ ! -e "$BACKUP/$backup" ]; then
|
||||
echo "Error: backup not exist"
|
||||
log_event "$E_NOTEXIST" "$EVENT"
|
||||
exit $E_NOTEXIST
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
# Verifications #
|
||||
#----------------------------------------------------------#
|
||||
|
||||
args='USER BACKUP [WEB] [DNS] [MAIL] [DB] [CRON] [UDIRS] [NOTIFY]'
|
||||
check_args '2' "$#" $args
|
||||
validate_format 'user' 'backup'
|
||||
is_object_valid 'user' 'USER' "$user"
|
||||
is_object_unsuspended 'user' 'USER' "$user"
|
||||
is_backup_valid
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
# Action #
|
||||
#----------------------------------------------------------#
|
||||
|
||||
# Set notification email and subject
|
||||
if [ "$notify" != 'no' ]; then
|
||||
subj="$user → restore failed"
|
||||
email=$(get_user_value '$CONTACT')
|
||||
else
|
||||
subj="$user → restore failed"
|
||||
email=$(grep CONTACT $VESTA/data/users/admin/user.conf | cut -f 2 -d \')
|
||||
fi
|
||||
if [ -e "$VESTA/web/inc/mail-wrapper.php" ]; then
|
||||
send_mail="$VESTA/web/inc/mail-wrapper.php"
|
||||
else
|
||||
send_mail=$(which mail)
|
||||
fi
|
||||
|
||||
# Check disk usage
|
||||
disk_usage=$(df $BACKUP |tail -n1 |tr ' ' '\n' |grep % |cut -f 1 -d %)
|
||||
if [ "$disk_usage" -ge "$BACKUP_DISK_LIMIT" ]; then
|
||||
rm -rf $tmpdir
|
||||
echo "Not enough disk space to run backup" | $send_mail -s "$subj" $email
|
||||
echo "Error: Not enough disk space"
|
||||
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
|
||||
log_event "$E_DISK" "$EVENT"
|
||||
exit $E_DISK
|
||||
fi
|
||||
|
||||
# Check load average
|
||||
la=$(cat /proc/loadavg | cut -f 1 -d ' ' | cut -f 1 -d '.')
|
||||
i=0
|
||||
while [ "$la" -ge "$BACKUP_LA_LIMIT" ]; do
|
||||
echo "$(date "+%F %T") Load Average $la"
|
||||
echo
|
||||
sleep 60
|
||||
if [ "$i" -ge "15" ]; then
|
||||
echo "LoadAverage $i is above threshold" | $send_mail -s "$subj" $email
|
||||
echo "Error: LA is too high"
|
||||
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
|
||||
log_event "$E_LA" "$EVENT"
|
||||
exit $E_LA
|
||||
fi
|
||||
(( ++i))
|
||||
done
|
||||
|
||||
# Creating temporary directory
|
||||
tmpdir=$(mktemp -p $BACKUP -d)
|
||||
if [ "$?" -ne 0 ]; then
|
||||
echo "Can't create tmp dir $tmpdir" | $send_mail -s "$subj" $email
|
||||
echo "Error: can't create tmp dir"
|
||||
log_event "$E_NOTEXIST" "$EVENT"
|
||||
exit $E_NOTEXIST
|
||||
fi
|
||||
|
||||
|
||||
# WEB
|
||||
if [ "$web" != 'no' ]; then
|
||||
echo "-- WEB --"
|
||||
msg="$msg\n-- WEB --"
|
||||
|
||||
# Create domain list
|
||||
domain_list=$(tar -tf $BACKUP/$backup | grep "^./web" |\
|
||||
grep domain_data.tar.gz | cut -f 3 -d '/')
|
||||
if [ ! -z "$web" ]; then
|
||||
dom_include_list=$(mktemp)
|
||||
for domain_include in ${web//,/ }; do
|
||||
echo "^$domain_include$" >> $dom_include_list
|
||||
done
|
||||
domain_list=$(echo "$domain_list" | egrep -f $dom_include_list )
|
||||
rm -f $dom_include_list
|
||||
fi
|
||||
|
||||
for domain in $domain_list; do
|
||||
echo -e "$(date "+%F %T") $domain"
|
||||
msg="$msg\n$(date "+%F %T") $domain"
|
||||
|
||||
# unpack domain container
|
||||
tar xf $BACKUP/$backup -C $tmpdir ./web/$domain
|
||||
if [ "$?" -ne 0 ]; then
|
||||
echo "Error: can't unpack $domain web contaner"
|
||||
echo "Can't unpack $domain web contaner" |\
|
||||
$send_mail -s "$subj" $email
|
||||
rm -rf $tmpdir
|
||||
exit $E_PARSING
|
||||
fi
|
||||
|
||||
# Restore domain config
|
||||
check_config=$(grep "DOMAIN='$domain'" $USER_DATA/web.conf)
|
||||
if [ -z "$check_config" ]; then
|
||||
|
||||
# Parse domain config
|
||||
eval $(cat $tmpdir/web/$domain/vesta/web.conf)
|
||||
|
||||
# Check if domain new
|
||||
check_new=$(is_domain_new 'web' $domain)
|
||||
if [ ! -z "$check_new" ]; then
|
||||
echo "Error: web domain $domain belongs to another user"
|
||||
echo "Web domain $domain belongs to another user" |\
|
||||
$sedn_mail -s "$subj" $email
|
||||
rm -rf $tmpdir
|
||||
log_event "$E_EXISTS" "$EVENT"
|
||||
exit $E_EXISTS
|
||||
fi
|
||||
|
||||
# Check if domain alias is new
|
||||
for dom_alias in ${ALIAS//,/ }; do
|
||||
check_new=$(is_domain_new 'web' $dom_alias)
|
||||
if [ ! -z "$check_new" ]; then
|
||||
# Delete conflicting alias
|
||||
ALIAS=$(echo "$ALIAS" |\
|
||||
sed -e "s/,/\n/g"|\
|
||||
sed -e "s/^$dom_alias$//g"|\
|
||||
sed -e "/^$/d"|\
|
||||
sed -e ':a;N;$!ba;s/\n/,/g')
|
||||
fi
|
||||
done
|
||||
|
||||
# Check ip address
|
||||
check_ip=$(is_ip_valid $IP)
|
||||
if [ -z "$check_ip" ]; then
|
||||
check_ip=$(is_ip_avalable $IP)
|
||||
fi
|
||||
if [ ! -z "$check_ip" ]; then
|
||||
IP=$(get_user_ip $user)
|
||||
if [ -z "$IP" ]; then
|
||||
echo "Error: no avaiable IP address"
|
||||
echo "No available IP address" |\
|
||||
$send_mail -s "$subj" $email
|
||||
log_event "$E_NOTEXIST" "$EVENT"
|
||||
exit $E_NOTEXIST
|
||||
fi
|
||||
echo "$IP" > $tmpdir/ip_mapping.$domain
|
||||
fi
|
||||
|
||||
# Check apache template
|
||||
check_tpl=$(is_apache_template_valid)
|
||||
if [ ! -z "$check_tpl" ]; then
|
||||
templates=$(ls -t $VESTA/data/templates/web/ |\
|
||||
grep 'apache' |\
|
||||
grep '\.tpl' |\
|
||||
cut -f 2 -d '_' |\
|
||||
cut -f 1 -d '.')
|
||||
if [ ! -z "$(echo $templates |grep default)" ]; then
|
||||
TPL=$(echo "$templates" |grep default |head -n1)
|
||||
else
|
||||
TPL=$("$templates" |head -n1)
|
||||
fi
|
||||
|
||||
if [ -z "$TPL" ]; then
|
||||
echo "Error: no avaiable web template"
|
||||
echo "No available web template" |\
|
||||
$send_mail -s "$subj" $email
|
||||
log_event "$E_NOTEXIST" "$EVENT"
|
||||
exit $E_NOTEXIST
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check nginx template
|
||||
if [ ! -z "$NGINX" ]; then
|
||||
check_tpl=$(is_nginx_template_valid)
|
||||
if [ ! -z "$check_tpl" ]; then
|
||||
templates=$(ls -t $VESTA/data/templates/web/ |\
|
||||
grep 'nginx' |\
|
||||
grep '\.tpl' |\
|
||||
cut -f 2 -d '_' |\
|
||||
cut -f 1 -d '.')
|
||||
if [ ! -z "$(echo $templates |grep default)" ]; then
|
||||
NGINX=$(echo "$templates" |grep default |head -n1)
|
||||
else
|
||||
NGINX=$("$templates" |head -n1)
|
||||
fi
|
||||
|
||||
if [ -z "$NGINX" ]; then
|
||||
echo "Error: no avaiable nginx template"
|
||||
echo "No available nginx tpl" |\
|
||||
$send_mail -s "$subj" $email
|
||||
log_event "$E_NOTEXIST" "$EVENT"
|
||||
exit $E_NOTEXIST
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
str="DOMAIN='$domain' IP='$IP' IP6='$IP6' ALIAS='$ALIAS'"
|
||||
str="$str TPL='$TPL' SSL='$SSL' SSL_HOME='$SSL_HOME'"
|
||||
str="$str FTP_USER='$FTP_USER' FTP_MD5='$FTP_MD5' NGINX='$NGINX'"
|
||||
str="$str NGINX_EXT='$NGINX_EXT' STATS='$STATS'"
|
||||
str="$str STATS_USER='$STATS_USER' STATS_CRYPT='$STATS_CRYPT'"
|
||||
str="$str U_DISK='$U_DISK' U_BANDWIDTH='0' SUSPENDED='no'"
|
||||
str="$str TIME='$(date +%T)' DATE='$(date +%F)'"
|
||||
echo $str >> $USER_DATA/web.conf
|
||||
|
||||
# Rebuild web config
|
||||
rebuild_web_domain_conf
|
||||
|
||||
# Adding apache virtualhost
|
||||
httpd_conf='/etc/httpd/conf.d/vesta.conf'
|
||||
tmp_conf="$HOMEDIR/$user/conf/web/tmp_httpd.conf"
|
||||
conf="$HOMEDIR/$user/conf/web/httpd.conf"
|
||||
cat $tmp_conf >> $conf
|
||||
rm -f $tmp_conf
|
||||
httpd_include=$(grep "$conf" $httpd_conf )
|
||||
if [ -z "$httpd_include" ]; then
|
||||
echo "Include $conf" >> $httpd_conf
|
||||
fi
|
||||
|
||||
# Adding ssl apache virtuualhost
|
||||
if [ "$ssl_change" = 'yes' ]; then
|
||||
tmp_conf="$HOMEDIR/$user/conf/web/tmp_shttpd.conf"
|
||||
conf="$HOMEDIR/$user/conf/web/shttpd.conf"
|
||||
cat $tmp_conf >> $conf
|
||||
rm -f $tmp_conf
|
||||
fi
|
||||
httpd_include=$(grep "$conf" $httpd_conf )
|
||||
if [ -z "$httpd_include" ]; then
|
||||
echo "Include $conf" >> $httpd_conf
|
||||
fi
|
||||
|
||||
# Adding nginx virtualhost
|
||||
nginx_conf='/etc/nginx/conf.d/vesta_users.conf'
|
||||
if [ "$ngix_change" = 'yes' ]; then
|
||||
tmp_conf="$HOMEDIR/$user/conf/web/tmp_nginx.conf"
|
||||
conf="$HOMEDIR/$user/conf/web/nginx.conf"
|
||||
cat $tmp_conf >> $conf
|
||||
rm -f $tmp_conf
|
||||
fi
|
||||
nginx_include=$(grep "$conf" $nginx_conf )
|
||||
if [ -z "$nginx_include" ]; then
|
||||
echo "include $conf;" >> $nginx_conf
|
||||
fi
|
||||
|
||||
# Adding ssl nginx virtualhost
|
||||
if [ "$ngix_change" = 'yes' ] && [ "$ssl_change" = 'yes' ]; then
|
||||
tmp_conf="$HOMEDIR/$user/conf/web/tmp_snginx.conf"
|
||||
conf="$HOMEDIR/$user/conf/web/snginx.conf"
|
||||
cat $tmp_conf >> $conf
|
||||
rm -f $tmp_conf
|
||||
nginx_include=$(grep "$conf" $nginx_conf )
|
||||
if [ -z "$nginx_include" ]; then
|
||||
echo "include $conf;" >> $nginx_conf
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Restore data
|
||||
tar -xzpf $tmpdir/web/$domain/domain_data.tar.gz \
|
||||
-C $HOMEDIR/$user/web/$domain/
|
||||
if [ "$?" -ne 0 ]; then
|
||||
echo "Error: can't unpack $domain data tarball"
|
||||
echo "Can't can't unpack $domain data tarball" |\
|
||||
$send_mail -s "$subj" $email
|
||||
rm -rf $tmpdir
|
||||
exit $E_PARSING
|
||||
fi
|
||||
done
|
||||
echo
|
||||
msg="$msg\n"
|
||||
fi
|
||||
|
||||
# DNS
|
||||
if [ "$dns" != 'no' ]; then
|
||||
echo "-- DNS --"
|
||||
msg="$msg\n-- DNS --"
|
||||
|
||||
# Create domain list
|
||||
domain_list=$(tar -tf $BACKUP/$backup | grep "^./dns" |\
|
||||
grep dns.conf | cut -f 3 -d '/')
|
||||
if [ ! -z "$dns" ]; then
|
||||
dom_include_list=$(mktemp)
|
||||
for domain_include in ${dns//,/ }; do
|
||||
echo "^$domain_include$" >> $dom_include_list
|
||||
done
|
||||
domain_list=$(echo "$domain_list" | egrep -f $dom_include_list )
|
||||
rm -f $dom_include_list
|
||||
fi
|
||||
|
||||
for domain in $domain_list; do
|
||||
echo -e "$(date "+%F %T") $domain"
|
||||
msg="$msg\n$(date "+%F %T") $domain"
|
||||
|
||||
# unpack domain container
|
||||
tar xf $BACKUP/$backup -C $tmpdir ./dns/$domain
|
||||
if [ "$?" -ne 0 ]; then
|
||||
echo "Error: can't unpack $domain dns contaner"
|
||||
echo "Can't unpack $domain dns contaner" |\
|
||||
$send_mail -s "$subj" $email
|
||||
rm -rf $tmpdir
|
||||
exit $E_PARSING
|
||||
fi
|
||||
|
||||
# Restore domain config
|
||||
check_config=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
|
||||
if [ -z "$check_config" ]; then
|
||||
|
||||
# Parse domain config
|
||||
eval $(cat $tmpdir/dns/$domain/vesta/dns.conf)
|
||||
|
||||
# Check if domain new
|
||||
check_new=$(is_domain_new 'dns' $domain)
|
||||
if [ ! -z "$check_new" ]; then
|
||||
echo "Error: dns domain $domain belongs to another user"
|
||||
echo "DNS domain $domain belongs to another user" |\
|
||||
$send_mail -s "$subj" $email
|
||||
rm -rf $tmpdir
|
||||
log_event "$E_EXISTS" "$EVENT"
|
||||
exit $E_EXISTS
|
||||
fi
|
||||
|
||||
# Check ip address
|
||||
if [ -e "$tmpdir/ip_mapping.$domain" ]; then
|
||||
OLD=$IP
|
||||
IP=$(cat $tmpdir/ip_mapping.$domain)
|
||||
sed -i "s/$OLD/$IP/g" $tmpdir/dns/$domain/vesta/$domain.conf
|
||||
else
|
||||
check_ip=$(is_ip_valid $IP)
|
||||
if [ ! -z "$check_ip" ]; then
|
||||
if [ -z "$IP" ]; then
|
||||
IP=$(get_user_ip $user)
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [ -z "$IP" ]; then
|
||||
echo "Error: no avaiable IP address"
|
||||
echo "No available IP address" | $send_mail -s "$subj" $email
|
||||
log_event "$E_NOTEXIST" "$EVENT"
|
||||
exit $E_NOTEXIST
|
||||
fi
|
||||
|
||||
# Check dns template
|
||||
check_tpl=$(is_dns_template_valid)
|
||||
if [ ! -z "$check_tpl" ]; then
|
||||
templates=$(ls -t $VESTA/data/templates/dns/ |\
|
||||
grep '\.tpl' |\
|
||||
cut -f 1 -d '.')
|
||||
if [ ! -z "$(echo $templates |grep default)" ]; then
|
||||
TPL=$(echo "$templates" |grep default |head -n1)
|
||||
else
|
||||
TPL=$("$templates" |head -n1)
|
||||
fi
|
||||
|
||||
if [ -z "$TPL" ]; then
|
||||
echo "Error: no avaiable dns template"
|
||||
echo "No available dns template" |\
|
||||
$send_mail -s "$subj" $email
|
||||
log_event "$E_NOTEXIST" "$EVENT"
|
||||
exit $E_NOTEXIST
|
||||
fi
|
||||
fi
|
||||
|
||||
str="DOMAIN='$domain' IP='$IP' TPL='$TPL' TTL='$TTL' EXP='$EXP'"
|
||||
str="$str SOA='$SOA' RECORDS='$RECORDS' SUSPENDED='no'"
|
||||
str="$str TIME='$(date +%T)' DATE='$(date +%F)'"
|
||||
echo $str >> $USER_DATA/dns.conf
|
||||
fi
|
||||
|
||||
# Restore dns records
|
||||
cp -f $tmpdir/dns/$domain/vesta/$domain.conf $USER_DATA/dns/
|
||||
|
||||
# Rebuild dns config
|
||||
rebuild_dns_domain_conf
|
||||
done
|
||||
echo
|
||||
msg="$msg\n"
|
||||
fi
|
||||
|
||||
# MAIL
|
||||
if [ "$mail" != 'no' ]; then
|
||||
echo "-- MAIL --"
|
||||
msg="$msg\n-- MAIL --"
|
||||
|
||||
# Create domain list
|
||||
domain_list=$(tar -tf $BACKUP/$backup | grep "^./mail" |\
|
||||
grep mail.conf | cut -f 3 -d '/')
|
||||
if [ ! -z "$mail" ]; then
|
||||
dom_include_list=$(mktemp)
|
||||
for domain_include in ${mail//,/ }; do
|
||||
echo "^$domain_include$" >> $dom_include_list
|
||||
done
|
||||
domain_list=$(echo "$domain_list" | egrep -f $dom_include_list )
|
||||
rm -f $dom_include_list
|
||||
fi
|
||||
|
||||
for domain in $domain_list; do
|
||||
echo -e "$(date "+%F %T") $domain"
|
||||
msg="$msg\n$(date "+%F %T") $domain"
|
||||
|
||||
# unpack domain container
|
||||
tar xf $BACKUP/$backup -C $tmpdir ./mail/$domain
|
||||
if [ "$?" -ne 0 ]; then
|
||||
echo "Error: can't unpack $domain mail contaner"
|
||||
echo "Can't can't unpack $domain mail contaner" |\
|
||||
$send_mail -s "$subj" $email
|
||||
rm -rf $tmpdir
|
||||
exit $E_PARSING
|
||||
fi
|
||||
|
||||
# Restore domain config
|
||||
check_config=$(grep "DOMAIN='$domain'" $USER_DATA/mail.conf)
|
||||
if [ -z "$check_config" ]; then
|
||||
|
||||
# Parse domain config
|
||||
eval $(cat $tmpdir/mail/$domain/vesta/mail.conf)
|
||||
|
||||
# Check if domain new
|
||||
check_new=$(is_domain_new 'mail' $domain)
|
||||
if [ ! -z "$check_new" ]; then
|
||||
echo "Error: mail domain $domain belongs to another user"
|
||||
echo "Mail domain $domain belongs to another user" |\
|
||||
$send_mail -s "$subj" $email
|
||||
rm -rf $tmpdir
|
||||
log_event "$E_EXISTS" "$EVENT"
|
||||
exit $E_EXISTS
|
||||
fi
|
||||
|
||||
str="DOMAIN='$domain' ANTIVIRUS='$ANTIVIRUS' ANTISPAM='$ANTISPAM'"
|
||||
str="$str DKIM='$DKIM' ACCOUNTS='$ACCOUNTS' U_DISK='$U_DISK'"
|
||||
str="$str CATCHALL='$CATCHALL' SUSPENDED='no'"
|
||||
str="$str TIME='$(date +%T)' DATE='$(date +%F)'"
|
||||
echo $str >> $USER_DATA/mail.conf
|
||||
fi
|
||||
|
||||
# Restore DKIM
|
||||
if [ -e "$tmpdir/mail/$domain/vesta/$domain.pem" ]; then
|
||||
cp -f $tmpdir/mail/$domain/vesta/$domain.pem $USER_DATA/mail/
|
||||
cp -f $tmpdir/mail/$domain/vesta/$domain.pub $USER_DATA/mail/
|
||||
fi
|
||||
|
||||
# Restore email accounts
|
||||
cp -f $tmpdir/mail/$domain/vesta/$domain.conf $USER_DATA/mail/
|
||||
|
||||
# Rebuild mail config
|
||||
rebuild_mail_domain_conf
|
||||
|
||||
# Restore emails
|
||||
if [ -e "$tmpdir/mail/$domain/accounts.tar.gz" ]; then
|
||||
tar -xzpf $tmpdir/mail/$domain/accounts.tar.gz \
|
||||
-C $HOMEDIR/$user/mail/$domain/
|
||||
if [ "$?" -ne 0 ]; then
|
||||
echo "Error: can't unpack $domain mail account tarball"
|
||||
echo "Can't unpack $domain mail account tarball" |\
|
||||
$send_mail -s "$subj" $email
|
||||
rm -rf $tmpdir
|
||||
exit $E_PARSING
|
||||
fi
|
||||
fi
|
||||
done
|
||||
echo
|
||||
msg="$msg\n"
|
||||
fi
|
||||
|
||||
# DB
|
||||
if [ "$db" != 'no' ]; then
|
||||
echo "-- DB --"
|
||||
msg="$msg\n-- DB --"
|
||||
|
||||
# Create domain list
|
||||
db_list=$(tar -tf $BACKUP/$backup | grep "^./db" |\
|
||||
grep db.conf | cut -f 3 -d '/')
|
||||
if [ ! -z "$db" ]; then
|
||||
db_include_list=$(mktemp)
|
||||
for db_include in ${db//,/ }; do
|
||||
echo "^$db_include$" >> $db_include_list
|
||||
done
|
||||
db_list=$(echo "$db_list" | egrep -f $db_include_list )
|
||||
rm -f $db_include_list
|
||||
fi
|
||||
|
||||
for db in $db_list; do
|
||||
echo -e "$(date "+%F %T") $db"
|
||||
msg="$msg\n$(date "+%F %T") $db"
|
||||
|
||||
# unpack db container
|
||||
tar xf $BACKUP/$backup -C $tmpdir ./db/$db
|
||||
if [ "$?" -ne 0 ]; then
|
||||
echo "Error: can't unpack $db database contaner"
|
||||
echo "Can't unpack $db database contaner" |\
|
||||
$send_mail -s "$subj" $email
|
||||
rm -rf $tmpdir
|
||||
exit $E_PARSING
|
||||
fi
|
||||
|
||||
# Restore domain config
|
||||
check_config=$(grep "DB='$db'" $USER_DATA/db.conf)
|
||||
if [ -z "$check_config" ]; then
|
||||
|
||||
# Parse domain config
|
||||
eval $(cat $tmpdir/db/$db/vesta/db.conf)
|
||||
str="DB='$db' DBUSER='$DBUSER' MD5='$MD5' HOST='$HOST'"
|
||||
str="$str TYPE='$TYPE' CHARSET='$CHARSET' U_DISK='$U_DISK'"
|
||||
str="$str SUSPENDED='no' TIME='$(date +%T)' DATE='$(date +%F)'"
|
||||
echo $str >> $USER_DATA/db.conf
|
||||
fi
|
||||
|
||||
# Unzip database dump
|
||||
gzip -d $tmpdir/db/$db/$db.*.sql.gz
|
||||
|
||||
# Get database values
|
||||
get_database_values
|
||||
|
||||
# Rebuild db
|
||||
case $TYPE in
|
||||
mysql) rebuild_mysql_database;
|
||||
import_mysql_database $tmpdir/db/$db/$db.$TYPE.sql ;;
|
||||
pgsql) rebuild_pgsql_database;
|
||||
import_pgsql_database $tmpdir/db/$db/$db.$TYPE.sql ;;
|
||||
esac
|
||||
done
|
||||
echo
|
||||
msg="$msg\n"
|
||||
fi
|
||||
|
||||
# Cron
|
||||
if [ "$cron" != 'no' ]; then
|
||||
echo "-- CRON --"
|
||||
msg="$msg\n-- CRON --"
|
||||
|
||||
echo -e "$(date "+%F %T") $db"
|
||||
msg="$msg\n$(date "+%F %T") $db"
|
||||
|
||||
# unpack db container
|
||||
tar xf $BACKUP/$backup -C $tmpdir ./cron
|
||||
if [ "$?" -ne 0 ]; then
|
||||
echo "Error: can't unpack cron contaner"
|
||||
echo "Can't unpack cron contaner" | $send_mail -s "$subj" $email
|
||||
rm -rf $tmpdir
|
||||
exit $E_PARSING
|
||||
fi
|
||||
|
||||
# Restore cron records
|
||||
cp $tmpdir/cron/cron.conf $USER_DATA/cron.conf
|
||||
|
||||
# Rebuild cron
|
||||
sync_cron_jobs
|
||||
|
||||
echo
|
||||
msg="$msg\n"
|
||||
fi
|
||||
|
||||
# Remove temporary data
|
||||
rm -rf $tmpdir
|
||||
|
||||
|
||||
#----------------------------------------------------------#
|
||||
# Vesta #
|
||||
#----------------------------------------------------------#
|
||||
|
||||
# Update user counters
|
||||
$BIN/v-update-user-counters $user
|
||||
|
||||
# Logging
|
||||
log_event "$OK" "$EVENT"
|
||||
|
||||
|
|
|
@ -73,11 +73,10 @@ for host in $hosts; do
|
|||
for key in $host_str; do
|
||||
eval ${key%%=*}=${key#*=}
|
||||
done
|
||||
sql="mysql -h $HOST -u $USER -p$PASSWORD -P$PORT -e"
|
||||
sql="mysql -h $HOST -u $USER -p$PASSWORD -e"
|
||||
|
||||
# Checking empty vars
|
||||
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]
|
||||
then
|
||||
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
|
||||
echo "Error: config is broken"
|
||||
log_event "$E_PARSING" "$EVENT"
|
||||
exit $E_PARSING
|
||||
|
|
|
@ -75,11 +75,10 @@ for host in $hosts; do
|
|||
done
|
||||
|
||||
export PGPASSWORD="$PASSWORD"
|
||||
sql="psql -h $HOST -U $USER -p $PORT -c"
|
||||
sql="psql -h $HOST -U $USER -c"
|
||||
|
||||
# Checking empty vars
|
||||
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]
|
||||
then
|
||||
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
|
||||
echo "Error: config is broken"
|
||||
log_event "$E_PARSING" "$EVENT"
|
||||
exit $E_PARSING
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue