Как установить FreePBX 13 на Ubuntu Trusty

Posted by

Почему разработчики такие козлы. Вот написал я ранее заметку, как поставить FreePBX на Ubuntu Trusty Server все было хорошо. На ее основе: я развернул в организации, дома и для тестов. А вот сейчас мне также потребовалось тестовое окружение и что, беру свою заметку и получаю что больше нет svn репозитария:

ekzorchik@srv-trusty:~$ sudo svn co http://svn.freepbx.org/freepbx/branches/2.11 /var/www/freepbx

svn: E670002: Unable to connect to a repository at URL ‘http://svn.freepbx.org/freepbx/branches/2.11’

svn: E670002: Name or service not known

aollo@work:~$ ping svn.freepbx.org

ping: unknown host svn.freepbx.org

Вот зачем? И я с каждым разом убеждаюсь что доверять сообществу нельзя. Можно раз использовать и сделать все возможное чтобы репозитарий, пакеты, своя инструкция были только на своем физическом железе и сервисе. Вот (HP MicroServer Gen8) что я подарил ранее себе на день рождения и будет/есть тем самым личным местом хранения наработок и инструментов, а не интернет ресурсы.

Сейчас будет инструкция по обновленной установке FreePBX на .5 Server amd64 где информации берется из официальной документации.

На заметку: Вообще практичнее было бы подготовить docker контейнер (будет много позже) всей системы, но и также посредством Remastersys создать образ системы.

Характеристики системы на которой разбираю установку:

  • RAM = 2
  • CPU = 1
  • HDD = 50

ekzorchik@srv-trusty:~$ sudo rm -Rf /var/lib/apt/lists

ekzorchik@srv-trusty:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-trusty:~$ sudo apt-get install linux-generic-lts-xenial
linux-image-generic-lts-xenial -y

ekzorchik@srv-trusty:~$ sudo rm /etc/localtime

ekzorchik@srv-trusty:~$ sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

ekzorchik@srv-trusty:~$ sudo apt-get install ntp -y

ekzorchik@srv-trusty:~$ sudo nano /etc/profile

export LC_ALL="en_US.UTF-8"

ekzorchik@srv-trusty:~$ source /etc/profile

ekzorchik@srv-trusty:~$ sudo tasksel install openssh-server

ekzorchik@srv-trusty:~$ sudo reboot

ekzorchik@srv-trusty:~$ uname -a && lsb_release -a

Linux srv-trusty 4.4.0-83-generic #106~14.04.1-Ubuntu SMP Mon Jun 26
18:10:19 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Distributor ID: Ubuntu

Description: Ubuntu 14.04.5 LTS

Release: 14.04

Codename: trusty

ekzorchik@srv-trusty:~$ apt-cache show | grep Version

Version: 1:11.7.0~dfsg-1ubuntu1

ekzorchik@srv-trusty:~$ sudo 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 php5-gd curl sox libncurses5-dev libssl-dev libmysqlclient-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git unixodbc-dev uuid uuid-dev libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp0-dev libspandsp-dev libmyodbc unzip

New password for the MySQL "root" user: 712mbddr@

Repeat password for the MySQL "root" user: 712mbddr@

ekzorchik@srv-trusty:~$ sudo reboot

ekzorchik@srv-trusty:~$ sudo a2enmod rewrite

ekzorchik@srv-trusty:~$ sudo nano /etc/apache2/apache2.conf

ServerName srv-trusty

ekzorchik@srv-trusty:~$ sudo sed -i 's/\(^upload_max_filesize = \).*/\120M/'/etc/php5/apache2/php.ini

ekzorchik@srv-trusty:~$ sudo sed -ie 's/\;date\.timezone\ \=/date\.timezone\ \=\"Europe\/Moscow"/g' /etc/php5/apache2/php.ini

ekzorchik@srv-trusty:~$ sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.backup

ekzorchik@srv-trusty:~$ sudo sed -i 's/AllowOverride None/AllowOverride All/'/etc/apache2/apache2.conf

ekzorchik@srv-trusty:~$ sudo mysql_secure_installation

Подготовливаю базу MySQL, пользователя и пароль под нее:

ekzorchik@srv-trusty:~$ mysql -u root -p712mbddr@ -e "create database asterisk"

ekzorchik@srv-trusty:~$ mysql -u root -p712mbddr@ -e "create database asteriskcdrdb"

ekzorchik@srv-trusty:~$ mysql -u root -p712mbddr@ -e "grant all privileges on asterisk.* to asteriskuser@localhost identified by 'asterpass'"

ekzorchik@srv-trusty:~$ mysql -u root -p712mbddr@ -e "grant all privileges on asteriskcdrdb.* to asteriskuser@localhost identified by 'asterpass'"

ekzorchik@srv-trusty:~$ sudo service apache2 restart

ekzorchik@srv-trusty:~$ sudo pear install Console_Getopt

ekzorchik@srv-trusty:~$ sudo pear uninstall db

pear/db not installed

ekzorchik@srv-trusty:~$ sudo pear channel-update pear.php.net

ekzorchik@srv-trusty:~$ sudo pear install -Z db-1.7.14

ekzorchik@srv-trusty:~$ cd /usr/src

ekzorchik@srv-trusty:/usr/src$ sudo wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz

ekzorchik@srv-trusty:/usr/src$ sudo wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz

ekzorchik@srv-trusty:/usr/src$ sudo wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz

ekzorchik@srv-trusty:/usr/src$ sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz

ekzorchik@srv-trusty:/usr/src$ sudo git clone https://github.com/akheron/jansson.git

ekzorchik@srv-trusty:/usr/src$ sudo wget http://www.pjsip.org/release/2.2.1/pjproject-2.2.1.tar.bz2

Компилирую и установливаю Lame (mp3)

ekzorchik@srv-trusty:/usr/src$ sudo tar zxf lame-3.98.4.tar.gz

ekzorchik@srv-trusty:/usr/src$ cd lame-3.98.4/

ekzorchik@srv-trusty:/usr/src/lame-3.98.4$ sudo ./configure

ekzorchik@srv-trusty:/usr/src/lame-3.98.4$ sudo make && sudo make install

ekzorchik@srv-trusty:/usr/src/lame-3.98.4$ cd ../

Компилирую и установливаю DAHDI и LibPRI:

ekzorchik@srv-trusty:/usr/src$ sudo tar xfz dahdi-linux-complete-current.tar.gz

ekzorchik@srv-trusty:/usr/src$ sudo tar xfz libpri-current.tar.gz

ekzorchik@srv-trusty:/usr/src$ sudo rm dahdi-linux-complete-current.tar.gz libpri-current.tar.gz

ekzorchik@srv-trusty:/usr/src$ cd dahdi-linux-complete-*

ekzorchik@srv-trusty:/usr/src/dahdi-linux-complete-2.11.1+2.11.1$ sudo make all

ekzorchik@srv-trusty:/usr/src/dahdi-linux-complete-2.11.1+2.11.1$ sudo make install

ekzorchik@srv-trusty:/usr/src/dahdi-linux-complete-2.11.1+2.11.1$ sudo make config

ekzorchik@srv-trusty:/usr/src/dahdi-linux-complete-2.11.1+2.11.1$ cd ../libpri-*

ekzorchik@srv-trusty:/usr/src/libpri-1.6.0$ sudo make

ekzorchik@srv-trusty:/usr/src/libpri-1.6.0$ sudo make install

ekzorchik@srv-trusty:/usr/src/libpri-1.6.0$ cd ../

Компилирую и ставлю pjproject:

(Требуется для поддержки драйвера канала PjSIP)

ekzorchik@srv-trusty:/usr/src$ sudo tar xjf pjproject-*.tar.bz2

ekzorchik@srv-trusty:/usr/src$ cd pjproject-*

ekzorchik@srv-trusty:/usr/src/pjproject-2.2.1$ sudo CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr

ekzorchik@srv-trusty:/usr/src/pjproject-2.2.1$ sudo make dep

ekzorchik@srv-trusty:/usr/src/pjproject-2.2.1$ sudo make

ekzorchik@srv-trusty:/usr/src/pjproject-2.2.1$ sudo make install

ekzorchik@srv-trusty:/usr/src/pjproject-2.2.1$ cd ../

Компилирую и ставлю jansson:

ekzorchik@srv-trusty:/usr/src$ cd jansson/

ekzorchik@srv-trusty:/usr/src/jansson$ sudo autoreconf -i

ekzorchik@srv-trusty:/usr/src/jansson$ sudo ./configure

ekzorchik@srv-trusty:/usr/src/jansson$ sudo make

ekzorchik@srv-trusty:/usr/src/jansson$ sudo make install

ekzorchik@srv-trusty:/usr/src/jansson$ cd ../

Компилирую и ставлю Asterisk:

ekzorchik@srv-trusty:/usr/src$ sudo tar zxf asterisk-13-current.tar.gz

ekzorchik@srv-trusty:/usr/src$ sudo rm asterisk-13-current.tar.gz

ekzorchik@srv-trusty:/usr/src$ cd asterisk-*/

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo ./contrib/scripts/install_prereq install

ITU-T telephone code: 7

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo ./configure

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo ./configure --with-pjproject-bundled

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo ./contrib/scripts/get_mp3_source.sh

./contrib/scripts/get_mp3_source.sh: 12: ./contrib/scripts/get_mp3_source.sh: svn: not found

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo apt-get install subversion -y

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo ./contrib/scripts/get_mp3_source.sh

Exported revision 202.

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo make menuselect

Слева представлены разделы, а с права при выборе раздела доступные опции. Исходя из этого перехожу в раздел Add-ons и отмечаю опции клавишей «Enter»: format_mp3, app_mysql, cdr_mysql. Затем перехожу в раздел Core Sound Packages и отмечаю опции клавишей «Enter»:

  • CORE-SOUNDS-EN-ALAW
  • CORE-SOUNDS-EN-GSM
  • CORE-SOUNDS-EN-G729
  • CORE-SOUNDS-RU-ALAW
  • CORE-SOUNDS-RU-GSM
  • CORE-SOUNDS-RU-G729

Затем перехожу в раздел Music On Hold File Packages и отмечаю опцию клавишей «Enter»:

  • MOH-OPSOUND-WAV (хотя это уже предопределено установщиком)

Затем перехожу в раздел Extras Sound Packages и отмечаю опции клавишей «Enter»:

  • EXTRA-SOUND-EN-WAV
  • EXTRA-SOUND-EN-ALAW
  • EXTRA-SOUND-EN-GSM
  • EXTRA-SOUND-EN-G729

Затем переходим в меню Save & Exit (или нажимаем клавишу F12) и наконец таки переходим к установке Asterisk:

ekzorchik@srv-trusty:~/asterisk-13.17.0$ sudo make

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo make

+--------- Asterisk Build Complete ---------+

+ Asterisk has successfully been built, and +

+ can be installed by running: +

+ +

+ make install +

+-------------------------------------------+

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo make install

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo make config

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ sudo ldconfig

ekzorchik@srv-trusty:/usr/src/asterisk-13.17.0$ cd ../

Установка и настройка FreePBX

ekzorchik@srv-trusty:~$ sudo wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz

ekzorchik@srv-trusty:/usr/src$ sudo tar zxf freepbx-*.tgz

ekzorchik@srv-trusty:/usr/src$ cd /usr/src/freepbx/

Создаю пользователя Asterisk и права пользователя.

ekzorchik@srv-trusty:/usr/src/freepbx$ sudo useradd -m asterisk

ekzorchik@srv-trusty:/usr/src/freepbx$ sudo chown asterisk. /var/run/asterisk

ekzorchik@srv-trusty:/usr/src/freepbx$ sudo chown -R asterisk. /etc/asterisk

ekzorchik@srv-trusty:/usr/src/freepbx$ sudo chown -R asterisk. /var/{lib,log,spool}/asterisk

ekzorchik@srv-trusty:/usr/src/freepbx$ sudo chown -R asterisk. /usr/lib/asterisk

ekzorchik@srv-trusty:/usr/src/freepbx$ sudo rm -rf /var/www/html/

Запустим Asterisk и установим FreePBX.

ekzorchik@srv-trusty:/usr/src/freepbx$ sudo ./start_asterisk start

STARTING ASTERISK

Asterisk Started

ekzorchik@srv-trusty:/usr/src/freepbx$ sudo ./install -n --dbuser=asteriskuser --dbpass=asterpass

Finished setting permissions

Generating default configurations...

Reloading FreePBX

Successfully reloaded

Finished generating default configurations

Trusting FreePBX...Trusted

You have successfully installed FreePBX

ekzorchik@srv-trusty:/usr/src/freepbx$ cd ~/

В завершении настроим создадим ссылку на директорию Music On Hold формата mp3

ekzorchik@srv-trusty:~$ sudo ln -s /var/lib/asterisk/moh/ /var/lib/asterisk/mohmp3

ekzorchik@srv-trusty:~$ sudo amportal start

Please wait...

!!!!amportal is depreciated. Please use fwconsole!!!!

forwarding all commands to 'fwconsole'

Asterisk already running

Running FreePBX startup...

Taking too long? Customize the chown command, See http://wiki.freepbx.org/display/FOP/FreePBX+Chown+Conf

Setting Permissions...

Setting base permissions...Done

Setting specific permissions...

677 [============================]

Finished setting permissions

Unable to run Pre-Asterisk hooks, because Asterisk is already running on PID 22259 and has been running for 4 minutes, 59 seconds

Поверим состояние Asterisk подключившись к консоли

ekzorchik@srv-trusty:~$ sudo asterisk -vvr

Asterisk 13.17.0, Copyright (C) 1999 - 2014, Digium, Inc. and others.

srv-trusty*CLI> quit

Asterisk cleanly ending (0).

Executing last minute cleanups

Подключаюсь к FreePBX:

Т.к. вроде как установка завершена, то чтобы открыть Web-интерфейс потребуется обратиться браузером с другой системы к этой по IP&DNS, где IP адрес текущей:

ekzorchik@srv-trusty:~$ ip r | awk '{print $9}'

10.10.10.11

URL ссылка на доступ: http://10.10.10.11/ и передо мной почему-то просто белая страница. См. Логи что есть что:

ekzorchik@srv-trusty:~$ sudo tail -f /var/log/apache2/error.log

[Sat Jul 22 13:29:57.625476 2017] [:error] [pid 1385] [client 10.10.10.11:36064] PHP Fatal error: Class 'FreePBX' not found in /var/www/html/admin/config.php on line 126

[Sat Jul 22 13:29:57.625582 2017] [:error] [pid 1385] [client 10.10.10.11:36064] PHP Warning: Unknown: open(/var/lib/php5/sess_b8tudp1hj9vapjqkpuep0dlpt2, O_RDWR) failed: Permission denied (13) in Unknown on line 0

[Sat Jul 22 13:29:57.625604 2017] [:error] [pid 1385] [client 10.10.10.11:36064] PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php5) in Unknown on line 0

ekzorchik@srv-trusty:~$ sudo nano /etc/apache2/envvars

export APACHE_RUN_USER=asterisk

export APACHE_RUN_GROUP=asterisk

а было www-data, как выставлено по умолчанию установщиком Web-сервиса Apache2.

ekzorchik@srv-trusty:~$ sudo service apache2 restart

После нажимаю клавишу F5 в странице где была белая страница и я продвинулся на шаг где нужно указать административные учетные данные которые будут использоваться. Создаю:

  • Username: ekzorchik
  • Password: 712mbddr@
  • Confirm Password: 712mbddr@
  • Admin Email address: support@ekzorchik.ru

и после нажимаю Create Account, затем меня перекидываем на URL: http://10.10.10.11/html/admin/config.php где нужно кликнуть мышью на FreePBX Administration → указываю login & password и нажимаю Continue. Но мастер входа не успокаивается и хочет чтобы я указал дополнительные параметры: язык звука, системный язык, часовой пояс. Ладно:

  • Sound Prompts Language: English
  • System Language: en_US
  • Timezone: Europe/Moscow

и нажимаю Submit — после нужно нажать Apply Config.

И вот она полная установка, она отличается от той что у меня была современностью интерфейса и всем новым:

Современный интерфейс Asterisk 13.17 + FreePBX 13 на Ubuntu Trusty Server

Ладно буду знакомиться с новой версией, скорее это и к лучшему что более не могу ставить FreePBX 2.11

Теперь нужно сделать бекап текущей системы. Для этого воспользуемся заметкой.

И вот бекап занимает и будет сохранен на моем персональном хранилище OwnCloud.

ekzorchik@srv-trusty:~$ sudo du -sh /home/remastersys/remastersys/custom-backup.iso

1.7G /home/remastersys/remastersys/custom-backup.iso

ekzorchik@srv-trusty:~$ md5sum /home/remastersys/remastersys/custom-backup.iso

2aced6e0ae7fc7d89158087f4a7a25ae /home/remastersys/remastersys/custom-backup.iso

Сперва копирую его на домен контроллер под управлением Windows Server 2012 R2 Std, но почему-то то что раньше работало не срабатывает:

ekzorchik@srv-trusty:~$ sudo mount.cifs //10.10.10.2/c$/iso -o username=ekzorchik,password=712mbddr@,domain=polygon.local,rw,uid=ekzorchik,gid=1000,iocharset=utf8 /media/cdrom

mount error(112): Host is down

Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

Решение простое, нужно использовать версию пакет SMB не 1 как было ранее, а 2. В SMBv1 были найдены непростительные ошибки приводящие к распространению вирусов, а ранее в заметке по настройке максимальной производительности для Windows 10 я также и для Server 2012 R2 Std отключил:

C:\Windows\system32>dism /online /disable-feature /featurename:SMB1Protocol

Хорошо: Чтобы подмонтировать ресурс с версией пакета SMB 2 нужно:

ekzorchik@srv-trusty:~$ sudo mount.cifs //10.10.10.2/c$/iso -o username=ekzorchik,password=712mbddr@,domain=polygon.local,rw,uid=ekzorchik,gid=1000,iocharset=utf8,vers=2.0 /media/cdrom

ekzorchik@srv-trusty:~$ sudo cp /home/remastersys/remastersys/custom-backup.iso /media/cdrom

Проверяю, а соответствует ли md5 сумма файлу бекапа и скопированному файлу — ответ Да!

ekzorchik@srv-trusty:~$ md5sum /media/cdrom/custom-backup.iso

2aced6e0ae7fc7d89158087f4a7a25ae /media/cdrom/custom-backup.iso

ekzorchik@srv-trusty:~$ sudo umount /media/cdrom

umount: /media/cdrom: device is busy.

(In some cases useful info about processes that use

the device is found by lsof(8) or fuser(1))

ekzorchik@srv-trusty:~$ ps aux | grep 'sudo cp'

root 32179 0.0 0.1 83380 3976 ? S 10:52 0:00 sudo cp /home/remastersys/remastersys/custom-backup.iso /media/cdrom/iso

ekzorchik@srv-trusty:~$ sudo kill -9 32179

ekzorchik@srv-trusty:~$ sudo umount /media/cdrom

Итого задача которая была запланирована вылилась вот в такой вот документ который поможет мне в дальнейшем. Да и уже настроенный образ у меня есть и буду от него отталкиваться при тестировании запланированного. Я бы еще так сказал, что установка сложна, приятнее было бы если бы через deb пакеты ставилось, но только не готовый дистрибутив использовать. Так я вообще кроме далее далее ничего не узнаю.

На заметку: Может случиться что после при нажатии Apply Config будет сообщение вида:

Reload failed because retrieve_conf encountered an error:1

Exit: 1

Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl)

Exectiption: Unable to connect to Asterisk through the CLI in file /var/lib/asterisk

Это значит что дело в правах на каталог /var/run/asterisk

ekzorchik@srv-trusty:~$ ls /var/run/asterisk/ -l

total 4

srwxrwxr-x 1 root root 0 Oct 14 19:33 asterisk.ctl

-rw-r--r-- 1 root root 5 Oct 14 19:33 asterisk.pid

ekzorchik@srv-trusty:~$ sudo fwconsole stop

ekzorchik@srv-trusty:~$ sudo chown -R asterisk:asterisk /var/run/asterisk

ekzorchik@srv-trusty:~$ sudo sed -i '/END INIT INFO/a AST_USER="asterisk"\nAST_GROUP="asterisk"' /etc/init.d/asterisk

ekzorchik@srv-trusty:~$ whereis amportal

amportal: /usr/sbin/amportal /etc/amportal.conf

ekzorchik@srv-trusty:~$ sudo sed -i 's|exit 0|/usr/sbin/amportal restart\nexit 0|' /etc/rc.local

ekzorchik@srv-trusty:~$ sudo amportal restart

Please wait...

!!!!amportal is depreciated. Please use fwconsole!!!!

forwarding all commands to 'fwconsole'

Running FreePBX shutdown...

Shutting down Asterisk Gracefully. Will forcefully kill after 30 seconds.

Press C to Cancel

Press N to shut down NOW

[============================] 1 sec

Running FreePBX startup...

Starting Asterisk...

[============================] 10 secs

Asterisk Started

ekzorchik@srv-trusty:~$ ls -l /var/run/asterisk/

total 4

srwxrwxr-x 1 asterisk asterisk 0 Oct 14 19:52 asterisk.ctl

-rw-r--r-- 1 asterisk asterisk 6 Oct 14 19:52 asterisk.pid

После нажимаю Apply Config и ошибок больше нет все исправлено.

Ладно я прощаюсь, до новых встреч, с уважением автор блога Олло Александр aka ekzorchik.