improved rebuilds

This commit is contained in:
Serghey Rodin 2012-04-05 17:19:59 +03:00
commit 4b44937540
9 changed files with 370 additions and 27 deletions

View file

@ -54,12 +54,7 @@ package_data=$(cat $VESTA/data/packages/$package.pkg)
# Checking shell
shell_conf=$(echo "$package_data" | grep 'SHELL' | cut -f 2 -d \')
case $shell_conf in
nologin) shell='/sbin/nologin' ;;
bash) shell='/bin/bash' ;;
sh) shell='/bin/bash' ;;
*) shell='/sbin/nologin' ;;
esac
shell=$(/usr/bin/chsh --list-shells | grep -w "$shell_conf" |head -n1)
# Adding user
/usr/sbin/adduser "$user" -s "$shell" -c "$email" -m -d "$HOMEDIR/$user"
@ -143,13 +138,13 @@ if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
chmod 770 $USER_DATA/mail
touch $USER_DATA/mail.conf
chmod 660 $USER_DATA/mail.conf
echo "v_upd_mail_domains_disk $user" >> $VESTA/data/queue/disk.pipe
echo "v_update_mail_domains_disk $user" >> $VESTA/data/queue/disk.pipe
fi
if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
touch $USER_DATA/db.conf
chmod 660 $USER_DATA/db.conf
echo "v_update_db_bases_disk $user" >> $VESTA/data/queue/disk.pipe
echo "v_update_databases_disk $user" >> $VESTA/data/queue/disk.pipe
fi
if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then

View file

@ -43,7 +43,6 @@ is_object_value_exist 'web' 'DOMAIN' "$domain" '$STATS'
stats_dir="$HOMEDIR/$user/web/$domain/stats"
# Adding htaccess file
rm -f $stats_dir/.htaccess
echo "AuthUserFile $stats_dir/.htpasswd
AuthName \"Web Statistics\"
AuthType Basic

View file

@ -77,7 +77,7 @@ conf=$VESTA/data/ips/*
fields="\$IP \$OWNER \$STATUS \$NAME \$U_SYS_USERS \$U_WEB_DOMAINS"
fields="$fields \$INTERFACE \$NETMASK \$DATE"
# Listing domains
# Listing ip addresses
case $format in
json) json_list_ips ;;
plain) nohead=1; shell_list_ips ;;

53
bin/v_rebuild_databases Executable file
View file

@ -0,0 +1,53 @@
#!/bin/bash
# info: rebuild databases
# options: user
#
# The function for rebuilding of all databases of a single user.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument defenition
user=$1
# Includes
source $VESTA/conf/vesta.conf
source $VESTA/func/shared.sh
source $VESTA/func/db.sh
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '1' "$#" 'user'
validate_format 'user'
is_system_enabled "$DB_SYSTEM"
is_object_valid 'user' 'USER' "$user"
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Starting rebuild loop
for database in $(search_objects 'db' 'SUSPENDED' "no" 'DB'); do
get_database_values
# Switching on db type
case $TYPE in
mysql) rebuild_mysql_database ;;
pgsql) rebuild_pgsql_database ;;
esac
done
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging
log_event "$OK" "$EVENT"
exit

169
bin/v_rebuild_user Executable file
View file

@ -0,0 +1,169 @@
#!/bin/bash
# info: rebuild system user
# options: user [full]
#
# The function rebuilds system user account.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument defenition
user=$1
full=${2-no}
# Includes
source $VESTA/conf/vesta.conf
source $VESTA/func/shared.sh
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '1' "$#" 'user [full]'
validate_format 'user' 'full'
is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user"
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Get user variables
source $USER_DATA/user.conf
# Rebuild user
shell=$(/usr/bin/chsh --list-shells | grep -w "$SHELL" |head -n1)
/usr/sbin/adduser "$user" -s "$shell" -c "$CONTACT" -m -d "$HOMEDIR/$user" \
&>/dev/null
# Change password
#/usr/sbin/usermod -p $MD5 $user
shadow=/tmp/shadow
shdw=$(grep ^$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 "/^$user:*/d" $shadow
echo "$user:$MD5:$shdw3:$shdw4:$shdw5:$shdw6:$shdw7:$shdw8:$shdw9" >> $shadow
chmod u-w $shadow
# Change shell
/usr/bin/chsh -s "$shell" "$user" &>/dev/null
# Building directory tree
mkdir -p $HOMEDIR/$user
chmod -R a+x $HOMEDIR/$user
mkdir -p $HOMEDIR/$user/conf
chown $user:$user $HOMEDIR/$user/conf
if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
mkdir -p $HOMEDIR/$user/conf/web
mkdir -p $HOMEDIR/$user/web
mkdir -p $HOMEDIR/$user/tmp
chmod 751 $HOMEDIR/$user/conf/web
chmod 751 $HOMEDIR/$user/web
chmod 777 $HOMEDIR/$user/tmp
chown $user:$user $HOMEDIR/$user/web
if [ "$full" = 'yes' ]; then
$BIN/v_rebuild_web_domains $user
fi
fi
if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
mkdir -p $HOMEDIR/$user/conf/mail
mkdir -p $HOMEDIR/$user/mail
chmod 751 $HOMEDIR/$user/mail
chmod 751 $HOMEDIR/$user/conf/mail
if [ "$full" = 'yes' ]; then
$BIN/v_rebuild_mail_domains $user
fi
fi
if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
mkdir -p $HOMEDIR/$user/conf/dns
chmod 751 $HOMEDIR/$user/conf/dns
if [ "$full" = 'yes' ]; then
$BIN/v_rebuild_dns_domains $user
fi
fi
if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
if [ "$full" = 'yes' ]; then
$BIN/v_rebuild_databases $user
fi
fi
if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
if [ "$full" = 'yes' ]; then
$BIN/v_rebuild_cron_jobs $user
fi
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Creating configuration files and pipes
chmod 770 $USER_DATA
touch $USER_DATA/backup.conf
chmod 660 $USER_DATA/backup.conf
touch $USER_DATA/history.log
chmod 660 $USER_DATA/history.log
touch $USER_DATA/stats.log
chmod 660 $USER_DATA/stats.log
sed -i "/ $user$/d" $VESTA/data/queue/disk.pipe
echo "v_update_user_disk $user" >> $VESTA/data/queue/disk.pipe
if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
mkdir -p $USER_DATA/ssl
chmod 770 $USER_DATA/ssl
touch $USER_DATA/web.conf
chmod 660 $USER_DATA/web.conf
if [ "$(grep -w $user $VESTA/data/queue/traffic.pipe)" ]; then
echo "$BIN/v_update_web_domains_traff $user" \
>> $VESTA/data/queue/traffic.pipe
fi
echo "v_update_web_domains_disk $user" >> $VESTA/data/queue/disk.pipe
fi
if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
mkdir -p $USER_DATA/dns
chmod 770 $USER_DATA/dns
touch $USER_DATA/dns.conf
chmod 660 $USER_DATA/dns.conf
fi
if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
mkdir -p $USER_DATA/mail
chmod 770 $USER_DATA/mail
touch $USER_DATA/mail.conf
chmod 660 $USER_DATA/mail.conf
echo "v_update_mail_domains_disk $user" >> $VESTA/data/queue/disk.pipe
fi
if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
touch $USER_DATA/db.conf
chmod 660 $USER_DATA/db.conf
echo "v_update_datbases_disk $user" >> $VESTA/data/queue/disk.pipe
fi
if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
touch $USER_DATA/cron.conf
chmod 660 $USER_DATA/cron.conf
fi
# Logging
log_event "$OK" "$EVENT"
exit

View file

@ -50,9 +50,49 @@ nohead=1
# Starting loop
for domain in $(shell_list) ; do
domain_idn=$(idn -t --quiet -a "$domain")
# 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
if [ ! -e "$HOMEDIR/$user/web/$domain/logs/$domain.log" ]; then
ln -s /var/log/httpd/domains/$domain.error.log \
$HOMEDIR/$user/web/$domain/logs/$domain.log
fi
if [ ! -e "$HOMEDIR/$user/web/$domain/logs/$domain.error.log" ]; then
ln -s /var/log/httpd/domains/$domain.error.log \
$HOMEDIR/$user/web/$domain/logs/$domain.error.log
fi
if [ -e "$WEBTPL/skel/document_errors/" ]; then
cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/
fi
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 -f -R 775 $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'
# Preparing domain values for the template substitution
@ -78,25 +118,41 @@ for domain in $(shell_list) ; do
# 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
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
stats_string="$BIN/v_update_web_domain_stat $user $domain"
check_stats_pipe=$(grep "$stats_string" $V_QUEUE/stats.pipe)
if [ -z "$check_stats_pipe" ]; then
echo "$stats_string" >> $V_QUEUE/stats.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
rm -f $stats_dir/.htpasswd
htpasswd -bc $stats_dir/.htpasswd "$STATS_USER" "$STATS_CRYPT" \
&>/dev/null
fi
fi
# Checking ssl

View file

@ -40,7 +40,7 @@ is_object_unsuspended 'db' 'DB' "$database"
get_database_values
# Switching on db type
case $type in
case $TYPE in
mysql) suspend_mysql_database ;;
pgsql) suspend_pgsql_database ;;
esac

View file

@ -39,7 +39,7 @@ is_object_suspended 'db' 'DB' "$database"
get_database_values
# Switching on db type
case $type in
case $TYPE in
mysql) unsuspend_mysql_database ;;
pgsql) unsuspend_pgsql_database ;;
esac