Как конвертировать звуковые файлы в ulaw, alaw, gsm, g722 и т.д. для Asterisk

После заказа озвучки у профессионального диктора и нарезки в звуковом редакторе, понадобилось сохранить звуки в разных форматах, оригинал был в wav, так вот приведу пример конвертации через sox (он уже был в системе с Asterisk):

sox -V vm-intro.wav -r 8000 -c 1 -t ul vm-intro.ulaw
sox -V vm-intro.wav -r 8000 -c 1 -t al vm-intro.alaw
sox -V vm-intro.wav -r 8000 -c 1 -t gsm vm-intro.gsm

Кодек g722 вроде он не поддерживает, по крайней мере в man sox не нашел, поэтому установил ffmpeg (в системе Ubuntu Server):

sudo apt-get install ffmpeg

И выполнил конвертирование:

ffmpeg -i vm-intro.wav -ar 16000 -acodec g722 vm-intro.g722

Стандартная директория со звуками Asterisk — /usr/share/asterisk/sounds

Список SNMP OID и MIB для интерфейсов

Приведу ниже список стандартных OID и MIB с описанием для получения по SNMP различной статистики сетевых интерфейсов коммутаторов, маршрутизаторов, точек доступа, сетевых плат в серверах и т.д.

Проверить OID и MIB можно из Linux например командой (где .1, это OID):
snmpwalk -v2c -c комьюнити 192.168.1.2 .1

Посмотреть описание сетевых интерфейсов можно через OID (в скобках MIB):

.1.3.6.1.2.1.2.2.1.2 (ifDescr)

Список индексов интерфейсов портов:

.1.3.6.1.2.1.17.1.4.1.2 (ifIndex)

Статус порта, есть линк или нет (1-up, 2-down, 3-testing, 4-unknown, 5-dormant, 6-notPresent, 7-lowerLayerDown):

1.3.6.1.2.1.2.2.1.8 (ifOperStatus)

Статус порта, включен или отключен программно (1-up, 2-down, 3-testing):

ifAdminStatus

Время последнего изменения порта:

1.3.6.1.2.1.2.2.1.9 (ifLastChange)

Трафик портов:

1.3.6.1.2.1.2.2.1.10 (ifInOctets)
1.3.6.1.2.1.2.2.1.16 (ifOutOctets)

Для 64-битных счетчиков трафика используется MIB:

ifHCInOctets
ifHCOutOctets

Количество пакетов содержащих ошибки:

1.3.6.1.2.1.2.2.1.20 (ifOutErrors)
1.3.6.1.2.1.2.2.1.20 (ifInErrors)

Количество отброшенных пакетов, которые по сути без ошибок, но были отброшены например для освобождения буферного пространства:

ifInDiscards
ifOutDiscards

Физический адрес:

ifPhysAddress

Размер наибольшего пакета, который может быть отправлен:

ifMtu

Тип интерфейса:

ifType

Unicast пакеты:

ifIntUcastPkts
ifOutUcastPkts

Счетчик Broadcast пакетов:

ifInBroadcastPkts
ifOutBroadcastPkts

Скорость порта:

1.3.6.1.2.1.2.2.1.5 (ifSpeed)

Список VLAN:

.1.3.6.1.2.1.17.7.1.4.3.1.1

Время работы устройства:

1.3.6.1.2.1.1.3 (sysUpTime)

Описание устройства:

1.3.6.1.2.1.1.1.0

Как убрать отображение New User в CallerID Asterisk

Заметил однажды, что при входящих звонках с Goip4 шлюза на SIP телефонах отображается не только номер звонящего, а и переменно с номером телефона мигает имя «New User», которое явно лишнее и мешает.

После просмотра конфигурационных файлов Asterisk, заметил в файле /etc/asterisk/users.conf в секции general некоторые стандартные значения, а именно:

[general]
fullname = New User

Которые нужно закомментировать:

;fullname = New User

И перезапустить Asterisk чтобы применить изменения:

sudo service asterisk restart

Все, теперь при входящих звонках будет отображаться только номер телефона.

Установка модуля PageSpeed

На тесте утановлю модуль PageSpeed в Ubuntu Server 14.04.5 LTS и CentOS

Страница загрузки с разными версиями модуля https://modpagespeed.com/doc/download
https://developers.google.com/speed/pagespeed/module/

И так, скачаем стабильную версию для Debian/Ubuntu:

sudo wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb

Или для CentOS/Fedora:

https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.rpm

Установим в Ubuntu, модуль автоматически активируется:

sudo dpkg -i mod-pagespeed-*.deb
sudo apt-get -f install

В CentOS так:

sudo yum install at
sudo rpm -U mod-pagespeed-*.rpm

Перезапустим apache2 чтобы применить изменения:

sudo service apache2 restart
sudo /etc/init.d/apache2 restart

Все, модуль установлен.

Обновлять в дальнейшем он будет вместе с системой командами:

sudo apt-get update
sudo apt-get upgrade

При необходимости деактивировать/активировать модуль можно командами:

sudo a2dismod pagespeed
sudo a2enmod pagespeed

Либо полностью удалить:

sudo apt-get remove mod-pagespeed-stable
sudo yum remove mod-pagespeed-stable

Файлы конфигурации модуля находятся по адресам:
etc/apache2/mods-available/pagespeed.conf
/etc/httpd/conf.d/

Решение ошибки в Asterisk «File vm-newn does not exist in any format»

При звонке на номер голосовой почты заметил в консоли Asterisk следующие ошибки:

[Apr 10 17:08:01] WARNING[19135][C-00001cf4]: file.c:701 ast_openstream_full: File digits/1n does not exist in any format
[Apr 10 17:08:01] WARNING[19135][C-00001cf4]: file.c:1017 ast_streamfile: Unable to open digits/1n (format (ulaw)): No such file or directory
[Apr 10 17:08:01] WARNING[19135][C-00001cf4]: file.c:701 ast_openstream_full: File vm-newn does not exist in any format
[Apr 10 17:08:01] WARNING[19135][C-00001cf4]: file.c:1017 ast_streamfile: Unable to open vm-newn (format (ulaw)): No such file or directory

Ошибки возникают из-за отсутствия звуковых файлов, например в моем случае в голосовой почте одно сообщение и при попытке сказать «у вас одно(1n.ulaw) новое(vm-newn) сообщение возникает ошибка и ложится трубка.

Архив с набором нужных файлов достаточно просто загрузить с официального сайта http://downloads.asterisk.org/pub/telephony/sounds/releases/ и распаковать в директорию /usr/share/asterisk/sounds
После этого ошибки не должно быть.

Настройка голосовой почты в Asterisk

Для примера настрою голосовую почту для SIP номера 207.
Голосовые сообщения будут отправляться на email с помощью Postfix.
Как его установить я описывал в этой статье — Установка и настройка Postfix.

Для начала укажем в контексте SIP 207 (обычно в файле /etc/asterisk/sip.conf) следующее:

mailbox=207@voicemailcontext

Далее настроим конфигурацию голосовой почты в файле /etc/asterisk/voicemail.conf:

[general]
; формат звуковых файлов
format=wav49|gsm|wav
; от кого слать письма с уведомлениями
serveremail=noreply@example.com
; прикреплять ли к письму аудио файл
attach=yes
; максимальное количество сообщения (стандартно 100, максимум 9999)
maxmsg=100
; максимальное время сообщения в секундах
maxsecs=120
; максимальное время приветствия в секундах
maxgreet=60
; Количество секунд тишины до завершения записи
maxsilence=10
; порог чувствительности к тишине, чем ниже тем чувствительнее, значение от 0 до 256, стандартно 128
silencethreshold=128
; Максимальное число неудачных попыток подключения
maxlogins=3
; Автоматически перемещать прослушиваемые сообщения в папку «Old». По умолчанию включено.
moveheard=yes
; Кодировка сообщений, стандартная ISO-8859-1, с ней у меня часть текста отображалась неверно, поэтому лучше указать UTF-8
charset=UTF-8
; Пропустить строку «[PBX]:» из заголовка сообщения
pbxskip=yes
; Текст строки «От:»
fromstring=VoiceMail
; Тема письма
emailsubject=Новое голосовое сообщение ${VM_MSGNUM} в ящике ${VM_MAILBOX}
; Содержимое письма
emailbody=Уважаемый ${VM_NAME}:\n\n\tВам пришло новое голосовое сообщение длиной ${VM_DUR} под номером (number ${VM_MSGNUM})\nв ящик ${VM_MAILBOX} от ${VM_CALLERID}, в ${VM_DATE}. \n\t
; Формат даты
emaildateformat=%A, %d %B %Y в %H:%M:%S
pagerdateformat=%T %D
; стандартная программа для отправки почты
mailcmd=/usr/sbin/sendmail -t
; удалять ли сообщения с сервера после отправки в почтовом вложении
delete=yes

[zonemessages]
ru=Europe/Moscow|'vm-received' q 'digits/at' H 'hours' M 'minutes'
ua=Europe/Kiev|'vm-received' q 'digits/at' H 'hours' M 'minutes'

; пропишем параметры контекста voicemailcontext, 1111 - пароль голосовой почты(можно не указывать), Username - имя пользователя, test@example.com - на какой адрес слать голосовые сообщения, после запятой можно указать еще один, в конце опции
[voicemailcontext]
207 => 1111,Username,test@example.com,,attach=yes|tz=ua|delete=yes

Теперь в конфигурации плана набора /etc/asterisk/extensions.conf в основной контекст добавим номер позвонив на который можно прослушать почту

exten => 500,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to VoiceMail (500))
exten => 500,n,VoiceMailMain(0${CALLERID(num)}@voicemailcontext,s)
exten => 500,n, Hangup

И добавим в контекст набора номера 207 строку VoiceMail (после чего, если номер не отвечает или не в сети, будет срабатывать голосовая почта), например:

[207]
exten => 207,1,Dial(SIP/207,30)
exten => 207,n,Answer
exten => 207,n,VoiceMail(207@voicemailcontext)

Напоследок подключимся к консоли Asterisk, перезагрузим конфигурацию, посмотрим список голосовых ящиков и писем:

asterisk -rvv
sip reload
voicemail reload
dialplan reload
voicemail show users
exit

Записанные сообщения хранятся в директории /var/spool/asterisk/voicemail/
Звуковые файлы хранятся в /usr/share/asterisk/sounds

Смотрите также:
Решение ошибки в Asterisk «File vm-newn does not exist in any format»

Как конвертировать звуковые файлы в ulaw, alaw, gsm, g722 и т.д.

Восстановление GRUB Linux

Обычно на каждом диске есть MBR (главная загрузочная запись, master boot record) и при включении компьютера, BIOS обращается к ней за информацией для дальнейшей загрузки. В Linux системах в качестве загрузчика используется GRUB, о вариантах восстановления которого я и напишу ниже.

1) Первый вариант.
Запускаем систему с LiveCD/USB, например в образе Ubuntu Desktop кроме установки есть возможность запустить систему.
Откроем терминал, для этого нажмем клавишами Alt+F2 и введем команду:

gnome-terminal

Посмотрим список разделов:

sudo fdisk -l

Допустим раздел с загрузчиком на /dev/sda1, подключим его в директорию /mnt:

sudo mount /dev/sda1 /mnt

И установим grub в MBR следующей командой:

sudo grub-install --root-directory=/mnt /dev/sda

Возможно также понадобится обновить меню grub:

sudo update-grub --output=/mnt/boot/grub/grub.cfg

Готово, grub восстановлен!

2) Второй вариант через chroot.
Опять же нужно запустить систему с LiveCD/USB и открыть терминал.
Допустим раздел с загрузчиком вместе с основным разделом на /dev/sda1.

Подключим его в /mnt, а также привяжем несколько необходимых директорий:

sudo mount /dev/sda1 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys  /mnt/sys

Если /boot находит на отдельном разделе, то подключим его в /mnt/boot, например так:

sudo mount /dev/sda2 /mnt/boot

Перейдем в chroot:

sudo chroot /mnt

УстановиМ GRUB:

grub-install /dev/sda

В случае ошибки наберем:

grub-install --recheck /dev/sda

Можно еще так:

grub-install --recheck --no-floppy /dev/sda

Выходим из chroot:

exit

Отсоединим разделы:

sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt

Аналогично /boot если он отдельно:

sudo umount /mnt/boot

Перезагрузим компьютер:

sudo reboot

3) Третий вариант, используя режим восстановления.
Посмотрим какие разделы есть следующей командой (нумерация дисков начинается с 0, а разделов с 1, то есть диск /dev/sda может называться например hd0, а раздел /dev/sda1 — hd0,1):

ls

Укажем этот раздел:

set prefix=(hd0,1)/boot/grub 
set root=(hd0,1)

И проверим есть ли тут grub:

ls /boot/grub

Если есть, подгружаем модули:

insmod ext2
insmod normal
normal

Если раздел в формате btrfs, то выполним чуть другие команды:

set prefix=(hd0,1)/@/boot/grub
set root=(hd0,1)
insmod btrfs
insmod normal
normal

После команд запустится Grub и определит какие операционные системы установлены.
На последок запустим Linux и от root пользователя установим grub на нужный диск, например /dev/sda:

grub-install /dev/sda

Перезапустим систему и проверим:

reboot

Все.