Reborn

And from the ashes the Phoenix rose reborn
  • Начало
  • About

Wonders of the internet and XML-RPC

Владимир | 04/27/2011

Ако не си личи по заглавието ето че открих удобствата на протокола XML-RPC. Хубав и удобен протокол за бързо пипване тук там по вашият блог. Днес това е благодарение на приложението WordPress за Nokia N900. След някой и друг ден ще пиша за впечатления и как се държи

Коментари
Няма коментари »
Категории
Разни
Tags
blogging, n900, nokia, xml-rpc
RSS коментари RSS коментари
Trackback Trackback

Mail for Exchange винаги на линия при USB мрежа с Nokia N900

Владимир | 03/21/2011

Една от хубавите страни на Nokia N900, е че е отворена платформа и можете да правите каквото ви хрумне с него (стига да не се страхувате че може да направите беля).
С тази играчка имате възможност да използвате поща. Поддържаните възможности са доста сериозни. Поддържат се някои доста известни доставчици на услугата (GMail, 3Mail, AOL др.), също така imap, pop3 (включително вариантите защитени със SSL) и Mail for Exchange (MfE). Лично аз съм голям противник на Exchange, но понякога човек просто няма избор (т.е. фирмата задължава). За удобство съм си го закачил на играчката (поради спецификата на работата ми).
За голямо мое неудоволствие се оказа че нямам кой знае колко настройки за честота на обновяване на иформацията. Е не че няма, но не ми бяха удобни.

Като възможности имаме избор между:

  • Винаги на линия
  • Всеки 15/30 мин
  • Всеки 1/4/6/12 часа
  • Ръчно

Да удобно е но, но не взима под внимание на каква мрежа сме закачени. Ако сме закачени на Wi-Fi подходяща е проверка на 30 мин (за да пестим батерия), ако сме на GPRS е подходяща проверка на 1 час (за да пестим трафик), но ако пък сме закачени посредством USB мрежа не ни притеснява нищо от това така че защо да не сме винаги на линия.

За наше щастие както казах и по горе това е отворена платформа и няма защо да се бъгясваме ами може да си го допишем (ако знаем как). Оказва се че модификацията която искаме хич не е тежка (даже доста лека бих казал).

Инфраструктурна информация

Устройството използва gconf за съхраняване на настройките си а gconf е доста гъвкав и всички необходими инструменти за неговата манипулации са на лице.
За да променим настройка в gconf ни е необходимо да знаем една доста малка част от командите/възможностите му.

/home/user # gconftool-2 --help-client
Usage:
  gconftool-2 [OPTION...] - Tool to manipulate a GConf configuration

Client options
  -s, --set                                      Set a key to a value and sync. Use with --type.
  -g, --get                                      Print the value of a key to standard output.
  -u, --unset                                    Unset the keys on the command line

/home/user # gconftool-2 --help-key-type
Usage:
  gconftool-2 [OPTION...] - Tool to manipulate a GConf configuration

Key type options
  -t, --type=int|bool|float|string|list|pair     Specify the type of the value being set, or the type of the value a schema describes. Unique abbreviations OK.
  -T, --get-type                                 Print the data type of a key to standard output.

Забележка: Изхода от командите е поорязан малко

План за действие

За да изпълним нашата задача ще създадем малък скрипт който да се изпълнява при включване в режим PC Suite, който да променя режима на синхронизация на винаги на линия. Скриптът ни ще запазва старите стойности за да може при изключване да ги възстановим.
Съответно ще напишем и скрипт който при изключване ще възстановява старите стойности.
Ще се възползване от предишаната статия за модулно изпълнение на скриптове при включване/изключване на PC Suite режима.

Скрипт за промяна на режима на синхронизация при включване на PC Suite

Създаваме си нов скрипт в директорията /etc/pcsuite/enable чиято цел е да промени настройките на нашите ActiveSync пощенски кутии (Exchange/Gmail) на винаги на линия.

01-set-activesync-allways-online.sh

# Set peak schedule to Always online on USB networking (PC Suite enable)

LOCAL_AS_ACCOUNTS=`gconftool-2 --all-dirs /apps/activesync`

for ACC in $LOCAL_AS_ACCOUNTS ; do
	# get original sync time (PEAK)
	mkdir -p /tmp/$ACC
	touch /tmp/$ACC/peak_schedule
	gconftool-2 -g $ACC/schedule/peak_schedule > /tmp/$ACC/peak_schedule
	gconftool-2 -g $ACC/schedule/current_schedule > /tmp/$ACC/current_schedule
	# Now set schedule to online
	gconftool-2 -s --type=int $ACC/schedule/peak_schedule -- 0
	gconftool-2 -s --type=int $ACC/schedule/current_schedule -- 0
	# Inc the change counter
	COUNTER=`gconftool-2 -g $ACC/params_change_id`
	#echo "COUNTER=$COUNTER" >> /tmp/counter
	#echo $(($COUNTER+1)) >> /tmp/counter
	gconftool-2 -s --type=int $ACC/params_change_id -- $(($COUNTER+1))
done

На 3ти ред получваме списък със всичките наши ActiveSync кутии/акаунти. След това за всяка една от тях създаваме уникално място в което да съхраним оригиналната настройка и я запазваме (gconftool-2 -g …). И накрая настройваме променливата peak_schedule на 0 което се превеждакато винаги на линия. Допълнително след малко опити и грешки се установи че трябва също така да настроим и променливата current_schedule, както и да увеличим брояча на промените в конфигурацията. Без тези две настройки поведението на клиента не е особенно надеждно.

Скрипт за промяна на режима на синхронизация при изключване на PC Suite

Спирането на PC Suite режима реално е изваждането на USB кабела.
Създаваме си нов скрипт в директорията /etc/pcsuite/disable чиято цел е да промени настройките на нашите ActiveSync пощенски кутии (Exchange/Gmail) на оригиналните които сме запомнили при включването в PC Suite режим.

98-restore-activesync-schedule.sh

# Set peak schedule to Always online on USB networking (PC Suite enable)

LOCAL_AS_ACCOUNTS=`gconftool-2 --all-dirs /apps/activesync`

for ACC in $LOCAL_AS_ACCOUNTS ; do
	# get original sync time (PEAK)
	LOCAL_ORIG_TIME=`cat /tmp/$ACC/peak_schedule`
	if [ "x$LOCAL_ORIG_TIME" == "x" ] ; then
		LOCAL_ORIG_TIME=60
	fi
	LOCAL_ORIG_CURR_SCHED=`cat /tmp/$ACC/current_schedule`
	if [ "x$LOCAL_ORIG_CURR_SCHED" == "x" ] ; then
		LOCAL_ORIG_CURR_SCHED=60
	fi
	# Now set original schedule
	gconftool-2 -s --type=int $ACC/schedule/peak_schedule -- $LOCAL_ORIG_TIME
	gconftool-2 -s --type=int $ACC/schedule/current_schedule -- $LOCAL_ORIG_CURR_SCHED
	# Inc the change counter
	COUNTER=`gconftool-2 -g $ACC/params_change_id`
	#echo "COUNTER=$COUNTER" >> /tmp/counter
	#echo $(($COUNTER+1)) >> /tmp/counter
	gconftool-2 -s --type=int $ACC/params_change_id -- $(($COUNTER+1))
	# And cleanup the crap
	rm -rf /tmp/$ACC
done

Тук по същият начин получаваме списък с акаунти и за всеки един от тях възстановяваме старите стойности. Ако по някаква случайност нямаме стара стойност избираме среден вариант със стойност от 1 час. И най-накрая разчистваме записаната настройка. Разбира се не трябва да забравяме да променим и брояча за промени на стойностите.

Заключение

Е с малко работа/играчка успяхме да обучим пощенският ни клиент да преминава автоматично в режим Винаги на Линия когато използваме USB мрежа (благодарение на PC Suite режима). По този начин ще сте винаги информирани какво се случва с вашата поща (а дали това е желателно си е чисто ваш проблем :P)

История:

  • Първа версия: 21.03.2011
  • Допълнителни променливи: 26.04.2011
Коментари
Няма коментари »
Категории
Статии
Tags
MfE, n900, nokia, pcsuite
RSS коментари RSS коментари
Trackback Trackback

Модулна система за действия в PC Suite режим при Nokia N900

Владимир | 03/20/2011

Както знаете а може би не знаете аз съм горд собственик на Nokia N900 и даже съм понаписал няколко статии за това устройство. Една от първите причини да си закупя тази играчка беше, че е нещо доста повече от телефон. По-скоро се класира като таблет който даже има и телефон в него. Първата сериозна модификация която му направих беше да го науча да използва USB за интернет което си е голяма благинка. Хем играчката има интернет, хем се и зарежда :).
Както съм описал в статията налага се да се попипне тук там за да може да се вдигне мрежов интерфейс на се осигурят рутинг и други дреболийки.
С оглед на бъдещето реших да модифицирам две парчета от решението, за да може в бъдеще по-лесно и по-логически да добавям нови функционалности.

Идеята

Всички знаем че монолитните парчета код не че пречат, но са трудни за управление и търсене на проблеми. Ако си изградим модулна система за изпълняване на парчета код ще имаме по лесен начин за добавяне/премахване на функционалност и като следствие от това по-лесно управление на устройството.
Днес ще модифицираме кода в /usr/sbin/pcsuite-enable.sh и /usr/sbin/pcsuite-disable.sh за да може да изпълнява множество скриптове.
Идеята за реализацията идва от начина по който стандартните командни обвивки в Linux зареждат променливи при стартиране.

Реализация – pcsuite-enable.sh

В оригиналната статия имаме следното парче код

При избиране на PC-Suite mode от менюто при включване се изпълнява скрипта /usr/sbin/pcsuite-enable.sh. За да активираме автоматично интерфейса трябва да добавим в края му необходимите ни команди. Намерете секцията:

kill -USR1 $SYNCD_PID
logger "$0: sent SIGUSR1 to syncd"

exit 0

и я заменете с:

kill -USR1 $SYNCD_PID
logger "$0: sent SIGUSR1 to syncd"
ifup usb0
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

exit 0

Вместо да пишем директно във файла там ще добавим малък цикъл който да проверява на друго място дали има файлове и да ги включва в кода автоматично. Също така и ще оправим един малък бъг. Както забелязвате от кода мрежата се стартира след като демонът за синхронизация е информиран, че се е случило нещо. Следствието от това е, че демонът няма мрежа и не изпълнява синхронизация. Нашето парче код ще бъде преместено над него за да може да си свършим цялата работа и да имаме мрежа когато демонът е информиран.

Новият ни код изглежда по следният начин

## Modular actions on PCSuite Enable
if [ -d /etc/pcsuite/enable ]; then
  for i in /etc/pcsuite/enable/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
## Modular actions end

exit 0

Какво прави това парче код

Проверява дали съществува директория /etc/pcsuite/enable и за всеки файл в нея който има разширение *.sh ако може да бъде прочетен го включва в скрипта.

Съответно за да възстановим старата функционалност в директорията /etc/pcsuite/enable създаваме 2 файла

/etc/pcsuite/enable # ls -l
-rw-r–r– 1 root root 160 Mar 20 12:07 00-bring-usb-network-up.sh
-rw-r–r– 1 root root 103 Mar 20 12:17 99-invoke-syncd.sh

Със следното съдържание
00-bring-usb-network-up.sh

# Bring up USB networking so device can leech net from PC

ifup usb0
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

99-invoke-syncd.sh

# Restore removed func from pcsuite-enable.sh
kill -USR1 $SYNCD_PID
logger "$0: sent SIGUSR1 to syncd"

Избрали сме да използване цифрови префикси за по лесно подреждане на модификациите. Може да се окаже че някоя модификация изисква други модификации да са свършили преди нея и по този начин най-лесно постигаме това.

Реализация – pcsuite-disable.sh

В оригиналната статия имаме следното парче код

При изваждане на USB кабела автоматично се изпълнява скрипта /usr/sbin/pcsuite-disable.sh където и ще добавим нашите инструкции за автоматично спиране на интерфейса.
Намерете секцията:

logger "$0: do nothing to pass USB certs"

exit 0

и я заменете с:

logger "$0: do nothing to pass USB certs"
ifdown usb0
echo "nameserver 127.0.0.1" > /etc/resolv.conf

exit 0

Това парче ще модифицираме по аналогичен начин

logger "$0: do nothing to pass USB certs"

## Modular actions on PCSuite Disable
if [ -d /etc/pcsuite/disable ]; then
  for i in /etc/pcsuite/disable/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
## Modular actions end

exit 0

Какво прави това парче код

Проверява дали съществува директория /etc/pcsuite/disable и за всеки файл в нея който има разширение *.sh ако може да бъде прочетен го включва в скрипта.

Съответно за да възстанивим старата функционалност създаваме файла 99-bring-usb-network-down.sh със следното съдържание
99-bring-usb-network-down.sh

# Bring down and cleanup USB networking

ifdown usb0
echo "nameserver 127.0.0.1" > /etc/resolv.conf

В заключение

По този прост начин си сътворихме система за модулно, и до известна степен със зависимости изпълнение на модификации. Освен това получихме лесен начин за управление на модификациите. АКо нещо не нии трябва просто го махнете от директорията или го преименувайте примерно на *.sh.inactive
Е надявам се да ви е било полезно

Коментари
2 Коментара »
Категории
Статии
Tags
modularity, n900, nokia, pcsuite
RSS коментари RSS коментари
Trackback Trackback

Проблеми с glogarchive

Владимир | 09/27/2010

Glogarchive е много приятно приложение за архивиране на събитията които са се случили със вашата Нокия Н900, но днес със съжаление установих че не иска повече да архивира събитията.
Е аз съм свикнал да ровичкам в конзола и след пускане от там на приложението и опит за архивиране изкочи следното

Traceback (most recent call last):
  File "/opt/glogarchive/glogarchive.py", line 243, in archive
    cur.execute("select service_id, event_type_id, storage_time, start_time, end_time, is_read, flags, bytes_sent, bytes_received, local_uid, local_name, remote_uid, channel, free_text, group_uid, outgoing, mc_profile from events")
sqlite3.OperationalError: no such column: mc_profile

Проблема се решава елементарно. Трябва да отворите конзола (терминалното приложение) и да изпълните:

sqlite3 .rtcom-eventlogger/el-v1.db < 'ALTER TABLE Events ADD mc_profile BOOL DEFAULT 0;'

Версията на glogarchive която ползвам е 0.8

Коментари
2 Коментара »
Категории
Разни
Tags
glogarchive, n900, nokia, нокия
RSS коментари RSS коментари
Trackback Trackback

Записване на разговори с Nokia N900

Владимир | 08/20/2010

Nokia N900 е едно приятно устройство, което може да се ползва дори и като телефон (намиг). В определени ситуации е добре да си записвате разговорите (погледнете забележката в края). Типични примери са:

  • разсеян/а сте – е сега случва се. Признайте си и да свършим с въпросите
  • Искате да си правите архив на разговорите. Полезно е поради ред причини – например искате да проверите или да имате доказателство за определена бизнес политика
  • Работите в областта на телефонната поддръжка

За пълен архив ви е нужно по някакъв начин да можете да:

  • да записвате всяко едно събитие което се е случило (входящ телефонен разговор, смс съобщение, чат и др.)
  • да записвате всеки един проведен разговор

За ваше щастие това конкретно устройство е с отворен код и има огромно количество приложения за него, и всичко което ни е необходимо е вече налично.

Как ще реализираме задачата
Ще инсталираме 2 приложения. Едното за запазване на архив на събитията случили се на телефона и второто за записване на самите разговори.

Инсталиране на Glogarchive
Glogarchive е приложение което може да прави архивно копие на всяко едно събитие което се е случило с вашето устройство.

За да го инсталирате е необходимо да отворите Мениджъра на приложенията
n900-menu
и да изберете менюто за инсталиране на приложения в отворилото се меню изберете секция Utilities

application-manager-cat-utils
и там намерете приоложението Glogarchive
app-glogarchive
. Съгласете се с излезналият въпрос дали искате да инсталирате непроверено приложение и продължете
app-install-confirm
. Изчакайте процеса и продължете със инсталирането на следващото приложение.

Инсталиране на Recaller
Recaller е приложение което може да прави архивен запис на всеки един разговор проведен през вашият телефон. Освен това може да се използва като диктофон или да записва нещо което слушате.
За да го инсталирате е необходимо да отворите Мениджъра на приложенията и да изберете менюто за инсталиране на приложения в отворилото се меню изберете секция Desktop
application-manager-cat-desktop
и там намерете приоложението Recaller
app-recaller
. Съгласете се с излезналият въпрос дали искате да инсталирате непроверено приложение и продължете. Изчакайте процеса и продължете към конфигурацията на приложенията.

Конфигуриране на Glogarchive
Влезте в менюто в горният десен ъгъл и скролнете докато откриете glogarchive
menu-glogarchive
. Ще видите следният екран
glogarchive-main
. Няма много за конфигуриране в интерес на истината. Единственото което е необходимо да правите е редовно да пускате приложението и да натискате „Archive new Events now! (погледнете предната картинка). След като извършите архивирането можете да търсите по множество параметри а също така и да експортирате списъка със събития за по нататъшна обработка със друг софтуер. Продължете към конфигуриране на Recaller

Конфигуриране на Recaller
Приложението Recaller представлява widget който трябва да бъде добавен на някой десктоп (ако желаете да е наличен естествено). Това се постига като влезете в менюто за редактиране съдържанието на десктопи (след еднократно натискане на екрана се появява зъбно колело, натиснете върху него

). От там изберете добавяне на widget

и изберете Recaller

. Докато все още сте в режим на редактиране сложете го някъде където ви е удобно и натиснете гаечният ключ за да покажете менюто за конфигурация

. В отворилото се меню изберете настройки и попълнете както ви харесва. Ако искате да записвате всеки разговор автоматично е необходимо да изберете кутийката до AutoRec

. С така направените настройки разговорите ще се записват автоматично в папка Recordings в публично достъпната част от паметта на телефона във формата AAC като източника на звук ще бъде телефонът.

А После на къде
Е вече имате записите които са сортирани според телефонът на човека който ви е търсил със продължителността им и часът и т.н. С тях можете да правите каквото си искате. По мои наблюдения играчката записва с доста добро качество и използва около 1МБ дисково пространство за 1 минута разговор. Което ще рече че съвсем спокойно можете да записвате доста дълго време (27 ГБ място за използване хич не е малко).

Забележка и предупреждение
Имайте предвид че записването на разговор без знанието и съгласието и на двете страни е наказуемо според българското законодателство и може да ви ухапе доста неприятно. Не съм адвокат но поне по беклите спомени които имам уведомяването в началото на разговора и искането на съгласие е достатъчно.

Коментари
7 Коментара »
Категории
Статии
Tags
n900, nokia, record, snoop, wiretap, записване на разговори, подслушване, сигурност
RSS коментари RSS коментари
Trackback Trackback

USB Networking за Nokia N900

Владимир | 06/19/2010

От известно количество време съм собственик на Nokia N900 MID. В цялото словосъчетание като че ли Multimedia Internet Device е важната част, но не отразява дори с малко какво може устройството.
Накратко това е по скоро таблет със малко GSM чарколяцо отколкото телефон с браузър. За бонус играчката е доста отворена (по подразбиране си идва със шел към нея), базирана е на прилични стандарти и като цяло е готина занимавка.

Какво ще разглеждаме днес

Nokia N900 MID
Устройство: Nokia N900
Хардуер: ARM A8 Cortex SOC, 256MB RAM, 32GB Internal Flash, 3,5 inch 800×480 touchscreen дисплей, пълна qwerty клавиатура
Софтуер: Maemo 5, частично базиран на дебиан (кодово име Fremantle) – не не е Freemantle, и аз го бърках доста.
Възможности: Сърфиране из нета, пощенски клиент, таблет, мултимедийна станция (да поддържа и UPnP и DLNA), четене на документи, чат клиент, фотоапарат, бърза редакция на прости документи, календар и даже телефон. Поглеждайки всичката функционалност достъпна в устройството човек добива чувството че телефона е по скоро сложен защото са има място на платката отколкото че специално са си мислили да го слагат (но пък всеки може да си мисли каквото си иска). Едно от най приятните неща свързани с тази играчка е факта че можете съвсем спокойно да си инсталирате доста прилични количества софтуер, без почти никакъв риск. Ако официалният или community based софтуер не ви достига никой не ви спира да седнете и да си хакнете нещо което на вас ви трябва/харесва. Nokia предоставят всички необходими инструменти за разработка – включително виртуална машина със всичкия необходим софтуер и емулатор в който да си тествате софтуера който пишете.

Какво ще правим днес

Днес ще ви покажа как можете да използвате USB кабела за да се свържете със вашия телефон посредством SSH, да му дадете малко Internet (защото наоколо няма WI-FI а не ви се плаща на българските оператори кожодери) и как да убедите стандартните приложения че има интернет. Платформата върху която ще реализираме цялото упражнение (освен Телефона/Таблета/Играчката) е Ubuntu 9.04 (Jaunty) и Ubuntu 9.10 (Karmic). Все пак разполагам само с това под ръка.

Как ще протече целият процес

  • Инсталиране на необходимият софтуер върху устройството
  • Конфигуриране на USB мрежата от страна на устройството
  • Конфигуриране на USB мрежата от страна на Компютъра
  • Конфигуриране на автоматична активация/деактивация на USB мрежата от страна на устройството
  • Конфигуриране на рутирането от страна на компютъра
  • Обучаване на стандартните маемо приложения че имат интернет :)

Изхождаме от предположението че имате Wi-Fi под ръка. Не че иначе не е постижимо но ще отнеме повечко време и ще е доста неудобно. Въпреки че клавиатурата е удобна за писане, не е най-добрата когато става въпрос за специални знаци и *nix команди.

Инсталиране на необходимия софтуер върху устройството

За да си свършим задачките ще ни е необходим малко софтуер. В случая ще ни е необходим root достъп за да променим няколко системни файла. Цялата операция може да се осъществи от самото устройство, но смятам че е по удобно да я свършите с помощта на малко по голяма и удобна клавиатура като тази на вашият компютър/лаптоп.

За целта на занятието ще ни е необходим следният софтуер:

  • rootsh – за да придобием root достъп от конзолата на устройството (ако изпитаме нужда)
  • SSH сървър – налични са OpenSSH и Dropbear – по ваш избор. Аз лично предпочитам OpenSSH. Намира се в хранилището extras-testing
  • personal-ip-address – това е аплет за един от десктопите който ще ви покаже ип адреса на устройството. Това е по скоро удобство
  • libicd-network-null – това е модул за мрежовата подсистема който позволява създаване на фалшиви мрежови връзки. Устройството по подразбиране поддържа само wireless и gprs (официално). Намира се в хранилището extras-devel което по подразбиране не е въведено

За начало може да инсталирате само SSH сървъра и после останалата част ако прецените че ви е нужна. За да инсталирате SSH сървър е необходимо да добавите хранилището extras тестинг през нормалният пакетен мениджър на Maemo. Докато сте там може да си инсталирате и rootsh – полезен е. В процеса на инсталация ще бъдете попитани да си въведете новата root парола (без нея няма как да се логнете на играчката).

След като инсталирате софтуера пробвайте да се закачите :) трябва да се случи и вие вече сте root с абсолютни права върху устройството. Бъдете внимателни и не правете нищо лудо (като rm -rf /)

Конфигуриране на USB мрежата от страна на устройството

Все пак за да можем да имаме мрежа тя трябва да е конфигурирана и от двете страни на кабела. Сега след като вече сте се логнали в устройството е време да се захващаме за работа.

Отворете /etc/network/interfaces
Там трябва да откриете нещо подобно на:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto usb0
iface usb0 inet static
	address 192.168.2.15
	netmask 255.255.255.0
	gateway 192.168.2.14

Ако не изглежда така постарайте се и нека заприлича. Важното в случая са редовете след auto usb0 адреса си го изберете както ви подхожда но го запомнете. Адреса в реда с gateway ще ни е необходим малко по късно за другият край на мрежата. Това е една добра конфигурация която ще разширим малко по късно.

Сега е време да изпробвате дали сте направили всичко правилно :)

ifup usb0
ifconfig

Ако в изхода от ifconfig идите нещо подобно на:

usb0      Link encap:Ethernet  HWaddr FE:84:91:74:71:F7
          inet addr:192.168.2.15  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3373 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7065 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:168768 (164.8 KiB)  TX bytes:2344721 (2.2 MiB)

Всичко работи както би трябвало.

Конфигуриране на USB мрежата от страна на Компютъра

След като сте конфигурирали единият край на мрежата време е да конфигурирате и другия :) тоест вашият компютър лаптоп. Последно време започнах да оценявам удобствата на Gnome Network Manager така че ще покажа как се случват работите там.
Първата стъпка е да включите телефона си посредством USB кабела към вашата машина. На въпроса в какъв режим да се представя пред вашият компютър изберете PC-Suite mode. След кратко мислене във NetworkManager-а ще се появят две нови устройства. Жична мрежа и GSM модем. Би трябвало да изглежда по подобен начин. (извинявам се но вече при мен е конфигурирано)

Време е да изберете опцията за редактиране на връзки, да изберете вашата връзка (най-вероятно е Auto USB0) и да я конфигурирате, както е показано в следващите две снимки:


За да проверим дали всичко е наред изключете кабела, включете го отново и изберете пак PC-Suite mode. Едно нещо за което трябва да внимавате е да не променяте мак адреса който е открит от Network Manager-a след малко ще обясним на телефона как да използва винаги него.
Сега вече трябва да можете да пингнете вашият телефон закачен през кабелчето :)

Конфигуриране на автоматична активация/деактивация на USB мрежата от страна на устройството

Сега след като вече имаме връзка между компютъра и телефона базирана на USB кабела време е да обучим телефона да не променя тази връзка и да я активира/спира автоматично всеки път когато изберете PC-Suite mode. За целта са необходими няколко стъпки:

  • Обясняване на телефона винаги да използва същият мак адрес за да може връзката да се активира автоматично от страната на компютъра
  • добавяне на автоматично активиране на интерфейса при влизане в PC-Suite Mode
  • Добавяне на правилен gateway и рутинг при активиране на интерфейса
  • автоматично деактивиране на интерфайса при излизане от PC-Suite mode

Обясняване на телефона винаги да използва същият мак адрес за да може връзката да се активира автоматично от страната на компютъра

Това е необходимо поради причината че при всеки рестарт на телефона мак адреса на usb интерфейса се генерира на ново. И като цяло е винаги различен. Приучаването се състои в дефинирането на опция за кернел модула който се грижи за този мрежов интерфейс (g_nokia). Логнете се като root на вашият телефон (това звучи яко) и изпълнете

echo > "options g_nokia host_addr=C6:EB:3E:B7:65:D7" > /etc/modprobe.d/g_nokia

Или всеки един мак адрес който ви харесва (например: C0:FF:EE:C0:FF:EE или 01:23:45:67:89:AB). Ако сменяте мак адреса ще се наложи да рестартирате телефона за да прихване новата настройка.

добавяне на автоматично активиране на интерфейса при влизане в PC-Suite Mode

При избиране на PC-Suite mode от менюто при включване се изпълнява скрипта /usr/sbin/pcsuite-enable.sh. За да активираме автоматично интерфейса трябва да добавим в края му необходимите ни команди. Намерете секцията:

kill -USR1 $SYNCD_PID
logger "$0: sent SIGUSR1 to syncd"

exit 0

и я заменете с:

kill -USR1 $SYNCD_PID
logger "$0: sent SIGUSR1 to syncd"
ifup usb0
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

exit 0

Реално добавяме 3 команди:

  • ifup usb0 – автоматично ще вдигне нашият интерфейс
  • echo „nameserver x.x.x.x“ >> /etc/resolv.conf – ще добави допълнителни сървъри за имена към стандартните (направил съм го с цел да се избягнат някои шантави и/или проблемни DNS сървъри. Посочените адреси са публичните DNS сървъри на google. Ако не ви харесват можете да ги замените с други по ваше усмотрение.

Добавяне на правилен gateway и рутинг при активиране на интерфейса

За да сме сигурни че телефонът няма да сътвори глупости от типа на използване на GPRS за разни глупости ще подменим пътят по подразбиране и gateway-а. За целта добавете в дефиницията за интерфейса в /etc/network/interfaces

	up route del default
	up route add default gw  192.168.2.14

автоматично деактивиране на интерфайса при излизане от PC-Suite mode

При изваждане на USB кабела автоматично се изпълнява скрипта /usr/sbin/pcsuite-disable.sh където и ще добавим нашите инструкции за автоматично спиране на интерфейса.
Намерете секцията:

logger "$0: do nothing to pass USB certs"

exit 0

и я заменете с:

logger "$0: do nothing to pass USB certs"
ifdown usb0
echo "nameserver 127.0.0.1" > /etc/resolv.conf

exit 0

Както е видно спираме интерфейса и възстановяваме статуквото с DNS сървърите. След тези операции вече при включване на usb кабела и избиране на PC-Suite mode автоматично ще се вдига интерфейс с настройки да взема интернет от машината за която е закачен, но за съжаление машината за която е закачен все още не знае как да му даде интернет.

Конфигуриране на рутирането от страна на компютъра

Колкото и да улеснява Network Manager-а при някои операции (видяхте колко бързо се справи с откриването и разпознаването на телефона) все пак той крие и доста недостатъци. Като факта че част от стандартните парадигми с които е свикнал един системен администратор не работят както се очаква. Стандартният администратор би дефинирал usb0 интерфейса по начин подобен на този за телефонната страна със команди във up клаузата които да пуснат ip_forward и да добавят необходимите iptables правила и ще установи че нещо не се получава … За да ви спестя заигравките оставаме изцяло в свена на Network Manager-a. Той поддържа възможност за изпълняване на скриптове при определени събития (като включване/изключване на интерфейс и др.)
Създайте следният файл: /etc/NetworkManager/dispatcher.d/99nokia-n900-routing със следното съдържание:

#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs when NetworkManager fiddles with interfaces.
# Author vvitkov
# ver: 0.1
# based on NM standard dispatcher for ifupdown

if [ -z "$1" ]; then
    echo "$0: called with no interface" 1>&2
    exit 1;
fi

# Fake ifupdown environment
export IFACE="$1"
export LOGICAL="$1"
export ADDRFAM="NetworkManager"
export METHOD="NetworkManager"
export VERBOSITY="0"

# Run the right scripts
case "$2" in
    up)
	export MODE="start"
	export PHASE="up"

	if [ $IFACE = 'usb0' ] ; then
		iptables -A POSTROUTING -t nat -s 192.168.2.15/32 -j MASQUERADE
		echo 1 > /proc/sys/net/ipv4/ip_forward
	fi

	;;
    down)
	export MODE="stop"
	export PHASE="down"

	if [ $IFACE = 'usb0' ] ; then
		iptables -D POSTROUTING -t nat -s 192.168.2.15/32 -j MASQUERADE
		echo 0 > /proc/sys/net/ipv4/ip_forward
	fi

	;;
    pre-up)
	export MODE="start"
	export PHASE="pre-up"
	;;
    post-down)
	export MODE="stop"
	export PHASE="post-down"
	;;
    *)
	echo "$0: called with unknown action \`$2'" 1>&2
	exit 1
	;;
esac

Изпълнете отново магическите действия изключване на кабел, включване на кабел, избор на PC-Suite mode и кратко изчакване. Вече от вашият телефон съвсем спокойно трябва да можете да пингвате разни машини в интернет като примерно www.google.com.

Обучаване на стандартните маемо приложения че имат интернет :)

Въпреки че телефона има интернет приложенията които идват с него все още не знаят за това. Те разчитат на D-Bus да ги информира за подобни събития и докато не бъдат информирани си мислят че нет няма. Трябва да коригираме това :)
За целта ще добавим нова фиктивна конекция която да активираме при вдигането на usb0 интерфейса на телефонът ни. За да можем да добавим фиктивната конекция ни е необходим пакета libicd-network-null който се намира в extras-devel хранилището за пакети. Тъй като ще използваме това хранилище само за един пакет не е нужно да го добавяме в стандартният пакетен мениджър.

  • логнете се като root във вашият телефон
  • добавете в края на /etc/apt/sources.list.d/hildon-application-manager.list следният ред deb http://repository.maemo.org/extras-testing/ fremantle free non-free
  • обновете списъка с пакети: apt-get update
  • инсталирайте необходимият пакет: apt-get install libicd-network-null
  • премахнете добавеният ред и обновете списъка с пакетите отново

Вече имаме необходимата инфраструктура за създаване на фиктивна мрежова връзка. Изпълнете следното за да я добавите и активирате (на телефона):

gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/type DUMMY
gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/name "USBnet"
gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/autoconnect false
killall icd2

С това дефинираме фиктивна връзка с вътрешен идентификатор DUMMY и име USBnet.
Единственото което остава да направим е да информирам D-Bus подсистемата при активирането на интерфейса да включи тази връзка и съответно при спирането на интерфейса да я изключи. Това се постига с добавянето на следните 2 реда към /etc/network/interfaces в секцията за usb0

	up run-standalone.sh dbus-send --type=method_call --system --dest=com.nokia.icd /com/nokia/icd com.nokia.icd.connect string:DUMMY uint32:0
	down run-standalone.sh dbus-send --system --dest=com.nokia.icd /com/nokia/icd_ui com.nokia.icd_ui.disconnect boolean:true

Заключение

Вече вашият телефон може да разполага с интернет посредством usb кабел. Тествайте сами и се убедете.
Част от информацията е взаимствана от: http://wiki.maemo.org/N900_USB_networking
Ако имате въпроси питайте

Редакция: Променен е начина на изпълнение за вдигане на USB интерфейса за да позволи модулно изпълнение на модификации

Коментари
3 Коментара »
Категории
hardware, Статии
Tags
linux, maemo, n900, networking, nokia, routing, ubuntu, usb
RSS коментари RSS коментари
Trackback Trackback

Разни Лични

  • БирБлог
  • На море
  • Шумилницата

Blogroll

  • Summerborn

Етикети

bash Code debian dhcp dhcpd dns dnsmasq encryption firewall fun gnupg installation iproute iptables jabber linux lqlqlq management memdisk mrtg n900 netboot new nokia Norton ntp pcsuite php ping port reborn router routing rsync secure shaper simple soho squid ssh tftp web webserver Конкурс сигурност
rss RSS коментари valid xhtml 1.1 get firefox