Reborn

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

Модулна система за действия в 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
Е надявам се да ви е било полезно

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

« БББ смята да прави Христо Стоичков консул в Барселона Mail for Exchange винаги на линия при USB мрежа с Nokia N900 »

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

  1. Reborn » USB Networking за Nokia N900 казва:
    03/20/2011 в 12:42

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

    Отговор
  2. Reborn » Mail for Exchange винаги на линия при USB мрежа с Nokia N900 казва:
    04/26/2011 в 10:28

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

    Отговор

Leave a Reply

Отказване на отговора

 

Разни Лични

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

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