| 670 | |
| 671 | Для управления переключением на каждом из серверов установим lighttpd: |
| 672 | |
| 673 | {{{ |
| 674 | $ sudo apt-get install lighttpd |
| 675 | }}} |
| 676 | |
| 677 | На каждом из серверов добавим два cgi-скрипта - один для отображения текущего состояния сервера, другой - для активации/деактивации сервера. Скрипт страницы состояния {{{/var/www/html/cgi-bin/status.sh}}}: |
| 678 | |
| 679 | {{{#!sh |
| 680 | #!/bin/sh |
| 681 | |
| 682 | # Имя сетевого интерфейса с общим адресом |
| 683 | IFNAME="eth2:0" |
| 684 | # Название сервера в заголовке страницы |
| 685 | HEADER="Сервер 1" |
| 686 | |
| 687 | # Генерируем веб-страницу с состоянием и кнопкой "Активировать"/"Деактивировать" |
| 688 | echo "Content-Type: text/html; charset=utf-8" |
| 689 | echo "Cache-Control: no-cache" |
| 690 | echo |
| 691 | echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' |
| 692 | echo "<html>" |
| 693 | echo " <head>" |
| 694 | echo ' <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' |
| 695 | echo " <title>${HEADER}</title>" |
| 696 | echo " </head>" |
| 697 | echo " <body>" |
| 698 | echo " <h1>${HEADER}</h1>" |
| 699 | echo ' <form action="/cgi-bin/onoff.sh">' |
| 700 | if ifconfig -a | grep -q "^${IFNAME} "; then |
| 701 | echo ' <div style="text-align:center; font-size:24pt; color:green;">Активен</div>' |
| 702 | echo ' <div style="text-align:center"><button type="submit" name="action" value="off">Деактивировать</button></div>' |
| 703 | else |
| 704 | echo ' <div style="text-align:center; font-size:24pt; color:#909090;">В резерве</div>' |
| 705 | echo ' <div style="text-align:center"><button type="submit" name="action" value="on">Активировать</button></div>' |
| 706 | fi |
| 707 | echo ' </form>' |
| 708 | echo " </body>" |
| 709 | echo "</html>" |
| 710 | }}} |
| 711 | |
| 712 | где переменные {{{IFNAME}}} и {{{HEADER}}} устанавливаем в соответствии с именем именем сетевого интерфейса каждого сервера и желаемым заголовком соответственно. |
| 713 | |
| 714 | Скрипт активации/деактивации {{{/var/www/html/cgi-bin/onoff.sh}}}: |
| 715 | |
| 716 | {{{#!sh |
| 717 | #!/bin/sh |
| 718 | |
| 719 | IFNAME="eth0:0" |
| 720 | IFADDR="192.168.0.63" |
| 721 | PASSWORD="secret" |
| 722 | |
| 723 | echo "Content-Type: text/html; charset=utf-8" |
| 724 | echo "Cache-Control: no-cache" |
| 725 | echo "Refresh: 5; url=/cgi-bin/status.sh" |
| 726 | echo |
| 727 | echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' |
| 728 | echo "<html>" |
| 729 | echo " <head>" |
| 730 | echo ' <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' |
| 731 | echo " <title>${HEADER}</title>" |
| 732 | echo " </head>" |
| 733 | echo " <body>" |
| 734 | |
| 735 | case ${QUERY_STRING} in |
| 736 | action=on) |
| 737 | echo " <h1>Активируем сервер...</h1>" |
| 738 | sudo /sbin/ifconfig ${IFNAME} ${IFADDR} |
| 739 | sudo /usr/sbin/arping -c3 -W0.2 -PUq -S ${IFADDR} ${IFADDR} |
| 740 | /usr/bin/fs_cli -p${PASSWORD} -x "sofia recover" |
| 741 | ;; |
| 742 | |
| 743 | action=off) |
| 744 | echo " <h1>Деактивируем сервер...</h1>" |
| 745 | sudo /sbin/ifconfig ${IFNAME} down |
| 746 | ;; |
| 747 | |
| 748 | *) |
| 749 | ;; |
| 750 | esac |
| 751 | |
| 752 | echo " </body>" |
| 753 | echo "</html>" |
| 754 | }}} |
| 755 | |
| 756 | аналогично, переменным {{{IFNAME}}} и {{{IFADDR}}} в начале скрипта присваиваем имя сетевого интерфейса и общий адрес, переменной {{{PASSWORD}}} присваиваем пароль доступа к event-socket сервера !FreeSwitch. Так как скрипт содержит пароль, не забудем ограничить права доступа: |
| 757 | |
| 758 | {{{ |
| 759 | $ sudo chown www-data:www-data /var/www/html/cgi-bin/onoff.sh |
| 760 | $ sudo chmod 700 /var/www/html/cgi-bin/onoff.sh |
| 761 | }}} |
| 762 | |
| 763 | Теперь разрешим выполнение команд {{{ifconfig}}} и {{{arping}}} для пользователя www-data, от которого работает процесс lighttpd. Для этого добавляем в файл {{{/etc/sudoers}}} такие строчки: |
| 764 | |
| 765 | {{{ |
| 766 | www-data ALL=(ALL) NOPASSWD:/sbin/ifconfig eth0\:0 * |
| 767 | www-data ALL=(ALL) NOPASSWD:/usr/sbin/arping -c3 -W0.2 -PUq -S * * |
| 768 | }}} |
| 769 | |
| 770 | Разрешим выполнение cgi-скриптов серверами lighttpd: |
| 771 | |
| 772 | {{{ |
| 773 | $ sudo ln -s ../conf-available/10-cgi.conf /etc/lighttpd/conf-enabled/ |
| 774 | }}} |
| 775 | |
| 776 | Теперь создадим HTML-страницу {{{/var/www/html/index.html}}}, на которой будет отображаться два фрейма с состоянием наших серверов: |
| 777 | |
| 778 | {{{#!xml |
| 779 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| 780 | <html xmlns="http://www.w3.org/1999/xhtml"> |
| 781 | <head> |
| 782 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
| 783 | <title>Управление серверами</title> |
| 784 | </head> |
| 785 | <body> |
| 786 | <iframe src="http://192.168.0.61/cgi-bin/status.sh" style="width: 49%; height: 300px;"></iframe> |
| 787 | <iframe src="http://192.168.0.62/cgi-bin/status.sh" style="width: 49%; height: 300px;"></iframe> |
| 788 | </body> |
| 789 | </html> |
| 790 | }}} |
| 791 | |
| 792 | где вместо {{{192.168.0.61}}} и {{{192.168.0.62}}} впишем адреса серверов. |
| 793 | |
| 794 | Выполним рестарт lighttpd: |
| 795 | |
| 796 | {{{ |
| 797 | $ sudo service lighttpd restart |
| 798 | }}} |
| 799 | |
| 800 | Проверим, что получилось, открыв браузером корневую страницу любого из серверов. Мы увидим что-то типа: |
| 801 | |
| 802 | [[Image(pic1.jpg)]] |
| 803 | |
| 804 | Проверим работу cgi-скриптов, нажимая кнопку "Деактивировать"/"Активировать". Нажатие должно приводить к появлению/пропаданию алиаса с общим адресом. Кроме этого, активация должна сопровождаться передачей трех ARP-пакетов для обновления ARP-таблиц сетевых устройств. |