По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Введение
Однажды в организации, где я работаю, случился Asterisk
Случился не без моего участия, а если быть точным, то я и был главным виновником, и как следствие - главным исполнителем. Напасть была локальной, но достаточно быстро получила широкое распространение, хотя, в отдельных уголках приходилось нести прогресс в массы с применением тяжелой артиллерии и напалма. В итоге Asterisk`ом было охвачено порядка полутора тысяч абонентов.
Процесс настройки абонента изначально выглядел следующим образом:
Включил телефон, обновил прошивку. Пока он перезагружается, завел абонента на Asterisk (создал запись для регистрации SIP-клиента). Далее, самый очевидный способ настройки телефона - web-интерфейс; набрал в адресной строке браузера IP-адрес телефона, авторизовался, настроил два десятка параметров и готово. На всё ушло 2-3 минуты.
Следующий абонент - повторяем.
На втором десятке абонентов начало надоедать, появилось желание как-нибудь упростить процесс.
Заглянул в настройки: экспорт и импорт конфигурации присутствует; сохранил конфигурацию телефона в файл, заглянул в него - обычный текстовый файл, в котором перечислены параметры с их значениями.
Нашел параметры, значения которых менял в web-интерфейсе, причем большинство из этих параметров, хоть и отличается от дефолтных, но одинаково для всех настраиваемых в рамках данной организации телефонов. Таким образом, имея эталонный файл конфигурации и редактируя в нем всего 5-6 строк, я получал конфигурации для остальных телефонов, которые "заливал" в аппараты всё через тот же web-интерфейс.
Спустя какое-то время количество абонентов заметно выросло, компания продолжала развиваться, сотрудники мигрировали между подразделениями, увольнялись, появлялись новые, некоторые телефоны выходили из строя, и возня с файлами стала постепенно отнимать много времени и раздражала с каждым днем всё больше. Тут я вспомнил про пункт меню из web-интерфейса, в котором были написаны многообещающие слова "Auto Provision".
Обратимся за определением к производителям телефонов. У Dlink или Fanvil мы получим следующее:
Auto Provisioning используется для реализации удаленной/автоматической инсталляции, развертывания конфигурационных и некоторых других связанных файлов.
Snom дает нам практически такое же:
Auto Provisioning может использоваться для предоставления общих и специфических параметров конфигурации на телефоны и для актуализации прошивки.
Вроде бы всё устраивает, значит, будем для наших целей отталкиваться от этих определений.
Вариантов автоматической настройки предусмотрено несколько, и без долгих терзаний, как наиболее понятный и доступный был выбран следующий:
Развертывание конфигурации с tftp сервера, адрес которого телефон будет получать по DHCP в Option 66.
Разберемся вкратце, что есть что.
TFTP - простой протокол передачи файлов (Trivial File Transfer Protocol). В отличие от FTP основан на транспортном протоколе UDP и в нем отсутствует возможность аутентификации (однако, возможна фильтрация по IP-адресу). Одно из основных преимуществ TFTP - простота реализации клиента, поэтому он достаточно широко используется в частности для загрузки обновлений и конфигураций сетевых устройств.
DHCP - протокол динамической настройки узла (Dynamic Host Configuration Protocol); сетевой протокол, позволяющий сетевым устройствам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP.
Не вдаваясь глубоко в подробности, схема обмена сообщениями DHCP при получении параметров выглядит следующим образом:
DHCPDISCOVER: клиент (в нашем случае, телефон) передает это сообщение broadcast, и использует его для поиска DHCP-серверов в своей канальной среде.
В одном из полей этого пакета, в поле options, клиент передает список необходимых ему опций, наиболее распространенными из которых являются:
(1) - Subnet Mask
(3) - Router
(6) - Domain Name Server
(15) - Domain Name
именно в этом поле клиент сообщает о том, что ему нужен адрес tftp сервера для загрузки конфигурационного и/или других связанных файлов. Номер опции, которая его содержит - 66 (у cisco есть аналогичная опция 150, основное отличие которой в том, что она может содержать адреса нескольких tftp серверов).
DHCPOFFER: cервер отвечает на запрос клиента. Сервер может передать это сообщение как broadcast так и unicast (зависит от значений полей полученных от клиента). В этом сообщении сервер предлагает клиенту параметры, которые он может отдать в текущей конфигурации. Если в сегменте сети клиента несколько DHCP серверов, то получив запрос, они все отправляют OFFER-ы.
После того, как клиент выбрал, OFFER какого из DHCP серверов принять, он отправляет следующий пакет:
DHCPREQUEST: казалось бы, если клиент определился, какой DHCP сервер "пришелся ему по душе", можно передать unicast-запрос этому серверу; однако предается broadcast, чтобы уведомить остальные DHCP серверы о своём выборе (добавляется опция 54, указывающая адрес выбранного DHCP-сервера), и они могли освободить зарезервированные OFFER-ы.
DHCPACK: cервер отправляет подтверждение клиенту. После этого клиент настраивает свой сетевой интерфейс, используя предоставленные параметры и опции.
В различных ситуациях могут еще возникать DHCPDECLINE, DHCPNAK, DHCPRELEASE, DHCPINFORM, но их рассмотрение в рамки данной статьи не входит.
Для получения исчерпывающей информации о работе DHCP можно обратиться к RFC 2131:
https://tools.ietf.org/html/rfc2131
Про опции 66 и 150 можно почитать здесь:
https://wiki.merionet.ru/ip-telephoniya/67/dhcp-opciya-150-i-66/
https://blog.router-switch.com/2013/03/dhcp-option-150-dhcp-option-66/
Про настройку DHCP сервера и Option 66 на Mikrotik можно почитать здесь:
https://wiki.merionet.ru/seti/5/nastrojka-dhcp-servera-na-mikrotik/
Чтобы передать телефону адрес tftp сервера, с которого он может получить конфигурационный файл, на DHCP сервере в параметрах области задаем Option 66, в которой указываем hostname либо IP адрес нашего tftp сервера.
Настройки по-умолчанию в большинстве телефонов подразумевают получение IP-адреса по DHCP и запрос Option 66.
В итоге, телефон получает IP, получает адрес tftp сервера и пытается "стянуть" оттуда файл своей конфигурации.
Согласно документации Dlink, загрузка файла конфигурации происходит следующим образом:
Устанавливается соединение с сервером.
Проверяется наличие файла с соответствующим именем:
- в первую очередь проверяется файл с именем соответствующим аппаратной платформе;
- во вторую - соответствующий MAC адресу устройства;
- в третью - соответствующий ID устройства;
- файл с произвольным именем проверяется либо в последнюю очередь (DHCP option, UpnP) либо в первую, если он явно указан в конфигурации телефона.
Проверяется версия конфигурационного файла.
Если версия выше, чем текущая на телефоне, файл конфигурации применяется.
Как уже говорилось ранее, файл конфигурации представляет собой текстовый документ определенного вида:
Первая строка: <<VOIP CONFIG FILE>>Version:2.0002
Для того, чтобы конфигурация была применена, версия файла должна быть выше, нежели текущая на телефоне, инкрементировать требуется последний разряд версии. По-умолчанию версия конфигурации 2.0002
Пример:
Текущая версия конфигурации 2.0002 на одном телефоне и 2.0004 на еще двух. Для того чтобы конфигурация применилась только на один телефон в первой строке файла конфигурации ставим <<VOIP CONFIG FILE>>Version:2.0004
для того чтобы обновить конфигурацию на всех телефонах ставим в первой строке
<<VOIP CONFIG FILE>>Version:2.0005
Разделы:
<GLOBAL CONFIG MODULE - содержит данные о сетевых настройках, серверах DNS, SNTP...
<LAN CONFIG MODULE> - содержит данные о настройках LAN, режимах работы LAN
<TELE CONFIG MODULE> - настройки расширенных функций телефонной части (Call Feature)
<DSP CONFIG MODULE> - настройка кодеков
<SIP CONFIG MODULE> - настройки SIP, серверы, регистрация etc...
<PPPoE CONFIG MODULE> - настройки PPPoE
<MMI CONFIG MODUL>E - настройки доступа и WEB интерфейса
<QOS CONFIG MODULE> - qos и vlan
<DHCP CONFIG MODULE> - настройки внутреннего DHCP
<NAT CONFIG MODULE> - настройки NAT и ALG
<PHONE CONFIG MODULE> - настройки телефонной части, в этом же разделе настраивается remote phonebook и extension key.
<SCREEN KEY CONFIG MODULE> - настройка программных клавиш (для версии F3)
<AUTOUPDATE CONFIG MODULE> - настройки Autoprovision
<VPN CONFIG MODULE> - настройки VPN
<TR069 CONFIG MODULE> - настройки TR069
Заканчивается файл строкой <<END OF FILE>>
Для обновления какой-либо опции конфигурации телефона, чтобы файл конфигурации был принят телефоном достаточно наличие следующих полей:
<<VOIP CONFIG FILE>> Version:2.0002
<Название необходимого раздела>
Название опции: значение
<<END OF FILE>>
Например, для обновления имени хоста телефона необходимо создать следующий файл конфигурации:
<<VOIP CONFIG FILE>>Version:2.0003
<GLOBAL CONFIG MODULE>
Host Name :ReceptionPhone
<<END OF FILE>>
Все остальные элементы являются необязательными.
Итак, овал нарисован.
Остались сущие мелочи - реализовать инструмент для создания конфигураций и дальнейшего управления ими. Займемся этим в следующей публикации.
В нашей базе знаний есть довольно много статей о различных полезных трюках и командах для Linux, которые облегчают жизнь системному администратору – сегодня поговорим ещё о нескольких командах и объясним их синтаксис.
История введённых команд
Представьте себе долгую и утомительную сессию по настройке вашего сервера, и, вдруг, вы понимаете, что какой-то шаг был выполнен неверно – в таком случае может очень пригодиться команда history - как видно на скриншоте ниже, она выводит все введённые команды.
Более того, если вы хотите повторить какую-нибудь уже введённую команду, достаточно ввести !####, где #### - номер команды. Однако номер команды даёт не очень много информации о том, когда эта команда была введена – для изменения этого факта, достаточно ввести команду HISTTIMEFORMAT="%d/%m/%y %T " - теперь вы увидите время, когда команда была исполнена.
Итак, более подробное описание синтаксиса:
history - непосредственно команда для вывода истории команд (библиотека GNU);
HISTIMEFORMAT - переменная, отвечающая за вывод и формат даты;
%d - дни;
%m - месяцы;
%y - годы;
%T - описание;
Файлы в системе, занимающие больше всего места и файловая информация
Драгоценное место на сервере имеет тенденцию заканчиваться, особенно, если это сервер, служащий для записи звонков или IP-АТС - для вывода списка основных файлов «жрущих» место можно воспользоваться командой:
du –hsx * | sort -rh | head -6
du - оценка занимаемого пространства;
-hsx (-h) вывод в читаемом формате,(-s) суммаризация вывода команды, (-x) использование одного формата файла;
sort - сортировка;
-rh -(-r) вывод в обратном порядке,(h) вывод в читаемом формате;
head - вывод первых N строк, в данном случае – 6;
Команда stat filename_ext позволяет вывести информацию о файле – его объем, права, дату правки и так далее.
Забавная команда для новичков, позволяющая постепенно постигать Linux
Многие знакомы с командой man, которая показывает мануал по незнакомой команде, изучения – а скрипт ниже выводит какой-нибудь случайный мануал. Таким образом можно постоянно обучаться или просто развлекаться :)
man $(ls /bin | shuf | head -1)
man - страницы Linux Man;
ls - команда ls;
/bin - местоположение системного файла Binary;
shuf - случайная генерация;
head - вывод первых N строк, в данном случае – 1;
@media screen and (max-width: 736px){
.video-container {
position: relative;
padding-bottom: 56.25%;
padding-top: 30px;
height: 0;
overflow: hidden;
}
.video-container iframe {
position: absolute;
top:0;
left: 0;
width: 100%;
height: 100%;
}}
Как думаешь, какой язык программирования сейчас самый популярный? Если погуглить, то окажется, что это Python.
А почему так, мы сейчас расскажем и покажем.
Начнем с произношения - как его называть? Питон? Писон? Пистон? Можно и так, но правильно будет Пайтон, потому что его создатель Гвидо Ван Россум, назвал его в честь популярной комедийной группы Монти Пайтон, а точнее их шоу “Летающий цирк Монти Пайтона”, так что чешуйчатые тут не причем.
Почему мы слышим про Python из каждого утюга? В чем секрет его популярности? Дело в том, что он используется не только разработчиками, а еще очень популярен среди математиков, аналитиков, ученых, сетевых инженеров, сисадминов, хакеров и даже бухгалтеров. Для программиста, такое большое сообщество — это гигантский плюс - не знаешь, как решить задачу? Спроси или найди готовое решение на Stack Overflow, там это уже проходили и обсудили.
Популярность Python также объясняет его простота освоения. Даже если ты очень далек от айти, а при виде кода у тебя потеют ладошки, то чилл - изучение пайтона не составит для тебя большой сложности - он имеет простую структуру и синтаксис. А все благодаря его философии, которая заложена в основу языка:
Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное
Порог вхождения в Python низкий, потому что это очень дружелюбный для новичков язык программирования
Пайтон применяют для самых разных задач: анализ данных и их визуализация, искусственный интеллект, машинное обучение, автоматизация процессов, да что угодно!
Теперь чутка техники: Python это высокоуровневый интерпретируемый язык программирования общего назначения. Не пугайся, все просто. Смотри:
Высокоуровневый означает, что тебе не нужно в деталях знать, как работает компьютер. Это как со смартфоном - тебе не нужно понимать как работает транзистор и что такое “лавинный пробой”, чтобы послушать на нем треки. Ну и по сравнению с другими языками, работа с памятью происходит автоматически, нам не нужно предварительно выделять ее и освобождать - спасибо встроенному “сборщику мусора”
Интерпретируемый - когда ты допишешь на Python свой первый скайнет, его будет нужно преобразовать в машинный язык, который сможет понять компьютер. Да - да, компьютер сам по себе твою писанину не поймет. Именно для этого используется интерпретатор Python, который при выполнении программы превращает написанный тобой код построчно, по одной за раз, в машинный код. А компилируемые языки, такие как Java, используют компилятор, который компилирует весь исходный код целиком перед выполнением твоей программы.
Общего назначения означает, что использовать Python можно в различных областях, ну как мы уже и говорили: веб, десктоп и мобильные приложения, тестирование, работа с данными, работа с большими данными (big data), искусственный интеллект и машинное обучение, автоматизация и даже игры на нем писать можно!
Так это вроде у всех есть, нет? Неа, например есть целевые языки, такие как SQL, который можно использовать только для запроса данных из реляционных баз данных.
Пайтон является объектно-ориентированным языком (ООП) программирования. Если кратко, то ООП - это когда вся программа рассматривается как набор взаимодействующих друг с другом объектов, где каждый объект имеет свои свойства и поведение.
А если ты уже прогаешь на другом языке, то смотри, что в пайтоне особенно круто: он строго типизированный - это означает, что значения переменных не будут неожиданно изменяться
Но при этом динамически типизированный, следовательно нам не нужно указывать тип переменной каждый раз.
А еще: забудь про точки с запятой! Вместо этого тут используются отступы, чтобы определить блоки кода. И да, фигурные скобки в этом случае, как видишь, тоже не нужны.
Также стоит заметить то что пайтон это кроссплатформенный язык программирования, что значит что мы можем писать и запускать свой код на Windows, Linux, MacOS и прочих!
Ну и не в последнюю очередь благодаря своей популярности, Python имеет огромную экосистему библиотек, фреймворков и инструментов которые упростят работу и расширят ваши возможности при написании кода.
Для примера можно назвать популярные Tensorflow и PyTorch для машинного обучения, Django и Flask для веб приложений, Pandas для дата сайенса, Selenium для тестирования и NumPy для сложных вычислений. А для установки всех этих дополнительных крутых штук используется специальный менеджер пакетов, котороый называетися pip.
Кстати, у нас есть курс по Python с нуля! Пройди бесплатный вводный урок, в котором ты напишешь свою первую программу, да еще и с графическим интерфейсом, после чего сможешь ее показывать всем вокруг и говорить “знаете, я и сам в каком-то роде тоже пайтон разработчик”