Все команды выполнялись от прав пользователя root.
1. Устанавливаю необходимые пакеты:
apt-get install -y build-essential linux-headers-`uname -r` openssh-server apache2 mysql-server mysql-client bison flex php5 php5-curl php5-cli php5-mysql php-pear php-db php5-gd curl sox libncurses5-dev libssl-dev libmysqlclient-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git subversion unixodbc-dev uuid uuid-dev libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp0-dev libspandsp-dev libiksemel-dev libiksemel-utils libiksemel3 libmyodbc sudo
2. Скачиваю необходимые сырцы для установки Asterisk:
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-14-current.tar.gz
3. Распаковываю скачанное:
tar -zxvf libpri-current.tar.gz
tar -zxvf dahdi-linux-complete-current.tar.gz
tar -zxvf asterisk-14-current.tar.gz
4. Начинаю сборку и установку сырцов (собственно все как в инструкции самого Asteriska):
cd dahdi-linux-complete-2.11.1+2.11.1
make
make install
make config
cd ..
cd libpri-1.6.0
make
make install
5. До устанавливаю более новый протокол (по инструкции), наверно его можно не устанавливать, но вдруг захочется каких нибудь дополнительных настроек:
cd ..
wget http://www.pjsip.org/release/2.4.5/pjproject-2.4.5.tar.bz2
tar -xjvf pjproject-2.4.5.tar.bz2
cd pjproject-2.4.5
5.1. Правлю готовый конфиг для его сборки:
nano pjlib/include/pj/config_site.h
Вставляю "простыню"
/*
* Asterisk config_site.h
*/
#include
/*
* Defining PJMEDIA_HAS_SRTP to 0 does NOT disable Asterisk's ability to use srtp.
* It only disables the pjmedia srtp transport which Asterisk doesn't use.
* The reason for the disable is that while Asterisk works fine with older libsrtp
* versions, newer versions of pjproject won't compile with them.
*/
#define PJMEDIA_HAS_SRTP 0
#define PJ_HAS_IPV6 1
#define NDEBUG 1
#define PJ_MAX_HOSTNAME (256)
#define PJSIP_MAX_URL_SIZE (512)
#ifdef PJ_HAS_LINUX_EPOLL
#define PJ_IOQUEUE_MAX_HANDLES (5000)
#else
#define PJ_IOQUEUE_MAX_HANDLES (FD_SETSIZE)
#endif
#define PJ_IOQUEUE_HAS_SAFE_UNREG 1
#define PJ_IOQUEUE_MAX_EVENTS_IN_SINGLE_POLL (16)
#define PJ_SCANNER_USE_BITWISE 0
#define PJ_OS_HAS_CHECK_STACK 0
#define PJ_LOG_MAX_LEVEL 6
#define PJ_ENABLE_EXTRA_CHECK 1
#define PJSIP_MAX_TSX_COUNT ((64*1024)-1)
#define PJSIP_MAX_DIALOG_COUNT ((64*1024)-1)
#define PJSIP_UDP_SO_SNDBUF_SIZE (512*1024)
#define PJSIP_UDP_SO_RCVBUF_SIZE (512*1024)
#define PJ_DEBUG 0
#define PJSIP_SAFE_MODULE 0
#define PJ_HAS_STRICMP_ALNUM 0
/*
* Do not ever enable PJ_HASH_USE_OWN_TOLOWER because the algorithm is
* inconsistently used when calculating the hash value and doesn't
* convert the same characters as pj_tolower()/tolower(). Thus you
* can get different hash values if the string hashed has certain
* characters in it. (ASCII '@', '[', '\\', ']', '^', and '_')
*/
#undef PJ_HASH_USE_OWN_TOLOWER
/*
It is imperative that PJSIP_UNESCAPE_IN_PLACE remain 0 or undefined.
Enabling it will result in SEGFAULTS when URIs containing escape sequences are encountered.
*/
#undef PJSIP_UNESCAPE_IN_PLACE
#define PJSIP_MAX_PKT_LEN 6000
#undef PJ_TODO
#define PJ_TODO(x)
/* Defaults too low for WebRTC */
#define PJ_ICE_MAX_CAND 32
#define PJ_ICE_MAX_CHECKS (PJ_ICE_MAX_CAND * PJ_ICE_MAX_CAND)
/* Increase limits to allow more formats */
#define PJMEDIA_MAX_SDP_FMT 64
#define PJMEDIA_MAX_SDP_BANDW 4
#define PJMEDIA_MAX_SDP_ATTR (PJMEDIA_MAX_SDP_FMT*2 + 4)
#define PJMEDIA_MAX_SDP_MEDIA 16
5.2. Начинаю сборку:
./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr CFLAGS='-O2 -DNDEBUG'
make dep
make
make install
ldconfig
5.3. Проверяю:
ldconfig -p | grep pj
Должно получиться что-то типа:
libpjsua2.so.2 (libc6,x86-64) => /usr/lib/libpjsua2.so.2
libpjsua2.so (libc6,x86-64) => /usr/lib/libpjsua2.so
libpjsua.so.2 (libc6,x86-64) => /usr/lib/libpjsua.so.2
libpjsua.so (libc6,x86-64) => /usr/lib/libpjsua.so
libpjsip.so.2 (libc6,x86-64) => /usr/lib/libpjsip.so.2
libpjsip.so (libc6,x86-64) => /usr/lib/libpjsip.so
libpjsip-ua.so.2 (libc6,x86-64) => /usr/lib/libpjsip-ua.so.2
libpjsip-ua.so (libc6,x86-64) => /usr/lib/libpjsip-ua.so
libpjsip-simple.so.2 (libc6,x86-64) => /usr/lib/libpjsip-simple.so.2
libpjsip-simple.so (libc6,x86-64) => /usr/lib/libpjsip-simple.so
6. Устанавливаю:
cd ..
git clone https://github.com/akheron/jansson.git
cd /usr/src/jansson
autoreconf -i
./configure
make
make install
cd ..
cd asterisk-14.3.0
./configure
contrib/scripts/get_mp3_source.sh
6.1. Вызываю конфигуратор:
make menuselect
И выбираю следующее:
Add-ons: format_mp3, res_config_mysql, app_mysql и cdr_mysql.
Core Sound Packages: русские звуки RU-WAV.
Music On Hold File Packages: звук WAV.
Extras Sound Packages: английский EN-WAV, русского нет.
6.2. Собираю с учетом выбранного:
make
make install
make config
7. Скачиваю и распаковываю FreePBX:
cd..
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz
tar xvfz freepbx-13.0-latest.tgz
cd freepbx
pear install Console_Getopt
7.1. Создаю управляющего пользователя и задаю права:
useradd -m asterisk
chown asterisk. /var/run/asterisk
chown -R asterisk. /etc/asterisk
chown -R asterisk. /var/{lib,log,spool}/asterisk
chown -R asterisk. /usr/lib/asterisk
7.2. Убираю лишнее и немного конфигурирую Apache:
rm -rf /var/www/html
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php5/apache2/php.ini
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf
sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
service apache2 restart
7.3. Настраиваю ODBC:
cat >> /etc/odbcinst.ini << EOF
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage = 1
EOF
cat >> /etc/odbc.ini << EOF
[MySQL-asteriskcdrdb]
Description=MySQL connection to 'asteriskcdrdb' database
driver=MySQL
server=localhost
database=asteriskcdrdb
Port=3306
Socket=/var/run/mysqld/mysqld.sock
option=3
EOF
7.4. Устанавливаю FreePBX (остановив предварительно Asterisk):
cd freepbx
/etc/init.d/asterisk stop
./start_asterisk start
STARTING ASTERISK
Asterisk Started
./install -n --dbpass passMySQL
7.5. Толком не разобрался, но какой-то косяк по-умолчанию, пришлось пожертвовать безопасностью, иначе попасть в веб-интерфейс не получалось:
rm -rf /var/www/html/.htaccessy
/etc/init.d/apache2 restart
8. Вводим в браузере IP сервера Asterisk и попадаем на FreePBX.