|
Автор/Источник: Дарья Полякова» 03.04.2005 03:15, просмотров сегодня: 1, всего: 5616
статья размещена в группе: КПК в работе (для профессионалов)
оценка: 2.177, 17 голосов
Авторы: Kors,
daryna
Краткое предисловие
Это руководство возникло после тщетных поисков в Интернете решений подобной проблемы.
Не секрет, что для
целей тестирования софта для Palm наиболее удобен PalmOS эмулятор. Но, к сожалению,
такой класс ПО, как приложения использующие сеть, на
эмуляторе в большинстве своем неработоспособны. А те, которые все же работают (Eudora), используют
не библиотеку NetLib от PalmOS, а транслирование ее вызовов в вызовы сетевой библиотеки
desktop операционной системы, т.е. ОС, на которой был эмулятор запущен. Многие программы просто не
предусматривают работу в таком режиме, например, используют network api-функции, которые
не могут транслироваться в вызовы desktop библиотеки и возвращают результаты об ошибках (Palm ICQ),
либо используют класс сокетов RAW_SOCKET, на которые в Линуксе нужны привилегии root (Ping).
Вариант с трансляцией вызовов не устраивает также и программистов,
которые занимаются разработкой сетевого ПО для Palm, т.к. его нельзя полноценно тестировать на
эмуляторе. Подобные проблемы поднимались на форуме разработчиков PalmSource, но решение,
предложенное там, а именно: соединение эмулятора с desktop'ом через COM-порт,
требовало наличия null-модемного кабеля и 2х незадействованных COM-портов на компьютере, что нельзя
назвать доступным.
Итак, чтобы оценить преимущества запуска и тестирования сетевых программ на эмуляторе, не остается
ничего иного, кроме как заняться изготовлением null-модемного кабеля или поиском уже имеющегося.
Но пользователям Линукса доступна программная альтернатива null-модемному подключению эмулятора.
Рассмотрим ее подробнее.
Подготовка
Понадобятся:
- сам POSE или PalmOS
эмулятор; ищется: сайт PalmOne
или Ладошки.
- файл ROM с PalmOS не ниже 3.5 для эмулятора; ищется также на
сайте PalmOne
или Ладошках.
- сервис pppd; обычно установлен в Linux по умолчанию, если же нет, можно поискать на диске с
дистрибутивом либо посмотреть на официальном сайте.
- утилита netcat (nc); ищется аналогично: на установочном диске либо на
официальном сайте.
Настройка Linux'a
Сервис pppd должен быть настроен на ожидание входящего подключения на каком-либо из сокетов.
В данном случае это будет сокет 9999. Так как практика показала, что просто с помощью сервиса
inetd pppd к сокету прикреплен быть не может, использовался вариант с утилитой netcat, что повлекло
необходимость написания дополнительных скриптов. Все последующие команды в этом разделе выполняются
от пользователя root в консольном режиме.
- Создается скрипт, который запускает pppd при клиентском подключении на сокет 9999:
$echo '#!/bin/sh' > ppp1.sh
$echo '/usr/sbin/pppd local notty passive 10.0.0.1:10.0.0.2' >> ppp1.sh
$chmod ug+x ppp1.sh
Параметры pppd означают следующее:
local — директива ppd не использовать аппаратный контроль передачи,
а именно DTR/CD
notty — разрешает pppd быть запущенным для не tty устройства, как то сокет
passive — директива использовать настройки переданные клиентом.
10.0.0.1:10.0.0.2 — адреса в подсети desktop-host'а и POSE соответственно.
- Создается скрипт для запуска netcat:
$cat > ncstart.sh <<END
>#!/bin/bash
>while :
>do
>nc -vvlp 9999 -s 127.0.0.1 -e ppp1.sh
>done
>END
Здесь параметры nc означают следующее:
-vv — подробный вывод логов;
-l — listen mode, режим ожидания подключения;
-p — номер сокета;
-s — адрес хоста;
Бесконечный цикл нужен, чтобы не перезапускать
netcat всякий раз после Disconnect'а сетевого интерфейса PalmOS в POSE.
(Решение с циклом не блестящее, конечно, и убивается только через kill PID)
- Для проверки работоспособности скриптов, запускается ncstart и подключается telnet к 9999 сокету:
$./ncstart.sh
$telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
~#ю!}!}!} }4}"e;}&} } } } }%}&y
telnet > q
Connection closed.
Если все правильно, telnet показывает отклик pppd на сокете 9999. Чтобы завершить телнет-сессию
не закрывая при этом всю консоль, можно перевести telnet в режим команд нажав Ctrl+], затем дать команду q.
Настройка POSE
Все настройки POSE, те что доступны в меню эмулятора Settings->..., а также расширенные,
которые в меню найти нельзя, хранятся в текстовом файле ~/.poserrc. Здесь ~
— домашний каталог пользователя, от которого запускается pose. В файле нужно
найти фрагмент, представленный ниже, и отредактировать параметр PortSerial,
отвечающий за последовательный порт эмулятора. Перенаправляем его
на серверный сокет 9999, созданный с помощью netcat:
PortIR=null:
PortIRSocket=
PortMystery=null:
PortSerial=socket:localhost:9999
PortSerialSocket=
Настройка PalmOS на эмуляторе
Чтобы подключение POSE к сети произошло, нужно настроить сетевые
свойства PalmOS на эмуляторе. Для этого нужно зайти
в Prefs->Network и проделать следующее:
- Выбрать Service->Unix
- Выбрать Connection->Cradle/Cable
- UserName/Password оставить пустыми
- Зайти в Details:
- Выбрать Connection type->PPP
- Указать Primary DNS такой же как и в сетевых свойствах desktop-хоста.
- Выбрать IP Address->Automatic
- Зайти в Script, выбрать в первой строке End из списка.
- Убедиться что все изменения сохранены, вернуться в Network Preferences и
нажать Connect.
Если настройки были сделаны правильно и на сокете 9999 «слушает» netcat, подключение
пройдет успешно и в netcat output добавится строка:
$listening on [127.0.0.1] 9999 ...
connect to [127.0.0.1] from localhost.localdomain [127.0.0.1] 34948
A запуск ifconfig от пользователя root покажет, что добавился новый интерфейс,
в данном случае ppp0:
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.10.0.1 P-t-P:10.10.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:58 (58.0 b) TX bytes:73 (73.0 b)
Наиболее часто встречающимися ошибками на этом этапе были следующие:
- Сообщение:«Error: PPP timeout»
Причина: отсутсвует серверный сокет 9999 -- не запущен netcat
- POSE прекращает работу, система выдает собщение: «broken pipe».
Причина: серверный сокет 9999 присутствует, но отвергает подключение POSE.
(такое происходило, когда pppd был прикреплен к 9999 порту через inetd сервис,
а не через netcat)
Если соединение прошло успешно POSE с адресом 10.10.0.2 должен был доступен для пинга из Linux:
$ping 10.0.0.2
PING 10.10.0.2 (10.10.0.2) 56(84) bytes of data.
64 bytes from 10.10.0.2: icmp_seq=1 ttl=255 time=37.9 ms
64 bytes from 10.10.0.2: icmp_seq=2 ttl=255 time=32.1 ms
64 bytes from 10.10.0.2: icmp_seq=3 ttl=255 time=32.7 ms
Также можно запустить программу ping для адреса desktop-host'а 10.10.0.1 и на самом эмуляторе.
Настройка форвардинга
Непосредственно для доступа в Интернет с POSE как и с любого Palm, подключенного через ppp,
необходимо настроить IP-форвадинг.
(Настройки, установленные приведенным способом, действительны только до перезагрузки ОС).
Проделываются все команды в консоли от пользователя root.
- Разрешить форвардинг в системе:
$echo 1 > /proc/sys/net/ipv4/ip_forward
- Сконфигурировать форвардинг:
$iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
$iptables -A FORWARD -i ppp0 -j ACCEPT
$iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
После проделанного, доступ в Интернет для эмулятора открыт -- можно смело запускать почтовый клиент,
браузер или ICQ и убедиться в работоспособности системы :).
|