В какой-то момент у нас в компании назрела необходимость упростить развертывание ПО Asterisk

Основная проблема возникала при сборке Asterisk из исходников, так как необходимо выбирать нужные/ненужные модули, а простое копирование файла menuselect.makeopts при переходе от версии к версии не всегда срабатывало

До кучи решили переехать с CentOS 6/7 на Oracle 8 (это, как оказалось, еще тот квест 8), так как версия свежая и инструкции, которые в этих ваших интернетах кочуют с сайта на сайт не всегда соответствуют действительности. В частности почти весь день мы угрохали на установку libedit-devel — его небыло в репозиториях, репозиторий PowerTools, на который ссылаются инструкции в интернетах, в Oracle 8 отсуствует. Оказалось, что в Oracle необходимо активировать репозиторий ol8_codeready_builder :)

Итак, поехали.

1. Устанавливаем Oracle 8, настраиваем сеть

2. Выполняем действия необходимые, чтобы установка Asterisk прошла без танцев с бубном:

firewall systemctl stop firewalld ; systemctl disable firewalld

sudo setenforce 0

sudo sed -i 's/\(^SELINUX=\).*/\SELINUX=permissive/' /etc/selinux/config

dnf in --nogpgcheck https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm 

yum -y groupinstall "Development Tools" 

dnf config-manager --set-enabled ol8_codeready_builder

dnf install mc wget curl bind-utils net-tools mlocate man  mutt tcpdump sysstat rsync unzip rsyslog net-snmp mailx lsof chrony

dnf install git dnsmasq svn nfs-utils patch gdb gcc gcc-c++ ncurses-devel libxml2-devel sqlite-devel unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel libtiff-devel libuuid-devel jansson-devel pjproject-devel ImageMagick ghostscript openssl-devel bzip2  mariadb-connector-odbc libedit-devel 

rm -rf /etc/localtime ; ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

systemctl enable chronyd ; systemctl start chronyd

3. В каталог /usr/src/asterisk скачиваем любимую версию asterisk с официального сайта или клонируем с github (на текущий момент актуальная LTS это 18)

https://downloads.asterisk.org/pub/telephony/asterisk/
https://github.com/asterisk/asterisk

4. Если скачали архив, то разворачиваем его и переходим в созданный каталог

tar zxvf asterisk-18-current.tar.gz ; cd asterisk-18.8.0

5. Запускаем подготовку к сборке

./configure

6. Запускаем сборку menuselect

make menuselect.makeopts

7. Сформируем файл со списком всех модулей

menuselect/menuselect --list-options > ../options.conf

8. В результате выполнения у нас получится файл со следующим содержимым

+ chan_mobile MENUSELECT_ADDONS
- chan_ooh323 MENUSELECT_ADDONS
- format_mp3 MENUSELECT_ADDONS
+ res_config_mysql MENUSELECT_ADDONS
+ app_mysql MENUSELECT_ADDONS
+ cdr_mysql MENUSELECT_ADDONS
+ app_agent_pool MENUSELECT_APPS
+ app_authenticate MENUSELECT_APPS
+ app_bridgeaddchan MENUSELECT_APPS
+ app_bridgewait MENUSELECT_APPS
.....

8. Откроем полученный файл на редактирование и ставим ± у соответсвующих модулей

9. В /usr/src/asterisk создадим файл build, который будет собирать и устанавливать Asterisk только с нужными модулями

#!/bin/bash

pushd asterisk-18.8.0

./configure --libdir=/usr/lib64 --without-dahdi --without-pri --without-gtk2 \
    --without-radius --without-x11 --without-speex --with-pjproject-bundled

# ------------------
n=0
while read line; do
    # reading each line
    n=$((n+1))

    STATE=`echo $line | cut -d' ' -f1`
    OPTION=`echo $line | cut -d' ' -f2`
    CATEGORY=`echo $line | cut -d' ' -f3`

    echo "Line No. $n"
    echo "$line"
    echo "state=$STATE cat=$CATEGORY values=$OPTION"

    action='enable'
    if [[ "$state" == '-' ]] ; then
        action='disable'
    fi

    menuselect/menuselect --$action $OPTION menuselect.makeopts

    echo "-------------------"
done < ../options.conf

make

make install

popd

10. Заталкиваем в git файлы build и options.conf

Комментарии (5)


  1. sardigital
    05.11.2021 20:10

    не заметил тут особой автоматизации. вот тут, например, ее больше - https://github.com/markuslindenberg/docker-asterisk-debbuilder


  1. citius
    05.11.2021 23:37
    +1

    Все подготовительные действия можно запечь packer-ом в готовый образ, либо ansible-ом бутстрапить с чистого по надобности.

    Компиляцию и пакетирование в пайплайны какого-нить gitlab-ci или что там больше любите.

    Все что получилось в первых абзацах затолкать в репозиторий и пускать по кнопке или по коммиту в файл options.conf.

    Вот тогда это будет "автоматизация сборки".


  1. ugenk
    06.11.2021 08:55

    Я думаю, что для многих тут «Oracle 8» - это не дистрибутив в первую очередь :-)


    1. mishutka_ua
      06.11.2021 13:48
      +2

      А «RHEL 8» - дистрибутив? Меня другое интересует, зачем вот это - SELINUX=permissive ?


    1. neiroman2k Автор
      07.11.2021 18:31

      Аргументируйте