%PDF- %PDF-
| Direktori : /proc/self/root/proc/self/root/proc/10578/root/opt/webdir/bin/menu/06_site/ |
| Current File : //proc/self/root/proc/self/root/proc/10578/root/opt/webdir/bin/menu/06_site/01_create.sh |
#!/bin/bash
# manage sites and site's options
#set -x
PROGNAME=$(basename $0)
PROGPATH=$(dirname $0)
[[ -z $DEBUG ]] && DEBUG=0
. $PROGPATH/functions.sh || exit 1
logo=$(get_logo)
# get kernel options
# SITE_DB
# SITE_ROOT
# SITE_CHARSET
# SITE_PASSWORD
# SITE_CRON
get_kernel_options() {
local site_name=${1}
# site charset
SITE_CHARSET="utf-8"
print_message "$CS0013" "" \
"" site_charset "$SITE_CHARSET"
SITE_CHARSET=$(echo "$SITE_CHARSET" | awk '{print tolower($0)}')
if [[ ( "$SITE_CHARSET" != "utf-8" ) && ( "$SITE_CHARSET" != "windows-1251" ) ]]; then
print_message "$CS0100" "$CS0200" "" any_key
return 1
fi
if [[ $PUSH_SERVERS_CNT -gt 0 ]]; then
CONF_PUSH=y
push_server=$(echo "$PUSH_SERVERS" | \
grep NodeJS-PushServer | awk -F':' '{print $2}')
print_message "$CS0015" "$(get_text "$CS0014" "$push_server")" \
"" CONF_PUSH "$CONF_PUSH"
CONF_PUSH=$(echo "$CONF_PUSH" | awk '{print tolower($0)}')
if [[ ( "$CONF_PUSH" != "y" ) && ( "$CONF_PUSH" != "n" ) ]]; then
print_message "$CS0100" "$CS0201" "" any_key
return 1
fi
fi
# site cron usage, enable or disable
SITE_CRON="n"
print_message "$CS0016" "$CS0017\n$CS0018" \
"" SITE_CRON "$SITE_CRON"
SITE_CRON=$(echo "$SITE_CRON" | awk '{print tolower($0)}')
if [[ ( "$SITE_CRON" != "y" ) && ( "$SITE_CRON" != "n" ) ]]; then
print_message "$CS0100" "$CS0201" "" any_key
return 1
fi
# auto options
SITE_ROOT= # path to document root
SITE_DB= # database name
SITE_USER= # database user
SITE_PASSWORD= # database password
manual_input=N
print_message "$CS0020" "$CS0019" \
"" manual_input "$manual_input"
if [[ $(echo "$manual_input" | grep -wci "y") -gt 0 ]]; then
local site_short=$(echo "$site_name" | awk -F'.' '{print $1}')
SITE_ROOT=/home/bitrix/ext_www/$site_name
SITE_DB=db"$site_short"
SITE_USER=user"$site_short"
# we dont't test empty string, because there is deafult value for this options
print_message "$(get_text "$CS0021" "$SITE_ROOT")" "" "" SITE_ROOT "$SITE_ROOT"
print_message "$(get_text "$CS0022" "$SITE_DB")" "" "" SITE_DB "$SITE_DB"
print_message "$(get_text "$CS0023" "$SITE_USER")" "" "" SITE_USER "$SITE_USER"
# test user name
if [[ $(echo "$SITE_USER" | grep -wci "root") -gt 0 ]]; then
print_message "$CS0100" "$CS0202" "" any_key
return 1
fi
# password info
ask_password_info "$SITE_USER" SITE_PASSWORD
[[ $? -gt 0 ]] && return 1
fi
if [[ -n "$SITE_PASSWORD" ]]; then
SITE_PASSWORD_FILE=$(mktemp $CACHE_DIR/.siteXXXXXXXX)
echo "$SITE_PASSWORD" > $SITE_PASSWORD_FILE
fi
if [[ $DEBUG -gt 0 ]]; then
if [[ -n $SITE_ROOT ]]; then
echo "SITE_ROOT: $SITE_ROOT"
echo "SITE_DB: $SITE_DB"
echo "SITE_USER: $SITE_USER"
[[ -f $SITE_PASSWORD_FILE ]] && \
echo "SITE_PASSWORD_FILE: $SITE_PASSWORD_FILE"
echo "SITE_PASSWORD: $SITE_PASSWORD"
fi
echo "SITE_CHARSET: $site_charset"
echo "SITE_CRON: $SITE_CRON"
echo "CONF_PUSH: $CONF_PUSH"
fi
return 0
}
# kernel site
create_site_kernel() {
local site_name=$1
create_site_mark=N
create_site_exe=
create_site_limit=3
create_site_try=1
until [[ "$create_site_mark" == "Y" ]]; do
if [[ $create_site_try -gt $create_site_limit ]]; then
print_message "$CS0101" "$CS0203" "" any_key
exit
fi
create_site_try=$(($create_site_try+1))
get_kernel_options "$site_name"
[[ $? -gt 0 ]] && continue
create_site_exe=$bx_sites_script" -a create -s $site_name"
create_site_exe=$create_site_exe" -t kernel --charset $site_charset"
if [[ "$SITE_CRON" == "y" ]]; then
create_site_exe=$create_site_exe" --cron"
fi
if [[ -n "$SITE_ROOT" ]]; then
create_site_exe=$create_site_exe" -d $SITE_DB -u $SITE_USER"
create_site_exe=$create_site_exe" --password_file $SITE_PASSWORD_FILE"
create_site_exe=$create_site_exe" -r $SITE_ROOT"
fi
if [[ ( -n $CONF_PUSH ) && ( $CONF_PUSH == "y" ) ]]; then
create_site_exe=$create_site_exe" --nodejspush"
fi
create_site_mark=Y
done
[[ $DEBUG -gt 0 ]] && echo "$create_site_exe"
exec_pool_task "$create_site_exe" "create kernel-site $site_name"
print_log "create background task=$_task_id for kernel-site=$site_name" $LOGS_FILE
}
# kernel site
external_kernel() {
local site_name=$1
create_site_mark=N
create_site_exe=
create_site_limit=3
create_site_try=1
until [[ "$create_site_mark" == "Y" ]]; do
if [[ $create_site_try -gt $create_site_limit ]]; then
print_message "$CS0101" "$CS0203" "" any_key
exit
fi
create_site_try=$(($create_site_try+1))
get_kernel_options "$site_name"
[[ $? -gt 0 ]] && continue
create_site_exe=$bx_sites_script" -a create -s $site_name"
create_site_exe=$create_site_exe" -t ext_kernel --charset $site_charset"
if [[ "$SITE_CRON" == "y" ]]; then
create_site_exe=$create_site_exe" --cron"
fi
if [[ -n "$SITE_ROOT" ]]; then
create_site_exe=$create_site_exe" -d $SITE_DB -u $SITE_USER"
create_site_exe=$create_site_exe" --password_file $SITE_PASSWORD_FILE"
create_site_exe=$create_site_exe" -r $SITE_ROOT"
fi
create_site_mark=Y
done
[[ $DEBUG -gt 0 ]] && echo "$create_site_exe"
exec_pool_task "$create_site_exe" "create ext_kernel-site $site_name"
print_log "create background task=$_task_id for kernel=$site_name kernel_dir=$site_root" $LOGS_FILE
}
# link site
create_site_link() {
site_name=$1
create_site_mark=N
create_site_exe=
create_site_limit=3
create_site_try=1
until [[ "$create_site_mark" == "Y" ]]; do
kernel_directory=/home/bitrix/www
if [[ $create_site_try -gt $create_site_limit ]]; then
print_message "$CS0101" "$CS0203" "" any_key
exit
fi
print_message "$(get_text "$CS0024" "$kernel_directory")" \
"" "" kernel_directory "$kernel_directory"
# test input options
if [[ -z "$kernel_directory" ]]; then
print_message "$CS0100" "$CS0207" "" any_key
else
# test if directory exist
if [[ ! -d "$kernel_directory" ]]; then
print_message "$CS0100" "$(get_text "$CS0208" "$kernel_directory")" \
"" any_key
else
test_subdirectory=""
for folder in "upload" "bitrix"; do
if [[ ! -d "$kernel_directory/$folder" ]]; then
test_subdirectory=$test_subdirectory"$folder, "
fi
done
test_subdirectory=$(echo $test_subdirectory | sed -e 's/, $//')
# all test done, form exec command
if [[ -n "$test_subdirectory" ]]; then
print_message "$CS0100" \
"$(get_text "$CS0212" "$test_subdirectory" "$kernel_directory")" \
"" any_key
else
# try found kernel name and options
kernel_configs=$(echo "$SITES_LIST_WITH_NUMBER" | grep "$kernel_directory")
if [[ -n $kernel_configs ]]; then
kernel_name=$(echo "$kernel_configs" | awk -F':' '{print $2}')
create_site_exe="$bx_sites_script -a create -s $site_name -t link --kernel_site $kernel_name --kernel_root $kernel_directory"
create_site_mark=Y
else
create_site_exe="$bx_sites_script -a create -s $site_name -t link --kernel_root $kernel_directory"
create_site_mark=Y
fi
fi
fi
fi
create_site_try=$(($create_site_try+1))
done
[[ $DEBUG -gt 0 ]] && echo "$create_site_exe"
exec_pool_task "$create_site_exe" "create link-site $site_name"
print_log "create background task=$_task_id for link=$site_name kernel_dir=$kernel_directory" $LOGS_FILE
}
# create site
# use SITES_LIST_WITH_NUMBER for check if site exist or not
create_site() {
site_name=$1
# test site name
if [[ -z "$site_name" ]]; then
print_message "$CS0101" "$CS0209" "" any_key
return 1
fi
### 1. test if site with defined name exists in list
#echo "$SITES_LIST_WITH_NUMBER"
if [[ $(echo "$SITES_LIST_WITH_NUMBER" | grep -ci ":$site_name:") -gt 0 ]]; then
print_message "$CS0101" \
"$(get_text "$CS0210" "$site_name")" \
"" any_key
return 1
fi
# additional options
site_type="link"
### 2. site type: link, kernel or ext kernel
print_color_text "$CS0007" blue
echo "$CS0008"
echo "$CS0009"
echo "$CS0010"
print_color_text "$CS0011" blue
print_message "$CS0012" "" "" site_type "$site_type"
# process input
# coonvert to lower case string
site_type=$(echo "$site_type" | awk '{print tolower($0)}')
case "$site_type" in
link) create_site_link "$site_name" ;;
kernel) create_site_kernel "$site_name" ;;
ext_kernel) external_kernel "$site_name" ;;
*)
print_message "$CS0101" \
"$(get_text "$CS0211" "$site_type")" "" any_key
;;
esac
}
# print host menu
sub_menu() {
menu_00="$CS0002"
menu_01="$CS0001"
SITE_MENU_SELECT=
until [[ -n "$SITE_MENU_SELECT" ]]; do
menu_logo="$CS0003"
print_menu_header
# test mysql options:
# empty password and empty my.cnf file
# cluster settings
# push server settings
check_site_options
if [[ $? -gt 0 ]]; then
print_message "$CS0101" "" "" any_key
exit
fi
# test backgrounf tasks
get_task_by_type site POOL_SITE_TASK_LOCK POOL_SITE_TASK_INFO
[[ $POOL_SITE_TASK_LOCK -eq 0 ]] && POOL_SITES_KERNEL_COUNT=
print_pool_sites
print_task_by_type site "$POOL_SITE_TASK_LOCK" "$POOL_SITE_TASK_INFO"
if [[ $POOL_SITE_TASK_LOCK -eq 1 ]]; then
menu_list="\n$menu_00"
else
menu_list="\n$menu_01\n$menu_00"
fi
print_menu
if [[ $POOL_SITE_TASK_LOCK -eq 1 ]]; then
print_message "$CS0005" '' '' SITE_MENU_SELECT 0
else
print_message "$CS0006" '' '' SITE_MENU_SELECT
fi
# process selection
case "$SITE_MENU_SELECT" in
"0") exit ;;
*)
test_hostname $SITE_MENU_SELECT
[[ $test_hostname -eq 1 ]] && create_site "$SITE_MENU_SELECT"
;;
esac
SITE_MENU_SELECT=
done
}
sub_menu