Установка Asterisk 11 и Asterisk 10 на Debian squeeze в контейнер squeeze или wheezy

Установка Asterisk 11 и Asterisk 10 на Debian squeeze в контейнер squeeze или wheezy

By Andriy Ivashchenko
Posted on ai.kh.ua: Dec 2, 2012
http://ai.kh.ua/articles/003.html
Updated: Aug 23, 2013

Disclaimer.
1. Новое и важное в Asterisk 11 и Asterisk 10.
2. Сборка пакетов .deb для squeeze без backports
3. Сборка пакетов .deb версии Asterisk 11.5.0 для wheezy
* Почему предпочтительнее wheezy.
* Сборка с помощью live_ast.

Disclaimer.

Автор ни при каких обстоятельствах не несет ответственности за ущерб, явившийся результатом прямого или косвенного использования данной статьи. Информация предоставляется исключительно в ознакомительных целях.

1. Новое и важное в Asterisk 11 и Asterisk 10.

В одной из статей приводился пример сборки Asterisk 1.8 в среде squeeze. Важно понимать, что на момент написания обоих статей этот релиз Debian представлял собой стабильную ветку. Если эта информация на ваш взгляд устарела, то на вопрос какая версия Asterisk актуальна в проекте Debian вы всегда сможете узнать по ссылке http://packages.debian.org/asterisk.

Релиз Asterisk 1.8 принес пользователям немало интересного и полезного. Нет нужды перечислять все изменения, потому что об этом много пишут в Интернете. Но хотелось бы выделить несколько фишек:
- здорово перелопаченный канал chan_dahdi
- SRTP
- поддержка Google Talk и Google Voice
- улучшенная работа факсов в протоколе T.38 endpoint

Возможно, уже ради двух последних фишек пошло движение в сторону 1.8

Это неплохо. Всегда хочется заглянуть дальше. Когда сообщество ждало v1.10, фирма Digium удивила, назвав свой продукт Asterisk 10.

Хочется выделить следующие очень важные особенности Asterisk 11 и Asterisk 10:

Для тех, кто больше хотел бы узнать об нововведения в Asterisk 11 и Asterisk 10 нужно идти прямиком сюда https://wiki.asterisk.org/wiki/display/AST/Asterisk+10+Documentation

2. Сборка пакетов .deb для squeeze без backports

Практика показала, что компиляция и пакетирование версий 10 и 11 дает хорошие результаты в контейнере squeeze. В интернете множество статей, в которых при этом пересобираются libpri, dahdi. Здесь мы этого делать не будем. Одна из причин: в squeeze версии этих библиотек вполне приемлемы и нормально работают.

Рассмотрим самые простые методы сборки на основе подготовленных заранее конфигов для debhelper.

UPD20130301: Для сборки Asterisk 10.12.1 архив ast-10.12.1-squeeze-debian-src-20130222.tar.gz
Для сборки Asterisk 11.2.1 архив ast-11.2.1-squeeze-debian-src-20130127.tar.gz

Далее простейшая пошаговая инструкция по сборке Asterisk 10 и следом 11, даже думать особо не придется. На выходе вы будете иметь готовые .deb обоих версий

Установим пакет debootstrap
# apt-get install debootstrap

Загрузим контейнер squeezeт в /opt/
# debootstrap squeeze /opt/squeeze http://ftp.de.debian.org/debian/

Загрузим файлы ast-10.12.1-squeeze-debian-src-20130222.tar.gz 
и ast-11.2.1-squeeze-debian-src-20130127.tar.gz в контейнер
# cp ast-10.12.1-squeeze-debian-src-20130222.tar.gz \
	ast-11.2.1-squeeze-debian-src-20130127.tar.gz /opt/squeeze/opt/

если у вас squeeze в основной системе, то загрузим sources.list
# cat /etc/apt/sources.list > /opt/squeeze/etc/apt/sources.list

Переключимся в контейнер и поехали
# chroot squeeze/

Обновим репозитории
# apt-get update && apt-get build-dep asterisk

Сделаем необходимые для сборки каталоги
# cd /opt/
# mkdir debian
# mkdir debian/tarballs
# mkdir debian/build-area
# mkdir debian/ast-10.12.1
# mkdir debian/ast-11.2.1

Сначала разберемся с 10.12.1
# cd debian/ast-10.12.1

Распакуем скрипты
# tar zxvf /opt/ast-10.12.1-squeeze-debian-src-20130222.tar.gz

Загрузим исходники Asterisk 10 и перепакуем в формат DFSG автоматически
# debian/rules get-orig-source

Перейдем в каталог сборки и распакуем исходник DFSG
# cd ../build-area/
# tar zxvf ../tarballs/asterisk_10.12.1~dfsg.orig.tar.gz
# cd asterisk-10.12.1/

Скопируем скрипты debhelper внутрь исходников
# cp -av ../../ast-10.12.1/debian .

Применим патчи
# dpkg-source --before-build .

проверим чего не хватает для сборки
# dpkg-checkbuilddeps

Оказывается кое-чего таки не хватает, доустановим
# apt-get install libmysqlclient-dev libbluetooth-dev autoconf automake \
        libsqlite3-dev libgmime-2.4-dev libneon27-dev libical-dev libsrtp0-dev

А теперь сама сборка .deb
# debian/rules binary

На выходе имеем готовые .deb файлы в каталоге ../

С таким же успехом собираем Asterisk 11. Разжевывать пошагово нет смысла, потому что все то же самое

cd /opt/debian/ast-11.2.1
tar zxvf /opt/ast-11.2.1-squeeze-debian-src-20130127.tar.gz
debian/rules get-orig-source
cd ../build-area/
tar zxvf ../tarballs/asterisk_11.2.1~dfsg.orig.tar.gz
cd asterisk-11.2.1/
cp -av ../../ast-11.2.1/debian/ .
dpkg-source --before-build .
dpkg-checkbuilddeps
apt-get install libcorosync-dev
debian/rules binary
UPD20130823:
Следующий параграф уже несколько под вопросом, потому что идет переход на git и обратите внимание больше на 3-ю главу

Задача для продвинутых:
Войдите в каталог /opt/debian и загрузите
# svn co svn://anonscm.alioth.debian.org/svn/pkg-voip/asterisk/branches/experimental ast-11-experimental
Смотрим в файлы debian/control debian/changelog, пытаемся разобраться с зависимостями и изучаем debhelper

3. Сборка пакетов .deb версии Asterisk 11.5.0 для wheezy

UPD20130823:

Актуально на дату 20130823. Можно с уверенностью сказать, что pjproject становится очень важным элементом Asterisk 11. Будет ли ему альтернатива покажет время. Первое что нужно сделать это собрать и проинсталлировать pjproject. Итак, заходим в рабочий каталог сборки и колдуем.

# У pkg-voip команды есть прекрасный git. Надеемся он будет становиться только лучше
git clone git://anonscm.debian.org/pkg-voip/pjproject.git

# Теперь заходим туда и ОЯЗАТЕЛЬНО накладываем патчи
cd pjproject
dpkg-source --before-build .
# ОЧЕНЬ ВАНО поставить пакет uuid-dev Потому как его в зависимостях
# может не быть еще, но без него никуда

apt-get install uuid-dev

# ОЯЗАТЕЛЬНО проверяем недостающие для сборки пакеты
dpkg-checkbuilddeps

# Теперь делаем сборку
debian/rules binary

# Выходим на уровень вверх, инсталлируем библиотеку в контейнер. Надо сказать 
# надробил Tzafrir мелких пакетов. Но контейнера-то не жалко.
cd ..
dpkg --install libpj*.deb

# ТОЛЬКО ПОСЛЕ ТОГО КАК pjproject установлен, беремся за Asterisk
git clone git://anonscm.debian.org/pkg-voip/asterisk.git
cd asterisk
# не забываем про патчи
dpkg-source --before-build .

# ОЯЗАТЕЛЬНО проверяем недостающие для сборки пакеты
dpkg-checkbuilddeps

# и собираем
debian/rules binary

#Выходим на уровень выше и разглядываем что получилось 
cd ..
ls

* Почему предпочтительнее wheezy.

UPD20130822:
Надо заметить, wheezy стал stable Прежде всего, wheezy предпочтительней по причине более "свежих" библиотек, а так же то, что wheezy станет stable. Если вы эксперт в манипуляциях пакетами, то, возможно, что у вас получится портировать все из wheezy в среду sqeeze. Но мы здесь не будем касаться вопросов backports. Кроме того, опыт работы с коллекциями программ в wheezy поможет при апгрейде дистрибутива в будущем.

В некоторых источниках рекомендуют закачивать libpri и spandsp и заниматься пересборкой и этих библиотек. Но в Debian вам такое скорее всего не понадобится, потому что wheezy подготовлен к работе с Asterisk 1.8, Потребности 10-й версии на момент написания статьи практически совпадали. На всякий случай проконтролируйте их версии такой командой:

# dpkg -l|grep "libpri\|spandsp"

Все эти игры с контейнером добавляют вашим сборкам достаточную изоляцию от основной системы. В какой-то момент, вдруг, вы можете отказаться от затеи играть с Asterisk 11 и Asterisk 10 и с wheezy. Удаление ненужного софта не будет связано со сложными рекурсивными удалениями пакетов. Все сведётся к одной команде rm. Основная система останется абсолютно чистой и целостной.

Пока время разочарований не наступило, продолжим...

* Сборка с помощью live_ast.

Сперва загрузите контейнер wheezy # debootstrap wheezy /opt/wheezy http://ftp.de.debian.org/debian/

Рассмотрим поближе что находится в репозитории фирмы Digium. Он находится по адресу http://svn.asterisk.org/svn/asterisk/tags/. На момент написания статьи актуальной была версия 10.12.1. Не забываем о том, что мы находимся внутри контейнера wheezy. Зайдем в каталог /opt контейнера и загрузим исходники 10.12.1

# cd /opt
# svn co http://svn.asterisk.org/svn/asterisk/tags/10.12.1 ast-10.12.1
# cd ast-10.12.1
Мы получили исходники астериска.

Теперь познакомимся со скриптом live_ast, который написал Tzafrir Cohen, один из разработчиков Debian и Asterisk. Используя live_ast, вы сможете создать множество самых различных версий. Можно будет параллельно держать несколько независимых сборок. Задача этого скрипта скорректировать ключи компилятора и пути к файлам, чтобы собрать в подкаталоге, например пусть это будет live/ , готовую к работе версию. Итак наберем

# contrib/scripts/live_ast conf-file

Читаем и редактируем live/live.conf 
В нашем случае просто раскомментируем 'LIVE_AST_FOR_SYSTEM=yes' в последней строке.
Далее:

# contrib/scripts/live_ast configure

Теперь можно поглядеть чего не хватает в модулях

# make menuselect

Выберите в меню все что вам покажется необходимым. На первый раз
можете ничего не менять.
И теперь сама сборка:

# contrib/scripts/live_ast install

Теперь необходимо сгенерировать конфигурационные файлы Астериска

# contrib/scripts/live_ast samples

Теперь в каталоге live/ у вас имеется всё что нужно для работы Астериска. Это и библиотеки, и образцы конфигурационных файлов, и звуковые файлы для базовых функций и приложений.

Займемся разграничиванием прав доступа. Назначим пользователя и группу asterisk для конфигурационных файлов и для служебных директорий

# chown -R asterisk:asterisk live/etc/ live/var/

Запретим другим просматривать эти каталоги. Ведь в конфигах может
содержаться конфиденциальная информация

# chmod -R o-rwx live/etc/asterisk

Сейчас пришло время сделать очень важные для удобства символьные линки

Конфигурационный каталог  /etc/asterisk
# ln -s /opt/ast-10.12.1/live/etc/asterisk /etc/asterisk

Исполнимый файл /usr/local/sbin/asterisk
# ln -s /opt/ast-10.12.1/live/usr/sbin/asterisk /usr/local/sbin/asterisk

Скрипт запуска /usr/local/sbin/safe_asterisk
# ln -s /opt/ast-10.12.1/live/usr/sbin/safe_asterisk /usr/local/sbin/safe_asterisk

Каталог логов /var/log/asterisk
# ln -s /opt/ast-10.12.1/live/var/log/asterisk /var/log/asterisk

Каталог, в котором хранится unix-сокет для конекта к Астериску и номер процесс PID /var/run/asterisk
# ln -s /opt/ast-10.12.1/live/var/run/asterisk /var/run/asterisk

Каталог служебных данных
# ln -s /opt/ast-10.12.1/live/var/spool/asterisk /var/spool/asterisk
В последствии, при новых сборках других версий, все эти ссылки вам понадобится переделать, на новые каталоги, которые будут соответствовать реальным версиям текущего вашего Астериска.

Теперь, когда символьные ссылки готовы, необходимо провести ревизию основного конфигурационного файла Астериска. Это файл /opt/ast-10.12.1/live/etc/asterisk/asterisk.conf. Не забывайте, что теперь он, как и все остальные конфигурационные файлы, доступен под соответствующим именем в каталоге /etc/asterisk. В этом файле нужно откорректировать пути к каталогам, в зависимости от версии Астериска

[directories]
astetcdir => /opt/ast-10.12.1/live/etc/asterisk
astmoddir => /opt/ast-10.12.1/live/usr/lib/asterisk/modules
astvarlibdir => /opt/ast-10.12.1/live/var/lib/asterisk
astkeydir => /opt/ast-10.12.1/live/var/lib/asterisk
astdatadir => /opt/ast-10.12.1/live/var/lib/asterisk
astagidir => /opt/ast-10.12.1/live/var/lib/asterisk/agi-bin
astspooldir => /opt/ast-10.12.1/live/var/spool/asterisk
astrundir  => /opt/ast-10.12.1/live/var/run/asterisk
astlogdir => /opt/ast-10.12.1/live/var/log/asterisk
astsbindir => /opt/ast-10.12.1/live/usr/sbin

Теперь следует взяться за файл live/usr/sbin/safe_asterisk. Его будем использовать для запуска сервиса PBX. Это shell-скрипт, позволяющий Астериску постоянно находиться в памяти. Внимательней отнеситесь к корректировке переменных ASTSBINDIR, ASTVARRUNDIR, ASTVARLOGDIR, а так же очень важно первоначальному значение ASTARGS присвоить "-U asterisk" вместо "". Ведь мы добиваемся, чтобы процессы работали не от рута! Переменная ASTARGS, кажется, не совсем на своем месте, поэтому потрудитесь понять логику этого скрипта


© 2008—2018 Андрей Иващенко
powered by static files tm