Установка программного обеспечения из исходников под МГТС роутер ZTE F-660 в chroot окружении
1500р. Единственный вариант который мне виделся на тот момет, это запуск нужных мне программ в chroot окружении с флешки отформатированной в ntfs. Естественно мне хотелось использовать самые последние версии программ. Поэтому я решил собрать все из исходников. Изучив аппаратную базу, я определил, что там стоит обычный mips-процессор работающий под линуксом 2.6.30. Соответственно нам необходимо собрать gcc-тулчан под данную архитектуру. Для сборки тулчана я выбрал обычную убунту. Перед установкой нам необходимо поставить средства разработки
- Ставим исходники ядра 2.6.30;
- Ставим утилиты для работы с бинарными файлами (линковщик) binutils;
- Ставим mips крос-компилятор gcc (без поддержки потоков);
- С его помощью собираем стандартную библиотеку С (eglibc);
- С помощью стандартной библиотеки собранной в предыдущем пункте соберем полноценный с++ тулчан;
С этого момента у вас есть полноценный gcc-тулчан который способен собирать программы под наш роутер. Для этого нам этапе конфигурирования программ нам необходимо указывать компилятор и линковщик из только что скомпилированного тулчана:
- Сборка статически слинкованного bash интерпетатора;
- Сборка сетевых утилит GnuInetCoreUtills;
- Сборка основных утилит GnuCoreUtills;
- Сборка библиотеки текстового интерфейса NCurses (Нужна для Nano);
- Сборка консольного блокнота необходимого для редактирования файлов конфигурации Nano;
- Сборка библиотеки сжатия Zlib;
- Сборка криптографической библиотеки openssl;
- Сборка сетевой библиотеки Curl (Нужна для transsmission);
- Сборка библиотеки событий LibEvent (Нужна для transsmission);
- Сборка торрент клиента Transsmission;
- Сборка библиотеки GnuSip;
- Сборка SipProxy.
Далее необходимо перенести нашу папку root которая находится в директории нашего тулчана на заранее отформатированную в nfts флешку. Также на флешку необходимо поместить статически слинкованный busybox готовый можно взять отсюда: www.busybox.net/downloads/binaries/latest/busybox-mips. Далее нам нужно «запрыгнуть» в нашу песочницу, выполнив небольшой скрипт:
Мы увидим командную строку интерпретатора bash. Выполним настройку динамических библиотек командой ldconfig -v С этого момента мы можем делать все что угодно так как мы отделены от основной системы. Запустим торрент-клиент transmission-daemon. Перейдите по адресу 192.168.1.1:9091. Видим стандартный ответ на неавторизированный доступ
Далее необходимо отредактировать файл настроек (он только что был создан)
Замените настройки «rpc-whitelist»: “127.0.0.1” На «rpc-whitelist»: “*.*.*.*”
Нажмите F2 что бы сохранить и выйти Перезапустите демон. Зайдите по тому же адресу.
Далее я сделаю небольшое отступление и расскажу про Sip-Proxy и систему которая как я понимаю теперь применяется в МГТС. Сейчас МГТС практически полностью отказывается от аналоговой связи. Все звонки идут по сип-протоколу, те фактически наш роутер является по сути обычным сип-клиентом. Следовательно мы можем использовать любой сип-телефон и подключатся к сип-серверу и звонить с московского номера откуда угодно. Звучит заманчиво, но есть одна проблема. Дело в том что мы не можем подключится к сип-серверу так как мы находимся за натом (вот в этом суждении я не претендую на объективность просто одна из версий). В качестве решения мы можем использовать сип-прокси. Он будет заниматься передачей пакетов от клиентов до сервера делая вид что он и есть клиент, как собственно и делает обычный http-прокси. Внесем некоторые изменения в конфигурационный файл. cd /usr/etc/ cp ./siproxd.conf.example ./siproxd.conf nano ./siproxd.conf Внесем следующие изменнения: if_inbound = br0 if_outbound = nbif1 daemonize = 0 outbound_proxy_host = 192.168.68.97 outbound_proxy_port = 5060 F2-сохраним Запустим сам прокси-сервер в режиме логирования siproxd -d -1 0 Зайдем и настройки сип-клиента в самом роутере и укажем что прокси теперь является он сам. После нажатия на кнопку применить мы видим как логах идут пакеты от нашего клиента.
00:16:23 accessctl.c:99 access check =3 00:16:23 security.c:48 security_check_raw: size=440 00:16:23 siproxd.c:481 checking Max-Forwards (=70) 00:16:23 siproxd.c:526 received SIP type REQ:REGISTER 00:16:23 utils.c:129 DNS lookup — previous resolution failed: msk.ims.mgts.ru
Но почему-то прокси пытается получить адрес сервера, вместо того что бы просто передать дальше пакет без изменения. Если честно, это одна из причин почему я выложил статью на хабре. Я просто не знаю как решить эту проблему, и надеюсь что хабросообщество поможет решить эту задачу.
Подведем итог: как видим нам удалось собрать из исходников достаточно большое количество программного обеспечения. Особенно хотелось бы отметить что все собранное программное обеспечение свежее, нам не пришлось ни прошивать устройство ни использовать какой либо древний репозиторий. При этом мы воспользовались очень простыми патчами. Если заметка вызовет достаточным интерес в хабра-сообществе и мне удастся решить проблему сип-прокси, то я в следующей своей заметки могу рассмотреть вопросы связанные установкой на многостродальный роутер openssh, softether VPN и вопросы запуска x11 приложений. Вообще мне бы хотелось получить обратную связь и возможно появятся другие статьи на данную тему от других авторов, ведь данный терминал очень распространен в Москве.
Скрипты и патчи лежат в архиве. Update (Ссылки исправлены): Для самых ленивых архив с корневой директории флешки, с установленными программами