Гру 282012
 

Шлюз Asterisk и Skype через SipToSis под Debian или Ubuntu

ПО:
OS Ubuntu 12.10 или Debian 6.0.6
Клиент Linux Skype Ubuntu

Задача: привязать к Asterisk аккаунт Skype. Для приема звонков из популярного месенжера. И звонить абонентам Skype.
Для такой услуги существует расширение Asterisk производства Digium, но насколько я знаю, выдача лицензий приостановлена, сейчас SIP туннели продаются напрямую из сайта Skype по 5 евро за канал.
Кто любит шару, и не хочет платить там где можно не платить. Существует для решения подобных задач проект SipToSis позволяющий делать то же самое.

Для начала нам необходимо клиент программы Skype. Для Debian мы качаем версию Skype для Ununtu. С SipToSis работает путем взаимодействия с ним через Skype API. Так же необходимо не забывать, что для работы Skype необходима графическая среда. Для запуска его в консольном Linux, будем использовать Xvfb (X Virtual Frame Buffer) и для доступа с другой машины – x11vnc.

Устанавливаем все необходимые приложения:

Для аудио:

sudo apt-get install -y alsa-utils alsa-base alsa-tools

Графический сервер:

sudo apt-get install -y xvfb x11vnc 

Java приложения:

sudo apt-get install -y openjdk-6-jdk 

Графическая оболочка:

sudo apt-get install -y fluxbox

Устанавливаем пакет Skype, который взят с официально сайта и актуален на момент написания статьи:

dpkg -i skype-ubuntu-lucid_4.1.0.20-1_i386.deb

Возможно ругнется на неустановленные зависимости, лечится это:

sudo apt-get -f install

Нам необходимо сделать подгрузку виртуально звуковой карты, она используется в подключении.
Делаем разовую подгрузку в ядро.

modprobe snd-dummy

Или можно подключить в /etc/modules для постоянно загрузки.

nano /etc/modules
в конце файла вписываем
snd-dummy

Данная команда поможет установить необходимые зависимости.

Кочаем SipToSis с сайта разработчика SipToSis Download
Распаковываем архив, делаем запускаемым файл SipToSis_linux

chmod +x /etc/siptosis/SipToSis_linux

Создаем Транк в Астериске

Trunk Name: Skype_to_Sip

username=Skype_to_Sip
type=friend
context=from-internal
secret=skype_call_password
host=dynamic
nat=yes
dtmfmode=auto
canreinvite=no
incominglimit=1
outgoinglimit=1
call-limit=1
busylevel=1

Открываем siptosis.cfg, комментируем блок настроек, начинающийся с #Sample AUTO config with NO registration и убираем комментарии с блока #Sample Asterisk registration example, в нем правим:

host_port=5070
contact_url=Skype_to_Sip@127.0.0.1:5060
from_url=»Skype_to_Sip» 
username=Skype_to_Sip
realm=asterisk
passwd=************
expires=300
do_register=yes
minregrenewtime=120
regfailretrytime=15

Редактируем файл SkypeToSipAuth.props

nano SkypeToSipAuth.props 

Данный файл определяет куда перенаправлять все входящие звонки Skype SIP-пользователю «user2″.
Обязательно, необходимо создать в extensions.conf контекст «Skype», в котором разрешить звонки на этот extension.

*,sip:user2@127.0.0.1:5060

Запускаем маленький скрипт, ставим паузы по 3 секунды, что бы приложения запускались последовательно.

#!/bin/sh
# setting DISPLAY
export DISPLAY=:1
Xvfb ${DISPLAY} -screen 0 800x600x16 &
sleep 3
fluxbox &
sleep 3
echo login1 password1 | skype --pipelogin &
sleep 3
/home/login1/Skype/SipToSis/SipToSis_linux &
sleep 3
x11vnc -display ${DISPLAY} -bg -nopw -listen XXX.XXX.XXX.XXX -xkb

Если вы все сделали правильно, SipToSis запустится и подключиться к Skype. Skype выдаст вопрос – разрешить ли подключение.
Подключаемся с другой машины (в моем случае, с Windows 7 через VNC Viewer), подтверждаем лицензию, настраиваем, отключаем все лишнее.
Я поднял данный клиент на древней машине Seleron 400, 128Мб оперативной памяти, 1Гигобайт винчестер.
Так, что старое железо еще может пригодится.

К сожалению у меня так и не получилось добиться стабильной работы с несколькими аккаунтами. Если у Вас получилось, прошу поделится опытом.

Лис 052012
 

nextboot в FreeBSD

Когда вам необходимо обслуживать несколько серверов удаленно предустановленной на них операционной системой FreeBSD.
Может возникнуть щепетильная ситуация, вдруг если после обновления ядра система не запуститься с новым ядром.
Отправился в интернет почитал как другие справляется с такой задачей, то-есть удаленно пересобирают ядро.
Нашел необходимый проект, под названием nextboot, он меня устроил во всем.

Nextboot дает возможность загрузится с новым ядром первый раз, то есть если загрузка прошла неправильно, то после перезагрузки сервер загрузит старое ядро.
Так можно проверить правильно ли внесли изменения в ядро.
Очень удобно, удаленно пересобирать ядро.

Для того , что бы воспользоваться этим методом необходимо создать файл /boot/nextboot.conf с таким содержимым:

nextboot_enable="YES"kernel="kernel_new"vfs.root.mountfrom="ufs:/dev/ad1s1a"
nextboot_enable="YES"
kernel="kernel_new"
vfs.root.mountfrom="ufs:/dev/ad1s1a"

Или использовать консольную команду. Это гораздо проще^

#  nextboot && -D nextboot -o vfs.root.mountfrom=ufs:/dev/ad1s1a -k kernel_new

Подробнее описание ключей команды:

-D сбрасывает конфигурацию nextboot, если она уже была.

-o vfs.root.mountfrom= Укажем где находится корневой раздел. Вместо ad1s1a указываем свой раздел.

-k — Путь к ядру относительно /boot.
Лис 042012
 

Обновления портов freebsd cvsup

Данный метод устарел

Переход с cvsup на subversion для обновления FreeBSD

Первое, что необходимо сделать после установки FreeBSD, это обновить ветку ОС и список ports

# cd /usr/ports/net/cvsup-without-gui/
# make install clean

После успешной установки отправляемся в папку:

# cd /usr/share/examples/cvsup/
doc-supfile < -  для обновление  документации
ports-supfile < - для обновления портов
stable-supfile < - для обновления стабильной ветки FreeBSD

Начинаем обновление:

cvsup -g -L 2 ./doc-supfile -h cvsup.freebsd.org
cvsup -g -L 2 ./ports-supfile -h cvsup2.freebsd.org
cvsup -g -L 2 ./stable-supfile -h cvsup3.freebsd.org

Описание ключей:

-g типа не использовать  GUI
-L вывод на экран обновляемые действия
-h хост с которого будет происходить обновление

Так же вы можете создать на основе примеров свой supfile:

# SRC collection supfile
*default host=cvsup3.ua.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_8 # Ваша текущая ветка
*default delete use-rel-suffix
*default compress
src-all

Использование *default release=cvs tag=RELENG_8
При получении или обновлении исходных текстов с использованием cvs или CVSup должен быть указан тег ревизии Тег относится либо к определенной линии разработки FreeBSD либо к определенному моменту времени. Первый тип называется ”тегом ветви”, второй тип называется ”тегом релиза”.
Все они, за исключением HEAD (который всегда работает), относятся только к дереву src/. Деревья ports/, doc/ и www/ не имеют тегов ветвей. Поэтому для ports/, doc/ и www/ используют *default release=cvs tag=.
RELENG_8 (рекомендую)
Ветвь разработки FreeBSD-8.X, известная также как FreeBSD 8-STABLE.
RELENG_8_3
Ветвь релиза для FreeBSD-8.3, используемая только для исправлений безопасности и других критических исправлений.

Можно автоматизировать процесс обновления…
Часто все рано не нужно обновляться.
Так что закидывай команду в крон и обновляемся раз в неделю.

#minute  hour    mday    month   wday    who     command
  10     12     6           *     *         root    cvsup -g -L 2 /usr/local/etc/supfile

После обновления ports, желательно так же обновить Index
Есть два варианта обновления:

1) собрать индексный файл самому (рекомендую)
cd /usr/ports && make index
2) скачать уже собранный индексный файл
cd /usr/ports && make fetchindex
Лис 042012
 

FreeBSD Инструкция работы портам ports

Мини инструкция по портам
Установка

# make install clean

Переустановка порта

# make reinstall && make clean

Удаление порта

# make deinstall && make clean

Очистка от промежуточных сборок

# make clean

Очистка от скачанных файлов

# make distclean

Конфигурация порта перед установкой.

# make config

Просмотр зависимостей у пакета.

# cd /usr/ports/net/samba36/ && make all-depends-list

Простой способ искать нужный пакет в портах

# make search name=samba display=name,path

Установка пакета

# pkg_add -r название_пакета

Просмотр установленных пакетов

# pkg_info

Информация о конкретном пакете

# pkg_info название_пакета

Удаление конкретного пакета

pkg_delete название_пакета

Версия пакета

# pkg_version название_пакета

Список пакетов которые необходимо удалить.

# pkg_version -v | grep need

Поиск установленного пакета.

# whereis название_пакета
Лис 042012
 

Отказываемся от Cvsup на freebsd и делаем установку prtunne

Устанавливаем prtunne

Столкнулся с такой ситуацией, cvsup не может работать с прокси http, да и вообще от cvsup FreeBSD уже официально отказалось, подумав как быть в этом случае и решил воспользоваться prtunne.

1.
для начало в самом файле cvsup правим данные, строку
*default_host.
Правим на
*default host=localhost
2.
Ставим из портов сам prtunne
cd /usr/ports/net/prtunne && make install clean
3.
prtunnel —D —H прося —P порт —u пользак —p пароль 5999 cvsup3.ru.freebsd.org 5999
4.
cvsup —g —L 2 /etc/cvsupfile