17 марта 2017 г.

LXC error cpio: cap_set_file

Ндя, "Всё глыбже и глыбже." (с) не я

Собираю контейнер под FreePBX. И тут у меня вдруг не устанавливается апач из стандартных пакетов. Выдает ошибку: cpio: cap_set_file

Лечится явным прописыванием в конфиг файл контейнера параметров:
lxc.cap.drop = mac_admin mac_override
#lxc.cap.drop = setfcap
lxc.cap.drop = sys_module sys_nice sys_pacct
lxc.cap.drop = sys_rawio sys_time

Обратите внимание, что в глобальных параметрах, lxc.cap.drop = setfcap был определен. Если его не прописывать явно в конфиге, то все будет пучком.

LXC контейнер, systemd-journal грузит CPU на 100%

Ну вот, таки начал разбираться с LXC.
Базовая система Centos 7, контейнер Centos 7 и сразу бабах! CPU 100% на процессе systemd-journal. Контейнер не отзывается, и грохается жестко только через kill -9.

Проблема в закольцованном файле kmsg, который создается при запуске контейнера в директории rootfs.dev.
Лечится удалением ссылки из rootfs.dev и отменой записи сообщений ядра.

1. В конфигурационном файле контейнера config добавляем строку:
lxc.kmsg = 0. Он запрещает создание файла kmsg.

2. Директория rootfs.dev появляется только после первого запуска контейнера, поэтому у нас карма: контейнер надо убить. После этого удаляем файл ссылки kmsg.
Если вы не запускали контейнер, достаточно выполнение пункта 1.

Запускаем контейнер, все работает.

16 марта 2017 г.

Asterisk pjsip и Youmagic (MTT)

Взял тестовый номерок на YouMagiс. Решил через него астериск погонять. И тут выяснилось, что все примеры используют стандартный chan_sip или для FreePBX. А у меня pjsip стоит и рулю я ручками через конфиги:).
Вообщем в итоге получилось, вот так :

pjsip.conf
======================
[global]
type=global
; да, я даже freepbx заводил в виртуалке :) но не понравилось
; оно мне, часть конфига спер оттуда.
user_agent=FPBX-13.0.190.19(13.14.0)
default_outbound_endpoint=dpma_endpoint
; debug не понравился. Лучше tcpdump для отладки еще 
; ничего не придумали :)
;debug=yes

[dpma_endpoint]
type=endpoint
context=dpma-invalid

[0.0.0.0-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
; разумеется вместо 999 надо писать реальный IP роутера,
; за которым за натом стоит астериск
external_media_address=999.999.999.999
external_signaling_address=999.999.999.999
allow_reload=yes
local_net=192.168.0.0/24

; тут определены два внутренних телефона 100 и 101
; много текста не показано

;==== YouMagic =======================
; Предположим, что МТТ дали телефон, он же логин (хотя логин 
; при регистрации можно установить любой):
; 74990000000
; и пароль: хитрыйпароль

[reg_voip.mtt.ru]
type = registration
retry_interval = 20
max_retries = 10
contact_user = 74990000000
expiration = 120
transport = 0.0.0.0-udp
outbound_auth = auth_reg_voip.mtt.ru
client_uri = sip:74990000000@voip.mtt.ru
server_uri = sip:voip.mtt.ru:5060

[auth_reg_voip.mtt.ru]
type = auth
password = хитрыйпароль
username = 74990000000

[mytrunk]
type = aor
contact = sip:74990000000@voip.mtt.ru

[mytrunk]
type = identify
endpoint = mytrunk
; это IP MTT сервера
match = 80.75.132.66

[mytrunk]
type = auth
username = 74990000000
password = хитрыйпароль
;realm = voip.mtt.ru

[mytrunk]
type = endpoint
context = from-external
transport=0.0.0.0-udp
disallow = all
allow = ulaw
allow = alaw
rtp_symmetric = yes
rewrite_contact = yes
from_user = 74990000000
from_domain=voip.mtt.ru
; МТТ не может аутентифицироваться на нашем сервере
; поэтому не включаем аутентификацию при входящих с МТТ
;auth = mytrunk
outbound_auth = mytrunk
aors = mytrunk
=======================================================

extensions.conf
=====================================================
[others]

[from-internal]
exten => 100,1,Dial(PJSIP/100,20)
exten => 100,2,VoiceMail(100,u)

exten => 101,1,Dial(PJSIP/101,20)
exten => 101,2,VoiceMail(101,u)

exten => *98,1,VoiceMailMain(${CALLERID(num)},s)

exten => _810X.,1,Busy

exten => _8XXX.,1,NoOp("8xxx")
exten => _8XXX.,n,Dial(PJSIP/${EXTEN}@mytrunk)
exten => _8XXX.,n,Hangup

[from-external]
exten => 74990000000,1,Dial(PJSIP/100)
exten => 74990000000,n,Hangup
=======================================================

Разумеется, мой сервер за натом. И, разумеется, в фаерволе разрешены хождение пакетов и их проброс только с сервера МТТ.

14 марта 2017 г.

Проблема выбора.

Выбираю софт для группы IP телефонных станций. Щупаю Asterisk и FreeSWITCH .
Решил таки предложить использовать первый. Уж очень он легко и прозрачно конфигурируется :) Возможно FreeSWITCH надежнее и  быстрее, но блин, руками править XML - это жестоко. А мне ведь в будущем систему отдавать в обслуживание телефонистам старой закалки :) Там точно XML не пройдет.
Ну и FastAGI в мыслях держу.

З.Ы. Заодно разобрался с докером. Все думал, зачем оно мне надо, а тут "очень даже в дырочку". Сложная в установке система, при помощи докера великолепно распространяется на много машин. Мне понравилось.

З.З.Ы. lua - стоит изучать для конфигурации Asterisk? Или ну его на фиг, стандартными средствами обойтись можно?

9 марта 2017 г.

JavaFX и java.lang.nullpointerexception location is required

Написал тут программульку для копания в OpenLDAP. Локально из jar файла все работает великолепно. Решил раздавать ее коллегам правильно, через веб сервер. И тут началось:

java.lang.nullpointerexception location is required

Не грузит сволочь fxml файл.

Облазил все форумы, пробовал и через class.getClassLoader().getResource() и просто class.getResource(). Читаю документацию, указываю пути как надо, с учетом выбранного метода. Не работает хоть тресни.

А всего то, надо было подписать приложение... твою едрить через это самое...