четверг, 31 марта 2016 г.

Настраиваем Huawei E3372H в Mikrotik 951G-2HnD. Часть 2.

В предыдущем посте я начал рассказывать вам о настройке модема Huawei E3372H с связке с маршрутизатором Mikrotik и мы успешно рассмотрели вариант, в котором у нас имеется Stick-модем, а в Mikrotik'е поднимается ppp-out интерфейс. Теперь же пришло время рассмотреть нюансы настройки HiLink-версии модема. Еще раз напомню, что основное отличие HiLink от Stick состоит в том, что HiLink-модем сам по себе является роутером, т.е. отдельным устройством, которое автоматически поднимает соединение с интернет, имеет собственный web-интерфейс, DHCP сервер и виртуальную сетевую карту (RNDIS-адаптер) через который собственно и осуществляется выход ПК в интернет. Т.е. если вы вставите HiLink-модем в ПК, то после установки драйверов у вас в сетевых подключениях появится отдельный Ethernet интерфейс, который получить IP адрес из локальной подсети модема. Например, сам модем у вас имеет IP - 192.168.8.1, тогда ПК к которому он подключен получит от DHCP модема адрес из подсети 192.168.8.0/24 на RNDIS интерфейсе. Думаю с теоретической частью по HiLink'ам всем понятно. Теперь перейдем к практической ...

Но перед этим хотелось бы немного обсудить вопрос о том, что все же лучше - HiLink или Stick. Однозначного ответа на этот вопрос не существует, в разных ситуациях более "выгодным" является либо тот, либо другой вариант. HiLink модем в использовании гораздо проще, посудите сами - он автоматически поднимает соединение с интернет, никаких "особенных" настроек ПК для этого не нужно, вставил модем, на ПК создался виртуальный сетевой адаптер, ПК выходит через него в интернет. Если провести сравнение, то HiLink модем в принципе похож на обычный роутер, в котором соединение с интернет уже настроено, подключить к нему ПК крайне просто - воткнул кабель, ПК получил настройки по DHCP и оказался в интернете. Но здесь есть и обратная сторона медали. Представьте себе что доступ в интернет у вас осуществляется через роутер настройки которого частично вам недоступны. Т.е. вы не можете провести тонкую настройку этого роутера. К примеру, пробросить порты извне (при условии если у вас белый статический IP) вы можете, "подкрутив" соответствующие настройки в web-интерфейсе, а вот, к примеру, выровнять TTL на выходе, назначить специфические правила firewall'а и т.п. скорее всего нет. Т.к. HiLink модем - это "вещь в себе". Многие могут сказать что все это надуманно и те же самые настройки можно сделать на устройстве, которое находится "до модема". Т.е. HiLink модем можно например вставить в роутер и прописать все необходимое в его настройках. Так-то оно так ... только вот, к примеру, если в самом модеме что-то криво реализовано, например, тот же SIP ALG (насколько я помню такая проблема была в ZTE MF823), то куда его не подключай - IP телефония корректно не заработает. Думаю смысл понятен. В модемах же со Stick прошивкой - сам модем представлен в виде нескольких COM-портов, сам модем никаких соединений не поднимает, а все необходимые настройки осуществляются непосредственно в роутере к которому он подключен. Такая схема является более гибкой ...

К тому же, если HiLink модем, подключенный к роутеру по каким-либо причинам "повиснет", то возвратить его к жизни можно будет только ребутом по питанию (отключением / включением питания на USB порте), со Stick такая ситуация вероятно тоже возможна, но вероятность ее меньше.

Итак, у нас есть тот же самый Huawei E3372H, но уже с HiLink версией прошивки 22.200.09.00.00 и Huawei'евским WebUI версии 17.100.13.01.03. Для тех кому интересно web-интерфейс самого модема выглядит так:


И доступен он по адресу - 192.168.8.1 ... (многие наверное узнали на скриншоте модифицированный WebUI от rust3028, за что ему в очередной раз огромное спасибо) ... При этом, как я и говорил, на ПК к которому был подключен модем создался отдельный сетевой интерфейс "Подключение по локальной сети", который получил следующие настройки:


Теперь вставим этот модем в наш Mikrotik. Сразу же отмечаем что в списке интерфейсов у нас появился lte1 интерфейс:


Если мы зайдем в его параметры, то кроме MAC адреса интерфейса не увидим там ничего интересного, MAC у нас кстати 0C:5B:8F:27:9A:64, т.е. это тот же самый RNDIS сетевой адаптер, который у нас и был, когда модем находился в ПК. Отлично, теперь нам нужно чтобы Mikrotik получил IP адрес во внутренней подсети модема. Для этого идем в раздел IP -> DHCP Client и добавляем новый DHCP Client на интерфейсе lte1:


Галочки оставляем по-умолчанию. В результате видим что Mikrotik у нас получил IP на этом интерфейсе:


Отлично. Теперь настраиваем firewall в Mikrotik. Т.е. открываем New Terminal в WinBox и вводим там две команды:

/ip firewall nat add action=masquerade chain=srcnat comment="NAT for LTE1" out-interface=lte1
/ip firewall filter add action=drop chain=input comment="Filter for LTE1" in-interface=\
    lte1

Первая добавляет правило NAT, чтобы ПК подключенные к Mikrotik могли пользоваться интернет соединением, второе правило для фильтра, чтобы отбрасывать все "лишние" пакеты извне (вообщем-то в данном случае сработает аналогичное правило в самом модеме, но создать его в Mikrotik'е будет не лишним).

Теперь не забываем зайти в web-интерфейс самого модема на 192.168.8.1 и посмотреть корректные ли у нас настройки сетевого профиля и поключения:


Как видно профиль у меня настроен верно, а соединение с интернет уже установлено. Этот пост я дописываю на ноутбуке, который подключен к Mikrotik'у, интернет-соединение на котором поднято через Huawei E3372H с HiLink'овской прошивкой.

p.s. Да, кстати, забыл рассказать ... Mikrotik - достаточно умный девайс, и если ваш модем находится в композиции в которой одновременно доступны и RNDIS адаптер и командный AT-порт, то Mikrotik в свойствах LTE интерфейса может считывать с модема дополнительную информацию. Впрочем, это уже больше тема для самостоятельных экспериментов, либо отдельного поста. По-умолчанию же как правило HiLink модемы находятся в композиции в которой доступен только RNDIS адаптер, поэтому эти моменты в этом посте мы не рассматривали.

Полезные сссылки

среда, 30 марта 2016 г.

Настраиваем Huawei E3372H в Mikrotik 951G-2HnD.

Чем бы дитя не тешилось - лишь бы мобильные интернеты не настраивало ;) В этом посте, несмотря на то что уже поздняя ночь, я постараюсь рассказать вам о том как настроить 3G-интернет в Mikrotik 951G-2HnD с использованием Huawei E3372H (МТС 829F) в качестве модема. Здесь сразу хотелось бы уточнить несколько моментов, модемы Huawei бывают двух разновидностей - HiLink и Stick. У меня именно Stick вариант, если у вас HiLink модем, то инструкция будет в корне отличаться (возможно в будущем я дополню ее и расскажу как настроить HiLink модем в Mikrotik'е). Если кто-то вдруг не знает, то вкратце объясню разницу между HiLink и Stick-модемами, вернее правильнее - между HiLink и Stick прошивками для модемов. Т.к. один и тот же модем может присутствовать на рынке как в HiLink, так и в Stick вариантах (например МТС 829F, он же Huawei E3372H поставляется с HiLink прошивкой, а точно такой же модем, который можно приобрести у оператора Tele2 - уже HiLink).

Итак, если ваш модем имеет Stick прошивку, то после того как вы его установите в ПК и установите драйвера и ПО со встроенного CDROM раздела, то в диспетчере устройств он будет определяться у вас как, собственно, модем (в разделе Телефоны и модемы), а также несколько COM портов. Плюс к этому, для того чтобы выйти в интернет, вам придется запускать специальное ПО под названием дашборд (dashboard):


На двух фото выше изображены дашборды от МТС - Коннект Менеджер и стандартный Huawei'евский дашборд от Mobile Partner. Все это справедливо если наш модем имеет stick-прошивку, т.е. здесь мы имеем дело с ПО для выхода в интернет, а само устройство у нас определяется как модем и несколько COM-портов.

Совершенно по-другому обстоят дела если мы имеем HiLink прошивку. В этом случае после установки ПО с CDROM раздела модем у нас определяется как виртуальная сетевая карта (RNDIS адаптер) и никакого ПО для соединения с интернет нет. Модем устанавливает соединение с интернет автоматически, а для управления настройками модема есть web-интерфейс. Т.е. фактически в этом случае модем представляет собой ethernet-роутер, имеющий собственный IP адрес в локальной сети (например, 192.168.8.1). Ваш ПК получает на интерфейс RNDIS адаптера (виртуальной сетевой карты) IP из подсети модема - 192.168.8.0/24, и выходит через шлюз 192.168.8.1 в интернет. Само соединение, естественно устанавливается в модеме, просто в данном случае он дополнительно выполняет функции роутера, в котором поднимается NAT и т.д. и т.п.

В этой статье мы рассмотрим именно модем Huawei E3372H со Stick прошивкой. Предполагается что вы представляете себе что такое Winbox (утилита для конфигурирования Mikrotik) и умеете ее запускать и соединяться с вашим роутером. Итак, первое что мы должны сделать, это запустить WinBox и войти на ваш Mikrotik (по-умолчанию он имеет IP - 192.168.88.1, имя пользователя: admin и пустой пароль, также не забываем что WinBox умеет работать по MAC-адресам, т.е. соединиться с роутером вы можете и по его MAC'у).

Если это был первый вход, то Mikrotik предложит вам сбросить настройки или воспользоваться конфигурацией по-умолчанию. Сбрасывать ничего не нужно, поэтому соглашаемся использовать конфигурацию по-умолчанию. Далее, я крайне рекомендую вам обновить прошивку Mikrotik'а и версии пакетов до последних версий (для этого роутер уже должен иметь настроенное подключение к интернет). В дефолтной конфигурации как раз все настроено, т.е. Ethernet-1 порт настроен как WAN с DHCP клиентом, поэтому можно просто воткнуть в него "кабель с интернетом", например, от другого роутера, или кабель вашего проводного провайдера (если он выдает настройки по DHCP) и обновить прошивку и пакеты.

Делается это крайне просто, вначале обновляем прошивку через меню System -> Routerboard -> Upgrde, а потом обновляем пакеты из System -> Packages -> Check for updates. После обновления у меня получилась версия прошивки 3.30, а версия пакетов 6.34.4 от 2016-Mar-24 13:13.


Этот пост кстати, я пишу уже полностью через настроенный Mikrotik и E3372H, т.е. через мобильный интернет. За все прошедшее время "ни единого обрыва" ;) Ну так вот, теперь самое время подключить наш Huawei E3372H к USB порту Mikrotik'а. Вставляем модем, уже с SIM-картой и ждем какое-то время 1-2 мин. пока он определится системой (вообще это происходит гораздо быстрее, но лучше чуть-чуть подождать, тем более что модем должен поймать сеть оператора и т.д. и т.п.).

Проверяем есть ли у нас модем и "как он выглядит", для этого запускаем New Terminal в WinBox'е и там набираем:

/system resource usb print detail

В ответ получаем что-то вроде:
0 device="1:1" vendor="Linux 3.3.5 ehci_hcd" name="RB400 EHCI"
   serial-number="rb400_usb" vendor-id="0x1d6b" device-id="0x0002"
   speed="480 Mbps" ports=1 usb-version="2.00"

 1 device="1:2" vendor="MOBILE" name="MOBILE" vendor-id="0x12d1"
   device-id="0x1506" speed="480 Mbps" ports=0 usb-version="2.10"

Как видим - модем успешно видится Routerboard'ом, по-крайней мере как "композитное устройство". Не забываем что у него есть еще CDROM раздел, несколько COM-портов и т.д. и т.п. COM-порты принадлежащие USB-модему в Mikrotik'е называются не иначе как Channels (каналы). Ниже вы увидите как это используется. Заоодно заглядываем в Interfaces, где мы должны увидеть появившийся интерфейс ppp-out1.

Мы должны настроить его как:

[admin@MikroTik] > /interface ppp-client print 
Flags: X - disabled, R - running 
 0  R name="ppp-out1" max-mtu=1476 max-mru=1476 mrru=disabled port=usb1 
      data-channel=0 info-channel=1 apn="internet.yota" pin="" user="" 
      password="" profile=default phone="*99#" dial-command="ATDT" 
      modem-init="" null-modem=no dial-on-demand=no add-default-route=yes 
      default-route-distance=0 use-peer-dns=yes keepalive-timeout=0 
      allow=pap,chap,mschap1,mschap2 

Сделать это можно одной командой:

/interface ppp-client add apn=internet.yota dial-on-demand=no disabled=no info-channel=1 \
    keepalive-timeout=0 max-mru=1476 max-mtu=1476 name=ppp-out1 phone=*99# \
    port=usb1

Ну или если полностью, то:

/interface ppp-client
add add-default-route=yes allow=pap,chap,mschap1,mschap2 apn=internet.yota \
    data-channel=0 default-route-distance=0 dial-command=ATDT dial-on-demand=no \
    disabled=no info-channel=1 keepalive-timeout=0 max-mru=1476 max-mtu=1476 \
    modem-init="" mrru=disabled name=ppp-out1 null-modem=no password="" phone=\
    *99# pin="" port=usb1 profile=default use-peer-dns=yes user=""

Либо, как вариант, проставив соответствующие параметры непосредственно в интерфейсе WinBox'а, у вас вообщем-то все будет также, только APN вы должны изменить на APN вашего оператора сотовой связи (в моем случае apn = internet.yota).


Но если вы думаете что на этом настройка закончилась - то ошибаетесь. Какие-либо другие модемы, после подобной настройки сразу же бы подняли соединение и получили доступ в интернет, однако, не E3372H. Поэтому читаем дальше ;)

После того как вы настроили интерфейс ppp-out1, проверьте нажав кнопку Info как определился ваш модем:


Как видно из скриншота у меня он определился как E3372 (хотя на самом деле он у меня E3372H) с версией прошивки 21.315.01.00.143 (одна из последних МТСовских прошивок), а также то, что он успешно зарегистрировался в 3G сети оператора MegaFon (регистрация в сети говорит только о том что он зарегистрировался в сети оператора, не стоит путать это с установлением соединения с интернет, соединение у нас еще не установлено).

Ту же самую информацию кстати можно было получить и в терминале с помощью:

/interface ppp-client info 0

Вообще на эту тему есть неплохой мануал - ATandT MercuryConnectUSBHowTo.

Теперь пришло время сделать главное - а именно переключить модем в нужную композицию (!), иначе соединение не установится. Открываем терминал в Mikrotik'е и соединяемся с командным AT-портом модема (вообще на тему композиций модемов Huawei можно написать отдельный трактат и даже половину Wiki, поэтому здесь особенно вдаваться в подробности я не буду, просто сделайте по написанному и "будет вам счастье").

/system serial-terminal usb1 channel=1 

Соединяемся на COM-порт модема и вводим там команду ATE1 для включения локального эха, чтобы вы видели что вы набираете в терминале. Далее вводим команду:

AT^CURC=0 (для того чтобы модем не сыпал в порт RSSI (Received Signal Strength Indication) и прочим)

И наконец вводим команду смены композиции модема:

AT^SETPORT="FF;10,12,16,A2" - режим "без переключения". Т.е. в данном режиме первичная композиция модема (initial mode) отключена, т.е. задана как FF - Dummy (отсутствие переключения), а вторичная композиция (normal mode) задана как 10,12,16,A2 - т.е. 10 - модем, 12 - PC UI, 16 - RNDIS (у нас его нет), A2 - TF Card Reader.

После чего физически вынимаем модем из Mikrotik'а и вставляем его по новой. Модем будет находиться уже в рабочей композиции, поэтому соединение ppp-out1, когда он зарегистрируется в сети оператора должно подняться у вас в Mikrotik автоматически:


И теперь нам останется добавить правило NAT для firewall'а (правила маршрутизации создаются динамически при поднятии соединения, т.к. в ppp-out1 мы поставили флажок Add default route) следующего вида:

/ip firewall nat add action=masquerade chain=srcnat comment="default configuration" \
    out-interface=ppp-out1

После чего все наши ПК подключенные к Mikrotik'у смогут выйти в интернет (на тонкостях настройки DNS и DHCP я останавливаться не буду, во-первых потому что особенно там никаких тонкостей нет, а во-вторых потому что в конфигурации по-умолчанию все это в принципе настроено).

Любители фиксации TTL на исходящем интерфейсе могут также воспользоваться командой:

/ip firewall mangle add action=change-ttl chain=postrouting new-ttl=set:128 out-interface=ppp-out1

В данном случае мы зафиксировали исходящий TTL у всех пакетов на интерфейсе ppp-out1 в 128, что соответствует ПК с ОС Windows.

Во-избежание лишних вопросов, сразу отмечу, что если вы будете пытаться использовать симкарту Yota для смартфона или планшета в модеме вставленном в Mikrotik, то неизбежно получите окно вида:


Т.к. смартфонные симки Yota предназначены только для использования в смартфонах, планшетные - для использования в планшетах, ну а модемные - именно для использования в модемах. Данные ограничения введены оператором неспроста, и хотя существуют способы обойти их - это не тема этого поста и на любые подобные вопросы в комментариях я отвечать не буду.

Перед тем как я приведу традиционный раздел полезных ссылок, хотелось бы подвести краткие итоги, чему мы научились на основе этого поста:

  • Вкратце, мы познакомились с двумя видами прошивок для модемов - Stick и HiLink, и узнали что в Stick прошивках присутствует COM-порт, через который подключенное к нему устройство (в данном случае Mikrotik) поднимает PPP соединение и устанавливает соединение с интернет, а также HiLink прошивки - в которых модем выступает в виде мини-роутера с виртуальным Ethernet (RNDIS) интерфейсов. В этом случае соединение поднимает сам модем.
  • Разобрались как переключить дефолтную композицию на Huawei E3372H (МТС 827, МТС 829, Мегафон M150-2) для обеспечения работоспособности этого устройства с Mikrotik'ом.
  • Научились создавать ppp соединение в Mikrotik для установки связи с интернет, через подключенный к нему USB модем, со Stick прошивкой. Научились прописывать правило NAT для исходящего интерфейса, для того чтобы все ПК подключенные к маршрутизатору имели доступ к поднятому интернет-соединению.
  • Рассмотрели пример правила firewall'а для фиксации TTL на исходящем интерфейсе (правда не рассмотрели в каких случаях оно используется ;)
  • Научились общаться с модемом с помощью AT-команд непосредственно из интерфейса Mikrotik, т.е. фактически научились управлять модемом в тот момент, когда он вставлен непосредственно в роутер, а не в ПК. Немного разобрались как получить информацию о USB-устройствах, портах и параметрах модема, подключенного к Mikrotik из терминала.

Полезные ссылки

  • Настройка Mikrotik для работы с 3G/LTE модемом любых сотовых операторов.
  • Настройка 4G-модема Huawei E3272 для работы с MiktoTik
  • Mikrotik — Дополнительные настройки для Yota - в статье рассказано как с помощью функции USB power reset в Mikrotik можно бороться с зависаниями модема (правда у автора модем по всей видимости настроен как HiLink, но суть от этого не меняется). Смысл метода в следующем, при недоступности определенного адреса (у автора проверяется доступность 172.16.0.1, т.е. по всей видимости внутренний интерфейс RNDIS адаптера Yota'вского модема), сбрасывается на небольшой промежуток времени питание подаваемое на модем, после чего оно естественно включается и соединение устанавливается по новой. Также, в комментариях рассмотрены примеры, как с помощью скриптов можно отправлять SMS через этот же модем, например в стиле:

    :local email [/snmp get contact]
    :local mobile "+7ХХХХХХХХХХ"
    :local reboottime [/system clock get time]
    :local rebootdate [/system clock get date]
    #####
    :delay 30
    /tool e-mail send to=$email 
    subject="$[/system identity get name] перезагружен!"
    body="$[/system identity get name] перезагружен $rebootdate в $reboottime."
    /tool sms send usb1 channel=2 "$mobile" 
    message="$[/system identity get name] rebooted!"
    

    Скрипт рассчитан на выполнение в sheduler'е на startup'е и служит для отправки SMS и EMail сообщения, информирующего администратора о перезагрузке роутера. Вообще, функционал Mikrotik'а достаточно богат и если воткнуть в него USB модем, то тут может быть практически неисчерпаемый источник для вашей фантазии, какие уведомления и при наступлении каких событий отсылать с помощью SMS. Вплоть до того, что у вас есть какой-то сайт в интернете, который генерирует определенную информацию, Mikrotik с помощью GET запроса может прочитать ее, далее в скрипте вы ее обрабатываете и отсылаете Mikrotik'ом себе же в SMS. Хотите каждый час получать SMS с курсом доллара на телефон? Пожалуйста. Вашу фантазию здесь никто не ограничивает.
  • Настраиваем Huawei E3372H в Mikrotik 951G-2HnD. Часть 1 - здесь мы рассмотрим как настроить Huawei E3372H со Stick прошивкой в Mikrotik.
  • Настраиваем Huawei E3372H в Mikrotik 951G-2HnD. Часть 2. - а здесь вариант с Huawei E3372H в режиме HiLink.

воскресенье, 27 марта 2016 г.

Сборка Mozilla Firefox (x64) из исходников под ОС Windows.

Сегодня мы с вами займемся таким интересным процессом, как сборка браузера Mozilla Firefox из исходников под Windows x64. Зачем это нужно делать? Ну если я скажу что таким образом вы сможете приобщиться к сообществу разработчиков Open Source и собрать собственный build браузера, то это прозвучит наверное смешно ;) На самом деле release'ные сборки Firefox'а содержат "компоненты", которые нужны далеко не всем, плюс как пишут на некоторых форумах собственноручно собранный build Firefox работает немного быстрее, к тому же можно "поиграть" с различными флагами оптимизации в компиляторе и т.д. и т.п. Как говорится, есть кастомные прошивки, почему бы и не быть кастомным браузерам? Несколько полезных ссылок, которыми я руководствовался при сборке:


Читаем, и делаем все по написанному. А именно, вначале устанавливаем MSVC, у меня уже была установленной Visual Studio 2013, поэтому этот шаг я пропустил. Далее нам могут понадобиться DirectX SDK и Windows SDK. Опять же, я ни то ни другое не качал, т.к. решил что какая-то часть DirectX SDK у меня была установлена вместе с MSVC, поэтому я пренебрег этим пунктом. Далее качаем MozillaBuild и устанавливаем его в папку по-умолчанию, т.е. в C:\mozilla-build .

Далее заходим в нее и запускаем файл start-shell-msvc2013-x64.bat (в моем случае, в вашем случае - возможно другой, если версия MSVC у вас другая, например 2015-я, кстати в последней версии набора MozillaBuild поддерживаются только эти два компилятора) и попадаем в консоль. Предварительно я создал папку "D:\Work\Mozilla Firefox\" , именно в ней у нас будет "копия исходников". После запуска start-shell-msvc2013-x64.bat у нас открывается консоль. Набираем в ней:

cd /d/work/Mozilla_Firefox для перехода в данную папку
hg clone https://hg.mozilla.org/mozilla-central для загрузки исходников (~4 Gb)

В результате, после того как исходники скачаются получаем следующее:


Теперь создаем в папке "D:\Work\Mozilla_Firefox\mozilla-central" файл конфига .mozconfig со следующим содержанием:

mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff
ac_add_options --disable-gamepad
ac_add_options --target=x86_64-pc-mingw32
ac_add_options --host=x86_64-pc-mingw32

И запускаем сборку в консоли:

cd /d/work/Mozilla_Firefox/mozilla-central
./mach mercurial-setup здесь отвечаем на вопросы по настройке Mercurial
./mach clobber очищаем результаты предыдущей сборки
./mach build и запускаем сборку

Обратите внимание, путь к папке с исходниками не должен содержать пробелов. Т.е. изначально я создал папку D:\Work\Mozilla Firefox (это можно видеть на скрине), но перед сборкой переименовал ее в D:\Work\Mozilla_Firefox.

Результат успешной сборки:


Собранные файлы находятся в D:\Work\Mozilla_Firefox\mozilla-central\obj-ff\dist\bin\ ... чтобы запустить собранный Firefox можно набрать ./mach run в консоли, или запустить exe'шник firefox'а из папки bin. 

Как видно, все работает:


Обратите внимание, что т.к. мы брали исходники из mozilla-central у нас получилась Nightly сборка.

Ну и давайте попробуем подтвердить или опровергнуть миф о том, что "собственноручная сборка" браузера работает быстрее или медленнее официального релиза. Понятно, что в данном случае тестирование будет достаточно субъективным, т.к. нашу Nightly сборку мы будем сравнивать с релизной версией, в данном случае с Firefox 45.0.1 x64 отсюда. Для начала результаты теста на http://html5test.com/ :
  • Релизная сборка - 478 из 555 очков.
  • Наша Nightly сборка - 482 из 555 очков.
Следующий тест на котором мы будем проводить испытания - это Peacekeeper от Futuremark:
  • Релизная сборка - 4577 очков.
  • Наша Nightly сборка - 4167 очков.


Для тех интересны получившиеся у меня в результате бинарники - взять их можно здесь - Firefox_Nightly_48.0a1_(2016-03-27).7z . На всякий случай напомню, что это сборка только для x64 систем. Сборка с русской локализацией - Firefox_Nightly_48.0a1_(2016-03-27)_ru.7z, конфиг использовавшийся для сборки build'а с русской локалью:

mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff
ac_add_options --disable-gamepad
ac_add_options --target=x86_64-pc-mingw32
ac_add_options --host=x86_64-pc-mingw32
mk_add_options MOZ_MAKE_FLAGS="-j4"
ac_add_options --enable-optimize="-O2" 
ac_add_options --disable-debug 
ac_add_options --disable-tests
mk_add_options MOZ_CO_LOCALES=ru
ac_add_options --enable-ui-locale=ru
ac_add_options --with-l10n-base=D:\\Work\\Mozilla_Firefox\\l10n-central\\

Полезные материалы по теме

воскресенье, 13 марта 2016 г.

Как настроить mbstring.func_overload=0 для отдельного сайта?

Сегодня мы рассмотрим одну распространенную проблему, с которой зачастую сталкиваются многие web-программисты, системные администраторы и т.п., имеющие shared-хостинг и несколько проектов, часть из которых построена на CMS Битрикс, часть на других. Как известно, для корректной работоспособности CMS Битрикс в php.ini должны быть указаны соответствующие значения mbstring.internal_encoding и mbstring.func_overload. Допустим что нужные значения в php.ini у вас уже выставлены должным образом:

mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2

И ваш Битрикс проект отлично работает. Теперь, вы хотите создать на том же хостинге отдельный виртуальный хост и установить туда другую CMS. Как правило, в случае если у вас shared хостинг вы не можете редактировать настройки Apache и nginx с помощью конфигов, а возможности панели управления для редактирования параметров виртуальных хостов достаточно скудные.  В результате системная настройка mbstring.func_overload = 2 в php.ini действует на все ваши сайты, размещенные на этом хостинге. Но что хорошо для Битрикса - плохо для других CMS, т.е. CMS установленная на том же хостинге, но на другом сайте mbstring.func_overload = 2 вовсе не нужен, там должно быть значение 0. Как же исправить эту ситуацию? Для начала несколько полезных ссылок:

Из которых мы узнаем что в ранних версиях PHP все было достаточно просто, т.е. управлять параметром mbstring.func_overload можно было из .htaccess. Т.е. достаточно было указать в .htaccess что-то вроде:

<IfModule mod_php5.c>

  #php_value mbstring.func_overload 2 
  #php_value mbstring.internal_encoding utf-8 

  php_value mbstring.func_overload 0 
  php_value mbstring.internal_encoding cp1251 

</IfModule>
При этом значения переопределялись. Однако, начиная с версии PHP 5.3 менять в .htaccess mbstring.func_overload действительно нельзя. Ни с помощью php_admin_value, ни с помощью php_value они не меняются. Для примера на моем PHP 5.4.34 именно так и было, данные настройки ни в .htaccess ни в .user.ini (есть и такой) не подхватывались. Воспользоваться же советом по редактированию конфигов Apache, чтобы сделать так:

<Directory /var/www/path/to/dir>
php_admin_value mbstring.func_overload 0
</Directory>
В моем случае тоже не получалось, т.к. доступ к их редактированию на shared-хостинге тоже отсутствует. Но выход есть. Ведь параметры для каждого конкретного хоста можно задавать в соответствующих разделах php.ini, которые появились как раз, начиная с 5.3.

Т.е. для решения поставленной задачи нам достаточно было прописать в php.ini следующие строки:

[HOST=www.site2.ru]
mbstring.func_overload=0

При этом Master Value для mbstring.func_overload так и останется равным 2, а вот Local Value для указанного нами хоста будет 0:


Бинго, проблема решена.

пятница, 11 марта 2016 г.

Аналог AnywhereUSB на Rasberry PI или USB over IP.

Сегодняшний пост будет немного сумбурным (так как уже далеко за полночь, а над этим решением я работаю где-то с 18:00, поэтому голова уже кругом) и речь в нем пойдет о пробросе USB через IP, т.е. о создании аппаратного аналога вот такой "коробки" - AnywhereUSB /2. Принцип работы ее как вы понимаете крайне простой, это USB-хаб, который "расшаривает" USB устройства через Ethernet. Т.е. на другой стороне ПК со специальным установленным ПО, которое создает виртуальный USB-хаб и видит физически подключенные к USB на другой стороне девайсы.

Для тестовой реализации своей "коробки" мной был взят Raspberry Pi, а также дистрибутив Raspbian Jessie (2016-02-26, Kernel 4.1), в качестве реализации USB-сервера я решил попробовать решение USB Redirector от Incentives Pro. Вот тут-то и начинается самое интересное. Исходные данные, т.е. само железо и софт планируемый к использованию у нас есть, осталось все это дело только настроить. Ядро 4.1 по-умолчанию USB Redirector for Linux не поддерживается, более того, при попытке собрать версию выложенную на странице Downloads под Raspbian Jessie мы получаем ошибки при компиляции, часть из которых можно устранить, часть - нет. Поэтому сразу скажу, что если собирать под Raspbian Jessie, то надо брать не ту версию которая выложена на странице Downloads, а beta'у - usb-redirector-linux-3.4-arm.tar.gz (на понимание этого простого факта у меня ушел не один час). Ну да ладно, приступим.

Качаем дистрибутив Raspbian Jessie - 2016-02-26-raspbian-jessie.zip (по ссылке будет отдаваться последний дистрибутив) и распаковываем его. Также сразу берем Win32 Disk Imager для записи образа на SD. Далее вставляем microSD в кардридер, запускаем Win32 Disk Imager и записываем образ на microSD, здесь ничего сложного нет:


После того как все запишется, вставляем microSD в Raspberry Pi, подключаем к нему питание и Ethernet и ждем пока он загрузится:


Естественно что в вашей сети должен быть DHCP сервер, чтобы при загрузке Raspberry Pi получил адрес. Думаю что все знают где и как посмотреть DHCP Leases на своем маршрутизаторе, чтобы определить какой именно IP получил мини-ПК. В моем случае это был 172.17.111.50. Берем Putty n подключаемся к Raspberry Pi через SSH.

Логин: pi
Пароль: raspberry

Да, забыл сказать, что флешку я взял на 16 Gb и после развертывания образа с помощью Win32 Disk Imager файловая система Raspbian занимает не весь объем флешки, более того, по-умолчанию 97% ФС считается занятой. Поэтому первое что мы делаем после того как залогинились в консоль это sudo raspi-config и уже там делаем Expand Filesystem:


После чего перезагружаемся и смотрим с помощью df свободное место. для 16 Gb SD должно получиться что-то вроде этого:

pi@raspberrypi:~ $ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       15186136 3418152  11095712  24% /
devtmpfs          218416       0    218416   0% /dev
tmpfs             222688       0    222688   0% /dev/shm
tmpfs             222688    4552    218136   3% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs             222688       0    222688   0% /sys/fs/cgroup
/dev/mmcblk0p1     61384   20328     41056  34% /boot
tmpfs              44540       0     44540   0% /run/user/1000
Дальше мы смотрим версию ядра с помощью uname -vr , у меня это была 4.1.18+ #846 Thu Feb 25 14:11:56 GMT 2016 и в любом случае выполняем обновление с помощью sudo rpi-update, чтобы ядро у вас было той же версии что и на Git'е ... потому что если это будет не так - потом можно наступить на такие грабли при компиляции модулей ядра, что "с непривычки" будет просто не разобрать (это как раз то на чем я потерял кучу времени, поэтому обновляем ОС сразу):

После обновления обязательно перезагружаемся - sudo reboot . Далее делаем следующие вещи:

uname -vr - проверяем обновилось ли ядро, у меня обновилось и версия стала 4.1.19+ #853 Wed Mar 9 18:04:48 GMT 2016, т.е. как на GitHub.
sudo apt-get update - обновляем базу пакетов, естественно доступ к интернет для Raspberry Pi у нас должен быть обеспечен на маршрутизаторе, к которому он подключен.
cd ~ - перемещаемся в /home/pi
wget http://www.incentivespro.com/usb-redirector-linux-3.4-arm.tar.gz - качаем исходники USB Redirector for Linux
tar -xzvf usb-redirector-linux-3.4-arm.tar.gz - распаковываем их

Теперь готовим сырца ядра и все необходимое для сборки:

sudo apt-get install libncurses-dev - на запрос отвечаем Y, в результате установятся два пакета libncurses5-dev и libtinfo-dev
cd /usr/src
sudo git clone --depth 1 https://github.com/raspberrypi/linux.git - клонируем репу с исходниками ядра с глубиной в 1 commit
sudo ln -s linux linux-$(uname -r) - создаем символические ссылки, необходимые для того чтобы make при сборке USB Redirector for Linux знал откуда брать исходники.
sudo ln -s /usr/src/linux /lib/modules/$(uname -r)/build
cd linux
sudo wget https://raw.githubusercontent.com/raspberrypi/firmware/master/extra/Module.symvers - качаем Module.symvers из репы, без него модуль ядра tusbd.ko будет собираться криво, вернее собираться-то он будет, но вот запускаться не очень ;) На это тоже можно убить много времени, если не знать что и как. 
sudo wget https://raw.githubusercontent.com/raspberrypi/firmware/master/extra/Module7.symvers - в итоге файлы Module.symvers и Module7.symvers должны оказаться у вас в /usr/src/linux. Наверняка собрав все модули ядра через sudo make modules эти файлы сгенерируются автоматически (да поправят меня Linux'оиды, если это не так), но т.к. сборка всех модулей на Rasberry Pi идет чересчур долго, то дожидаться окончания сборки я не стал.


Теперь нам нужно сгенерировать конфиг - .config, сделать это можно как запуском sudo make menuconfig , так и sudo make bcm2709_defconfig. Я же сделал это немного по-другому:

sudo modprobe configs
sudo cp /proc/config.gz /usr/src/linux
cd /usr/src/linux
sudo gunzip config.gz
sudo mv config .config

В результате в /usr/src/linux у меня появился заветный .config. Далее делаем следующее:

sudo make prepare
sudo make modules_prepare

Процесс занимает несколько минут, так что как нам писали когда-то во время установки одной из популярных ОС, расслабьтесь и откиньтесь на спинку кресла. Необходимые приготовления к компиляции модулей ядра уже происходят. После того как завершится выполнение последней команды можно переходить непосредственно к компиляции USB Redirector for Linux:

cd ~/usb-redirector-linux-arm/ - переходим в каталог с распакованными сырцами
sudo /usr/local/usb-redirector/uninstall.sh uninstall - удаляем предыдущую версию, если вы вдруг уже ее уже компилировали, но что-то пошло не так
sudo ./installer.sh install-server - собираем ... в процессе собирается модуль ядра

И если все успешно, то мы видим примерно следующее:


Если же сборка неудачна - то изучаем buildlog.txt, если же модуль собрался, но не запускается - внимательно смотрим в /var/log/kern.log .

Перезагружаем Rasberry Pi - sudo reboot ... и смотрим запустился ли модуль с помощью lsmod :


Как видно, у меня модуль tusbd успешно запустился и присутствует в списке. Можно даже посмотреть modinfo по нему, с помощью modinfo /usr/local/usb-redirector/bin/tusbd.ko . Вообще проверить запускается ли собранный модуль можно было сразу, с помощью sudo insmod /usr/local/usb-redirector/bin/tusbd.ko , а потом lsmod, т.е. без перезагрузки, если бы не запустился, то в /var/log/kern.log мы увидели бы соответствующее сообщение, например:

[ 6234.131368] tusbd: disagrees about version of symbol module_layout
...
[   96.276453] tusbd: Unknown symbol _raw_spin_lock_irqsave (err 0)
[   96.276511] tusbd: Unknown symbol _raw_spin_lock (err 0)
[   96.276736] tusbd: Unknown symbol _raw_spin_unlock_irqrestore (err 0)


Если вы увидели такое у себя, то значит версия исходников которую вы брали не соответствует вашей версии ядра, или у вас файл Module.symvers не соответствует версии исходников. У меня подобные ошибки были на протяжении нескольких часов ;) Это в мануале все красиво и гладко получается, ну да на то он и мануал.

Теперь настало время прочитать help по самому USB Redirector Server'у. Выполняем:

/usr/local/usb-redirector/bin/usbsrv

И внимательно читаем. Теперь я вставлю в Rasberry Pi обычную USB Flash Kingston и мы попробуем посмотреть список устройств, которые можно "расшарить":

/usr/local/usb-redirector/bin/usbsrv -l

================= USB SERVER OPERATION SUCCESSFUL ===============
List of local USB devices:

   1: USB Device vendor_id 0x0424 - product_id 0xec00
      Vid: 0424   Pid: ec00   Port: 1-1.1
      Status: plugged

   2: DataTraveler 2.0 Kingston USB Mass Storage Device (s/n: 0014780************A006C)
      Vid: 0951   Pid: 1603   Port: 1-1.5
      Status: plugged

===================== ======================= ===================

Как видно флешка у нас имеет ID=2, расшарим ее:

/usr/local/usb-redirector/bin/usbsrv -s 2

В ответ мы должны получить ответ, что Operation Successful и USB device has been shared. Что же, самое время установить клиент для USB Redirector, в моем случае это будет клиент под ОС Windows XP и посмотреть как ОС увидит "расшаренное устройство":


А увидела она его без каких-либо проблем, как будто флешка непосредственно была подключена к этому ПК.

p.s. Ну а теперь давайте рассмотрим стоимость полученного решения. Я буду исходить из того что Rasberry Pi у нас был приобретен заранее (поэтому его стоимость я не учитываю, хотя это и можно было бы сделать). Изначально решение [ Rasberry Pi + USB Redirector for Linux ] предлагалось как альтернатива AnywhereUSB/2, стоимость которого сейчас составляет 23 219 pуб. (~330 USD), стоимость же лицензии на USB Redirector Client v6 Single License (for 1 Linux USB server) и те же 2 USB устройства составляет 69.99 USD. Rasberry Pi же стоит в районе 4000 руб. Итого получаем - 23219 руб., против ~9000 руб. А на выходе примерно такая же "коробочка". Правда вот стабильность работы того или иного решения еще предстоит проверить, а в случае с AnywhereUSB/2, к сожалению, я этого сделать не могу по причине его отсутствия.

Плюс, в связке Rasberry Pi + USB Redirector for Linux есть некоторые подводные камни. Так, например, USB-флешка, USB-модем Huawei успешно увиделись у меня на другом конце. А вот такое специфическое устройство как ридер смарткарт - EMV Smartcard Reader Generic USB Chip/SmartCard Device (Alcor Micro USB Smart Card Reader) к сожалению не захотело. Вернее само устройство определилось "на другом конце" и даже в диспетчере устройств в разделе Смарт-карты появилась смарт-карта, но вот ПО, которое общается с ней, сам ридер видело, а установленную в нем карту - нет. Из других устройств, которые я пробовал подключать к Rasberry Pi с установленным на нем USB Redirector for Linux был Android смартфон, здесь все было нормально:



Полезные ссылки

суббота, 5 марта 2016 г.

Билайн Смарт 6 и Билайн Таб Фаст 2. Анонс и технические характеристики.

В офисах продаж Билайн появились новинки, о которых я писал ранее. Речь идет об очередном обновлении в линейке операторских устройств Смарт и Фаст. Правда смартфон Билайн Фаст 2+ еще не появился, но модели Билайн Смарт 6 (бюджетный смартфон на базе  MediaTek MT6572 с 512 Mb RAM) и планшет Билайн Таб Фаст 2 (7" планшет с MT8735M на борту) уже доступны для приобретения. Стоимость смартфона без услуг связи - 2990 руб., планшета - 5490 руб. При этом, если сравнивать Билайн Таб Фаст 2 с его предыдущей версией, то характеристики примерно те же, разница лишь в используемом чипе. В Таб Фаст 2 используется 1 GHz Mediatek MT8735M, т.е. урезанная по частоте версия, по сравнению с Таб Фаст. В остальном же устройства похожи как "братья-близнецы".

С полными техническими характеристиками новинок вы можете ознакомиться ниже:


Смартфон Билайн Смарт 6
Операционная система:Google Android 5.1 (Lollipop) 
Процессор и видеоподсистема:CPU: 2-х ядерный MediaTek MT6572A, 1.3 GHz
Память:512 Mb (RAM) + 4 Gb (ROM), поддержка карт памяти microSDHC до 32 Gb
Экран:4", 480x800 пикселей, 16 млн. цветов, мультитач
Камера:3.2 MPix - основная, 0.3 MPix - фронтальная
Количество SIM:1 (Mini-SIM)
Стандарты и диапазоны:2G (GSM 850, 900, 1800, 1900 MHz)
3G (UMTS 900/2100 MHz)
Навигация:GPS
Беспроводные технологии:Bluetooth 4.0, Wi-Fi 802.11 b/g/n (2.4 ГГц)
Дополнительно:FM–радио, зарядка через разъем Micro-USB
Батарея:1400 мАч (заявленное время работы в режиме ожидания - до 450 ч., в режиме разговора - до 4 ч.)
Доступные цвета:черный, синий, оранжевый, желтый

Билайн Таб Фаст 2 и Билайн Смарт 6
Билайн Таб Фаст 2 и Билайн Смарт 6


Планшет Билайн Таб Фаст 2
Операционная система:Google Android 5.1 (Lollipop) 
Процессор:1.0 GHz, 4-ядерный, MediaTek MT8735M
Память:1 Gb (RAM) + 8 Gb (ROM), поддержка карт памяти microSDHC до 32 Gb
Экран:IPS, 7", 1024x600 пикселей, 16 млн. цветов, мультитач 5 точек
Камера:5 MPix (автофокус) - основная, 2 MPix - фронтальная
Количество SIM:1 (Mini-SIM)
Стандарты и диапазоны:GSM 900/1800 MHz, UMTS 900/2100 MHz, LTE B3/B7/B20
Навигация:GPS; A-GPS
Беспроводные технологии:Bluetooth 4.0, Wi-Fi 802.11 a/b/g/n (2.4/5 ГГц)
Дополнительно:FM–радио, зарядка через разъем Micro-USB
Батарея:3500 мА·ч
Доступные цвета:черный, серебряный

Для тех кто уже является владельцем операторских устройств из этой линейки новинки особенного интереса не представляют, как вы уже поняли - рассматривать новые версии устройств в качестве варианта для обновления не стоит, т.к. технические характеристики практически идентичны предыдущим версиям. Однако, для тех, кто только задумывается о приобретении бюджетного смартфона или планшета с поддержкой LTE гаджеты будут небезынтересны. Правда вот наименования моделей в линейке могут вызывать определенную путаницу.

Полезные ссылки

пятница, 4 марта 2016 г.

Balong USB Downloader. Аварийная загрузка usbloader.bin на Huawei и восстановление прошивки.

В этом посте я вкратце расскажу про небольшую Windows утилиту с GUI интерфейсом Balong USB Downloader, предназначенную для для аварийной USB-загрузки модемов на чипсете Balong V2R7 и V2R11. Утилита позволяет загрузить внешний загрузчик-прошивальщик через аварийный USB-serial порт загрузки, создаваемый модемом при повреждении прошивки или замыкании на землю контакта аварийной загрузки на плате модема.

Balong USB Donwloader полностью переписана на Object Pascal (Delphi), основываясь на исходниках проекта уважаемого forth32 - balong-usbdload. Т.е. фактически это не надстройка и не оболочка над консольной версией balong-usbdload, а полноценное Win32 приложение, написанное "с нуля".

На тему модемов и роутеров Huawei, основанных на чипсетах Balong существует уже немало информации (в основном благодаря вкладу таких пользователей, как forth32, rust3028, vve и других), с которой вы можете ознакомиться на профильных форумах. Аварийный загрузчик в этих модемах запускается при замыкании соответствующего контакта на плате модема на землю, либо при повреждении прошивки устройства. Загрузчик стартует автоматически и берет на себя управление прошивочным процессом. Именно для загрузки аварийного загрузчика в модем и предназначена эта утилита. Сами загрузчики для различных моделей модемов в комплект не входят. Важное замечание - фирменные Huawei'еские загрузчики usbloader.bin при старте производят форматирование разделов модема, включая NVRAM, поэтому для восстановления прошивки на модеме без потери текущего содержимого NVRAM они не подходят. Однако, благодаря forth32 для некоторых устройств были собраны альтернативные загрузчики - usbsafe-xxx.bin, которые не затирают NVRAM и запускают процесс прошивки.

Таким образом, используя патченный (альтернативный) аварийный загрузчик, можно перепрошить устройство на любую версию прошивки, даже если штатно обновление прошивки заблокировано и сделать массу других вещей. Ну а для загрузки аварийного загрузчика в устройство, как раз и предназначена Balong USB Downloader. Тема использования аварийного загрузчика для восстановления прошивки и т.п. достаточно объемная, поэтому рассматривать ее в этом посте я не буду (это как раз тема для отдельной статьи). Здесь мы лишь ограничимся рассмотрением возможностей самой программы.


Основные возможности утилиты:
  • Работа с аварийным USB-serial портом загрузки (BOOT_3G), возможность загрузки внешнего загрузчика-прошивальщика.
  • Полноценный user-friendly ;) GUI интерфейс. 
  • Определение имен, а также VID/PID всех COM-портов и модемов в системе по нажатию кнопки "1. Detect".
  • Автоматический выбор BOOT_3G порта в списке по VID_12D1&PID_1443, данный порт автоматически помечается в списке найденных устройств как [BOOT_3G].
  • Отображение системной информации о структуре секций аварийного загрузчика. Подсчет количества пакетов при загрузке.

Что планируется?
  • Добавить картинки и краткие инструкции по поиску контакта аварийной загрузки на плате.
  • Рассмотреть возможность автоматического старта процесса загрузки выбранного usbloader.bin сразу же после появления порта BOOT_3G в системе.
  • Вынесение работы с COM-портом в отдельный поток, чтобы во время процесса загрузки его можно было прервать и чтобы не создавалось ощущение того, что программа зависла, не отвечает в случае если вы выбрали не тот COM-порт для загрузки.

История версий 
  • 1.0.0.5  - первая полнофукцниональная beta приложения.
  • 1.0.1.10 - первый релиз (предпоследняя цифра номер релиза) приложения. Исправлены ошибки предыдущих версий. Добавлена полоска progress bar'а для визуализации прогресса загрузки.


Использование утилиты Balong USB Downloader совместно с патченным загрузчиком usbsafe-xxx.bin я рассмотрю в одном из следующих постов на конкретном примере, а именно - обновлении / даунгрейде прошивки модема МТС 829F/827F (Huawei E3372H) 21.315.01.00.143 на любую другую. Как известно (по сообщениям пользователей), модем с данной версией прошивки является "непрошиваемым", т.е. при попытке понизить версию прошивки модем "вываливается" из режима прошивки в рабочий режим, однако, с помощью загрузки аварийного загрузчика с помощью Balong USB Downloader и метода "иголки" можно залить в него любую прошивку. Этим мы и займемся в одном из следующих постов ...