001.
#!/bin/bash
002.
# This script is provided whitout any warranty
003.
# Run at your own risk
004.
# Version 0.2
005.
# This script restore backups from DA to VestaCP
006.
# This script can restore Datases, databases user
and
passwords, mails
and
domains.
007.
# Contact da_importer@skamasle.com
008.
# Skamasle | Maks Usmanov
009.
# Twitter @skamasle
010.
# Turn this to 1
if
you want get domains
and
paths from apache_owened_list
011.
# Turn int to 2
if
you want to get domains dir
"domains"
and
set public_html
as
default
012.
013.
sk_get_dom=2
014.
015.
if
[ ! -e /usr/bin/rsync ] || [ ! -e /usr/bin/file ] ; then
016.
echo
"#######################################"
017.
echo
"rsync not installed, try install it"
018.
echo
"This script need: rsync, file"
019.
echo
"#######################################"
020.
if
[ -e /etc/redhat-release ]; then
021.
echo
"Run: yum install rync file"
022.
else
023.
echo
"Run: apt-get install rsync file"
024.
fi
025.
exit
3
026.
fi
027.
# Put this to 0
if
you want
use
bash -x to debug it
028.
sk_debug=1
029.
sk_vesta_package=
default
030.
b=backup
031.
d=domains
032.
#
033.
# Only
for
gen_password but I dont like it, a lot of lt
034.
# maybe will
use
it
for
orther functions :)
035.
source /usr/local/vesta/func/main.sh
036.
sk_file=
$1
037.
sk_tmp=sk_tmp
038.
sk_delete_tmp () {
039.
echo
"Removing tmp files"
040.
rm -rf /root/${sk_tmp}
041.
}
042.
sk_file_name=$(ls
$sk_file
)
043.
tput setaf 2
044.
echo
"Checking provided file..."
045.
tput sgr0
046.
if
file
$sk_file
|grep -q -c
"gzip compressed data,"
; then
047.
tput setaf 2
048.
echo
"OK - Gziped File"
049.
tput sgr0
050.
if
[ ! -d /root/${sk_tmp} ]; then
051.
echo
"Creating tmp.."
052.
mkdir
/root/${sk_tmp}
053.
fi
054.
echo
"Extracting backup..."
055.
if
[
"$sk_debug"
!= 0 ]; then
056.
tar xzvf
$sk_file
-C /root/${sk_tmp} 2>&1 |
057.
while
read sk_extracted_file;
do
058.
ex=$((ex+1))
059.
echo
-en
"wait... $ex files extracted\r"
060.
done
061.
else
062.
tar xzf
$sk_file
-C /root/${sk_tmp}
063.
fi
064.
if
[ $? -eq 0 ];then
065.
tput setaf 2
066.
echo
"Backup extracted whitout errors..."
067.
tput sgr0
068.
else
069.
echo
"Error on backup extraction, check your file, try extract it manually"
070.
sk_delete_tmp
071.
exit
1
072.
fi
073.
else
074.
echo
"Error 3 not-gzip - no stantard cpanel backup provided of file not installed ( Try yum install file, or apt-get install file )"
075.
sk_delete_tmp
076.
exit
3
077.
fi
078.
cd /root/${sk_tmp}/
079.
sk_importer_in=$(pwd)
080.
echo
"Access tmp directory $sk_importer_in"
081.
echo
"Get prefix/user..."
082.
sk_da_user=$(grep username backup/user.conf |cut -d
"="
-f 2)
083.
sk_da_usermail=$(grep email backup/user.conf |cut -d
"="
-f 2 |grep @)
084.
if
[ -z
$sk_da_usermail
];then
085.
sk_da_usermail=$(grep domain backup/user.conf |cut -d
"="
-f 2 |head -n 1)
086.
fi
087.
088.
if
/usr/local/vesta/bin/v-list-users | grep -q -w
$sk_da_user
;then
089.
echo
"User alredy exist on your server, maybe on vestacp or in your /etc/passwd"
090.
echo
"**"
091.
echo
"Grep your /etc/passwd"
092.
grep -q -w
$sk_da_user
/etc/passwd
093.
echo
"**"
094.
sk_delete_tmp
095.
exit
21
096.
else
097.
echo
"Generate random password for $sk_da_user and create Vestacp Account ..."
098.
sk_password=$(generate_password)
099.
/usr/local/vesta/bin/v-add-user
$sk_da_user
$sk_password
$sk_da_usermail
$sk_vesta_package
$sk_da_user
$sk_da_user
100.
if
[ $? != 0 ]; then
101.
tput setaf 2
103.
tput sgr0
104.
sk_delete_tmp
105.
exit
4
106.
fi
107.
fi
108.
for
sk_ex1 in crontab ticket user
109.
do
110.
mv backup/${sk_ex1}.conf backup/${sk_ex1}
111.
done
112.
# start whit databases
113.
tput setaf 2
114.
echo
"Start Whit Databases"
115.
tput sgr0
116.
echo
"Get local databases"
117.
mysql -e
"SHOW DATABASES"
> server_dbs
118.
sk_da_db_user_list=$(ls -1 backup/ |grep
".conf"
)
119.
function
sk_run_da_db () {
120.
for
sk_da_db_u in
$sk_da_db_user_list
121.
do
122.
# userdb=${sk_da_db_u:: -5}
123.
# md5=$(grep
$userdb
${b}/${sk_da_db_u} | head -n 1 | tr
'&'
'\n '
|grep passwd |cut -d
"="
-f 2)
124.
# db=$(grep db_collation ${b}/${sk_da_db_u} | tr
'&'
'\n '
|grep SCHEMA_NAME |cut -d
"="
-f 2)
125.
# grep -w
$db
server_dbs
126.
127.
# modify by tospat
128.
129.
db=${sk_da_db_u:: -5}
130.
userdb=$(grep ${db%_*}_ ${b}/${sk_da_db_u} | head -n 1 | tr
'&'
'\n '
| grep alter_priv=Y | cut -d
"="
-f 1)
131.
md5=$(grep
$userdb
${b}/${sk_da_db_u} | head -n 1 | tr
'&'
'\n '
| grep passwd | cut -d
"="
-f 2)
132.
grep -w
$db
server_dbs
133.
134.
if
[ $? ==
"1"
]; then
135.
tput setaf 2
136.
echo
" Create and restore ${db} "
137.
tput sgr0
138.
mysql -e
"CREATE DATABASE $db"
139.
mysql ${db} < backup/${db}.sql
140.
echo
"Add $db to vestacp"
141.
142.
# don't forget to change CHARSET
143.
144.
echo
"DB='$db' DBUSER='$userdb' MD5='$md5' HOST='localhost' TYPE='mysql' CHARSET='TIS620' U_DISK='0' SUSPENDED='no' TIME='$TIME' DATE='$DATE'"
>> /usr/local/vesta/data/users/${sk_da_user}/db.conf
145.
else
146.
echo
"Error: Cant restore database $db alredy exists in mysql server"
147.
fi
148.
done
149.
echo
"Fix passwords and users"
150.
/usr/local/vesta/bin/v-rebuild-databases
$sk_da_user
151.
}
152.
153.
if
[[ -z
$sk_da_db_user_list
]]; then
154.
echo
"No database found"
155.
else
156.
sk_run_da_db
157.
fi
158.
159.
# Start whit domains
160.
tput setaf 2
161.
echo
"Start Whit Domains"
162.
tput sgr0
163.
if
[
"$sk_get_dom"
= 1 ];then
164.
sk_da_domain_list=$(grep
"=G"
${b}/apache_owned_files.list |grep -v public_html |grep -v private_html)
165.
else
166.
sk_da_domain_list=$(ls -1 domains/)
167.
fi
168.
for
sk_da_dom in
$sk_da_domain_list
169.
do
170.
if
[
"$sk_get_dom"
= 1 ];then
171.
sk_da_dom=${sk_da_dom:: -2}
172.
fi
173.
tput setaf 2
174.
echo
"Add $sk_da_dom if not exists"
175.
tput sgr0
176.
/usr/local/vesta/bin/v-add-domain ${sk_da_user}
$sk_da_dom
177.
if
[
"$?"
=
"4"
]; then
178.
tput setaf 4
179.
echo
"Domain $sk_da_dom alredy added in some account, skip..."
180.
tput sgr0
181.
elif [ -d /home/${sk_da_user}/web/${sk_da_dom} ];then
182.
echo
"Domain $sk_da_dom added, restoring files"
183.
echo
$sk_da_dom
>> sk_restored_domains
184.
#some paths maybe change, I dont know yet so we get it.
185.
if
[
"$sk_get_dom"
= 1 ];then
186.
sk_da_do_path=$(grep -w
$sk_da_dom
${b}/apache_owned_files.list |grep -v
"${sk_da_dom}=G"
|grep -v
"private_html"
)
187.
sk_da_do_path=${sk_da_do_path:: -2}
188.
else
189.
sk_da_do_path=${sk_da_dom}/public_html
190.
fi
191.
if
[
"$sk_debug"
!= 0 ]; then
192.
rm -f /home/${sk_da_user}/web/${sk_da_dom}/public_html/index.html
193.
rsync -av ${d}/${sk_da_do_path}/ /home/${sk_da_user}/web/${sk_da_dom}/public_html 2>&1 |
194.
#
copy
webalizer stats
195.
rsync -av ${d}/${sk_da_dom}/stats/ /home/${sk_da_user}/web/${sk_da_dom}/stats 2>&1 |
196.
while
read sk_file_dm;
do
197.
sk_sync=$((sk_sync+1))
198.
echo
-en
"-- $sk_sync restored files\r"
199.
done
200.
echo
" "
201.
else
202.
rm -f /home/${sk_da_user}/web/${sk_da_dom}/public_html/index.html
203.
rsync ${d}/${sk_da_do_path}/ /home/${sk_da_user}/web/${sk_da_dom}/public_html
204.
rsync ${d}/${sk_da_dom}/stats/ /home/${sk_da_user}/web/${sk_da_dom}/stats
205.
fi
206.
chown
${sk_da_user}:${sk_da_user} -R /home/${sk_da_user}/web/${sk_da_dom}/public_html
207.
chown
${sk_da_user}:${sk_da_user} -R /home/${sk_da_user}/web/${sk_da_dom}/stats
208.
chmod
751 /home/${sk_da_user}/web/${sk_da_dom}/public_html
209.
chmod
751 /home/${sk_da_user}/web/${sk_da_dom}/stats
210.
else
211.
echo
"Ups.. cant restore or add domain: $sk_da_dom"
212.
fi
213.
done
214.
echo
" "
215.
echo
"Domains restored!"
216.
tput setaf 2
217.
echo
"Start restoring mails"
218.
tput sgr0
219.
function
sk_da_restore_imap_pass () {
220.
if
[ -d /etc/exim ]; then
221.
EXIM=/etc/exim
222.
else
223.
EXIM=/etc/exim4
224.
fi
225.
226.
sk_actual_pass=$(grep -w
$1
${EXIM}/domains/
$2
/passwd | cut -d
":"
-f 2)
227.
sk_da_orig_pass=$(grep -w
$1
${b}/
$2
/email/passwd | cut -d
":"
-f 2)
228.
229.
replace
"${sk_actual_pass}"
"${sk_da_orig_pass}"
-- ${EXIM}/domains/
$2
/passwd
230.
echo
"Password for $1@$2 restored"
231.
#################
232.
# fix vesta needed
233.
}
234.
if
[ -e sk_restored_domains ]; then
235.
cat sk_restored_domains |
while
read sk_da_mail_domain
236.
do
237.
if
[
"$(ls -A ${b}/${sk_da_mail_domain}/email/data/imap/)"
]; then
238.
tput setaf 2
239.
echo
"Found Imap for ${sk_da_mail_domain}"
240.
tput sgr0
241.
ls -1 ${b}/${sk_da_mail_domain}/email/data/imap/ |
while
read sk_da_imap
242.
do
243.
/usr/local/vesta/bin/v-add-mail-account
$sk_da_user
$sk_da_mail_domain
$sk_da_imap
temp
244.
if
[
"$sk_debug"
!= 0 ]; then
245.
rsync -av ${b}/${sk_da_mail_domain}/email/data/imap/${sk_da_imap}/Maildir/ /home/${sk_da_user}/mail/${sk_da_mail_domain}/${sk_da_imap} 2>&1 |
246.
while
read sk_file_dm
247.
do
248.
sk_sync=$((sk_sync+1))
249.
echo
-en
"-- $sk_sync restored files\r"
250.
done
251.
echo
" "
252.
else
253.
rsync ${b}/${sk_da_mail_domain}/email/data/imap/${sk_da_imap}/Maildir/ /home/${sk_da_user}/mail/${sk_da_mail_domain}/${sk_da_imap}
254.
fi
255.
chown
${sk_da_user}:mail -R /home/${sk_da_user}/mail/${sk_da_mail_domain}/${sk_da_imap}
256.
sk_da_restore_imap_pass
$sk_da_imap
$sk_da_mail_domain
257.
done
258.
259.
fi
260.
done
261.
fi
262.
sk_delete_tmp
263.
echo
"Account $sk_da_user restored"
264.
echo
"REport eny errores in skamasle.com or in vesta forum ( official forum thread ) "
265.
echo
"Or in twitter @skamasle"
266.
echo
"This was powered by skamasle.com | Maks Usmanov"
267.
268.
echo
"Modified by Tospat 2019-08-04"
269.
echo
"to restore db_user, db_pass, email_pass, stats"