В какой-то момент у нас в компании назрела необходимость упростить развертывание ПО Asterisk
Основная проблема возникала при сборке Asterisk из исходников, так как необходимо выбирать нужные/ненужные модули, а простое копирование файла menuselect.makeopts при переходе от версии к версии не всегда срабатывало
До кучи решили переехать с CentOS 6/7 на Oracle 8 (это, как оказалось, еще тот квест 8), так как версия свежая и инструкции, которые в этих ваших интернетах кочуют с сайта на сайт не всегда соответствуют действительности. В частности почти весь день мы угрохали на установку libedit-devel — его небыло в репозиториях, репозиторий PowerTools, на который ссылаются инструкции в интернетах, в Oracle 8 отсуствует. Оказалось, что в Oracle необходимо активировать репозиторий ol8_codeready_builder :)
Итак, поехали.
1. Устанавливаем Oracle 8, настраиваем сеть
2. Выполняем действия необходимые, чтобы установка Asterisk прошла без танцев с бубном:
3. В каталог /usr/src/asterisk скачиваем любимую версию asterisk с официального сайта или клонируем с github (на текущий момент актуальная LTS это 18)
https://downloads.asterisk.org/pub/telephony/asterisk/
https://github.com/asterisk/asterisk
4. Если скачали архив, то разворачиваем его и переходим в созданный каталог
5. Запускаем подготовку к сборке
6. Запускаем сборку menuselect
7. Сформируем файл со списком всех модулей
menuselect/menuselect --list-options > ../options.conf
8. В результате выполнения у нас получится файл со следующим содержимым
8. Откроем полученный файл на редактирование и ставим ± у соответсвующих модулей
9. В /usr/src/asterisk создадим файл build, который будет собирать и устанавливать Asterisk только с нужными модулями
10. Заталкиваем в git файлы build и options.conf
Основная проблема возникала при сборке 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)
citius
05.11.2021 23:37+1Все подготовительные действия можно запечь packer-ом в готовый образ, либо ansible-ом бутстрапить с чистого по надобности.
Компиляцию и пакетирование в пайплайны какого-нить gitlab-ci или что там больше любите.
Все что получилось в первых абзацах затолкать в репозиторий и пускать по кнопке или по коммиту в файл options.conf.
Вот тогда это будет "автоматизация сборки".
ugenk
06.11.2021 08:55Я думаю, что для многих тут «Oracle 8» - это не дистрибутив в первую очередь :-)
mishutka_ua
06.11.2021 13:48+2А «RHEL 8» - дистрибутив? Меня другое интересует, зачем вот это - SELINUX=permissive ?
sardigital
не заметил тут особой автоматизации. вот тут, например, ее больше - https://github.com/markuslindenberg/docker-asterisk-debbuilder