Переехал на новую хату и попал под иго trio-net (провайдер).
Знамениты тем,что до сих пор используют систему авторизации stargazer
Собственно, других Вариантов по району нет, название улицы ‘Карагандинская’ говорит само за себя.
3G модем - дорого и нет правильного безлимита (щаз 25Gb/мес называют безлимитом).Укртелеком в частном секторе плох (АТС дерьмовая), да и городского телефона в хате нет.
И Все было неплохо, пока я подключал ноутбук по витой паре и запускал авторизатор (sgauth).
Но надо было организовать самый примитивный wifi, с покрытием своего участка.
И появился у меня роутер, и позвонил в тот же день trio-net'овцам.
Гугль грит (и разрабы stg подтверждают), что самый простой вариант совместимости stargazer и роутеров – установка галочки ‘always online’.
Вот за это запросили с меня 300 грн.
Меня тут же стала немилосердно душить жаба, и я решил воспользоваться вторым вариантом – собрать sgauth под архитектуру своего роутера (TP-Link TL-WR741ND).
Сначала я перепрошил роутер под dd-wrt и скачал одноименные тулчейны.
Без перепрошивки у TL-WR741ND даже telnet нету.
С чувством внезапного негодования, обнаружил что бинарники gcc в тулчейне ddwrt 64 битные.
Переустанавливать систему было влом, потому скачал тулчейны openwrt (они 32bit).
С аццким геморром были скомпилированы исходники sgauth-2.12.6 (последняя версия, лежащая отдельным архивом на сайте разработчиков) под MIPS архитектуру (проц Atheros AR7240), подпихнуты недостающие либы (libstdc++, libpthread) из тулчейна.
Аццкий геморр был вызван жутким Makefile,в котором надо было прописывать полные пути до либ или компилятора по несколько раз.
Его правка потребовала усилий 3\4 участников уютной конфочки linux@conference.jabber.com.ua
В общем, sgauth на роутере запустился, но интернета все равно не дал.
В отчаянии я правил исходные коды,уменьшив размер бинарника в 2 раза, и в какой-то момент у меня появился пинг до 8.8.8.8.
При этом sgauth запущен нигде не был.
ХЗ что случилось, то ли админы сжалились, то ли мой кривой бинарь что-то покоцал на серваке, но интернет у меня появился.
Роутер мне перезапускать было страшно, потому я неделю перешагивал через натянутый на уровне колена провод что бы попасть в туалет.
Спустя неделю, я вынужден был пополнить счет у провайдера, и в 00:00, при снятии денег с виртуального счета, для оплаты следующего месяца, сервак (или админы) решили что хватит и инет пропал.
Естественно, никакие танцы с бубном и покоцанные бинари не помогли (я даже не смог вспомнить последовательность изначальных действий), потому был запущен план Б.
Роутер был прошит уже под openwrt, что бы исключить косяки совместимости их тулчейна с ddwrt прошивкой, и был найден форум разрабов.
На нем выяснилось что stargazer активно пилится и пугающее кол-во локальных сетей им пользуется, а версия sgauth-2.12.6 является практически ископаемой.
С какого-то года, sgauth входит в архив с сервером, так что я скачал stg-2.408.rc2
В архиве оказался вменяемы Makefile, в котором надобыло лишь указать CXX=/staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mips-openwrt-linux-uclibc-g++, подправить CXXFLAGS и LDFLAGS
После того как я немного подправил исходники – заккоментировал web-морду (матюкался на gettext), iconv (в gcc от openwrt он не был включен) в stglibs/common.lib/common.cpp, projects/sgauth/main.cpp и projects/sgauth/Makefile (добавил -static) – всё собралось без проблем.
На роутерее все запускается но инета нет.
Я немного пострадал фигней с wireshark, eatercap и sniffit и выяснил что пакеты от роутера уходят и портты он слушает.
Потом opium напомнил о существовании tcpdump, который был торжественно собран под архитектуру роутера с помощью opkg.
Тут то и выяснилось, что роутер не проходит авторизацию из-за неправильно зашифрованного пакета.
А пакет он шифрует неправильно потому что он, ВНЕЗАПНО, big endian!
Обнаружил я это чисто случайно, натолкнувшись у них же на форуме, на тему с проблемами авторизации (там был сервак на BE).
BE клиент предусмотрен в проекте не был, но разрабы сработали оперативно и напедалили 2 патчика, которые решили проблему.
Теперь sgauth пропатчен, собран и исправно работает на BE роутере с openwrt.
Мой топик на форуме разработчиков:
http://local.com.ua/forum/topic/32712-sgauth-на-openwrt-роутере-запустил-но/
Архив с работающими пропатченными исходниками и скомпилированным sgauth для BE :
http://local.com.ua/forum/index.php?app=core&module=attach§ion=attach&attach_id=6950
Код для проверки endian:
1 #include <iostream> 2 3 using namespace std; 4 5 int main (int argc, char *argv[]) 6 { 7 unsigned int i; 8 unsigned char *p = (unsigned char *)&i; 9 10 cout<<"Enter an unsigned integer value: "; 11 cin>>i; 12 13 cout<<"i = "<<i<<endl 14 <<"Comparison: &i = "<<&i<<endl 15 <<" *p = "<<(int *)p<<endl<<endl 16 <<"Byte 1: "<<(int)p[0]<<endl 17 <<"Byte 2: "<<(int)p[1]<<endl 18 <<"Byte 3: "<<(int)p[2]<<endl 19 <<"Byte 4: "<<(int)p[3]<<endl; 20 21 unsigned int foo = ((i % (1 << 24)) % (1 << 16)) % (1 << 8); 22 23 if ((unsigned int)p[0] == foo) 24 cout<<endl<<" === Little Endian ==="<<endl; 25 else 26 cout<<endl<<" === Big Endian ==="<<endl; 27 28 cout<<endl; 29 30 return 0; 31 }
openwrt следует брать так (тулчейны included):
svn co svn://svn.openwrt.org/openwrt/branches/backfire tplink cd tplink ./scripts/feeds update -a && ./scripts/feeds install -a
Откат с ddwrt на заводскую прошивку брал отсюда:
http://www.dd-wrt.com/phpBB2/viewtopic.php?t=85237
openwrt не собирал юзал какую-то предсобранную прошивку отсюда:
http://wiki.openwrt.org/toh/tp-link/tl-wr741nd
PS: brezerk а чего не работает LaTeX разбивка текста (пустая строка абзац, перевод строки пох)? Реквестирую.