Skip to content

Commit 255e007

Browse files
authored
Fix and improve
Fix bug in restore addon domains / some body broken that Add function to fix crontab and change cpanel php paths to hestiacp path Fix database restore And some changes more
1 parent 3dfaaf6 commit 255e007

File tree

1 file changed

+84
-25
lines changed

1 file changed

+84
-25
lines changed

bin/v-import-cpanel

Lines changed: 84 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,9 @@ if [ ! -e /usr/bin/rsync ] || [ ! -e /usr/bin/file ]; then
3131
echo "rsync not installed, try install it"
3232
echo "This script need: rsync, file"
3333
echo "#######################################"
34-
if [ -e /etc/redhat-release ]; then
35-
echo "Run: yum install rsync file"
36-
else
37-
echo "Run: apt-get install rsync file"
38-
fi
34+
echo "Run: apt-get install rsync file"
3935
exit 3
4036
fi
41-
# Default settings
42-
# Put this to 0 if you want use bash -x to debug it
43-
debug=1
4437

4538
if [ -f "$1" ]; then
4639
cpanel_backup="$1"
@@ -84,13 +77,10 @@ fi
8477

8578
cd $tmpdir/*
8679

87-
echo "Get prefix..."
88-
user_prefix=$(cat meta/dbprefix)
89-
9080
main_dir=$(pwd)
9181
echo "Access tmp directory $main_dir"
9282
dbprefix=$(cat meta/dbprefix)
93-
if [ $dbprefix = 1 ]; then
83+
if [ $dbprefix == 1 ]; then
9484
echo "Error 255 - I dont like your prefix, I dont want do this job"
9585
exit 255
9686
fi
@@ -138,26 +128,22 @@ tput sgr0
138128
sed -i 's/\\//g' mysql.sql
139129
sed -i "s/\`/'/g" mysql.sql
140130

141-
grep "GRANT USAGE ON" mysql.sql | awk -F "'" '{ print $2, $6 }' | uniq > user_password_db
142-
# User and database
143-
grep "GRANT" mysql.sql | grep -v "USAGE ON" > u_db
144-
cat u_db | awk -F "'" '{ print $2, $4 }' | sort | uniq > uni_u_db
145-
146131
## User / Password
147132
grep "GRANT USAGE ON" mysql.sql | awk -F "'" '{ print $2, $6 }' | uniq > user_password_db
148133
# User and database
149134
grep "GRANT" mysql.sql | grep -v "USAGE ON" > u_db
150135
cat u_db | awk -F "'" '{ print $2, $4 }' | sort | uniq > uni_u_db
151-
sed -i "s/$user_prefix //g" user_password_db
136+
sed -i "/$new_user /d" user_password_db
152137
# Get database list
153138
db_list=$(grep -m 1 Database: mysql/*.create | awk '{ print $5 }')
139+
# Fix mysql 8 to mariadb problems here:
140+
sed -i "s/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g" mysql/*
154141
mysql -e "SHOW DATABASES" > server_dbs
155142
for db in $db_list; do
156-
grep -w db server_dbs
143+
grep -w $db server_dbs
157144
if [ $? == "1" ]; then
158145
echo " Create and restore ${db} "
159146
mysql < mysql/${db}.create
160-
sed -i "s/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g" mysql/${db}.sql
161147
mysql ${db} < mysql/${db}.sql
162148
else
163149
echo "Error: Cant restore database $db alredy exists in mysql server"
@@ -173,7 +159,7 @@ cat uni_u_db | while read db userdb; do
173159
# if you use default user in your config files to connect with database
174160
# you will need remove && [ "$userdb" != "$sk_cp_user" ] to restore main user, but
175161
# this will cause database duplication in db.conf and will interfer with hestiacp backups
176-
if [ "$userdb" == "$user" ] && [ "$userdb" != "$new_user" ] && [ "$userdb" != "$sk_real_cp_user" ]; then
162+
if [ "$userdb" == "$user" ] && [ "$userdb" != "$new_user" ]; then
177163
echo "DB='$db' DBUSER='$userdb' MD5='$end_user_pass' HOST='localhost' TYPE='mysql' CHARSET='UTF8' U_DISK='0' SUSPENDED='no' TIME='$time' DATE='$data'" >> /usr/local/hestia/data/users/$new_user/db.conf
178164
fi
179165
done
@@ -192,11 +178,12 @@ echo "Converting addons domains, subdomains and some other fun"
192178
cp sds hst_sds
193179
cp sds2 hst_sds2
194180
sed -i 's/_/./g' hst_sds
195-
cat addons | while read ddon_domain addon_sub; do
181+
cat addons | while read addon_domain addon_sub; do
196182
echo "Converting default subdomain: $addon_sub in domain: $addon_domain"
197183
sed -i -e "s/$addon_sub/$addon_domain/g" hst_sds
198184
sed -i -e "s/$addon_sub/$addon_domain/g" hst_sds2
199185
mv userdata/$addon_sub userdata/${addon_domain}
186+
mv apache_tls/$addon_sub apache_tls/${addon_domain}
200187
done
201188
sed -i 's/public_html/public@html/g; s/_/./g; s/public@html/public_html/g; s/=/ /g' hst_sds2
202189

@@ -285,6 +272,46 @@ else
285272
tput sgr0
286273
fi
287274

275+
# Parked domains
276+
if [ -s pds ]; then
277+
cat pds | while read parked
278+
do
279+
echo "Procesing parked domain: $parked"
280+
parkedfor=$(cat userdata/cache.json | jq --arg domain "$parked" '.[$domain][3]' |sed 's/"//g')
281+
$BIN/v-add-web-domain-alias $new_user $parkedfor $parked
282+
done
283+
else
284+
285+
echo "No parked domains found"
286+
287+
fi
288+
289+
# Try SSL
290+
tput setaf 1
291+
echo "Copy SSL files"
292+
tput sgr0
293+
for ssl_domain in apache_tls/*
294+
do
295+
domain=$(echo $ssl_domain | awk -F '/' '{ print $2 }')
296+
mkdir -p apache_tls/ssl/$domain
297+
awk -v RS="-----BEGIN CERTIFICATE-----" -v ssl_domain="$domain" '
298+
NR==1 {
299+
cert_file = "apache_tls/ssl/" ssl_domain "/" ssl_domain ".key";
300+
print $0 > cert_file;
301+
}
302+
NR==2 {
303+
block_count++;
304+
cert_file = "apache_tls/ssl/" ssl_domain "/" ssl_domain ".crt";
305+
print "-----BEGIN CERTIFICATE-----" $0 > cert_file;
306+
}
307+
NR>2 {
308+
block_count++;
309+
cert_file = "apache_tls/ssl/" ssl_domain "/" ssl_domain ".ca";
310+
print "-----BEGIN CERTIFICATE-----" $0 > cert_file;
311+
} ' $ssl_domain
312+
$BIN/v-add-web-domain-ssl $new_user $domain apache_tls/ssl/${domain}/
313+
done
314+
288315
##################
289316
# mail
290317
tput setaf 2
@@ -297,6 +324,13 @@ for folder in *; do
297324
if [ -d "$folder" ]; then
298325
if [[ "$folder" != "cur" && "$folder" != "new" && "$folder" != "tmp" ]]; then
299326
echo "Domain: $folder"
327+
# This is needed as parked domains have emails but not added
328+
if ! $BIN/v-list-mail-domains $new_user plain | awk '{ print $1 }' |grep "^${folder}$"; then
329+
tput setaf 3
330+
echo "Found Parked domain $folder not added in hestia mail, adding..."
331+
tput sgr0
332+
$BIN/v-add-mail-domain $new_user $folder
333+
fi
300334
cd $folder
301335

302336
mail_account_count=$(find . -maxdepth 1 -mindepth 1 -type d \( ! -name cur ! -name new ! -name tmp \) | wc -l)
@@ -384,10 +418,8 @@ tput setaf 2
384418
echo ""
385419
echo "Start Restoring Cron Jobs for user $new_user"
386420
tput sgr0
387-
388421
CRON_DIR="$main_dir/cron"
389422
cd "$CRON_DIR"
390-
391423
CRON_FILE="${new_user}"
392424
if [ -f "$CRON_FILE" ] && [ -s "$CRON_FILE" ]; then
393425
while IFS= read -r cron_job || [ -n "$cron_job" ]; do
@@ -399,7 +431,34 @@ if [ -f "$CRON_FILE" ] && [ -s "$CRON_FILE" ]; then
399431
month=$(echo "$cron_job" | awk '{print $4}')
400432
dow=$(echo "$cron_job" | awk '{print $5}')
401433
cmd=$(echo "$cron_job" | awk '{for (i=6; i<=NF; i++) printf $i " "; print ""}')
402-
434+
#This try fix PHP crons converting cpanel paths to hestia paths
435+
if [[ $cmd =~ "ea-php" ]]; then
436+
EAPHP=$(echo $cmd | awk '{ print $1 }')
437+
# /opt/cpanel/ea-php70/root/bin/php
438+
# /usr/local/bin/ea-php70
439+
# default hestia /usr/bin/php
440+
DEFAULT_PHP="/usr/bin/php"
441+
vPHP="ea-php71 ea-php72 ea-php73 ea-php74 ea-php80 ea-php81 ea-php82 ea-php83"
442+
EAOPT="opt/cpanel/ea-php"
443+
EABIN="usr/local/bin/ea"
444+
if [[ $EAPHP =~ $EAOPT ]]; then
445+
EAVERSION=$( echo $EAPHP |awk -F '/' '{ print $4}')
446+
elif [[ $EAPHP =~ $EABIN ]]; then
447+
EAVERSION=$( echo $EAPHP |awk -F '/' '{ print $5}')
448+
else
449+
echo "Diferent EA Path"
450+
fi
451+
vPHP=$(echo $EAVERSION | sed "s/ea-php//")
452+
N1=${vPHP:0:1}
453+
N2=${vPHP:1:1}
454+
vPHP=$(echo /usr/bin/php${N1}.${N2})
455+
456+
if [ -e $vPHP ]; then
457+
cmd=$(echo $cmd | sed "s#$EAPHP#$vPHP#")
458+
else
459+
cmd=$(echo $cmd | sed "s#$EAPHP#$DEFAULT_PHP#")
460+
fi
461+
fi
403462
$BIN/v-add-cron-job $new_user "$min" "$hour" "$day" "$month" "$dow" "$cmd"
404463
done < "$CRON_FILE"
405464
echo "Cron jobs restored for user $new_user."

0 commit comments

Comments
 (0)