пятница, 29 марта 2013 г.

Детализация звонков в Asterisk

Детализация звонков очень важная возможность контроля в работе предприятия, уверен сомнений по этому поводу не возникает. Посмотрев готовые решения я с удивлением обнаружил что действительно хороших решений не так уж и много. Одни разработки явно перегружены избыточными функциями, делая уклон в сторону биллинг систем. Другие решения ужасны дизайном. Многие решения уже давно заброшены разработчиками и более не поддерживаются.
Взвесив все за и против я решил написать собственную разработку по детализации звонков, которая будет обладать рядом преимуществ по сравнению с теми предложениями что существуют на данный момент.
  • Приятный и удобный дизайн
  • Отсутствие проблем при миграции на новые версии Asterisk
  • Возможность получать детализацию с нескольких серверов Asterisk
Разработка будет разделена на две публикации:
В первой публикации разъясняется настройка Asterisk для сбора информации о детализации звонков в базу данных. Во второй публикации информация о детализации из базы данных будет показана при помощи web интерфейса ACViewer.

Модель работы
Для получения общей детализации сразу с нескольких серверов Asterisk будет задействован RADIUS сервер. Введение дополнительного звена такого как RADIUS сервер даёт также следующие преимущества:
  • Атрибуты RADIUS со временем не изменяются, что может гарантировать лёгкость миграции на новые версии Asterisk
  • Работа по UDP протоколу снижает нагрузку на сеть при размещении RADIUS сервера и Asterisk на разном оборудовании
Работа будет вестись на дистрибутиве CentOS 6.x, в случае использования иного дистрибутива, ознакомьтесь с соответствующим разделом документации по установке программного обеспечения.

Конфигурация ПО
Конфигурация сервера MySQL
Работу начинаем с установки и настройки сервера MySQL, далее подключаемся к консоли MySQL как пользователь root и создаём базу данных в которой будут храниться данные по детализации звонков с Asterisk.

$ mysql -u root -p
CREATE DATABASE radius;
GRANT ALL ON radius.* TO 'astradius'@'127.0.0.1' IDENTIFIED BY 'radpass';
GRANT ALL ON radius.* TO 'astradius'@'localhost' IDENTIFIED BY 'radpass';
FLUSH PRIVILEGES;
SQL схему показанную ниже сохраняем в файл "radius.sql" и импортируем в базу данных.
CREATE TABLE `radacct` (
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `clid` VARCHAR(80) NOT NULL DEFAULT '',
    `src` VARCHAR(80) NOT NULL DEFAULT '',
    `dst` VARCHAR(80) NOT NULL DEFAULT '',
    `dcontext` VARCHAR(80) NOT NULL DEFAULT '',
    `lastapp` VARCHAR(200) NOT NULL DEFAULT '',
    `lastdata` VARCHAR(200) NOT NULL DEFAULT '',
    `duration` FLOAT UNSIGNED NULL DEFAULT NULL,
    `billsec` FLOAT UNSIGNED NULL DEFAULT NULL,
    `disposition` ENUM('ANSWERED','BUSY','FAILED','NO ANSWER','CONGESTION') NULL DEFAULT NULL,
    `channel` VARCHAR(50) NULL DEFAULT NULL,
    `dstchannel` VARCHAR(50) NULL DEFAULT NULL,
    `amaflags` VARCHAR(50) NULL DEFAULT NULL,
    `accountcode` VARCHAR(20) NULL DEFAULT NULL,
    `uniqueid` VARCHAR(32) NOT NULL DEFAULT '',
    `userfield` FLOAT UNSIGNED NULL DEFAULT NULL,
    `start` DATETIME NOT NULL,
    `answer` DATETIME NOT NULL,
    `end` DATETIME NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `clid` (`clid`),
    INDEX `src` (`src`),
    INDEX `dst` (`dst`),
    INDEX `start` (`start`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
$ mysql -u astradius -p radius < radius.sql

Конфигурация RADIUS
В работе будет использован сервер freeRADIUS, установим требуемые пакеты.
$ sudo yum install freeradius freeradius-mysql freeradius-utils radiusclient-ng
Конфигурация RADIUS делится на две части:
  • Конфигурация RADIUS клиента
  • Конфигурация RADIUS сервера

Конфигурация клиента radiusclient-ng
Клиент radiusclient-ng является связующим звеном между Asterisk (который является NAS в терминологии RADIUS) и сервером freeRADIUS. Следует отметить что изначально с сервером freeRADIUS поставлялся Radiusclient, но потом он оказался заброшен, новая функциональность перестала добавляться. Поэтому был сделан форк родного RADIUS клиента radiusclient-ng в который были добавлены новые возможности, его и будем использовать в работе.
Клиенту radiusclient-ng для работы с Asterisk требуется подключить файл словаря от компании Digium, находящийся в директории “contrib” архива исходных текстов Asterisk. Копируем файл словаря “asterisk.digium” и файл базового словаря который поставляется с “radiusclient-ng” в директорию с конфигурационными файлами “radiusclient-ng”
$ sudo cp /usr/share/radiusclient-ng/dictionary /etc/radiusclient-ng/
Подключаем в окончании файла “dictionary” словарь от компании Digium
$INCLUDE /usr/share/freeradius/dictionary.digium
В файле “servers” указываем учётные данные которые будут использоваться клиентом при обращении к серверу freeRADIUS. Файл “servers”:
127.0.0.1       myradiussecret
Файл “radiusclient.conf” приводим к следующему виду:
auth_order      radius
login_tries     4
login_timeout   60
nologin         /etc/nologin
issue           /etc/radiusclient-ng/issue
authserver      127.0.0.1:1812
acctserver      127.0.0.1:1813
servers         /etc/radiusclient-ng/servers
dictionary      /etc/radiusclient-ng/dictionary
login_radius    /usr/sbin/login.radius
seqfile         /var/run/radius.seq
mapfile         /etc/radiusclient-ng/port-id-map
default_realm
radius_timeout  10
radius_retries  3
login_local     /bin/login

Конфигурация сервера freeRADIUS
Файлы конфигурации сервера находятся в директории “/etc/raddb”, требуется отредактировать конфигурационные файлы находящиеся в указанной директории. Файл “clients.conf” содержит описание клиентов RADIUS которым позволено подключаться к серверу freeRADIUS. Для каждой клиентской записи требуется указать IP адрес с которого будет производиться подключение и пароль. Пароль должен соответствовать тому что указан в файле “servers” клиента “radiusclient-ng”
Файл “clients.conf”
client localhost {
        ipaddr = 127.0.0.1
        secret = myradiussecret
}
Файл “radiusd.conf” приводим к виду:
prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct

name = radiusd

confdir = ${raddbdir}
run_dir = ${localstatedir}/run/${name}
db_dir = ${raddbdir}
libdir = /usr/lib64/freeradius
pidfile = ${run_dir}/${name}.pid

user = radiusd
group = radiusd

max_request_time = 30
cleanup_delay = 5
max_requests = 1024

listen {
        ipaddr = *
        port = 1812
        type = auth
}

listen {
        ipaddr = *
        port = 1813
        type = acct
}

hostname_lookups = no
allow_core_dumps = no

regular_expressions     = yes
extended_expressions    = yes

log {
        destination = files
        file = ${logdir}/radius.log
        stripped_names = no
        auth = no
        auth_badpass = no
        auth_goodpass = no
}

checkrad = ${sbindir}/checkrad

security {
        max_attributes = 200
        reject_delay = 1
        status_server = yes
}

proxy_requests  = no

$INCLUDE clients.conf

thread pool {
        start_servers = 5
        max_servers = 32
        min_spare_servers = 3
        max_spare_servers = 10
        max_requests_per_server = 0
}

modules {
        $INCLUDE ${confdir}/modules/
        $INCLUDE sql.conf
}

instantiate {
        exec
        expr
        expiration
        logintime
}

$INCLUDE policy.conf
$INCLUDE sites-enabled/
В штатной поставке freeRADIUS начиная с версии 1.1.2 уже идёт словарь от компании Digium, поэтому подключать дополнительный словарь к серверу RADIUS не требуется.
Файл “sql.conf” приводим к виду:
sql {
        database = "mysql"
        driver = "rlm_sql_${database}"
        server = "127.0.0.1"
        port = 3306
        login = "astradius"
        password = "radpass"
        radius_db = "radius"

        acct_table1 = "radacct"
        acct_table2 = "radacct"

        deletestalesessions = yes

        sqltrace = no
        sqltracefile = ${logdir}/sqltrace.sql

        num_sql_socks = 5
        connect_failure_retry_delay = 60
        lifetime = 0
        max_queries = 0
        nas_table = "nas"

        $INCLUDE sql/${database}/radcdr.conf
}
Файл "sites-enabled/default" приводим к виду:
authorize {
        preprocess
        sql
        expiration
        logintime
}

authenticate {

}

preacct {
        acct_unique
}

accounting {
        sql
        attr_filter.accounting_response
}

session {
        sql
}

post-auth {
        sql
        Post-Auth-Type REJECT {
                sql
                attr_filter.access_reject
        }
}
Символьную ссылку на файл “sites-enabled/inner-tunel” удаляем.
Создаём файл "sql/mysql/radcdr.conf" в котором описываем запрос к базе данных MySQL. При помощи указанного запроса данные детализации звонков полученные сервером freeRADIUS помещаются в MySQL таблицу.
accounting_stop_query = " \
    INSERT INTO ${acct_table2} \
        (accountcode, src, dst, dcontext, \
            clid, channel, dstchannel, lastapp, \
            lastdata, start, answer, end, duration, billsec, \
            disposition, amaflags, uniqueid, userfield) \
    VALUES \
        ('%{Asterisk-Acc-Code}', '%{Asterisk-Src}', '%{Asterisk-Dst}', '%{Asterisk-Dst-Ctx}', \
            '%{Asterisk-Clid}', '%{Asterisk-Chan}', '%{Asterisk-Dst-Chan}', '%{Asterisk-Last-App}', \
            '%{Asterisk-Last-Data}', '%{Asterisk-Start-Time}', '%{Asterisk-Answer-Time}', \
            '%{Asterisk-End-Time}', '%{Asterisk-Duration}', '%{Asterisk-Bill-Sec}', \
            '%{Asterisk-Disposition}', '%{Asterisk-AMA-Flags}', '%{Asterisk-Unique-ID}', \
            '%{Asterisk-User-Field}')"
Активируем запусе freeRADIUS сервера при загрузке системы.
$ sudo chkconfig radiusd on

Конфигурация Asterisk
Реализованная на данный момент модель работы Asterisk по протоколу RADIUS не предполагает аутентификации (Authentication) и авторизации (Authorization), пока возможен только сбор учётных данных об используемых ресурсах (Accounting). Для биллинг систем подобная модель работы конечно не годится, но для сбора детализации вполне подходит. Предполагается что сервер Asterisk уже установлен, поэтому потребуется установить лишь один пакет для работы Asterisk совместно с RADIUS сервером.
$ sudo yum install asterisk-radius
Для детализации звонков в Asterisk на имеется два модуля: RADIUS CDR Backend и RADIUS CEL Backend. Выбор пал на “CDR Backend”, поскольку модуль “CEL Backend” имеет незакрытый баг.
Всё что требуется сделать в Asterisk это привести файл конфигурации "cdr.conf" к следующему виду:
[general]

enable=yes
unanswered = yes

[radius]
usegmtime = yes    ; log date/time in GMT
loguniqueid = yes  ; log uniqueid
loguserfield = yes ; log user field
radiuscfg => /etc/radiusclient-ng/radiusclient.conf
После редактирования конфигурации подключимся к консоли Asterisk и перезагрузим модуль.
localhost*CLI> module unload cdr_radius.so
localhost*CLI> module load cdr_radius.so
Loaded cdr_radius.so
 == Parsing '/etc/asterisk/cdr.conf':   == Found
Loaded cdr_radius.so => (RADIUS CDR Backend)
Готово! Делаем звонок.
Подключаемся к MySQL серверу, и убеждаемся в корректной работе детализации.
mysql> use radius;
Database changed
mysql> SELECT src, dst, start, end, duration, answer  FROM radacct;
+-----+-----+---------------------+---------------------+----------+---------------------+
| src | dst | start               | end                 | duration | answer              |
+-----+-----+---------------------+---------------------+----------+---------------------+
| 100 | 500 | 2013-03-29 15:57:15 | 2013-03-29 15:57:22 |        7 | 2013-03-29 15:57:15 |
| 100 | 500 | 2013-03-29 16:13:31 | 2013-03-29 16:13:35 |        4 | 2013-03-29 16:13:31 |
+-----+-----+---------------------+---------------------+----------+---------------------+
2 rows in set (0.00 sec)
Получить детализацию с дополнительного сервера Asterisk достаточно просто, требуется лишь добавить секцию клиента в файле “clients.conf” и дать возможность серверу RADIUS слушать соединения на нужных сетевых интерфейсах. После этого можно переходить к настройке дополнительного сервера Asterisk с клиентом radiusclient-ng.

Отображение информации о детализации из базы данных при помощи WEB интерфейса описано в следующей публикации.

суббота, 23 марта 2013 г.

Типовая конфигурация сервера MySQL

Многие администраторы в своей работе используют шаблоны готовых конфигураций. Подобный подход вполне разумен, в этом случае сокращается время на развёртывание сервиса, уменьшается вероятность ошибок, не требуется постоянно помнить опции конфигурации. Всем кому интересен подобный подход предлагаю воспользоваться моими наработками оформленными в файле конфигурации MySQL.

В основе конфигурации лежит шаблон my-large.cnf и наработки взятые из блога Sergey Danielyan. Конфигурация для сервера MySQL  5.1 обладает следующими возможностями:
  • Транзакционным механизмом InnoDB
  • Кодировкой UTF-8
  • Ограничением на бинарные лог файлы по времени (2 суток) и по максимальному размеру (1Гб)
  • Ожиданием подключений только на адресе 127.0.0.1
В дистрибутиве CentOS 6.x сервер MySQL устанавливаем при помощи команды
$ sudo yum groupinstall "Сервер базы данных MySQL"
Листинг файла конфигурации /etc/my.cnf
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set = utf8

[mysqld]
port = 3306
bind-address = 127.0.0.1
socket = /var/lib/mysql/mysql.sock
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci

skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8

log-bin = mysql-bin
expire_logs_days = 2
max_binlog_size = 1024M
binlog_format = mixed
log-error = /var/log/mysqld.log

server-id = 1

default-storage-engine = InnoDB
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 20M
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
Запускаем установленный MySQL сервер
$ sudo service mysqld start
Завершаем конфигурирование
$ sudo /usr/bin/mysql_secure_installation
При новой установке MySQL пароль на root пользователя отсутствует, поэтому просто нажимаем Enter и далее в конфигурации устанавливаем новый пароль. В большинстве вопросов которые будут задаваться в конфигурационном меню подходят ответы заданные по умолчанию.

Последним штрихом активируем запуск MySQL сервера при загрузке системы
$ sudo chkconfig mysqld on

воскресенье, 27 января 2013 г.

Гарантия Seagate в России

“BAD” подкрался незаметно
С давних пор у меня выработана политика обновления HDD накопителей. Покупается новый HDD, а старый продаётся другому владельцу. Конечно же я понимал что в подобной цепочке обновлений “Покупка нового накопителя” -> “Перенос системы со старого накопителя на новый” -> “Вывод старого на вторичный рынок накопителей” рано или поздно возникнет сбой. Шло время, винты менялись, одна модель от Seagate сменяла другую и вот это печальное событие таки наступило. В очередной раз купив новый HDD и заменив старый на новый я как обычно перед продажей решил проверить состояние старого. Чем дольше длился тест накопителя на “bad” секторы тем больше я мрачнел. Мне всё ярче вырисовывалась очень печальная перспектива и дальше оставаться владельцем двух накопителей. Одним прекрасно работающим новым, и вторым, покрытым “bad” секторами старым. Дефектных секторов по мере прохождения теста выявлялось всё большее и большее количество, их было уже не просто уйма, а уймища! Становилось понятно что такое количество дефектных секторов не спрятать уже ничем, ни mhdd ни PC3000 к которому у меня есть доступ и поэтому старый накопитель можно смело относить к категории дефектных и не подлежащих продаже. Годовая гарантия продавца на накопитель к тому времени уже истекла. Тут я конечно же приуныл. Всегда досадно когда от так на глазах теряется возможность получения 1500р., а приблизительно такая стоимость накопителя в 1ТБ на вторичном рынке была ко времени написания статьи. Но уныние было не долгим! Вспомнил я что существует гарантия производителя и компания Seagate даёт на множество своих моделей гарантию аж в 5 лет! Многие продвинутые в аппаратном обеспечении пользователи помнят этот факт, то что есть такая мифическая долгосрочная гарантия, но никто не может дать ответа как эту гарантию реализовать. Поскольку все необходимые ресурсы для того чтобы начать выяснять вопрос по гарантии находились у меня в руках - а именно “дохлый HDD” и “интернет”,  то для меня настало время заняться реализацией своего гарантийного права по вышедшему из строя накопителю.

Кто ищет тот что нибудь да отыщет
Покопавшись в интернете, я нашёл всего один случай реализации гарантии производителя. Этот конечно дало пищу для размышлений о перспективности затеи по решению вопроса гарантии, особенно в том случае если обладатель дефектного накопителя находится за пределами Москвы, но я продолжил поиски. Кроме того выяснилось что программа гарантийного обмена “Return Material Authorization (RMA)” на территории России вообще отменена. Меня такое положение конечно удивило, в списке стран которые могут воспользоваться гарантийным обменом накопителей есть возможность обмена накопителей даже в государстве Науру, которое тяжело отыскать на карте вооружившись увеличительным стеклом, но при этом отсутствует возможность выбора России в качестве страны в которой возможна реализация гарантии по программе RMA. Позже, на сайте компании Seagate, выяснилось что процедура RMA была отменена в пользу гарантийного обмена у дистрибьюторов, список которых представлен на сайте Seagate. Связавшись с первым по списку дистрибьютором «ASBIS Russia» мне порекомендовали обратиться в компанию «EASA» и уже дальнейшая цепочка поисков помощи в вопросе реализации гарантии производителя по накопителям Seagate привела меня к компании «Гарант.ру» с местонахождением в г. Москва

Простые шаги
Реализовав своё право гарантийного обмена по гарантии производителя которая может составлять от двух до пяти(!) лет в зависимости от модели накопителя я опишу последовательность действий которые требуется предпринять чтобы и у вас появилась такая возможность по обмену, даже в том случае если вы не проживаете в г. Москва.

1. Наличие гарантии
Для начала выясним действительна ли гарантия производителя на накопитель. Переходим на страницу проверки наличия гарантии, вводим “серийный номер” и “номер модели” накопителя в соответствующие поля формы. В качестве страны из списка выбираем “OTHER”. На странице которая появится после ввода капчи и нажатия на кнопку “Submit” появится срок окончания гарантии. Если появится надпись “Out of warranty” то вам не повезло, это означает что срок гарантии истёк.

2. Соответствие критериям гарантии Seagate
Убеждаемся что жесткий диск соответствует критериям визуального механического осмотра (VMI) компании Seagate, на жестком диске отсутствуют следы вскрытия или вмешательства в конструкцию.

3. Запрос в техническую поддержку Seagate
Пишем запрос в техническую поддержку компании Seagate. Несмотря на то что компания Seagate явно указывает на своём сайте то что программа RMA для России отсутствует и обслуживание гарантии производителя возлагается на дистрибьюторов список которых представлен на сайте Seagate, при решении вопроса гарантии накопителя с помощью компании «Гарант.ру» всё же запрашивается письмо, в котором Seagate подтверждает то что требуется связаться именно с дистрибьютором. Переходим на сайт технической поддержки Seagate и заполняем все поля отмеченные красной вертикальной полоской. В целом большинство полей понятны, разъясню те в которых могут возникнуть затруднения.
  • В выпадающем списке “Request type” выбираем “Warranty”.
  • В поле “Type Your Question” пишем “Replacement defective hard drive”.
  • В поле “Description” пишем “Hello! Can I get a replacement for my defective hard drive if I live in Russia? I tried to replace my defective hard drive with page "Warranty & Replacements", but Russia is absent in list of country for return a defective hard drive.”
После нажатия на кнопку “Continue” будет предложено пройтись по списку часто возникающих проблем и выбрать подходящее решение. Если ответ на нашу проблему отсутствует, а он таки в том списке отсутствует, то требуется нажать на кнопку “Escalate to Support” что и делаем.
Появится сообщение:
“Your case has been submitted to Seagate Technical Support, and an agent will reply as soon as possible to the email address you registered. Please note your case number: xxxxxxxxx. Thank you!”.
Теперь остаётся только записать на всякий случай выданный системой “case number: xxxxxxxxx” и ждать письма на указанный в запросе email. Как правило ответное письмо приходит в течении суток, в нём будет примерно следующее содержание:
“You can process your warranty with any of our authorized distributors in Russia and Ukraine respectively.  They will process the order for you.  Here is their contact information:
… «ASBIS Russia» ...”.
Этот ответ означает что нам требуется обратиться к ближайшему дистрибьютору, предлагается список дистрибьюторов, одним из которых является «ASBIS Russia».

4. Код неисправности
Пока ожидаем ответа от технической поддержки компании Seagate, требуется выяснить код неисправности накопителя. Для этого проводится диагностика накопителя с помощью одной из фирменных утилит Seagate - SeaTools для DOS или SeaTools для Windows. В первом случае после принятия лицензионного соглашения скачиваемый *.iso образ записывается на CD R/RW диск и с получившегося загрузочного диска производится автоматический запуск утилиты после рестарта системы. Во втором случае скачиваемый файл устанавливается как обычная программа на операционную систему Windows. Я рекомендую воспользоваться первым вариантом потому как операционная система будет пытаться получить доступ к неисправному накопителю что приведёт к нестабильности в работе ОС. После запуска утилиты выбираем тестируемый накопитель (если в списке их несколько), из раздела “Basic Tests” запускаем “Long Test”. Записываем код неисправности который появится во всплывающем окне как только неисправность будет выявлена утилитой SeaTools.
5. Запрос в техническую поддержку «Гарант.ру»

Письмо которое пришло от технической поддержки компании Segate надо переслать как вложение по адресу service@itaka-dc.ru В сопроводительном письме указываем тему письма и описываем сложившуюся трагическую ситуацию:
Subject: “Гарантийные обязательства по накопителям Seagate”
Message: “Здравствуйте! Я владелец накопителей Seagate которые вышли из строя. На сайте Seagate указано что мне требуется обратиться к официальному, авторизованному компанией Seagate дистрибьютору, которым является компания «ASBIS Russia». В компании «ASBIS Russia» мне уточнили что вопросы гарантийных обязательств по накопителям Seagate следует решать с компанией «EASA», а от туда в свою очередь направили к вам.
Просьба уточнить каким образом я могу реализовать гарантийные обязательства по накопителям Seagate, находясь за пределами г. Москва.

На сайте Seagate в разделе проверки наличия гарантии подтверждается что гарантия на накопители действительна.
Письмо с подтверждением от технической поддержки компании Seagate пересылаю как вложение.
Информацию для оформления заявки в компанию Seagate прилагаю:

Ф.И.О.
____________________________
Адрес проживания (нужен только для оформления заявки)
____________________________
Контактный номер телефона
____________________________
email
____________________________

Диск 1
Модель устройства
____________________________
Серийный номер устройства
____________________________
Парт номер устройства (P/N)
____________________________
Код неисправности “Seatools”
____________________________

Диск 2
Модель устройства
____________________________
Серийный номер устройства
____________________________
Парт номер устройства (P/N)
____________________________
Код неисправности “Seatools”
____________________________

6. Дополнительные инструкции
Сотрудники компании «Гарант.ру» оформят заявку в компанию Seagate с целью подтверждения замены указанных в письме накопителей и дадут адрес в г. Москва для пересылки накопителей курьерской компанией которая доставит отправляемые накопители до офиса. Уточните ИНН компании «Гарант.ру», в курьерской компании могут им поинтересоваться при оформлении доставки.
После подтверждения заявки со стороны компании Seagate можно приступать к упаковке и отправке накопителей на Москву. Поместите каждый диск в антистатический пакет или антистатическую пластиковую оболочку (SeaShell). Антистатические пакеты можно отыскать в ближайшей крупном компьютерном магазине, обратитесь в сервис центр который как правило присутствует на территории магазина, обрисуйте ситуацию техническому персоналу и вам помогут подобными пакетами.

7. Минимизация затрат
Стоимость затрат на транспортировку может оказаться достаточно высока. У меня доставка накопителей от г. Белгород до г. Москва транспортной компанией «ПЭК» обошлась примерно в 800р. Обратная доставка вышла дешевле, но по стоимости столько же. Дело в том что при оформлении доставки до г. Москва я сам посещал офис транспортной компании, а при оформлении доставки от г. Москва для оформления доставки вызывался курьер от транспортной компании в офис компании «Гарант.ру», но при этом я попросил сотрудника компании «Гарант.ру» чтобы обратная доставка осуществлялась до склада транспортной компании, с которого я забрал накопители самостоятельно. Таким образом образовались равные суммы доставки в обе стороны.
Транспортные расходы неизбежны, исключить их никак не удастся, но можно их минимизировать либо вообще свести в итоге к нулю.
  • В случае если срок гарантии на накопитель терпит и вопрос гарантии не требует неотложного решения можно... купить ещё один дефектный накопитель! Как правило их продают на форумах, аукционах за бесценок. Продав в будущем вернувшийся новый накопитель получится отбить затраты на транспортировку. При  этом конечно же надо прояснить вопрос наличия гарантии производителя на тот накопитель что продаётся.
  • Кроме того, возможно есть друзья, знакомые которые также заинтересованы в реализации гарантии по дефектному накопителю, пылящемуся у них где то на полке или в ящике стола. Выбрасывать жалко, а что с ним делать они не знают. В подобной ситуации при наличии гарантии на дефектный накопитель возможен вариант по оплате затрат на транспортировку в складчину.
  • Жителям г. Москва вообще можно делать бизнес выгодно используя своё местоположение. Принимая дефектные накопители по почте, доставляя их в офис «Гарант.ру», забирая исправные и отправляя их обратно получателю можно получить прибыль за услугу посредника. Доставка обычной почтой по стране гораздо дешевле доставки курьерской компанией, при длительных расстояниях разница в затратах на транспортировку почтой и курьерской компанией может оказаться значительной.

Послесловие
Проверяйте наличие гарантии на накопители даже если он куплен очень давно. Когда я проверял свой накопитель ёмкостью в 1ТБ, оказалось что у него гарантия истекает аж через полтора года. Позже я вспомнил что года полтора-два назад я покупал с рук б/у накопитель Seagate ёмкостью в 750ГБ покрытый “bad” секторами для экспериментов, примерно в те же времена мне знакомый отдал неисправный накопитель Seagate на 500ГБ. Проверка наличия гарантии на эти два накопителя показала что на один из них срок гарантии истекает через 3 месяца, а на второй через 5 месяцев. Надо заметить что помимо давности покупки эти накопители ещё какое-то время находились в работе, возможно год-полтора, что приводит к общему сроку эксплуатации примерно года в три.
По всем трём дефектным накопителям было получено подтверждение на замену от технической поддержки компании Seagate, При замене выяснилось что компанией Seagate модели дефектных накопителей которые требуется заменить сняты с производства, поэтому мне совершенно бесплатно было предложена замена на накопители новых серий находящихся в производстве, что меня конечно же устроило.
В итоге вышла следующая замена:
 





пятница, 18 января 2013 г.

Решение проблемы "unable to connect to remote asterisk"

Довольно часто, да что там, практически постоянно мы видим данную надпись после свежей установки Asterisk на сервер. Происходит подобная ошибка потому что Asterisk запускается сразу, без предварительной настройки сервиса. Как результат, попытка подключиться к Asterisk при помощи команды "asterisk -r" огорчает нас следующим сообщением:
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
Я опишу последовательность шагов которые позволят избежать появление данной ошибки. Asterisk запускаем на дистрибутивах CentOS 5 или CentOS 6, в других дистрибутивах содержание и местонахождение файлов может отличаться.
  1. Создаём пользователя. На сервере нам потребуется пользователь под которым будет запускаться Asterisk, заводим пользователя с командой “useradd asterisk”. Параметры по умолчанию заданные при создании пользователя можно посмотреть с помощью команды “useradd -D”. При создании пользователя будет также создана одноимённая группа.
  2. Настраиваем запуск Asterisk. Открываем на редактирование файл "/etc/sysconfig/asterisk" и выставляем переменные "AST_USER" и "AST_GROUP" в соответствии с созданным пользователем под которым должен быть запущен Asterisk. Если имя пользователя совпадает с именем группы то оставляем "AST_GROUP" закомментированным, в этой переменной будет использовано значение из "AST_USER". При отсутствии файла "/etc/sysconfig/asterisk" переменные "AST_USER" и "AST_GROUP" могут также выставляться в файле "/etc/rc.d/init.d/asterisk".
  3. Выставляем права на файл asterisk.ctl. Открываем на редактирование файл “/etc/asterisk/asterisk.conf” и в разделе [files] выставляем следующую конфигурацию:
[files]
astctlpermissions = 0660
astctlowner = asterisk
astctlgroup = asterisk
astctl = asterisk.ctl
Перезапускаем Asterisk и подключаемся с помощью команды
$ asterisk -r

вторник, 15 января 2013 г.

oDesk верификация

По работе с oDesk написано уже достаточно много статей, но вопрос верификации созданной в системе учётной записи до сих пор остаётся открытым. В целом для фрилансера желающего зарабатывать с помощью oDesk и находящегося за пределами USA верификацию можно пройти двумя способами. Помимо общегражданского или зарубежного паспорта требуется предоставить сканированную копию счёта за коммунальные услуги либо сканированную выписку с банковского счёта. 
  • В счёте за коммунальные услуги должны быть указаны адрес и ФИО человека которому адресован счёт. 
  • К выписке с банковского счёта помимо адреса и ФИО есть ещё требование срока давности. Срок давности выписки должен составлять не более полугода с момента получения выписки в банке.
Адрес и ФИО должен соответствовать тому что был указан при регистрации на oDesk.

Сложности с верификацией учётной записи на oDesk возникают в том случае если вы проживаете по временной прописке или не являетесь владельцем квартиры. В этом случае в счёте за коммунальные услуги указано другое ФИО, при получении же выписки с банковского счёта вам утверждают что адрес в выписке не указывается. Тем не менее из этой ситуации есть выход. При получении выписки с банковского счёта попросите указать адрес проживания мотивируя это тем что указание адреса это требование работодателя которому данная выписка будет показываться. Просьба указать адрес проживания в справке о состоянии банковского счёта не является чем то незаконным, тем более что эта информация берётся из соответствующей страницы паспорта. После подобной разъяснительной беседы как правило вам идут на встречу и указывают адрес в выписке о состоянии банковского счёта. Стоимость этой процедуры в “Сбербанк” составляет 100 руб. Заверять и делать сертифицированный перевод выданной выписки не требуется. Сканируете полученную в банке выписку, загружаете файл размером не более 8МБ в формате *.jpg или *.png и вам сообщают что через 7-10 дней после проверки ваша учётная запись будет верифицирована. Моя учётная запись на oDesk стала верифицированной через сутки.