# wget http://downloads.digium.com/pub/asterisk/asterisk-1.4-current.tar.gz
# wget http://downloads.digium.com/pub/libpri/libpri-1.4-current.tar.gz
# wget http://downloads.digium.com/pub/zaptel/zaptel-1.4-current.tar.gz
Последние версии пакетов asterisk, libpri и zaptel вполне могут идти под разными номерами.
И наоборот, при разработке и тестировании, вероятно, вы захотите иметь код самой новой ветви. Чтобы извлечь этот код из SVN, выполните следующую команду:
# svn co http://svn.digium.com/svn/asterisk/branches/1.4 asterisk-1.4 Если исходный код получен в виде файлов выпущенной версии, размещенных на FTP-сервере Digium, перед компиляцией эти файлы необходимо извлечь из архива, о чем рассказывается в следующем разделе.
Извлечение исходного кода из архива
Пакеты, загружаемые с FTP-сервера, являются архивами, в которых содержится исходный код; таким образом, перед компиляцией код требуется извлечь из архива. Если пакеты загружены в другую папку, не /usr/src/, их надо или перенести туда или указать полный путь к ним. Для извлечения исходного кода из архива мы будем использовать GNU-приложение tar. Это простой процесс, который выполняется с помощью следующих команд:
# cd /usr/src/
# tar zxvf zaptel-1.4-current.tar.gz
# tar zxvf libpri-1.4-current.tar.gz
# tar zxvf asterisk-1.4-current.tar.gz
В bash (и других командных оболочках, поддерживающих ее) можно использовать исключительно удобную функцию автозаполнения по нажатию клавиши Tab. Это позволяет вводить лишь часть имени файла, а все остальное система дополняет автоматически. Например, если введено tar zxvf zap<tab>, система дополнит имя файла zaptel сама. Если возможно несколько вариантов подстановки, надо нажать Tab дважды - и будет представлен список имен файлов, подходящих под введенную комбинацию символов.
Выполнение этих команд обеспечит извлечение пакетов и исходного кода из архивов в соответствующие папки. Например, файл asterisk- 1.4-current.tar.gz будет извлечен в папку текущей версии Asterisk, то есть asterisk-1.4.4.
Желательно всегда сохранять исходный код последней рабочей версии пакета на случай необходимости выполнить "откат" при обнаружении очередного дефекта или странностей в поведении, которые не получается сразу разрешить.
Окно выбора компонентов сборки
В Asterisk версии 1.4.0 и связанных с ней пакетах была реализована новая система сборки autoconf. Это немного изменило процесс сборки, но предоставило больше гибкости, позволив выбирать модули, подлежащие сборке. Преимущество состоит в том, что в сборке участвуют только необходимые модули, а не весь исходный код. Вместе с системой сборки была введена новая система выбора на основе меню. Спасибо Расселу Брайанту (Russell Bryant). Эта новая система обеспечивает возможность более детального отбора подлежащих сборке модулей перед компиляцией ПО и избавляет пользователя от необходимости редактировать файлы Makefiles. Поэтому, чтобы не рассказывать, как использовать окно выбора компонентов сборки в каждом разделе "Компиляция.", обсудим это здесь, чтобы, увидев опцию make menuselect, вы знали, что должны делать с окном выбора компонентов сборки.
На рис. 3.1 представлено окно выбора компонентов сборки для программного обеспечения Asterisk. Для других пакетов оно будет прак-
*************************************
Asterisk Module Selection *************************************
Press 'h' for help.
-> l. Applications
# Call Detail Recording
# Channel Drivers
# Codec Translators
# Format Interpreters
# Dlalplan Functions
# PBX Modules
# Resource Modules
# Voicemail Build Options 1Э. Compiler Flags
# Module Embedding
# Core Sound Packages
# Music On Hold File Packages
# Extras Sound Packages
Рис. 3.1. Пример окна выбора компонентов сборки
тически таким же, но с меньшим количеством опций. Перемещение вверх и вниз по списку осуществляется с помощью клавиш со стрелками. Выбор опции меню выполняется по нажатию клавиши Enter или клавиши со стрелкой вправо. Для отмены выбора используется клавиша со стрелкой влево.
Рис. 3.2. Список модулей, подлежащих сборке
На рис. 3.2 показан список возможных приложений диалплана, сборка которых может быть выполнена для их использования в Asterisk. Модули, подлежащие сборке, отмечаются символами [*]. Модуль, сборка которого выполняться не будет, отмечается символами [ ]. Если перед модулем стоят символы XXX, значит, присутствуют не все зависимости пакета, которые являются обязательным условием для сборки данного модуля. На рис. 3.2 мы видим, что сборка модуля app_flash не может быть выполнена из-за отсутствия зависимости Zaptel (то есть модуль Zaptel не был собран и установлен в систему с момента последнего вы- полненения команды ./configure). Если требования по зависимости были удовлетворены в период после последнего выполнения команды . /configure, выполните ее снова и повторно откройте окно выбора компонентов сборки. Теперь модуль должен быть доступным для сборки. Завершив работу с окном выбора компонентов сборки, введите символ x, чтобы сохранить изменения и закрыть окно. Ввод символа q также обеспечит выход из окна выбора компонентов сборки, но при этом изменения не будут сохранены. Если вы внесли изменения и ввели q, ваши изменения будут потеряны!
Компиляция Zaptel
На рис. 3.3 показаны уровни взаимодействия между Asterisk и ядром Linux с точки зрения управления аппаратными средствами. Со стороны Asterisk имеется модуль канала Zapata, chan_zap. Asterisk использует этот интерфейс для обмена информацией с ядром Linux, где загружаются драйверы устройств.
Интерфейс Zaptel - это загружаемый модуль ядра, представляющий абстрактный уровень между аппаратными драйверами и модулем Zapata в Asterisk. Именно такая концепция позволяет изменять драйверы устройств без внесения изменения в исходный код Asterisk. Драйверы устройств используются для непосредственной связи с оборудованием и для передачи информации между Zaptel и аппаратными средствами.
Хотя Asterisk может компилироваться на разных платформах, драйверы Zaptel специализированы для конкретных дистрибутивов Linux, они создаются для взаимодействия непосредственно с ядром Linux. Существует проект (http:// www.solarisvoip.com), обеспечивающий поддержку Zaptel для Solaris. Также есть проект разработки драйверов Zapata для BSD. Его можно найти по адресу http://www.voip-info. org/tiki-index.php?page=FreeBSD+zaptel.
Рис. 3.3. Уровни взаимодействия устройств с Asterisk
Начнем наше обсуждение с драйвера ztdummy, который используется в системах, нуждающихся в интерфейсе синхронизации, но не имеющих соответствующего оборудования. Затем перейдем к компиляции и установке драйверов. (Конфигурация драйверов Zaptel будет обсуждаться в следующей главе.)
Перед компиляцией драйверов Zaptel в системе, выполняющей ядро Linux 2.4, необходимо убедиться в наличии в папке /usr/src/ символической ссылки linux-2.4, указывающей на исходный код используемого ядра. Если символической ссылки нет, ее можно создать с помощью следующей команды (предполагая, что исходный код размещен в папке /usr/src/): # ln -s /usr/src/'uname -r' /usr/src/linux-2.4 Обычно, если на компьютере выполняется один из дистрибутивов на базе ядра Linux 2.6, символическая ссылка не требуется, поскольку эти дистрибутивы осуществляют поиск папки сборки ядра автоматически. Однако, если папка сборки помещена в нестандартное место (то есть не в папку /lib/modules/ <версия ядра>/build/), потребуется использовать символическую ссылку.
Хотя Asterisk и сопутствующие пакеты выполняются на ядрах Linux 2.4.x, их разработка ведется прежде всего на ядрах 2.6.x, и нет никакой гарантии, что ядра 2.4.x будут поддерживаться в будущем.
Драйвер ztdummy
Определенные приложения и функции Asterisk для работы требуют наличия устройства синхронизации (Asterisk даже не скомпилирует их, если не найдет такое устройство). Все PCI-устройства производства Digium обеспечивают интерфейс синхронизации с частотой 1 кГц, что соответствует этому требованию. Если необходимых для обеспечения синхронизации PCI-устройств нет, в качестве устройства синхронизации может использоваться драйвер ztdummy. В дистрибутивах на базе ядра Linux 2.4 ztdummy должен использовать синхронизирующие сигналы, обеспечиваемые контроллером UHCI USB.
Многие более старые (и некоторые новые) системы используют чип контроллера OHCI USB, несовместимый с ztdummy. Однако, если используется ядро 2.6, неважно, какой чип контроллера USB применяется в системе.
Драйвер проверяет, загружен ли модуль usb-uhci и не является ли версия ядра ниже 2.4.5. Более старые версии ядра несовместимы с ztdummy. В дистрибутиве на базе ядра 2.6 ztdummy не требует применения USB- контроллера. (Теперь ядро версии 2.6.0 генерирует синхронизирующие сигналы частотой 1 кГц, которые драйвер может использовать для согласования; таким образом, аппаратный USB-контроллер больше не нужен.)
Драйверы телефонии Zapata
Компиляция драйверов телефонии Zapata для использования с оборудованием Digium проста; однако из-за различия сред сборки в версиях 1.2 и 1.4 для этого применяются немного разные методы. Сначала необходимо выполнить команду . /configu re, чтобы определить, какие приложения и библиотеки установлены в системе. Это позволит гарантировать наличие всего необходимого для сборки Zaptel. Выполнение следующих команд обеспечит сборку Zaptel и его модулей:
# cd /usr/src/zaptel-version
# make clean
# ./configure
# make menuselect
# make
# make install
Команда make clean не всегда является обязательной, но лучше выполнять ее перед повторной компиляцией любых модулей, поскольку она удалит скомпилированные двоичные файлы из папки исходного кода. Также ее можно использовать для очистки после установки, чтобы избавиться от двоичных файлов. Обратите внимание, что выполнение данной команды обеспечит удаление двоичных файлов только из папки исходного кода, не из системы.
Кроме исполняемых файлов, make clean удаляет также промежуточные файлы (то есть объектные файлы) после компиляции. Они не нужны и только занимают место на жестком дис-В системе, в которой используются папки /etc/rc.d/init.d/ или /etc/ init.d/ (это такие системы, как CentOS и другие дистрибутивы на базе Red Hat), можно выполнить также команду make config. Это обеспечит установку сценариев запуска и конфигурирование системы. С помощью команды chkconfig задается автоматическая загрузка модуля zaptel при запуске:
# make config
Эквивалент команды chkconfig в Debian - update-rc.d. Хотя Digium официально поддерживает только Zaptel для Linux, следует упомянуть несколько проектов по переносу Zaptel на другие платформы:
Solaris (http://www.solarisvoip.com).BSD (http://lists.digium.com/mailman/listinfo/asterisk-bsd).
Использование ztcfg и zttool
Вместе с Zaptel устанавливаются еще две программы, ztcfg и zttool. Программа ztcfg считывает данные из папки /etc/zaptel.conf для конфигурации аппаратных средств. Программа zttool поможет проверить статус установленного оборудования. Например, если используется плата T1 и между конечными точками не установлена связь, пользователь увидит красный предупреждающий сигнал. Если все конфигурировано правильно и связь возможна, будет выведено сообщение "ОК". Приложение zttool также полезно для аналоговых плат, потому что сообщает об их текущем состоянии ^конфигурирована, с подключенной линией и т. д.). Использование этих программ будет подробно рассмотрено в следующей главе.
Компиляция zttool невозможна, если не установлены библиотеки libnewt и их пакеты для разработки (newt-devel в дистрибутивах на базе Red Hat).
Приложения ztcfg и zttool и другие полезные утилиты располагаются в разделе Utilities (Утилиты) окна выбора компонентов сборки Zaptel.
Компиляция libpri
Для библиотек libpri не используется программа autoconf для настройки среды сборки или окно выбора компонентов сборки, поскольку они не нужны; таким образом, установка упрощается. libpri применяется различными производителями аппаратных средств мультиплексирования с разделением по времени (Time Division Multiplexing, TDM), но даже если такое оборудование не установлено, эту библиотеку можно компилировать и устанавливать. libpri должна быть скомпилирована и установлена перед установкой Asterisk, поскольку она используется при его компиляции. Вот необходимые команды (вместо версия необходимо указать используемую версию libpri):
# cd /usr/src/libpri-версия
# make clean
# make
# make install
Компиляция Asterisk
После компиляции и установки пакетов zaptel и libpri (если они нужны), можно переходить к установке Asterisk. В этом разделе рассматривается стандартная установка и представлены некоторые альтернативные аргументы make, которые могут пригодиться.
Стандартная установка
Компиляция Asterisk выполняется с помощью компилятора gcc посредством использования GNU-программы make. Чтобы начать компиляцию Asterisk, просто выполните следующие команды (вместо версия необходимо указать используемую версию Asterisk).
# cd /usr/src/asterisk-версия
# make clean
# ./configure
# make menuselect
# make install
# make samples
Помните, что время компиляции в разных системах может быть различным. На процессорах современного поколения это не должно занять более пяти минут. На сайте AstriCon (http://www.astricon.net) есть сообщение об успешной компиляции Asterisk на процессоре Pentium с частотой 133 МГц, но это заняло около пяти часов. Считайте сами. Выполнение команды make samples обеспечивает установку стандартных конфигурационных файлов. Ее использование (вместо конфигурации каждого файла вручную) позволит намного быстрее установить и подготовить систему Asterisk к работе. Многие значения по умолчанию нет необходимости изменять, они обеспечивают нормальную работу Asterisk. Файлы, требующие редактирования, будут рассмотрены в следующих главах.
Если в папке /etc/asterisk/ уже есть конфигурационные файлы, при выполнении команды make samples к имени каждого из них будет добавлено в конце расширение .old, например, файл extensions.conf будет переименован в extensions.conf.old. Однако будьте осторожны, потому что повторное выполнение команды make samples приведет к перезаписи исходных конфигурационных файлов!
Образцы конфигурационных файлов также можно найти в под- папке configs/ папки Asterisk sources.
Для систем, которые используют папки /etc/rc.d/init.d/ или /etc/init.d/, также желательно выполнить команду make config. Это обеспечит установку сценариев запуска и конфигурацию системы (с помощью команды chkconfig) для автоматического выполнения Asterisk при запуске: # make config
Альтернативные аргументы make
Существует еще несколько дополнительных аргументов make, которые могут передаваться во время компиляции. Некоторые из них обсуждаются здесь, но остальные используются внутри файла и на самом деле не имеют никакого значения или практической пользы для конечного пользователя. (Конечно, могут быть введены новые функции, поэтому не забывайте просматривать Makefile.) Давайте рассмотрим некоторые полезные аргументы make.
make clean
Команда make clean используется для удаления скомпилированных двоичных файлов из папки исходного кода. Эта команда должна выполняться перед повторной компиляцией или если требуется удалить некоторые файлы в случае недостатка места на жестком диске.
make distclean
Команда make distclean используется для удаления скомпилированных двоичных файлов и для приведения папки исходного кода в начальное состояние, в каком она была после извлечения из архива.
make update
Команда make update используется для замены существующего кода на обновленный код с SVN-сервера Digium. Если исходный код был загружен с FTP-сервера, будет получено уведомление об этом.
make webvmail
Сценарий Asterisk Web Voicemail используется для предоставления графического интерфейса, предназначенного для управления учетной записью голосовой почты, что позволяет взаимодействовать с голосовой почтой удаленно с веб-броузера.
При выполнении команды make webvmail в папку cgi-bin/ вашего HTTP- сервера будет помещен сценарий Asterisk Web Voicemail. Если имеются специальные политики безопасности, необходимо учитывать, что эта программа использует сценарий на Perl setuid root. Установка будет выполнена только в CentOS или Fedora, поскольку в других дистрибутивах путь к папкам cgi-bin/ может быть иным. (Конечно, это можно изменить. На момент написания данной книги для этого необходимо было отредактировать переменную HTTP CFGDIR в строке 133
Makefile.)
make progdocs
По команде make progdocs с помощью программы doxygen из комментариев, внесенных в исходный код разработчиком, будет создана документация. Чтобы это было возможным, в системе должна быть установлена соответствующая программа doxygen. Заметьте, doxygen предполагает, что исходный код хорошо документирован, а это, к сожалению, не всегда так, хотя за последнюю пару лет было опубликовано очень много материалов по этому вопросу! Информация, содержащаяся в системе doxygen, будет полезна только разработчикам.
make config
По команде make config в папки /etc/rc.d/init.d или /etc/init.d, если таковые будут обнаружены, устанавливаются сценарии запуска в стиле дистрибутива Red Hat. Если эти папки существуют, сценарии устанавливаются с правами доступа к файлам 755. Если сценарий определяет, что папка /etc/rc.d/init.d/ существует, выполняется также команда chkconfig --add asterisk, по которой Asterisk будет добавлена в список автозагрузки. Однако в дистрибутивах, использующих только папку /etc/init.d/, этого сделано не будет. Выполнение команды make config никак не повлияет на уже запущенный процесс Asterisk, но запустит его, если он еще не выполняется.
В настоящее время этот сценарий полезен только в системе на базе Red Hat, хотя в папке ./contrib./init.d/ папки исходного кода Asterisk можно найти сценарии запуска и для других дистрибутивов (таких, как Gentoo, Mandrake и Slackware).