1. Выполним установку дополнительных репозитариев epel и crb
# dnf install epel-release
# /usr/bin/crb enable
2. Установим пакеты, которые потребуются для сборки
# dnf install wget tar git gcc-c++ zlib-devel sqlite sqlite-devel libcurl libcurl-devel pcre-devel autoconf automake libtool cmake libuuid-devel libatomic openssl-devel unixODBC libedit-devel python3 python3-devel python3-click-threading python3-threadpoolctl python3-utils libvpx yasm lua-devel libsndfile-devel speexdsp-devel ldns-devel
# dnf --enablerepo=devel install unixODBC-devel opus-devel libogg-devel
3. Скачиваем пакеты spandsp и sofia-sip, которых нет в репозитариях, но которые требуются для функционирования freeswitch. Пакеты расположены на странице http://repo.okay.com.mx/?dir=centos/9/x86_64/release
# cd /usr/src
# wget http://repo.okay.com.mx/centos/9/x86_64/release/spandsp-3.0.0-1.el9.x86_64.rpm
# wget http://repo.okay.com.mx/centos/9/x86_64/release/spandsp-devel-3.0.0-1.el9.x86_64.rpm
# dnf install spandsp*
# wget http://repo.okay.com.mx/centos/9/x86_64/release/sofia-sip-1.13.17-1.el9.x86_64.rpm
# wget http://repo.okay.com.mx/centos/9/x86_64/release/sofia-sip-devel-1.13.17-1.el9.x86_64.rpm
# wget http://repo.okay.com.mx/centos/9/x86_64/release/sofia-sip-glib-1.13.17-1.el9.x86_64.rpm
# wget http://repo.okay.com.mx/centos/9/x86_64/release/sofia-sip-utils-1.13.17-1.el9.x86_64.rpm
# dnf install sofia-sip*
4. Далее необходимо установить определенные пакеты speex и speexdsp, рекомендуемые для Freswitch 1.10. Скачиваем и устанавливаем пакеты по инструкции с официального сайта:
# wget http://downloads.us.xiph.org/releases/speex/speex-1.2rc1.tar.gz
# wget http://downloads.us.xiph.org/releases/speex/speexdsp-1.2rc2.tar.gz
# tar -xpf speex-1.2rc1.tar.gz
# tar -xpf speexdsp-1.2rc2.tar.gz
# cd speex-1.2rc1
# ./configure --prefix=/usr --disable-static --docdir=/usr/share/doc/speex-1.2rc1
# make
# make install
# cd ../speexdsp-1.2rc2
# ./configure --prefix=/usr --disable-static --docdir=/usr/share/doc/speexdsp-1.2rc2
# make
# make install
5. Теперь необходимо установить пакет libks, который так же необходим для успешной сборки Freswitch 1.10
# cd /usr/src
# git clone https://github.com/signalwire/libks.git
# cd libks/
# cmake . -DCMAKE_INSTALL_PREFIX:PATH=/usr
# make
# make install
Данный пакет устанавливается как-то скрытно и его почему-то "не видно" другим пакетам, использующим libks. Что бы это исправить необходимо найти местоположение файла libks2.pc и путь к этому файлу прописать в переменную среды, которую используют сборщики и компиляторы - PKG_CONFIG_PATH
# find / | grep 'libks2.pc'
/usr/src/libks/libks2.pc
Используем местоположение, ассоциированное с pkgconfig, то есть "/usr/lib/pkgconfig" и задаем переменную среды:
# export PKG_CONFIG_PATH=/usr/lib/pkgconfig
6. Далее необходимо установить пакет signalwire-c, который так же устанавливается путем сборки из исходников
# cd /usr/src
# git clone https://github.com/signalwire/signalwire-c.git
# cd signalwire-c/
# cmake . -DCMAKE_INSTALL_PREFIX:PATH=/usr
# make
# make install
7. Далее необходимо установить ряд пакетов кодеков. Основные пакеты - это libavformat-dev и libswscale-dev. Но что бы совсем не иметь проблем с кодеками можно установить мощную утилиту ffmpeg с набором всех возможных кодеков.
# dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm -y
# dnf install --nogpgcheck https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm -y
# dnf install ffmpeg ffmpeg-devel
8. Современные сборки Freswitch 1.10 работают с БД Postgresql. Поэтому перед сборкой Freeswitch рекомендуется иметь пакет postgresql-devel и саму базу PostgeeSQL. Причем рекомендуется установить версию 15. Данный пункт можно пропустить, если не планируется использовать Freswitch со встроенной поддержкой postgresql. Устанавливаем репозитарий Postgresql для того, что бы иметь возможность пользоваться новыми версиями СУБД
# dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Отключаем встроенный модуль postgresql в репозитариях по умолчанию.
# dnf -qy module disable postgresql
Устанавливаем последнюю версию PostgreSQL
# dnf install -y postgresql15-devel postgresql15-server
# /usr/pgsql-15/bin/postgresql-15-setup initdb
# systemctl start postgresql-15
# systemctl enable postgresql-15
9. Теперь подошла очередь установить сам Freeswitch
# cd /usr/src
# wget https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.12.-release.tar.xz
# tar -xpJf freeswitch-1.10.12.-release.tar.xz
# mv freeswitch-1.10.12.-release freeswitch
Теперь в директории /usr/src/freeswitch лежит свежий код проекта Freeswich
10. Запускаем конфигурирование и сборку.
# cd freeswitch
# ./rebootstrap.sh
Для сборки Freeswitch c поддержкой PostgreSQL необходимо обогатить PKG_CONFIG_PATH переменную путем до файла libpq.pc. (при этом путь до libks2.pc должен остаться). В моем случае файл libks2.pc лежал тут "/usr/pgsql-15/lib/pkgconfig". В руководстве по установке Freeswitch так же рекомендуют добавить путь к исполняемому файлу PostgreSQL в переменную среды PATH.
# export PKG_CONFIG_PATH=/usr/pgsql-15/lib/pkgconfig:/usr/lib/pkgconfig
# export PATH=/usr/pgsql-15/bin:$PATH
# ./configure -C --enable-portable-binary --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-gnu-ld --with-python3 --with-openssl --enable-core-odbc-support --enable-core-pgsql-support
Конфигурирование должно завершится выводом:
Locations:
prefix: /usr
exec_prefix: /usr
bindir: ${exec_prefix}/bin
confdir: /etc/freeswitch
libdir: /usr/lib64
datadir: /usr/share/freeswitch
localstatedir: /var/lib/freeswitch
includedir: /usr/include/freeswitch
certsdir: /etc/freeswitch/tls
dbdir: /var/lib/freeswitch/db
grammardir: /usr/share/freeswitch/grammar
htdocsdir: /usr/share/freeswitch/htdocs
fontsdir: /usr/share/freeswitch/fonts
logfiledir: /var/log/freeswitch
modulesdir: /usr/lib64/freeswitch/mod
pkgconfigdir: /usr/lib64/pkgconfig
recordingsdir: /var/lib/freeswitch/recordings
imagesdir: /var/lib/freeswitch/images
runtimedir: /var/run/freeswitch
scriptdir: /usr/share/freeswitch/scripts
soundsdir: /usr/share/freeswitch/sounds
storagedir: /var/lib/freeswitch/storage
cachedir: /var/cache/freeswitch
------------------------------------------------------------------------------
Запускаем сборку:
# make
Нормальный вывод после сборки:
+ FreeSWITCH has been successfully built. +
+ Install by running: +
+ +
+ make install +
+ +
+ While you're waiting, register for ClueCon! +
+ https://www.cluecon.com +
+ +
+-----------------------------------------------+
| _ _ ____ _ ____ |
| / \ _ __ _ __ _ _ __ _| | / ___| |_ _ ___ / ___|___ _ __ |
| / _ \ | '_ \| '_ \| | | |/ _` | | | | | | | | |/ _ \ | / _ \| '_ \ |
| / ___ \| | | | | | | |_| | (_| | | | |___| | |_| | __/ |__| (_) | | | | |
| /_/ \_\_| |_|_| |_|\__,_|\__,_|_| \____|_|\__,_|\___|\____\___/|_| |_| |
| |
| ____ _____ ____ ____ __ |
| | _ \_ _/ ___| / ___|___ _ __ / _| ___ _ __ ___ _ __ ___ ___ |
| | |_) || || | | | / _ \| '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \ |
| | _ < | || |___ | |__| (_) | | | | _| __/ | | __/ | | | (_| __/ |
| |_| \_\|_| \____| \____\___/|_| |_|_| \___|_| \___|_| |_|\___\___| |
| |
| ____ _ ____ |
| / ___| |_ _ ___ / ___|___ _ __ ___ ___ _ __ ___ |
| | | | | | | |/ _ \ | / _ \| '_ \ / __/ _ \| '_ ` _ \ |
| | |___| | |_| | __/ |__| (_) | | | | _ | (_| (_) | | | | | | |
| \____|_|\__,_|\___|\____\___/|_| |_| (_) \___\___/|_| |_| |_| |
| |
.=======================================================================================================.
Making all in tests/unit
make[2]: Entering directory '/usr/src/freeswitch/tests/unit'
CC switch_eavesdrop.o
CCLD switch_eavesdrop
CC switch_event.o
CCLD switch_event
CC switch_hash.o
CCLD switch_hash
CC switch_ivr_originate.o
CCLD switch_ivr_originate
CC switch_utils.o
CCLD switch_utils
CC switch_core.o
CCLD switch_core
CC switch_console.o
CCLD switch_console
CC switch_vpx.o
CCLD switch_vpx
CC switch_core_file.o
CCLD switch_core_file
CC switch_ivr_play_say.o
CCLD switch_ivr_play_say
CC switch_core_codec.o
CCLD switch_core_codec
CC switch_rtp.o
CCLD switch_rtp
CC switch_xml.o
CCLD switch_xml
CC switch_core_video.o
CCLD switch_core_video
CC switch_core_db.o
CCLD switch_core_db
CC switch_vad.o
CCLD switch_vad
CC switch_packetizer.o
CCLD switch_packetizer
CC switch_core_session.o
CCLD switch_core_session
CC test_sofia.o
CCLD test_sofia
CC switch_ivr_async.o
CCLD switch_ivr_async
CC switch_core_asr.o
CCLD switch_core_asr
CC switch_log.o
CCLD switch_log
CC switch_hold.o
CCLD switch_hold
CC switch_sip.o
CCLD switch_sip
make[2]: Leaving directory '/usr/src/freeswitch/tests/unit'
make[1]: Leaving directory '/usr/src/freeswitch'
Запускаем установку
# make install
Установка завершается выводом:
+ FreeSWITCH has been successfully installed. +
+ +
+ Install sounds: +
+ (uhd-sounds includes hd-sounds, sounds) +
+ (hd-sounds includes sounds) +
+ ------------------------------------ +
+ make cd-sounds-install +
+ make cd-moh-install +
+ +
+ make uhd-sounds-install +
+ make uhd-moh-install +
+ +
+ make hd-sounds-install +
+ make hd-moh-install +
+ +
+ make sounds-install +
+ make moh-install +
+ +
+ Install non english sounds: +
+ replace XX with language +
+ (ru : Russian) +
+ (fr : French) +
+ ------------------------------------ +
+ make cd-sounds-XX-install +
+ make uhd-sounds-XX-install +
+ make hd-sounds-XX-install +
+ make sounds-XX-install +
+ +
+ Upgrade to latest: +
+ ---------------------------------- +
+ make current +
+ +
+ Rebuild all: +
+ ---------------------------------- +
+ make sure +
+ +
+ Install/Re-install default config: +
+ ---------------------------------- +
+ make samples +
+ +
+ +
+ Additional resources: +
+ ---------------------------------- +
+ https://www.freeswitch.org +
+ https://freeswitch.org/confluence +
+ https://freeswitch.org/jira +
+ http://lists.freeswitch.org +
+ +
+ irc.freenode.net / #freeswitch +
+ +
+ Register For ClueCon: +
+ ---------------------------------- +
+ https://www.cluecon.com +
+ +
+-------------------------------------------------+
.=======================================================================================================.
| _ _ ____ _ ____ |
| / \ _ __ _ __ _ _ __ _| | / ___| |_ _ ___ / ___|___ _ __ |
| / _ \ | '_ \| '_ \| | | |/ _` | | | | | | | | |/ _ \ | / _ \| '_ \ |
| / ___ \| | | | | | | |_| | (_| | | | |___| | |_| | __/ |__| (_) | | | | |
| /_/ \_\_| |_|_| |_|\__,_|\__,_|_| \____|_|\__,_|\___|\____\___/|_| |_| |
| |
| ____ _____ ____ ____ __ |
| | _ \_ _/ ___| / ___|___ _ __ / _| ___ _ __ ___ _ __ ___ ___ |
| | |_) || || | | | / _ \| '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \ |
| | _ < | || |___ | |__| (_) | | | | _| __/ | | __/ | | | (_| __/ |
| |_| \_\|_| \____| \____\___/|_| |_|_| \___|_| \___|_| |_|\___\___| |
| |
| ____ _ ____ |
| / ___| |_ _ ___ / ___|___ _ __ ___ ___ _ __ ___ |
| | | | | | | |/ _ \ | / _ \| '_ \ / __/ _ \| '_ ` _ \ |
| | |___| | |_| | __/ |__| (_) | | | | _ | (_| (_) | | | | | | |
| \____|_|\__,_|\___|\____\___/|_| |_| (_) \___\___/|_| |_| |_| |
| |
.=======================================================================================================.
Checking module integrity in target [/usr/lib64/freeswitch/mod]
make[2]: Leaving directory '/usr/src/freeswitch/build'
Making install in tests/unit
make[2]: Entering directory '/usr/src/freeswitch/tests/unit'
make[3]: Entering directory '/usr/src/freeswitch/tests/unit'
/bin/mkdir -p '/usr/bin'
/bin/sh /usr/src/freeswitch/libtool --mode=install /bin/install -c switch_eavesdrop '/usr/bin'
libtool: install: /bin/install -c .libs/switch_eavesdrop /usr/bin/switch_eavesdrop
make[3]: Nothing to be done for 'install-data-am'.
make[3]: Leaving directory '/usr/src/freeswitch/tests/unit'
make[2]: Leaving directory '/usr/src/freeswitch/tests/unit'
make[1]: Leaving directory '/usr/src/freeswitch'
Теперь осталось установить звуки:
# make cd-sounds-install
# make cd-moh-install
# make cd-sounds-ru-install
11. Freeswitch установлен. Теперь перед первым запуском нужно немного подрехтовать систему.
Сначала отключаем поддержку IPv6
# mv /etc/freeswitch/sip_profiles/internal-ipv6.xml /etc/freeswitch/sip_profiles/internal-ipv6.xml.removed
# mv /etc/freeswitch/sip_profiles/external-ipv6.xml /etc/freeswitch/sip_profiles/external-ipv6.xml.removed
12. Выполняем первый запуск. При первом запуске Freeswitch создаст необходимые для работы каталоги.
# /usr/bin/freeswitch
Запуск завершается выводом:
| _____ ______ _____ _____ ____ _ _ |
| | ___| __ ___ ___/ ___\ \ / /_ _|_ _/ ___| | | | |
| | |_ | '__/ _ \/ _ \___ \\ \ /\ / / | | | || | | |_| | |
| | _|| | | __/ __/___) |\ V V / | | | || |___| _ | |
| |_| |_| \___|\___|____/ \_/\_/ |___| |_| \____|_| |_| |
| |
.=============================================================.
| Anthony Minessale II, Michael Jerris, Brian West, Others |
| FreeSWITCH (http://www.freeswitch.org) |
| Paypal Donations Appreciated: paypal@freeswitch.org |
| Brought to you by ClueCon http://www.cluecon.com/ |
.=============================================================.
.=======================================================================================================.
| _ _ ____ _ ____ |
| / \ _ __ _ __ _ _ __ _| | / ___| |_ _ ___ / ___|___ _ __ |
| / _ \ | '_ \| '_ \| | | |/ _` | | | | | | | | |/ _ \ | / _ \| '_ \ |
| / ___ \| | | | | | | |_| | (_| | | | |___| | |_| | __/ |__| (_) | | | | |
| /_/ \_\_| |_|_| |_|\__,_|\__,_|_| \____|_|\__,_|\___|\____\___/|_| |_| |
| |
| ____ _____ ____ ____ __ |
| | _ \_ _/ ___| / ___|___ _ __ / _| ___ _ __ ___ _ __ ___ ___ |
| | |_) || || | | | / _ \| '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \ |
| | _ < | || |___ | |__| (_) | | | | _| __/ | | __/ | | | (_| __/ |
| |_| \_\|_| \____| \____\___/|_| |_|_| \___|_| \___|_| |_|\___\___| |
| |
| ____ _ ____ |
| / ___| |_ _ ___ / ___|___ _ __ ___ ___ _ __ ___ |
| | | | | | | |/ _ \ | / _ \| '_ \ / __/ _ \| '_ ` _ \ |
| | |___| | |_| | __/ |__| (_) | | | | _ | (_| (_) | | | | | | |
| \____|_|\__,_|\___|\____\___/|_| |_| (_) \___\___/|_| |_| |_| |
| |
.=======================================================================================================.
2024-12-19 20:18:17.238152 100.00% [INFO] switch_core.c:2503
FreeSWITCH Version 1.10.12-release~64bit (-release 64bit)
FreeSWITCH Started
Max Sessions [1000]
Session Rate [30]
SQL [Enabled]
2024-12-19 20:18:17.238155 100.00% [CONSOLE] switch_core.c:2511
[This app Best viewed at 160x60 or more..]
freeswitch@pbx.smarts.ru> 2024-12-19 20:18:18.657140 99.83% [NOTICE] mod_signalwire.c:401 Go to https://signalwire.com to set up your Connector now! Enter connection token aa6eadd9-0a85-45db-9fcc-466f7beddbe1
2024-12-19 20:18:18.657140 99.83% [INFO] mod_signalwire.c:1125 Next SignalWire adoption check in 1 minutes
2024-12-19 20:19:18.737283 99.57% [NOTICE] mod_signalwire.c:401 Go to https://signalwire.com to set up your Connector now! Enter connection token aa6eadd9-0a85-45db-9fcc-466f7beddbe1
Что бы убедиться, что все работает вводим команду "sofia status"
freeswitch@pbx.domen.ru> sofia status
=================================================================================================
172.31.0.3 alias internal ALIASED
external profile sip:mod_sofia@1.3.20.5:5080 RUNNING (0)
external::example.com gateway sip:joeuser@example.com NOREG
internal profile sip:mod_sofia@1.3.20.5:5060 RUNNING (0)
=================================================================================================
2 profiles 1 alias
Выход из системы по команде «shutdown».
Во всех современых сборках Freeswitch есть модуль mod_signalwire, который пытается установить связь с сервером компании SignalWire, спонсирующей разработку Freeswitch. Компания SignalWire предлагает услуги VoIP телефонии, но для РФ это не актуально. Для отключения этой навязчивой рекламы нужно отключить модуль mod_signalwire из загрузки.
Для этого открываем
# nano /etc/freeswitch/autoload_configs/modules.conf.xml
и комментируем строчку
<load module="mod_signalwire"/>
превращая ее в
<!--<load module="mod_signalwire"/>-->
Теперь Freeswitch будет запускаться без функционала SignalWire.
13. Создаем системного пользователя от имени которого будет в дальнейшем работать freeswitch
# useradd --system freeswitch
# passwd -l freeswitch
Увеличиваем количество лимитов на открытие файлов и обращений к жесткому диску для пользователя freeswitch
# nano /etc/security/limits.conf
Вписываем в конец файла перед строкой
# End of file
Следующее строки:
freeswitch hard nofile 500000
freeswitch soft nofile 500000
14. Назначаем права на папки freeswitch
# chown -R freeswitch:freeswitch /etc/freeswitch/ /var/lib/freeswitch /var/log/freeswitch /run/freeswitch
15. Добавляем freeswitch в автозапуск системы systemd
# nano /usr/lib/systemd/system/freeswitch.service
Содержимое файла:
Description=freeswitch
After=syslog.target network.target postgresql-15.service httpd.service local-fs.target
[Service]
Type=forking
RuntimeDirectory=freeswitch
RuntimeDirectoryMode=0750
PIDFile=/run/freeswitch/freeswitch.pid
PermissionsStartOnly=true
ExecStart=/usr/bin/freeswitch -nc -nonat
ExecReload=/usr/bin/kill -HUP $MAINPID
TimeoutSec=45s
Restart=always
WorkingDirectory=/run/freeswitch
User=freeswitch
Group=freeswitch
UMask=0007
[Install]
WantedBy=multi-user.target
Рестартуем демон systemd:
# systemctl daemon-reload
Теперь можно запустить сервис freeswitch командой:
# systemctl start freeswitch
# systemctl enable freeswitch
К запущенному сервису Freeswitch можно подключится командой fs_cli
# fs_cli
| _____ ____ ____ _ ___ |
| | ___/ ___| / ___| | |_ _| |
| | |_ \___ \ | | | | | | |
| | _| ___) | | |___| |___ | | |
| |_| |____/ \____|_____|___| |
| |
.=======================================================.
| Anthony Minessale II, Ken Rice, |
| Michael Jerris, Travis Cross |
| FreeSWITCH (http://www.freeswitch.org) |
| Paypal Donations Appreciated: paypal@freeswitch.org |
| Brought to you by ClueCon http://www.cluecon.com/ |
.=======================================================.
.=======================================================================================================.
| _ _ ____ _ ____ |
| / \ _ __ _ __ _ _ __ _| | / ___| |_ _ ___ / ___|___ _ __ |
| / _ \ | '_ \| '_ \| | | |/ _` | | | | | | | | |/ _ \ | / _ \| '_ \ |
| / ___ \| | | | | | | |_| | (_| | | | |___| | |_| | __/ |__| (_) | | | | |
| /_/ \_\_| |_|_| |_|\__,_|\__,_|_| \____|_|\__,_|\___|\____\___/|_| |_| |
| |
| ____ _____ ____ ____ __ |
| | _ \_ _/ ___| / ___|___ _ __ / _| ___ _ __ ___ _ __ ___ ___ |
| | |_) || || | | | / _ \| '_ \| |_ / _ \ '__/ _ \ '_ \ / __/ _ \ |
| | _ < | || |___ | |__| (_) | | | | _| __/ | | __/ | | | (_| __/ |
| |_| \_\|_| \____| \____\___/|_| |_|_| \___|_| \___|_| |_|\___\___| |
| |
| ____ _ ____ |
| / ___| |_ _ ___ / ___|___ _ __ ___ ___ _ __ ___ |
| | | | | | | |/ _ \ | / _ \| '_ \ / __/ _ \| '_ ` _ \ |
| | |___| | |_| | __/ |__| (_) | | | | _ | (_| (_) | | | | | | |
| \____|_|\__,_|\___|\____\___/|_| |_| (_) \___\___/|_| |_| |_| |
| |
.=======================================================================================================.
Type /help <enter> to see a list of commands
[This app Best viewed at 160x60 or more..]
+OK log level [7]
freeswitch@pbx.domen.ru>
Выход из консоли командой CTRL+D