Apache vHosts Manager (Gentoo)
Скрипт для управления виртуальными хостами Apache'a, основан на dialog.
Настроен на конфигурацию под Gentoo.
Его функционал аналогичен программе a2ensite для Apache, т.е. подключение и отключение конфигурационных файлов виртуальных хостов.
Задача скрипта переименовывать файлы *.conf в *.off и наоборот, тем самым отключая или включая конфиги хостов.
Настройка
Подключение конфигов (в Gentoo по умолчанию)
/etc/apache2/httpd.conf
... Include /etc/apache2/vhosts.d/*.conf
Копируем скрипт в файл и делаем его выполняемым
chmod +x /usr/sbin/apache-vhm
Так же в самом скрипте можно настроить переменные
Листинг
#!/bin/bash ############################################################################### # Настройки ############################################################################### ### !!! Директории слешами НЕ закрывать !!! APACHE_VHOSTS_DIR="/etc/apache2/vhosts.d" # !!! Наличие точки обязательно. Точка экранирована FILEON="\.conf" FILEOFF="\.off" ############################################################################### BACKTITLE=" Apache vHosts Manager " APACHE_BIN="/usr/sbin/apache2" APACHE_OPT=`sed -e '/^[ \t]*APACHE2_OPTS=/!d; s/^[ \t]*APACHE2_OPTS="\(.*\)"/\1/' /etc/conf.d/apache2` APACHE_CMD="/etc/init.d/apache2 reload" # Создание временного файл FILETEMP=`mktemp 2>/dev/null` # Обработка прерываний. Удаление файла. trap "rm -f $FILETEMP" 0 1 2 5 15 ############################################################################### # Функции ############################################################################### ### Функция получения списка для меню function f_list { # Получение списка файлов, проверка, разделение имени от расширения. FILELIST=`ls -l ${APACHE_VHOSTS_DIR} | grep ^- | awk '{print $9}' | sed -e '/\(^.*\)\('${FILEON}'$\|'${FILEOFF}'$\)/!d' | sed -e 's/\(^.*\)\('${FILEON}'$\|'${FILEOFF}'$\)/\1 \2/g'` # Замена расширения, сортировка FILELIST=`echo "${FILELIST}" | sed -e 's/\(^.*\) \('${FILEON}'\)$/\1 ON/g' | sed -e 's/\(^.*\) \('${FILEOFF}'\)$/\1 OFF/g'` # Сортировка FILELIST=`echo "${FILELIST}" | sed -e '/\(^.*\) \(ON\)$/!d' | sort && echo "${FILELIST}" | sed -e '/\(^.*\) \(OFF\)$/!d' | sort` # Проверка на пустоту if [[ "${FILELIST}" == "" ]]; then d_memu_info "::=> Configuration files not found :: ${APACHE_VHOSTS_DIR} \n::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi # Проверка на двойные файлы if [[ `echo "${FILELIST}" | wc -l` != `echo "${FILELIST}" | awk '{print $1}' | sort -u | wc -l` ]]; then d_memu_info "::=> Duplicate files with ON/OFF \n::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi } ### Функция переименования function f_rename () { if [[ `echo "${FILELIST}" | sed -e '/\(^'$1'\) \(ON\)$/!d'` != "" ]]; then # Выключение mv ${APACHE_VHOSTS_DIR}/${1}${FILEON:1} ${APACHE_VHOSTS_DIR}/${1}${FILEOFF:1} if [ $? -ne 0 ]; then d_memu_info "::=> Can not rename :: ${APACHE_VHOSTS_DIR}/${1}${FILEON:1} to ${APACHE_VHOSTS_DIR}/${1}${FILEOFF:1} \n::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi elif [[ `echo "${FILELIST}" | sed -e '/\(^'$1'\) \(OFF\)$/!d'` != "" ]]; then # Включение mv ${APACHE_VHOSTS_DIR}/${1}${FILEOFF:1} ${APACHE_VHOSTS_DIR}/${1}${FILEON:1} if [ $? -ne 0 ]; then d_memu_info "::=> Can not rename ${APACHE_VHOSTS_DIR}/${1}${FILEON:1} to ${APACHE_VHOSTS_DIR}/${1}${FILEOFF:1} \n::=> Critical exit: $BASH_SOURCE line:$LINENO" exit 1 fi else d_memu_info "::=> Critical exit :: $BASH_SOURCE line:$LINENO" exit 1 fi } ### Главное меню function d_menu_main () { f_list dialog --clear \ --backtitle "${BACKTITLE}" \ --title " List of configuration files " \ --ok-label "Edit" --cancel-label "Exit" --defaultno \ --extra-button --extra-label "ON/OFF" \ --menu "${APACHE_VHOSTS_DIR}" 0 0 0 \ ${FILELIST} 2> $FILETEMP RETURN=$? d_actions_menu_main } ### Функции главного меню function d_actions_menu_main { case ${RETURN} in 0) # Ok f_edit `cat $FILETEMP` if [ $? -eq 88 ]; then d_memu_reload fi d_menu_main ;; 1) # Cancel echo "Exit" exit 0 ;; 3) # Extra f_rename `cat $FILETEMP` d_memu_reload d_menu_main ;; 255) # Esc echo "Esc" exit 0 ;; esac } ### Открыть редактор function f_edit () { if [[ `echo "${FILELIST}" | sed -e '/\(^'$1'\) \(ON\)$/!d'` != "" ]]; then $EDITOR ${APACHE_VHOSTS_DIR}/${1}${FILEON:1} return 88 elif [[ `echo "${FILELIST}" | sed -e '/\(^'$1'\) \(OFF\)$/!d'` != "" ]]; then $EDITOR ${APACHE_VHOSTS_DIR}/${1}${FILEOFF:1} else d_memu_info "::=> Critical exit :: $BASH_SOURCE line:$LINENO" exit 1 fi } ### Меню restart function d_memu_reload () { dialog --clear \ --backtitle "${BACKTITLE}" \ --defaultno \ --yesno "Reload Apache2?" 0 0 RETURN=$? d_actions_menu_reload } ### Функции меню reload function d_actions_menu_reload { case ${RETURN} in 0) # Ok APACHE_MSG=`2>&1 ${APACHE_BIN} ${APACHE_OPT} -t && ${APACHE_CMD}` d_memu_info "${APACHE_MSG}" ;; esac } ### Меню info function d_memu_info () { dialog --backtitle "${BACKTITLE}" \ --msgbox "$1" 30 150 } ############################################################################### # Сценарий ############################################################################### if [ "$UID" -ne 0 ]; then d_memu_info "::=> Requires root privileges \n::=> Critical exit :: $BASH_SOURCE line:$LINENO" exit 1 fi if [ ! -d ${APACHE_VHOSTS_DIR} ]; then d_memu_info "::=> Directory does not exist :: ${APACHE_VHOSTS_DIR} \n::=> Critical exit :: $BASH_SOURCE line:$LINENO" exit 1 fi d_menu_main exit 0
Обсуждение