- Настройка usb модема zte mf180 для работы в системах на основе ubuntu
- At commands
- With dedicated software
- Yellow leaf – статьи – использование 3g/4g-модема в linux без wvdial и network manager
- Автозагрузка
- Добавление поддержки протокола ppp в ядро ос
- Как подключить 3g usb модем (мегафон, мтс, билайн) в ubuntu linux 12.04
- Как подключить модем мтс в linux?
- Настройка интернета мтс vpn-подключения на linux
- Про umts/lte-модемы и linux. практика.
- Создание проекта и сборка дистрибутива
- Узнайте больше о Huawei
Настройка usb модема zte mf180 для работы в системах на основе ubuntu
В этой публикации хочу рассказать о том, как настроить модем ZTE mf180/190 для корректной работы в системах, основанных на Linux Ubuntu.
Недавно, перейдя на Lunux Mint 16, я столкнулся с проблемой выхода в интернет через свой 3g usb-модем. Постоянные обрывы связи заставили искать решение. Доблестный Google целиком ничего не подсказал, пришлось собирать частями.
Начнем по-порядку.
Нам понадобится Minicom — программа для использования последовательного порта в UNIX-подобных операционных системах. Она находится в репозиториях большинства дистрибутивов, поэтом её установка не должна вызвать каких-либо затруднений.
Открываем терминал и вводим:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install minicomhttps://habrahabr.ru/sandbox/edit/93467/#
sudo minicom -s
В терминале появится меню программы.
Выбираем пункт настроек «Настройка последовательного порта»
И нажимаем клавишу A и приводим к виду:
/dev/ttyUSB1
Затем нажимаем Enter. После сохранения настроек выбираем обязательно пункт «Выход», чтобы попасть в консоль minicom, и вводим:
ati0
Результат должен быть примерно таким:
Manufacturer: ZTE CORPORATED
Model: MF190
Revision: BD_BLNKZMF190V1.0.0B01
IMEI: 12345678901234
GCAP: CGSM, DS, ES
OK
Копируем команду, обязательно в консоль minicom:
echo -e «AT ZCDRUN=Ern» > /dev/ttyUSB1
Ответ будет таким:
Enter download mode result(0:FAIL 1:SUCCESS):1
Нажимаем CTRL A, затем Q, выбираем «Да».
Настройка модема при помощи minicom закончена.
Затем заходим в настройки соединений, выбираем вкладку «мобильные» жмем кнопку «добавить». Откроется диалоговое окно, в нем жмем кнопку «вперед» выбираем страну (я выбирал Казахстан), затем выбираем оператора (в моем случае Beeline — и дальше приведу настройки именно для «Beeline KZ» При запросе тарифного плана я выбрал пункт «другой» и указал точку доступа internet.beeline.kz. Жмем кнопку «вперед», затем «применить». Затем нужно указать имя пользователя и пароль (у меня — internet.beeline и beeline), жмем «сохранить».
На этом у меня модем был полностью настроен и работоспособен, удачи в настройке.
At commands
There are some useful commands:
AT^U2DIAG=0
– the device is only ModemAT^U2DIAG=1
– device is in modem mode CD ROMAT^U2DIAG=255
– the device in modem mode CD ROM Card ReaderAT^U2DIAG=256
– the device in modem mode Card ReaderAT CPIN=PIN-CODE
– enter PIN-codeAT CUSD=1,PDU-encoded-USSD-code,15
– USSD request, result can be found (probably) in/dev/ttyUSB2
.
Encode *100# to PDU format:
$ perl -e '@a=split(//,unpack("b*","*100#")); for ($i=7; $i < $#a; $i =8) { $a[$i]="" } print uc(unpack("H*", pack("b*", join("", @a))))."n"'
Decode AA180C3602 from PDU format:
$ perl -e '@a=split(//,unpack("b*", pack("H*","AA180C3602"))); for ($i=6; $i < $#a; $i =7) {$a[$i].="0" } print pack("b*", join("", @a)).""'
Answer decoding (this example is balance response: 151.25):
$ perl -e 'print pack("H*", "003100350031002C003200350020044004430431002E0020");'
Some operators return USSD result in PDU encoding, so you should check proper decoding method.
AT CSQ
– get signal quality (AT CSQ=?
)AT GMI
– get manufacturerAT GMM
– get modelAT GMR
– get revisionAT GMN
– get IMEIAT COPS?
– get operator infoAT^CARDLOCK="NCK-code"
– unlock modem. NCK-code should be calculated by IMEI. After that modem can work with any GSM-provider.AT^SYSCFG=mode, order, band, roaming, domain
– System Config
Mode:
2
Automatic search13
2G ONLY14
3G ONLY16
No change
Order:
0
Automatic search1
2G first, then 3G2
3G first, then 2G3
No change
Band:
80
GSM DCS systems100
Extended GSM 900200
Primary GSM 900200000
GSM PCS400000
WCDMA IMT 20003FFFFFFF
Any band40000000
No change of band
Roaming:
0
Not supported1
Roaming is supported2
No change
Domain:
0
CS_ONLY1
PS_ONLY2
CS_PS3
ANY4
No change
With dedicated software
This was tested on a Huawei EM770W (GTM382E) 3g card integrated into an Acer Aspire AS3810TG laptop. Install gnokiiAUR, then:
$ mkdir -p $XDG_CONFIG_HOME/gnokii
Usually the configuration directory is ~/.config/gnokii.
$ cp /etc/gnokiirc ~/.config/gnokii/config
Edit ~/.config/gnokii/config as follows:
port = /dev/ttyUSB0
You may have to use a different port depending on your configuration, for example /dev/ttyUSB1 or something else:
model = AT connection = serial
You need to be part of the uucpgroup to use /dev/ttyUSB0.
Then launch gnokii:
$ xgnokii
Click on the “SMS” icon button, a window opens up. Then click: “messages->activate sms reading”. Your messages will show up in the window.
Command line script:
A small command line script using gnokii to read SMS on your SIM card (not phone memory) without having to start a GUI:
$ gnokii --getsms SM 0 end 2>&1|grep Text -A1 -B3|grep -v Text
What it does:
gnokii # invoke gnokii --getsms SM 0 end # read SMS from SM-memory location (=SIM card) starting at 0 and reading all occupied memory locations ("end") 2>&1 # connect STDERR to STDOUT to make sure the output from the --getsms command can be piped to grep |grep Text # pipe output from gnokii to grep, anchoring at output containing "Text" -A1 -B3 # print one line after the matched pattern and three lines before the matched pattern |grep -v Text # grep result to another grep to exclude the "Text" line (-v for inverting the pattern)
Granted this does not work very well if your SMS contains the word “Text”, but you may adapt the script to your liking.
Another option is to use mmcli
#!/bin/sh #get modem number MODEMNO=$(mmcli -L | grep -o "Modem/[0-9]" | grep -o [0-9]$) #list newest SMS SMSNO=$(mmcli -m ${MODEMNO} --messaging-list-sms | awk '/received/{split($1, ar, ///); print ar[6]; exit}') #read message mmcli -m ${MODEMNO} -s /org/freedesktop/ModemManager1/SMS/${SMSNO}
Yellow leaf – статьи – использование 3g/4g-модема в linux без wvdial и network manager
Про использование GSM/3G/4G-модемов в Linux написано уже много, но почти все руководства предполагают использование утилит wvdial или network manager для подключения. Эти утилиты позволяют существенно упростить процесс подключения, однако при их использовании невозможно полностью управлять опциями pppd, хотя это бывает необходимо (например при подключении нескольких модемов и/или когда надо “привязывать” подключения к конкретному ppp-интерфейсу).
Далее будет показано как можно настроить подключение к интернету с использованием GSM/3G-модема в дистрибутивах Debian/Ubutnu без использования вспомогательных утилит.
Начальные условия: сервер под управлением Ubuntu 12.04, модем Huawei E171 с симкой оператора “Мегафон”, доступный в системе как “/dev/ttyUSB0”.
Задача: подключиться к интернету используя только pppd и привязать соединение к интерфейсу ppp100.
Переходим к решению задачи. Обычно для дозвона пишут свой chat-скрипт, и почему-то не многие знают что в поставке pppd уже есть chat-скрипт для GSM/3G-модемов, доступный в большинстве дистрибутивов Linux как “/etc/chatscripts/gprs”. Поэтому часть с написанием этого скрипта можно пропустить и сразу приступить к описанию подключения в pppd. Для этого создадим файл “/etc/ppp/peers/Megafon” следующего содержания:
# Используемое для подключения устройство /dev/ttyUSB0 # chat-скрипт # В параметре "-T" передаётся имя точки доступа connect '/usr/sbin/chat -v -f /etc/chatscripts/gprs -T internet' # Надо ли менять маршрут по умолчанию # Закомментируйте если не надо defaultroute # Использовать ли DNS-сервера провайдера # Закомментируйте если не надо usepeerdns # Номер ppp-интерфейса (в данном случае будет ppp100) unit 100 # Подключаться в случае обрыва persist # Перепосылать пакеты авторизации каждые 60 секунд # Позволяет избежать обрыва соединения при отсутствии трафика chap-interval 60 # Идентификатор соединения, используемый для поиска паролей в соответствующих файлах, # А так же передаваемый ip-up и ip-down-скриптам ipparam Megafon # Имя пользователя (пароль описывается в файле "/etc/ppp/chap-secrets") user "gdata" # Отключаем любое сжатие nopcomp novjccomp nobsdcomp nodeflate noaccomp # Правильная обработка обрывов соединения lcp-echo-interval 2 lcp-echo-failure 3 # IP адрес мы будем получать от провайдера, а не назначать сами noipdefault
Теперь вписываем в файл “/etc/ppp/chap-secrets” следующие строки
"gdata" Megafon "gdata"
И подключаемся командой:
pon Megafon
Соответственно отключиться можно командой:
poff Megafon
Чтобы соедиение устанавливалось автоматически при загрузке нужно добавить запись в файл “/etc/network/interfaces”. Согласно документации она должна выглядеть вот так:
auto Megafon iface Megafon inet ppp provider Megafon
Однако в утилите ifup есть баг, который приводит к тому, что сразу после успешного подключения pppd получает SIGHUP и соединение рвётся. Ошибка эта очень древняя и судя по сообщениям на форумах и баг-трэкерам дистрибутивов надеяться на её исправление в ближайшем будущем не стоит. Поэтому используем небольшой хак: опишем интерфейс не как ppp, а как manual:
auto Megafon iface Megafon inet manual pre-up /usr/bin/pon Megafon pre-down /usr/bin/poff Megafon
На этом всё. Приятной работы!
Автозагрузка
А теперь — автозагрузка, с ней посложнее. Я сразу опишу создание скрипта автозагрузки, в который можно будет запихнуть всё, что угодно. Он будет стартовать вместе с системой, нооо…
Нельзя просто так взять и создать файл автозагрузки. Есть одна проблема — Debian с какого-то времени пересмотрел свои требования к файлам автозагрузки. Файл мало просто создать, его нужно ещё по-особому отформатировать:
- Первая проблема — это LSB headers. Это заголовок файла автозагрузки. Нужен он потому, что компоненты автозагрузки должны выполняться в определённом порядке, поскольку часть из них зависят друг от друга. Предположим, у вас есть два скрипта в автозагрузке — один из них должен будет монтировать сетевую папку, а второй — делать в неё резервную копию файлов. Естественно, что сначала нужно выполнить первый, а потом — второй, поскольку второй зависит от первого. Для указания таких зависимостей и используются заголовки загрузочного файла. Впрочем, будет достаточно того заголовка, который я выложу в образце файла автозагрузки.
- Вторая проблема — любой скрипт в автозагрузке при запуске системы вызывается командой /etc/init.d/script start, а при выключении компьютера — командой /etc/init.d/script stop. Нужно добавить условия для обработки этих случаев.
Я сделал просто — взял за основу скрипт из имеющихся в /etc/init.d/ — уж они-то должны быть созданы по правилам, потом изучил этот скрипт и вырезал из него всё ненужное. Осталось два места, которые нужно изменить — место для команд, которые выполняются при запуске системы, и место для команд, которые выполняются при выключении компьютера. Впрочем, сейчас всё увидите:
Добавление поддержки протокола ppp в ядро ос
Устройство, на котором будет установлен дистрибутив, созданный в предыдущем разделе, уже сможет распознать LTE-модуль Quectel EC21-E, т.к. его драйвера есть в ядре Linux. Однако для подключения устройства к интернету нам необходимо добавить поддержку протокола PPP в ядро Linux, а также добавить в наш дистрибутив пакет ppp и написать для него файл расширения рецепта, который «расскажет» bitbake как и куда установить в нашем дистрибутиве необходимые файлы для pppd и chat, являющиеся частью пакета ppp.
Для конфигурирования ядра выполним команду:
~/habr-yocto-lte/build$ bitbake virtual/kernel -c menuconfig
Откроется стандартное окно menuconfig в котором надо выбрать:
Device drivers --->
[*] Network device support --->
<M> PPP (point-to-point protocol) support
<M> PPP BSD-Compress compression
<M> PPP Deflate compression
<*> PPP filtering
<M> PPP MPPE compression (encryption)
<*> PPP multilink support
<M> PPP over Ethernet
<M> PPP support for async serial ports
<M> PPP support for sync tty ports
Сохраняем конфигурацию и выходим из menuconfig. Учтите, что эта конфигурация будет применяться только на том ПК, на каком она была сохранена. Для того что бы она применялась на любом ПК при клонировании проекта из репозитория, необходимо сохранить конфигурацию в файле defconfig и написать рецепт расширения для recipes-kernel.
Сохраним конфигурацию ядра в файле defconfig:
~/habr-yocto-lte/build$ bitbake virtual/kernel -c savedefconfig
Файл defconfig сохранится в каталоге ~/habr-yocto-lte/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.19.94 gitAUTOINC 5a23bc00e0-r22a/build
Все рецепты расширения и рецепты, написанные нами, будем хранить в отдельном мета-слое. Создадим и назовем его meta-habr:
~/habr-yocto-lte/build$ bitbake-layers create-layer ~/habr-yocto-lte/meta-habr
В каталоге ~/habr-yocto-lte появится директория meta-habr – это и есть наш мета-слой. В этой директории будет пример рецепта recipes-example, он нам не нужен, удалим его, а затем добавим наш мета-слой в файл bblayers.conf:
~/habr-yocto-lte/build$ rm -r ~/ habr-yocto-lte/meta-habr/recipes-example/
~/habr-yocto-lte/build$ bitbake-layers add-layer ~/habr-yocto-lte/meta-habr
Пришло время сделать рецепт расширения для ядра Linux. Создаем необходимые каталоги и файлы:
~/habr-yocto-lte$ mkdir – p meta-habr/recipes-kernel/linux/linux-ti-staging/beaglebone
~/habr-yocto-lte$ touch meta-habr/recipes-kernel/linux/linux-ti-staging_%.bbappend
Копируем ранее созданный файл defconfig в каталог ~/habr-yocto-lte/meta-habr/recipes-kernel/linux/linux-ti-staging/beaglebone
~/habr-yocto-lte$ cp ~/habr-yocto-lte/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.19.94 gitAUTOINC 5a23bc00e0-r22a/build/defconfig meta-habr/recipes-kernel/linux/linux-ti-staging/beaglebone
и добавляем в файл linux-ti-staging_%.bbappend следующий код:
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI = "file://defconfig"
Теперь конфигурация ядра, определенная в файле defconfig будет применяться всегда при сборке дистрибутива. Соберём его и убедимся, что требуемые модули PPP установлены:
~/habr-yocto-lte/build$ bitbake –k core-image-base
~/habr-yocto-lte/build$ cat buildhistory/images/beaglebone/glibc/core-image-base/installed-packages.txt | grep "ppp"
--------------------------------------------------------
kernel-module-ppp-async-4.19.94-g5a23bc00e0_4.19.94 git0 5a23bc00e0-r22a_beaglebone.ipk
kernel-module-ppp-deflate-4.19.94-g5a23bc00e0_4.19.94 git0 5a23bc00e0-r22a_beaglebone.ipk
kernel-module-ppp-generic-4.19.94-g5a23bc00e0_4.19.94 git0 5a23bc00e0-r22a_beaglebone.ipk
kernel-module-ppp-mppe-4.19.94-g5a23bc00e0_4.19.94 git0 5a23bc00e0-r22a_beaglebone.ipk
kernel-module-pppoe-4.19.94-g5a23bc00e0_4.19.94 git0 5a23bc00e0-r22a_beaglebone.ipk
kernel-module-pppox-4.19.94-g5a23bc00e0_4.19.94 git0 5a23bc00e0-r22a_beaglebone.ipk
kernel-module-ppp-synctty-4.19.94-g5a23bc00e0_4.19.94 git0 5a23bc00e0-r22a_beaglebone.ipk
Как подключить 3g usb модем (мегафон, мтс, билайн) в ubuntu linux 12.04
В этой статье будет рассмотрена настройка и подключение 3G USB модема
(МТС, Мегафон) в Ubuntu 12.04. Это предельно
простая инструкция как подключить сотовый 3G модем в графической среде
Unity, с использованием интерфейса
Network Manager. Инструкция применима не только к
Ubuntu установленной на жесткий диск, но и к
Live варианту запускаемому с
USB флешки или с лазерного диска.
В Linux, в графических оболочках
Gnome, KDE, XFCE, Unity в качестве графического
интерфейса для настройки сетевых подключений используется программа Network Manager. Точнее Network
Manager обеспечивает plug and play работу с
физическими сетевыми устройствами, а графический интерфейс этой программы
называется Network Manager
Applet (nm-applet). Network Manager
Applet отображается в виде значка в системном трее
и если на этом значке кликнуть мышью откроется меню с функциями программы:
Для подключения 3G USB модема нужно воткнуть модем в USB разъем
компьютера и через 1-2 минуты (необходимо некоторое время на то, чтобы модем
был опознан системой и подключен) кликнуть на значке «Сеть» в трее и выбрать
пункт меню «Edit connections» (иллюстрация
выше). В результате откроется окно, в котором
нужно выбрать вкладку «Mobile broadband»
и там нажать кнопку «Add»:
Запустится мастер настройки соединения, в первом окне нажать кнопку
«Continue»:
Примечание.
Если вкладка «Широкополосный доступ (Mobile
broadband)» недоступна или в первом окне
настройки не определена модель модема, тогда:
нужно добавить новую строку в файле /lib/udev/rules.d/40-usb_modeswitch.rules
в которой прописать vid и pid вашего модема. Эти данные вы можете
узнать через консоль командой lsusb.
Во втором окне выбрать страну и нажать кнопку
«Continue»:
В следующем окне выбрать оператора и нажать кнопку
«Continue»:
В следующем окне нажать кнопку «Continue»:
В следующем окне нажать кнопку «Apply»:
В следующем окне нажать кнопку «Save»:
В этом окне можно отключить опцию «Allow roaming …»
(роуминг) и включить опцию «Connect automatically».
Готово. Теперь, для того чтобы подключиться к Интернет достаточно
кликнуть на значке «Сеть» и в меню выбрать название созданного соединения:
И через несколько секунд соединение будет установлено:
Можно сделать так, чтобы соединение устанавливалось автоматически, как
только модем будет воткнут в USB разъем. Для этого
необходимо открыть окно соединений, выбрать вкладку «Mobile
broadband» и там нажать кнопку «Edit»
затем отметить опцию «Connect automatically»
и нажать кнопку «Save»:
P.S.
По моим длительным наблюдениям в Ubuntu
«сотовый» Интернет работает немного быстрее чем в Windows.
Бывает даже и такое, что в Windows соединения
вообще нет (оно устанавливается но не работает), а в
Ubuntu все нормально.
Если у вас возникли проблемы с подключением читайте другую статью —
установка и настройка 3G USB модема на Ubuntu
Linux, в ней более подробно описан процесс установки и настройки.
Иван Сухов, 2022 г.
Как подключить модем мтс в linux?
Сегодня у многих пользователей компьютеров большой популярностью пользуются USB 3G модемы от различных операторов. Если вы имеете на борту OS Windows и у вас устойчивый сигнал, (если сигнал слабый, читайте статью: как усилить сигнал 3G модема), то скорее всего вы не будете иметь с модемом особых затруднений. Ведь все модемы обычно оснащаются программным обеспечением под OS Windows и просто вставив модем в USB порт, запуститься программа автозапуска, которая установит всё необходимое в 3 щелчка мышки.
Кстати, нет ничего обиднее, чем пЕрЕплАтИть при покупке 🤦🏻♂️ Поэтому ОЧЕНЬ рекомендую подписаться на канал в Телеграм 👉🏻Промокоды для Алиэкспресс👈🏻 Постоянно узнавая про новые акции 🔥 на разные товары, вы точно НИКОДА не переплатите 👌🏻
Но вот если у вас на борту OS Linux, вы наверняка столкнитесь с трудностями, так как подключить USB модем в Linux не так просто. На днях одна моя знакомая купила себе модем от МТС – HUAWEI E171. Так как у на её старом ноутбуке стоит Росинка 9, то сразу возникла проблема:
Дело в том, что модем никак не хотел определяться в Network Manager. После долгих поисков я на удивление себе нашёл программу для этого модема именно под Linux! Какой-то добрый человек на одном форуме выложил архив с двумя версиями программы: под Windows и Linux.
Очень жаль, что создание мобильных приложений под Linux так хромает, и такие находки воспринимаются почти как чудо. Выкладываю архив только с версией под Linux: Soft e171 huawei linux.
Скачав архив распакуйте его в свою домашнюю папку. У вас появятся вот такие файлы. Посмотрите, являются они исполняемыми, особенно файл “install”. После этого откройте терминал и выполните команду:
sudo bash ./install
Если вы всё сделали правильно, то программа начнёт устанавливаться:
Если всё прошло без ошибок, а на Росинке 11 всё прошло гладко, у вас в меню появится значок программы с логотипом от МТС.
Как теперь подключить модем МТС в Linux? Запустите программу, предварительно вставив модем в USB порт. В трее должен появиться значок программы.
Щёлкнув по нему вы запустите Connect Manager MTS Linux, который внешне не отличается от версии Windows.
Если у вас не установлена программа usb-modeswitch, то установите её обязательно.
sudo aptitude install usb-modeswitch
sudo rm /lib/udev/modem-modeswitch
Вот и всё, теперь вы знаете, как просто подключить модем МТС в Linux. Дело не сложное, особенно, когда есть нужный софт!
Удалить программу можно командой:
sudo /usr/local/Connect_Manager/UninstallMobilePartner
Настройка интернета мтс vpn-подключения на linux
1. На первом этапе для настройки домашнего итернета МТС необходимо совершить установку пакетов pptp-linux и ppp.
Все параметры настроек и файлов конфигурации соответствуют требованиям версий ppp-2.4.2-12 как и pptp-linux-1.7.1-1. Возможно, что версии имеют отличия, тогда необходимо обратиться к инструкции к имеющимся пакетам и отредактировать конфигурации.
2. Выяснить адреса маршрутизатора, прописанного по умолчанию. С этой целью нужно подключить сетевой кабель и включить модем, после чего, выполнить команду «netstat -rn». В появившихся командных строках обнаружить запись, в которой в графе «Destination» прописано выражение «0.0.0.0».
Графа «Gateway» содержит адрес маршрутизатора, прописанный по умолчанию, вида: «172.19.128.1» (это произвольные значения, приведенные в качестве примера, реальный адрес зависит от способа подключения и может быть различным). Значения, указанные в категории «Gateway» необходимо запомнить, чтобы заменять в примерных конфигурациях и командах.
3. Совершить прописание маршрута до сервера доступа. Для этого используем запрос «route add 172.19.0.1 gw GATEWAY». Чтобы система нормально функционировала и не требовалось прописывать эту команду после периодической загрузки системы, необходимо прописать эту строку в системных стартапных скриптах, типа /etc/rc.local.
Очистка таблицы от маршрутов по Default: «route del default». Далее произвести редактирование файла /etc/ppp/options. В поле «LOGIN» ввести свой логин, он должен содержать:
local
lock
nodetach
lcp-echo-interval 30
lcp-echo-failure 5
require-pap
require-chap
defaultroute
user LOGIN
noauth
Редактируем файл /etc/ppp/chap-secret. В него надо добавить строку (Разделитель слов– табуляция!):
LOGIN * PAROL *
«LOGIN» — заменить на свой логин
«PAROL» — свой пароль.
Подымаем VPN соединение: pptp 172.19.0.1
Для автоматизации поднятия VPN создаем скрипт для запуска и реконекта при обрыве, к примеру такой:
#touch /usr/local/bin/pptp-run
#chmod a x /usr/local/bin/pptp-run
в нём пишем:
#!/bin/bash
LOG=»/var/log/pptp-run.log»
while true; do
echo -e «n===========================n`date`» >> $LOG
/sbin/route del default
/usr/sbin/pptp 172.19.0.1 >> $LOG
/sbin/route add default gw GATEWAY
echo -e «press ctrl c from exit»
sleep 20;
done
Настройка домашнего проводного интернета МТС завершена.
Версия для Windows доступна по ссылке.
Про umts/lte-модемы и linux. практика.
Продолжение. Начало здесь.
Для тех, кто недавно присоединился к радиоканалу “Боян-FM” читателям моей уютненькой™, напомню, что затеял всё это ради того, чтобы построить достаточно скоростной IPSec-канал через “Йоту”. А для этого, в свою очередь, необходимо получить прямой “честный” IP с SIM-карты на каком-либо сетевом интерфейсе, притом минуя PPP.
Конкретно я использую модем iRZ TL21, построенный на базе модуля Sierra (он же AirPrime) MC7710, в составе которого находится чип Qualcomm MDM9200. Система – стабильный дистрибутив Debian (в данном случае Wheezy).
Сразу оговорюсь, что в какой-нибудь свежей Ubuntu данный модем заработает прям “из коробки”: его хорошо понимает NetworkManager. Но мы ж реальные пацаны, у нас реальный сервак, GUI на нём нетути. Да и подниматься линк должен сам по себе при старте системы. Поэтому пойти по простому пути не получится, придётся никакой механизма всё вручную.
Итак, суём модем в USB-порт, заправшиваем “lsusb” и видим…
Bus 006 Device 002: ID 03f0:1027 Hewlett-Packard Virtual keyboard and mouse
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 003: ID 1199:68a2 Sierra Wireless, Inc. MC7710 Modem
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Ага, третья строчка – вот оно как раз самое. Выделенные жирным шрифтом цифирки нам потом ещё пригодятся. Ну что-ж, вроде как всё хорошо. Смотрим “ls /dev/ttyUSB*” и видим… а ничего мы не видим. Как говорится, “***в панама”. Нету псевдотерминалов.
Иногда затык может заключаться в том, что некоторые модемы “тянут” за собой виртуальный CD-ROM, на котором типа лежат типа драйвера для этого модема. И пока не пнёшь этот модем правильной AT-командой, собственно в модем он не превратится. А будет и дальше себе с настойчивостью кретина прикидываться CD-приводом. Ну это лечится элементарной установкой пакета “usb-modeswitch”: “apt-get install usb-modeswitch“.
Ладно, установили. Но псевдотерминалы всё равно не появились. Чешем репу. И вспоминаем, что в Debian-е по умолчанию идёт довольно боянистый софт, и нужных драйверов “из коробки” нет. Чтобы не париться уж слишком сильно, можно тупо поставить свежее ядрышко из backports. На момент написания этого псто оно было версии 3.16:
Перезагрузились. Смотрим “modinfo qmi_wwan” и “modinfo sierra_net“. Если выделенные жирным циферки из выхлопа lsusb (см. выше) оказались в одном из двух списков, то всё пучком. Можем продолжать. Если же нет, увы. Идем искать драйвера к нашему “мопеду”. Хорошо если найдём. А если не найдем – значит “упс”. В моём случае всё ништяк:
Внезапно, и псевдотерминалы появились в большом количестве:
Дальше тыкаем каким-нибудь minicom-ом в каждый терминал по очереди (“minicom -D /dev/ttyUSB0“, “minicom -D /dev/ttyUSB1” и т.п.) и смотрим который из них откликнется на какой нибудь “AT!GSTATUS?“, тот и есть нужный нам. Заодно проверим, что модем сцепился с сотовой сетью.
RSSI (dBm): -75 Tx Power: 0
RSRP (dBm): -103 TAC: 26BD (9917)
RSRQ (dB): -9 Cell ID: 0F30DB00 (254860032)
SINR (dB): 7.2
OK
Вроде работает. Тут наступает небольшая засада. В дальнейшем нам придётся из различных скриптов ссылаться на найденный псевдотерминал. Но никто не может гарантировать нам, что после очередной перезагрузки сервера имя устройства останется таким же. Поэтому придётся помучать udev для того чтобы создать символическую ссылку (symlink), дабы увековечить нашу бесценную находку. Для начала смотрим к каким атрибутам мы могли бы привязаться.
Копипаста ниже была взята с другой конфигурации оборудования, поэтому некоторые буквы-цифры там будут расходиться с моим примером. Самые внимательные, наверное, даже найдут где именно. Но общий смысл от этого не меняется. Текстовое поле можно растянуть, чтобы было удобнее читать.
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device ‘/devices/pci0000:00/0000:00:1d.7/usb4/4-5/4-5:1.3/ttyUSB3/tty/ttyUSB3’:
KERNEL==”ttyUSB3″
SUBSYSTEM==”tty”
DRIVER==””
looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb4/4-5/4-5:1.3/ttyUSB3’:
KERNELS==”ttyUSB3″
SUBSYSTEMS==”usb-serial”
DRIVERS==”sierra”
ATTRS{port_number}==”0″
looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb4/4-5/4-5:1.3’:
KERNELS==”4-5:1.3″
SUBSYSTEMS==”usb”
DRIVERS==”qcserial”
ATTRS{bInterfaceClass}==”ff”
ATTRS{bInterfaceSubClass}==”ff”
ATTRS{bInterfaceProtocol}==”ff”
ATTRS{bNumEndpoints}==”03″
ATTRS{supports_autosuspend}==”1″
ATTRS{bAlternateSetting}==” 0″
ATTRS{bInterfaceNumber}==”03″
looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb4/4-5’:
KERNELS==”4-5″
SUBSYSTEMS==”usb”
DRIVERS==”usb”
ATTRS{bDeviceSubClass}==”00″
ATTRS{bDeviceProtocol}==”00″
ATTRS{devpath}==”5″
ATTRS{idVendor}==”1199″
ATTRS{speed}==”480″
ATTRS{bNumInterfaces}==” 6″
ATTRS{bConfigurationValue}==”1″
ATTRS{bMaxPacketSize0}==”64″
ATTRS{busnum}==”4″
ATTRS{devnum}==”3″
ATTRS{configuration}==”Sierra Configuration”
ATTRS{bMaxPower}==”0mA”
ATTRS{authorized}==”1″
ATTRS{bmAttributes}==”e0″
ATTRS{bNumConfigurations}==”1″
ATTRS{maxchild}==”0″
ATTRS{bcdDevice}==”0006″
ATTRS{avoid_reset_quirk}==”0″
ATTRS{quirks}==”0x0″
ATTRS{serial}==”358178041352404″
ATTRS{version}==” 2.00″
ATTRS{urbnum}==”895″
ATTRS{ltm_capable}==”no”
ATTRS{manufacturer}==”Sierra Wireless, Incorporated”
ATTRS{removable}==”unknown”
ATTRS{idProduct}==”68a3″
ATTRS{bDeviceClass}==”00″
ATTRS{product}==”MC7710″
looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb4’:
KERNELS==”usb4″
SUBSYSTEMS==”usb”
DRIVERS==”usb”
ATTRS{bDeviceSubClass}==”00″
ATTRS{bDeviceProtocol}==”00″
ATTRS{devpath}==”0″
ATTRS{idVendor}==”1d6b”
ATTRS{speed}==”480″
ATTRS{bNumInterfaces}==” 1″
ATTRS{bConfigurationValue}==”1″
ATTRS{bMaxPacketSize0}==”64″
ATTRS{authorized_default}==”1″
ATTRS{busnum}==”4″
ATTRS{devnum}==”1″
ATTRS{configuration}==””
ATTRS{bMaxPower}==”0mA”
ATTRS{authorized}==”1″
ATTRS{bmAttributes}==”e0″
ATTRS{bNumConfigurations}==”1″
ATTRS{maxchild}==”8″
ATTRS{bcdDevice}==”0316″
ATTRS{avoid_reset_quirk}==”0″
ATTRS{quirks}==”0x0″
ATTRS{serial}==”0000:00:1d.7″
ATTRS{version}==” 2.00″
ATTRS{urbnum}==”61″
ATTRS{ltm_capable}==”no”
ATTRS{manufacturer}==”Linux 3.16.0-0.bpo.4-amd64 ehci_hcd”
ATTRS{removable}==”unknown”
ATTRS{idProduct}==”0002″
ATTRS{bDeviceClass}==”09″
ATTRS{product}==”EHCI Host Controller”
looking at parent device ‘/devices/pci0000:00/0000:00:1d.7’:
KERNELS==”0000:00:1d.7″
SUBSYSTEMS==”pci”
DRIVERS==”ehci-pci”
ATTRS{irq}==”16″
ATTRS{subsystem_vendor}==”0x103c”
ATTRS{broken_parity_status}==”0″
ATTRS{class}==”0x0c0320″
ATTRS{companion}==””
ATTRS{driver_override}==”(null)”
ATTRS{consistent_dma_mask_bits}==”32″
ATTRS{dma_mask_bits}==”32″
ATTRS{local_cpus}==”00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f”
ATTRS{device}==”0x268c”
ATTRS{uframe_periodic_max}==”100″
ATTRS{enable}==”1″
ATTRS{msi_bus}==””
ATTRS{local_cpulist}==”0-3″
ATTRS{vendor}==”0x8086″
ATTRS{subsystem_device}==”0x31fe”
ATTRS{numa_node}==”-1″
ATTRS{d3cold_allowed}==”1″
looking at parent device ‘/devices/pci0000:00’:
KERNELS==”pci0000:00″
SUBSYSTEMS==””
DRIVERS==””
Смотрим к каким атрибутам оборудования мы можем “привязаться”. Однозначно придётся использовать критерий SUBSYSTEM==”tty” из первой секции, иначе получится ерунда. Но этого мало. Нужно что-то ещё. Большой соблазн взять ATTRS{product}==”MC7710″, чтобы однозначно идентифицировать устройство, но… тогда мы не сможем указать номер интерфейса. Ибо udev позволяет брать параметры устройства и только одного родителя. Поэтому придётся довольствоваться ATTRS{bInterfaceNumber}==”03″ и DRIVERS==”qcserial” из третьей секции. Итоговое правило будет выглядеть так:
Записываем его куда-нибудь в “/etc/udev/rules.d/80-LTE.rules”, после чего заклинаем “udevadm control –reload-rules“, “udevadm trigger“. Первое нужно, чтобы udev перечитал список правил, второе – чтобы не топать ногами в серверную и не “перевтыкать” руками модем.
Итак, у нас появилась символическая ссылка “/dev/LTE-control”. Что же с ней делать дальше? А дальше надо указать модему APN и логин-пароль, если есть. Но каждый раз мы это делать руками, понятно, не будем. Поэтому имеет смысл либо написать скрипт, либо запихнуть вызов соответствующих команд прямо в “/etc/network/interfaces”. У меня получилось что-то типа того.
В директиве “pre-up” описываем действия до поднятия интерфейса: указать название APN, немного подождать, запустить пакетный драйвер QMI (или как он там правильно называется). То есть софтинку, которая разбирает-собирает поток данных и контрольный канал. С этого момента всё должно заработать. Если не взлетит, то вдумчиво раскуривать мануалы по модему, искать там диагностические AT-команды и пытаться разобраться что же пошло не так. После опускания интерфейса останавливаем QMI-драйвер.
Вроде бы на этом можно и успокоиться. Но я же ж извращенец, мне этого мало. Я хочу не просто подключить модем к серваку, а стать владычицей морскою “закинуть” его вовнутрь QEMU/KVM-виртуалки. В принципе, можно потанцевать с бубном и попробовать сделать это “прям щас”. Но мой модем помимо режима QMI умеет ещё Direct IP, при котором не надо запускать никакого QMI-драйвера. Поэтому я пошёл дальше.
Сперва попросил уважаемого rustedowl разобраться как именно переключить модем в другой режим. Сложность там в том, что у данного устройства есть два разных набора AT-команд. Один лоховский универсальный, который является стандартным для любых UMTS-устройств. А второй – пацанский расширенный, для того чтобы можно было трогать модем за яйца крутить всякие хитрые инженерные параметры. Спустя какое-то время поспели вот такие заклинания:
Где набор символов “A710” является… паролем. Дабы всякие ничтоже сумнящиеся не совали свои шаловливые ручки куда не просят. И что сцуко характерно, энтот пароль в официальной документации к хитропопому прибору напрочь отсутствует. Он был найден на бескрайних просторах интернета и подходит к большинству модемов от данного производителя (Sierra Wireless). Параметр второй команды – собственно режим. “68A2” – это QMI, “68A3” – Direct IP. Данные значения актуальны только для данной модели (MC7710). Но в любом случае будет очень кстати лишний раз свериться с документацией чтобы не напортачить, поскольку операция смены PID является весьма щекотливой и может привести к самым разным последствиям. Третья команда перезагружает мопед.
После перезагрузки супостат перекрашивается яки киллер из GTA2. Он теперь в lsusb виден как “Bus 004 Device 003: ID 1199:68a3 Sierra Wireless, Inc. MC8700 Modem”. Обратите внимание, что поменялся ID оборудования и даже название модели. Раньше он представлялся как MC7710, а теперь внезапно стал MC8700. И драйвер теперь к нему подключился другой:
Также увеличилось количество псевдотерминалов ажно до пяти штук. И несколько изменился набор допустимых AT-команд.
Дальше всё “как обычно”. Находим среди этой пачки “телетайпов” контрольный канал, фиксируем его udev-ом. Точно так же, как и в предыдущем случае, указываем точку доступа (“AT CGDCONT=1,”IP”,”yota.ru””). А вот процесс “дозвона” намного проще: “at!scact=1,1”. Где последняя циферка является номером профиля, указанного в “CGDCONT”. То есть, внутри модема можно создать несколько разных профилей с разными точками доступа и переключаться между ними. Теоретически это может пригодиться если нужно время от времени использовать то “честный” IP от оператора, то “серый”, которые раздаются разными APN. Практически я не знаю случаев, когда такое может реально понадобиться.
Проверить, что “всё хорошо” можно командой “at!scpaddr=1”, где цифра означает номер пресловутого “профиля”. В ответ модем должен откликнуться полученным от оператора IP-адресом.
Но самой главной “плюшкой” режима Direct IP является то, что конкретно Sierr-овские модемы можно настроить на “автодозвон”. Для этого нужно установить профиль по умолчанию: “at!scdftprof=1” и включить автодозвон в этом профиле: “at!scprof=1,””,1,0,0,0“. Теперь после перезагрузки сервера либо отключения-включения питания модема он будет устанавливать линк автоматически. Аллилуйя!
IP-шник на системный интерфейс прилетает как обычно, по DHCP. Однако wwan0 – это всё-таки не ethernet. Попытки объединить его в bridge с другими системными интерфейсами (“brctl addif br0 wwan0“) не увенчались успехом. Для того, чтобы получить беспроводной LTE-линк с честным IP-адресом внутри виртуальной машины, пришлось ещё немного поизгаляться. Как – напишу в третьей части, если когда-нибудь дойдут руки.
Какой вывод можно сделать из вышеописанных половых сношений с модемом умозаключений? Sierra Wireless делает вполне годные железки, которые довольно неплохо поддерживаются Linux-ом. Даже таким консервативным, как Debian. Собратьям по несчастью разуму могу порекомендовать брать устройства, которые понимает драйвер “sierra_net”, ибо при прочих равных секса с ними будет меньше. К сожалению, таковых не так уж и много. Пока что их можно пересчитать по пальцам одной руки. Если кто будет выбирать, вот вам их VID-PID: “0f3d:68a3”, “0f3d:68aa”, “1199:68a3”, “1199:68aa”. Однако имейте в виду, что VID-PID также зависит и от режима работы и может изменяться в результате переключения последнего.
Создание проекта и сборка дистрибутива
Создадим в домашней директории каталог, где у нас будет хранится репозитории Poky и мета-слои с рецептами. Назовем его habr-yocto-lte:
~$ mkdir habr-yocto-lte
Перейдем в директорию habr-yocto-lte и создадим пустой git репозиторий:
~$ cd habr-yocto-lte
~/habr-yocto-lte$ git init
Добавим в созданный git-репозиторий, в виде подмодулей, проект Poky и слой meta-ti:
~/habr-yocto-lte$ git submodule add -b thud git://git.yoctoproject.org/poky.git
~/habr-yocto-lte$ git submodule add -b thud git://git.yoctoproject.org/meta-ti
Poky это как раз тот самый инструмент, с помощью которого мы будем собирать наш дистрибутив, а meta-ti – это слой, который объединяет в себе наборы рецептов, классов и конфигурационных файлов для процессоров Texas Instruments.
Создадим файл oe-init-build-env и сделаем его исполняемым:
~/habr-yocto-lte$ touch oe-init-build-env
~/habr-yocto-lte$ chmod x oe-init-build-env
Добавим в него следующий код:
#!/bin/sh
source $(pwd)/poky/oe-init-build-env build
Файл oe-init-build-env мы будем запускать всякий раз, при открытии нового окна терминала. Давайте запустим его командой:
~/habr-yocto-lte$ source ./oe-init-build-env
При первом выполнении скрипта в папке ~/habr-yocto-lte будет создана папка build, содержащая конфигурационные файлы и результаты сборки дистрибутива, а в окне терминала мы увидим нечто вроде этого:
### Shell environment set up for builds. ###
You can now run 'bitbake <target>'
Common targets are:
core-image-minimal
core-image-sato
meta-toolchain
meta-ide-support
You can also run generated qemu images with a command like 'runqemu qemux86'
В принципе, теперь у нас все готово для сборки дистрибутива, но мы сделаем еще несколько «штрихов»:
BBLAYERS ?= "
/home/alex/habr/poky/meta
/home/alex/habr/poky/meta-poky
/home/alex/habr/meta-ti
"
MACHINE = "beaglebone"
INHERIT = "buildhistory"
BUILDHISTORY_COMMIT = "1"
PACKAGE_CLASSES = "package_ipk"
CORE_IMAGE_EXTRA_INSTALL = " kernel-modules"
DISTRO_FEATURES_append = " systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
Запустим сборку дистрибутива:
~/habr-yocto-lte/build$ bitbake –k core-image-base
Пока собирается дистрибутив можете пойти вздремнуть, у вас есть на это часа 4 :). Потом будет собираться всё гораздо быстрее.
Дистрибутив сохранится в каталоге ~/habr-yocto-lte/build/tmp/deploy/images/beaglebone