Страницы

пятница, 2 февраля 2007 г.

Настройка ADSL-модема ZXDSL Z852 в Ubuntu Linux


Введение

Итак, попытаемся настроить наш, новый полученный в дар, ADSL модем ZTE ZXDSL z852 в Linux Ubuntu. (Ubuntu Edgy 6.10 and Ubuntu Feisty 7.10)

Чтобы опустить подробности и сразу перейти к загрузке нажмите здесь (а пока нету).


Ссылка на сайт производителя: http://www.zte.ru/?xa=79&ya=392

Провайдер Авангард СЗТ в Санкт-Петербурге дарит и другие модемы, но мне достался этот, хотя я мечтал о другом.
Ссылка на услугу adsl от Северо-Западного Телекома: http://www.avangard-dsl.ru/

Имеем, только что установленный дистрибутив Linux Ubuntu 6.06 LTS (codename Dapper). Дистрибутив устанавливался с Live CD загруженный с сайта Ubuntu. Доставка по почте как-то не сработала. Да и загрузить быстрее, хотя приятно получить по почте.

Очень желательно, а может и даже обязательно, нужно иметь работающее соединение с Интернет под Ubuntu, иначе будет очень трудно из под Windows скачивать нужные пакеты и передавать их в Ubuntu на флешке.
Другим способом может быть использования диска alternate рассчитанного на инсталляцию. Не проверял, может там и идут нужные пакеты.

В моем случает на помощь пришел PCI модем на чипсете Lucent, который определился автоматически (драйвер lt_modem) при установке. Быстро настроив Gnome PPP мне удалось получить доступ в Интернет из-под Ubuntu через обычный модем. Не пара кликов, но и не пляски.


Шаг первый. Пластмасса - в смысле hardware.

Первым делом, надо отключить модем и перезагрузиться в Ubuntu. Это нужно новичкам для чистоты эксперимента.
Итак, мы в Ubuntu. Подключаем модем. Если модем никогда ранее не настраивался в Ubuntu на нем будет гореть одна красная лампочка Power. Если же Вы не выключали компьютер и перезагрузились из Windows, то может гореть 2 лампочки (Power и желтая line), т.е. прошивка загруженная драйвером в Windows все еще в модеме (редкий случай).

Теперь надо определить, распознает ли ядро Linux Ubuntu хоть как-то этот модем. Для этого запустим и не будем закрывать программу Терминал, который располагается в меню Приложения/Стандартные/Терминал. Еще это называется Консоль.

Наберем в консоли команду: lsusb
Посмотрим ответ и пытаемся найти глазами строчки с ADSL. В моем случае - выделено фиолетовым светом.
Bus 005 Device 001: ID 0000:0000
Bus 001 Device 002: ID 0471:0104 Philips DSS330 Digital Speaker System [uda1321]Bus 001 Device 003: ID 04d9:0499 Holtek Semiconductor, Inc.
Bus 001 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 002: ID 0572:cb00 Conexant Systems (Rockwell), Inc. E-Tech ADSL Modem v2
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 002 Device 001: ID 0000:0000

Таким образом, видно, у меня он распознался как Conexant Systems (Rockwell), Inc. E-Tech ADSL Modem v2 по типу чипсета OEM производителя. Ну а коробочка с надписью ZTE ZXDSL это что-то китайское родное. Наверное, пластмасса и упаковка.
Важная информация содержится в ID 0572:cb00. Эти цифры и определяют чипсет модема. Если у Вас что-то иное, можно дальше не читать.

И самое интересное, что многие ADSL модемы на чипсете Conexant поддерживаются Linux Ubuntu Dapper out of box (т.е. из коробки). Ничего компилировать и пересобирать не надо. Драйвер есть в ядре. Нехватает только firmware (прошивки). Ее можно вытянуть с диска с драйверами под Windows, а можно поискать в Google.
Вытянуть с диска у меня не получилось, зато нашлось в Интернете, предварительно попробовав несколько прошивок. Подошедшие выложены здесь.
Прошивка это 2 файла:
cxacru-cf.bin - настройки ядра, cf means configuration
cxacru-fw.bin - собственно прошивка, fw means firmware

cxacru - это название драйвера, можно и не смотреть сайт разработчиков:
http://accessrunner.sourceforge.net/

Итак, файлы прошивки для модема ZTE ZXDSL 852 можно забрать здесь:
cxacru-cf.bin
cxacru-fw.bin

Эти файлы надо скопировать в каталог, в котором ядро вашего дистрибутива хранить разные firmware. в Ubuntu это в /lib/firmware/2.6.15-26-386 или /lib/firmware/2.6.15-27-386. Для каждого ядра в каталоге /lib/firmware есть каталог с номером соответствующим номеру ядра выводимому по команде uname -r (means Unix name).
В Ubuntu обычному пользователю не разрешается такое вытворять, а Вы по умолчанию обычный пользователь. Вам надо стать необычным рутом.
Лучше всего это делается командой: sudo -s -H. Будет запрошен Ваш пароль, который Вы определили при установке для себя и не забыли на момент настройки модема.
После выполнения этой команды в консоли измениться промт (prompt) к примеру с
dmitriy@dzhilinux:~$ на root@dzhilinux:/home/dmitriy#
Теперь Вы имеете много прав и можете копировать.
Пусть я поместил эти файлы (лучше не спрашивать как я это сделал) в мой домашний каталог /home/dmitriy
Выполним:
cp /home/dmitriy/cxacru-* /lib/firmware/2.6.15-26-386/
Здесь использован символ подстановки * чтобы охватить несколько файлов. По идее должны скопироваться. Если копирование как-то не идет, а обычно оно не идет, когда забываешь переключиться на root в консоли и получаешь Permission denied, то даже не знаю что делать.

Скопировав файлы можно перезагрузиться, для простоты. Драйвер модема при загрузке ядра подхватит прошивки и загрузит их в модем. Модем в свою очередь радостно замигает желтой лампочкой, а потом засветит. Или не засветит. В любом случае драйвер cxacru выведет сообщение в журнал загрузки ядра и посмотреть его ответ можно по команде: dmesg | grep cxacru. Которая берет лог ядра и перенаправляет ( | ) в grep (поиск шаблонов строк во входных файлах), сообщения содержащие cxacru
Правильный вывод у меня:
[4294699.502000] usbcore: registered new driver cxacru
[4294699.997000] cxacru 3-1:1.0: found firmware cxacru-fw.bin
[4294700.017000] cxacru 3-1:1.0: found firmware cxacru-cf.bin
[4294716.710000] cxacru 3-1:1.0: ADSL line: attemtping to activate
[4294721.725000] cxacru 3-1:1.0: ADSL line: down
[4294726.739000] cxacru 3-1:1.0: ADSL line: attemtping to activate
[4294731.759000] cxacru 3-1:1.0: ADSL line: channel analysis
[4294736.771000] cxacru 3-1:1.0: ADSL line: up (2528 kb/s down | 672 kb/s up)

Фраза found firmware говорит что файлы нашлись и загрузились. ADSL line говорит о коннект железа модема с железом провайдера. В результате ADSL line: up (2528 kb/s down | 672 kb/s up). "Up" означает что линия поднята. На самом деле, скорость не такая, ее шейпит провайдер.

Фраза firmware not found говорит, что не нашлись прошивки. Причной может быть:
1. Не туда скопировали, не все файлы из двух скопировали.
2. Не в то ядро скопировали. Бывает.
3. Вы уже что-то ковыряли свое в Linux и что-то у Вас отвалилось. Раз Вы что-то ковыряли, значит Вы знаете как поступать в таких случаях. К примеру, пересобирали ядро. "Этвы патарапилис".

После этого все еще нет Интернета. Поэтому нужен шаг второй.

Шаг второй. Установка необходимого ПО (пакетов) из репозитариев Ubuntu

Провайдер СЗТ (услуга Авангард) использует:
протокол передачи данных PPPoE (PPP over Ethernet) RFC2516 LLCSNAP,
DSL modulation (тип DSL модуляции) ANSI T1.413.i2,
Параметр Line rate Auto,
Идентификаторы логического канала VPI/VCI VPI=0; VCI=35,
Идентификационные параметры:
Имя пользователя: ptn,
Пароль: ptn.

Для установки пакетов воспользуемся графическим инсталлятором пакетов Synaptic.
В меню Gnome он находится в Система/Администрирование/Программа управления пакетами Synaptic.
Если Вы еще не сделали, самое время подключить дополнительные репозитарии пакетов Universe. Не забудьте нажать кнопку "Получить сведения" чтобы обновить список пакетов доступных для установки.

Не спешите, изучите бегло интерфейс Synaptic, освойте навыки добавления пакетов.

В интерфейсе Synaptic есть кнопка Искать. Это окно поиска и туда надо набирать названия пакетов. Потом отмечать их для установки. Работающее соединение с Интернет на данном этапе просто необходимо.


Обязательно понадобятся пакеты:

Пакет br2684ctl - это RFC 2684 ATM/Ethernet мост. Эта программка (br2684ctl) эмулирует сетевую плату Ethernet. Т.е. Ваш модем эмулирует ATM устройство в системе, а эта программка делает из него сетевую плату Ethernet (создает интерфейс nas0), которую можно настраивать стандартными средствами (ifconfig).
Или это можно понять так: у Вас имеется обычный ethernet адаптер, с необычным интерфейсом nas0. Ну а то, что он внутри сплошь состоит из разных уровней эмуляции (usb, atm ) это нас не волнует (волнует конечно когда не работает). Это абстракция системы. Фактически мы подключены к провайдеру через обычный ethernet, правда который требует аутентификации пользователя, для чего используется протокол ppp поверх ethernet, что уже отличается от обычного ethernet.
Это было сделано, чтобы не делать новый протокол аутентификации по ethernet, решили использовать существующий. Такое решение часто применяется в локальных сетях города.



Отметив пакеты для установки, надо нажать кнопку Применить в Synaptic и подождать пока скачаются и установятся пакеты.

Шаг третий. Конфигурация
Все делать с правами рута. Помните sudo -s -H.

Загрузка модуля ядра - команда: modprobe br2684
Запуск утилиты конфигурирования br2684ctl с необходимыми параметрами:
br2684ctl -b -c 0 -a 0.0.35
Здесь параметры указаны для провайдера СЗТ (услуга Авангард) в Санкт-Петербурге.
Если Вы из другого города, то параметры будут отличаться.

Следующая команда позволит настроить образовавшийся после выполнения br2684ctl новый интерфейс nas0:
ifconfig nas0 up

Команда ifconfig покажет список настроенных интерфейсов в системе:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Диапазон:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:6383 errors:0 dropped:0 overruns:0 frame:0
TX packets:6383 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:185276 (180.9 KiB) TX bytes:185276 (180.9 KiB)

nas0 Link encap:Ethernet HWaddr 00:D0:D0:8B:94:FF
inet6 addr: fe80::2d0:d0ff:fe8b:94ff/64 Диапазон:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:134144 errors:0 dropped:0 overruns:0 frame:0
TX packets:162826 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:147659209 (140.8 MiB) TX bytes:15960823 (15.2 MiB)


После этого все будет готово для запуска ppp подключения к Интернет.




Дело в том, что в Ubuntu PPP(основной протокол подключения обычных клиентов к Интернет) идет в поставке уже с добавленным rp-pppoe плагином для pppoe. Остается только настроить конфигурацию.

Места в файловой системе ответственные за конфигурацию ppp.
Основное место /etc/ppp
/etc/ppp/peers - конфигурации ответственные за настройки для разных провайдеров
В Ubuntu в папке /etc/ppp/peers лежит файл dsl-provider
В нем можно сделать настройки для pppoe (adsl по нашему). Для этого надо отредактировать этот файл в любом редакторе.
В Ubuntu есть хороший редактор nano.
Набираем в консоли: nano /etc/ppp/peers/dsl-provider
Набиваем следующий ниже текст (см. файл dsl-provider)

Для записи файла надо нажать клавишу Ctrl и потом O (Ctrl+O). Для выхода их редактора Ctrl+X.


Вот мой:

# ADSL провайдер СПБ СЗТ Авангард
noipdefault
defaultroute
user 'ptn'
noauth
updetach
usepeerdns
# Настройка времени ожидания после разрыва связи перед повторным подключением (2 минуты)
holdoff 120
# Переподключаться автоматически при разрыве связи
persist
# Кол-во попыток переподключения
maxfail 10
plugin rp-pppoe.so
nas0

Также в файле : /etc/ppp/pap-secrets надо указать следующую строчку иначе авторизация у провайдера не пройдет.

«ptn» dsl-provider «ptn»


Консольные утилиты присоединения к Интернету:
pon - подключиться
poff - отключиться

Команда выполняется: pon dsl-provider
В результате должно быть работающее соединение с Интернет.
Проверка в консоли: ping www.google.com должны выводится строчки ответов от гугла.


Графические утилиты:
Gnome PPP - он правда не работает с ADSL провайдерами (там нет настроек). Только для обычных модемов.
Gnome NetworkManager - тоже не работает с ppp.

Шаг четвертый. Упрощение и автоматизация Plug & Play

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

Минимум - это автоматическое подключение к Интернету при загрузке Ubuntu.
Максимум - это подключение и отключение от Интернета с помощью графических средств Gnome,XFCE,KDE, простым подключением модема к USB, восстановление соединения после ACPI режимов (hibernate).

Самый простой и понятный способ - это все перечисленные выше команды занести в один скрипт и выполнять его при загрузке.
Хорош своей простотой первоначального автоматического поднятия Интернета.
Но плох, неинтегрируемость в систему. К примеру, отключив и подключив заново модем, может не получиться выйти в Интернет. Т.к. повторное выполнение простого набора приведенных команд будет чревато ошибками (модули загружены, интерфейсы сконфигурированы). Нужно более гибкое решение, рассчитанное на ограниченное количество ситуаций с модемом.

Тут еще надо упомянуть что Авангард раз в сутки разрывает принудительно соединение и менят IP. Нам бы хотелось обрабатывать такую ситуацию автоматически. Т.е. переподключаться.
Еще есть фича (у меня замечено), что иногда перед повторным подключением надо выдержать паузу около 2 минут, иначе не подключиться. Тоже надо автоматизировать.




Мы постараемся двигаться правильным (корректным) путем в Ubuntu, да и в других дистрибутивах.
В каталоге /etc/network находится файл interfaces который отвечает за конфигурирование сетевых интерфейсов, в том числе и при загрузке (man interfaces)
Его можно отредактировать, чтобы поднимать наше adsl-соединение автоматически при загрузке. Руководство по файлу interfaces см. man interfaces
Для соединений pppoe (наш случай) можно посмотреть примеры документации в каталоге /usr/share/doc/ppp
Также поможет man pppd

Итак, почти правильная настройка в /etc/network/interfaces, в нашем случае, содержит:
(почти, это до первого засыпания компьютера)

# Автоматическое подключение к провайдеру СЗТ (услуга Авангард) при загрузке
# в г. Санкт-Петербург, Россия

auto dsl-provider
iface dsl-provider inet ppp
provider dsl-provider
pre-up sleep 2m
pre-up modprobe br2684
pre-up br2684ctl -b -c 0 -a 0.0.35
pre-up ip link set up nas0
post-down kill $(cat /var/run/nas0.pid)
# sleep 2m - это для ожидания, загрузки и инициализации фирмава в модеме, в большинстве случаев устойчивой связи с провайдером этого хватает, иначе надо увеличить
# pre-up - предварительная загрузка моста (modprobe br2684) и его конфигурирование br2684ctl -b -c 0 -a 0.0.35
# здесь имя dsl-provider корреспондирует с файлом /etc/ppp/peers/dsl-provider

#Здесь auto - признак автоматического поднятия интерфейса по команде ifup -a (при загрузке, при восстановлении из спячки). Тут надо заметить, что adsl в такой схеме не поднимется. т.к. модули уже загружены и интерфейс сконфигурирован.

Это описание корреспондирует с настройками ppp для adsl в каталогах /etc/ppp/peers
dsl-provider это peer.:-)

Другой способ, как мне кажется, более правильный - использование udev. а по возможности и hal c d-bus
udev - подсистема управления устройствами (man udev, man udevinfo)

Make a file /etc/udev/rules.d/speedtch and put something like the following in it:

ACTION=="add", SUBSYSTEM=="usb", KERNEL=="cxacru*" RUN="touch /tmp/adsl"