было бы интересно
По роду деятельности мне необходимо было интегрировать в прошивку дополнительный софт, в моем случае это net-snmp и openvpn (которому нужны openssl и lzo), с другой стороны мне не нужны некоторые проги которые уже есть в прошивке например samba, на форуме ничего толкового не нашел, для Олега и других гуру которые собирают прошивку 10-d, это раз плюнуть, но мне интересно было самому разобраться и лишний раз приставать к гуру не хотелось.
Итак я нашел для себя некий путь интеграции дополнительного софта, который уже есть в optware , то бишь который ставится через ipkg в основную прошивку. За основу был взят optware http://svn.nslu2-linux.org/svnroot/optware/trunk/ и прошивка 10-d http://code.google.com/p/wl500g за что всем трудившимся над 10-d огромный респект.
Сборку прошивки начинаем как описано в доке. После того как сделали svn checkout в файл Makefile.top добавяем строчку
сразу после первого include.Code:include ../optware-d/.config
Прицепленный архив сохранить в /whatever-you-want/broadcom/src/
далее
Далее как по докеCode:tar -zxvf optware-d.tgz
после этого следуя все той же доке перейти в папку gateway и также по доке дать команду make, теперь настало время для сборки optware-dCode:cd /whatever-you-want/broadcom/src/1.9.2.7-d make kernel make
в файле optware-d/.config отметить какие именно пакеты нужны для сборки и после этого
Ну и сборка trxCode:cd ../optware-d make checkout make make install
========Code:cd ../gateway make install
Как это работает:
В optware-d/make.inst находятся mk файлы с переопределением целей install: в принципе там можно переопределить любую цель, но чаще всего приходится переопределять именно install, так как файлы инсталлятся вместо /opt в /usr. Посмотрев на примеры все должно стать понятно. Переопределение цели install требуется в том случае ели универсальная цель install которая находится в Makefile не сработала. Не весь софт имеет собственную цель install-strip в своих мэйкфайлах.
PS: В данный момент количество роутеров в подчинении у меня достигло практически 240 штук, в разработке находится система управления всем этим чудо набором. Централизованная система администрирования, обновления и мониторинга. Если кому интересно поучаствовать в разработке пишите.
Last edited by dvg_lab; 17-04-2011 at 16:18.
было бы интересно
ASUS WL5xx: FW 1.9.2.7-d-rXXXX / обсуждение прошивки [RU] / firmware discussion [EN] | bip irc proxy
ASUS RT-N1x: FW 1.9.2.7-rtn-rXXXX / обсуждение прошивки [RU] / firmware discussion [EN] | fake ident daemon
openvpn помоему можно без зжатия юзать, lzo чтобы не запихивать...
wl-500gp + AGESTAR IUBCP + HDD Seagete 80 GB = 1.9.2.7-10 + lighttp + perl + sqlite2 + php + ados + rtorrent + Kaspersky update + squid(–enable-delay-pools) + rrd + smb + ntp + ftp + half-dynamic shaping...
можно, но у меня задача была именно с lzo потому как на сервере lzo используется, а 200 штук wl500w работают клиентами, а вот поддержку zlib для openssl я отключил, потому как действительно не нужно.
2all: Ну что ж раз есть заинтересованность тогда я приступаю к написанию доки, как будет готова выложу здесь.
В идеале хотелось бы сделать некое подобие системы сборки в которой любой смог бы собрать под себя прошивку и именно с тем софтом который ему нужен. Ядро допустим одно, как и набор модулей + pppoe, pptp и тд. А вот софт уже можно было бы включать только тот который нужен конкретному человеку. Я думаю перспектива у этой разработки есть, особенно в теме того что скоро асус выпустит новый девайс с 32Мб флеша на борту.
Да кстати еще один плюс интеграции софта в прошивку, все собирается одним тулчейном и нет необходимости ставить дополнительные либы uclibc-opt. А опыт эксплуатации 200 штук роутеров показывает что флешки имеют обыкновение иногда отваливаться, приходится перетыкивать и ребутить девайс.
PS: Кстати если пойти совсем глубже то для меня разработка имеет целью сделать одну прошивку для 200 точек доступа с openvpn, где единственное что нужно отконфигать это только настроить подключение к провайдеру. А индивидуальные ключи openvpn, настройки стартапа демонов (все post-boot, post-mount и тд) скачиваются при первом запуске роутера единым архивом с сервера идентифицируясь по MAC адресу. Дальнейшее управление роутером осуществляется по snmp, можно добиться полной управляемости вплоть до перепрошивки роутера с сервера.
Сборка customized прошивки с компонентами из optware
За основу взяты следующие компоненты:
- Ubuntu 9.04 i386
- Проект http://code.google.com/p/wl500g/ для сборки прошивки 10-d rev. 476
- Проект optware http://svn.nslu2-linux.org/svnroot/optware/trunk/
Для начала необходимо подготовить систему для сборки прошивки, я устанавливаю убунту в VirtualBox и необходимые пакеты следуя указаниям на http://code.google.com/p/wl500g/wiki...CustomFirmware
запускаем скрипт в дире downloads который все распаковывает и подготавливает для сборкиCode:sudo apt-get install build-essential sudo apt-get install libncurses5-dev sudo apt-get install gawk sudo apt-get install flex sudo apt-get install bison sudo apt-get install zlib1g-dev sudo apt-get install subverion mkdir -p ~/asus/downloads cd ~/asus/downloads wget http://dlsvr02.asus.com/pub/ASUS/wireless/WL-500g-03/GPL_1927.zip wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.37.5.tar.bz2 wget http://wl500g.googlecode.com/files/hndtools-mipsel-uclibc-4.1.2-3.tar.bz2 sudo chown dvg /opt
Для удобства редактируем ~/.profileCode:#!/bin/sh BASE_PATH="/home/dvg/asus" SRC_PATH="/home/dvg/asus/downloads" KERNEL="linux-2.4.37.5" rm -rf $BASE_PATH/broadcom/* tar -C $BASE_PATH -zxvf $SRC_PATH/GPL_1927.zip rm -rf $BASE_PATH/broadcom/src/linux/linux tar -C $BASE_PATH/broadcom/src/linux -jxvf $SRC_PATH/$KERNEL.tar.bz2 ln -sf $BASE_PATH/broadcom/src/linux/linux-2.4.37.5 $BASE_PATH/broadcom/src/linux/linux rm -rf $BASE_PATH/broadcom/opt svn checkout http://wl500g.googlecode.com/svn/trunk/ $BASE_PATH/broadcom/src/wl500g-1.9.2.7-d svn co http://svn.nslu2-linux.org/svnroot/optware/trunk $BASE_PATH/optware rm -rf /opt/brcm mkdir /opt/brcm tar -C /opt/brcm -jxvf $SRC_PATH/hndtools-mipsel-uclibc-4.1.2-3.tar.bz2 ln -sf /opt/brcm/hndtools-mipsel-uclibc-4.1.2 /opt/brcm/hndtools-mipsel-uclibc
На этом этапе у нас все готово для оригинальной 10-d сборки. Подготавливаем optware для сборки пакетов под платформу oleg.Code:export PATH=$PATH:/opt/brcm/hndtools-mipsel-uclibc/bin
Теперь нужно выкачать нужные нам исходники пакетов для интеграции в систему сборки firmware, в то время как патчи к сырцам у нас уже лежат в ~/asus/optware/sourcesCode:cd ~/asus/optware make oleg-target
Теперь нужно положить патчи и архивы в ~/asus/broadcom/src/sl500g-1.9.2.7-dCode:cd ~/asus/optware/oleg make lzo-source make openssl-source make openvpn-source make net-snmp-source
Осталось поправить файлик ~/asus/broadcom/src/wl500g-1.9.2.7-d/Makefile. Основываемся на ревизии 476 для прошивки 10-d, дифф в аттаче под именем Makefile1.diffCode:cd ~/asus/optware/downloads cp lzo-1.08.tar.gz ~/asus/broadcom/src/wl500g-1.9.2.7-d/ cp openvpn-2.1_rc15.tar.gz ~/asus/broadcom/src/wl500g-1.9.2.7-d/ mkdir ~/asus/broadcom/src/wl500g-1.9.2.7-d/openssl cp openssl-0.9.7m.tar.gz /home/dvg/asus/broadcom/src/wl500g-1.9.2.7-d/openssl/ cd ~/asus/optware/sources/openssl && cp openssl-0.9.7m.tar.gz /home/dvg/asus/broadcom/src/wl500g-1.9.2.7-d/openssl/ mkdir ~/asus/broadcom/src/wl500g-1.9.2.7-d/net-snmp cp net-snmp-5.4.2.1.tar.gz /home/dvg/asus/broadcom/src/wl500g-1.9.2.7-d/net-snmp/ cd ../sources/net-snmp/ cp SNMP_FREE-gcc4.patch /home/dvg/asus/broadcom/src/wl500g-1.9.2.7-d/net-snmp/
Теперь можно можно приступать к сборке:
Теперь у нас появился каталог ~/asus/broadcom/src/gateway в котором лежит свой Makefile, собирающий непосредственно бинарники софта и в итоге trx файл. Этот Makefile тоже необходимо поправить для сборки дополнительных пакетов. Дифф в аттаче под именем Makefile2.diffCode:cd ~/asus/broadcom/src/wl500g-1.9.2.7-d make kernel make
Далее в файле ~/asus/broadcom/src/gateway/.config указываем следующие опции
Тут же можно закомментить пакеты которые не нужны в итоговой прошивке. Я лично убрал следующие:Code:CONFIG_LZO=y CONFIG_OPENSSL=y CONFIG_OPENVPN=y CONFIG_NETSNMP=y
Для подкладывания уже собранных бинарников, таких как например tcpdump, делаем следующее:Code:upnp jpeg6b rcamd lprng bpalogin waveserver jetdirect samba nfsd nfs snmp igmpproxy scsiidle
Makefile который собирает прошивку сам заберет оттуда файлики и положит в прошивку в /usr/sbinCode:mkdir ~/asus/broadcon/src/router/Addon cp tcpdump ~/asus/broadcon/src/router/Addon
последний штрих
Принцип портированияCode:cd ~/asus/broadcom/src/gateway make make install
Нужно понимать несколько основных моментов, первое мы собираем софт используя тот же тулчейн которым собирается прошивка, а значит мы избавляемся от лишних библиотек, и второе, раз софт собирается через систему сборки optware значит его можно заставить собираться и тулчейном собирающим прошивку. Насколько я смог разобраться файл ~/asus/broadcom/src/wl500g-1.9.2.7-d/Makefile предназначен для подготовки исходников к компиляции, его задача создать в директории ~/asus/broadcom/src/ диру с именем пакета, например lzo. Здесь же можно использовать патчер в виде $(PATCHER) который накладывает патчи на исходники, а также запустить скрипт ./configure который подготовит исходники непосредственно к сборке через Make. Но мне показалось что использовать ./configure для крупных пакетов непосредственно в этом файле не совсем удобно. Поэтому здесь я запускал ./configure только для lzo который не требовал особых переменных окружения и параметров сборки. Все остальные проги я конфигал в другом мейкфайле - ~/asus/broadcom/src/gateway/Makefile и тут же происходит непосредственно компиляция исходников.
Вобщем основной принцип такой, смотрим в файл ~/asus/optware/make/packet-name.mk где packet-name.mk это один из нужных вам пакетов и находим секции с именем packet-name-unpack идем в ее цель и понимаем каким образом накладываются патчи и с какими параметрами запускается скрипт ./configure чаще всего необходимо правильно установить переменные окружения для указания правильного тулчейна типа как в ~/asus/broadcom/src/gateway/Makefile:
а также передаче правильных параметров --host, --target, --build скрипту ./configure. Далее смотрим секцию packet-name/.build и понимаем с какими параметрами запускается Make собственно больше нам ничего и нужно.Code:export CC := $(CROSS_COMPILE)gcc export AR := $(CROSS_COMPILE)ar export AS := $(CROSS_COMPILE)as export LD := $(CROSS_COMPILE)ld export NM := $(CROSS_COMPILE)nm export RANLIB := $(CROSS_COMPILE)ranlib export STRIP := $(CROSS_COMPILE)strip export SIZE := $(CROSS_COMPILE)size
Итак в ~/asus/broadcom/src/wl500g-1.9.2.7-d/Makefile перетаскием секции по распаковке и накладыванию патчей по желанию конфигурирования, а в ~/asus/broadcom/src/gateway/Makefile перетаскиваем непосредственно секции сборки (ну и конфигурирования если еще не было).
Последний этап это секция install в которой основное место отведено утилите $(STIP) для удаления отладочной информации из бинарников, в свете уменьшения их размера.
Все это писалось на коленке и "под себя" поэтому "костылей" пока что много. Хотелось бы таким образом портировать с optware значительную часть софта и простым указанием в ~/asus/broadcom/src/gateway/.config необходимых пакетов собирать прошивку именно с тем софтом который нужен. Вот для доведения этой работы до ума, прошу народ откликнуться. В особенности хотелось бы услышать комментарии theMIROn
Last edited by dvg_lab; 24-08-2009 at 14:36.
Такая система досталось в наследство от Олега, а резких изменений "за компанию" делать не хотелось. А в принципе, мы к этому (переносу всех configure в gateway/Makefile) идём.
Я не theMIROn , но думаю, что проделанная работа, а в особенности опубликованное руководство, будут полезны очень многимВсе это писалось на коленке и "под себя" поэтому "костылей" пока что много. Хотелось бы таким образом портировать с optware значительную часть софта и простым указанием в ~/asus/broadcom/src/gateway/.config необходимых пакетов собирать прошивку именно с тем софтом который нужен. Вот для доведения этой работы до ума, прошу народ откликнуться. В особенности хотелось бы услышать комментарии theMIROn
Теоретически, приделать механизм сборки пакетов из optware, возможно, но у нас пока хватает более приоритетных задач. Если ты сделаешь этот кусок, и он не будет конфликтовать с основными пакетами, то мы вставим его в проект.
P.S. Также неплохая система с пакетами и их автоматическим скачиванием реализована в OpenWRT
Я честно говоря изначально размышлял об отдельном проекте на code.google.com, как раз дабы не мешать разрабатываемой вами d версии, но если удастся все это интегрировать в одно место, то получится еще лучше конечно. Правда пока особых мыслей по этому поводу нет...
Твое мнение для меня тоже важно. Вообще вы, молодцы, проделали огромную работу и отдельное спасибо за то что выложили свой труд на code.google.com. Я обмозгую каким образом можно интегрировать это все в ваш проект.
Спасибо гляну, но вобщем-то и здесь в optware система не плохая, если делать по уму, то как раз нужно перетаскивать систему закачки исходников, где-то брать патчи (хотя патчи можно интегрировать в проект, они маленькие), а дальше уже дело техники. Может быть это все оформить отдельными Makefile`ами и инклюдить их в broadcom/src/wl500g-1.9.2.7-d/Makefile и broadcom/src/gateway/Makefile ? Как раз эти два файла довольно часто изменяются в svn, и делать diff на каждую верисию конечно не комильфо. Мне видится пока два пути, либо делать отдельный Makefile и на каком-то этапе его запускать, например после сборки ядра и распаковки всех исходников пакетов, либо сделать пару include в обоих мэйкфайлах и уже в них непосредственно добавлять сборку дополнительного вареза... Надо обмозговать.
Да еще фишка в том что интеграция доп. софта не всегда будет гладкой, многим пакетам нужны конфигурационные файлы типа того же openvpn.conf который должен быть доступен в режиме rw. Тут уже либо этот аспект перекладывать на юзера чтобы сам ставил куда надо, либо скадывать их в /usr/share/examples и оттуда уже юзер будет копировать куда надо и там править.
во первых спасибо за мануал, полезно держать такие how-to в одном месте.
Отдельный бранч, почему бы и нет. Можно обдумать.
угу, в этом случае более четкие зависимости выстроятся и не нужно будет прыгать через голову с опциями библиотек.
Второй пусть a-la optware с мелкими mk файлами лично для меня более предпочтителен, да и более удобен в повседневном обращении.
обеими руками за.
ASUS WL5xx: FW 1.9.2.7-d-rXXXX / обсуждение прошивки [RU] / firmware discussion [EN] | bip irc proxy
ASUS RT-N1x: FW 1.9.2.7-rtn-rXXXX / обсуждение прошивки [RU] / firmware discussion [EN] | fake ident daemon
Надеюсь пригодится.
Мне тоже кажется это хорошая идея, можно отдельно не мешая основной ветке пытаться собрать все части вместе.
в том то и дело что либы от тулчейна из optware на самом деле не нужны.
ок, тогда я попробую обмозговать и переработать в отдельные мелкие файлы, идеологически это правильнее, нужно только разобраться каким образом идет обход целей при сборке прошивки в trx файл. Я так понимаю что именно -install цели и используются.
хорошо, я только надеюсь что вы с lly и всеми остальными мне поможете. Я собсно далеко не гуру в этих делах, но есть желание довести это до ума
Решил пойти немного по другому пути, дабы не перелопачивать каждый mk файл из состава optware, переписать главный Makefile от optware таким образом чтобы можно было легко интегрировать его в сборку 10-d. То есть mk файлы остаются от optware, а главный Makefile собирает бинарники, со всеми stage целями, так как от зависимостей по любому никуда не деться и по цели install складывает бинари туда же куда и Makefile собирающий прошивку - gateway/mipsel-uclibc/target/install, потом в итоге все само попадет куда надо.
Из плюсов - никаких изменений в мэйкфайлы из прошивки 10-d не производится, на этапе между сборкой ядра и бинарников нужно будет стянуть с svn дополнительную диру и также запустить в ней make && make install и после этого уже собирать trx файл. Получается достаточно независимая часть которую и мантейнить можно отдельно и оперативно обновлять mk файлы из optware. Как-то так...
PS: Я пока на начальном этапе, как только более менее в человеческий вид приведу, дам линк на svn.
В приципе да, я только одного не учёл в mk файлах optware нету целей install что логично, есть цели сборки ipk но они нам в принципе не нужны. Я думаю придется сделать единую цель %-install для всех пакетов, а там где необходимо - оверрайдить на конкретные pkg-install цели, которые уже придется писать вручную, но это все равно гораздо меньший труд нежели перелопачивать весь mk файл. А так можно в отдельных файликах наделать оверрайдовые install цели и мешать не будут и в принципе будет нормально.
Тем более что с /etc все равно нужно что-то делать. Вобщем костяк уже готов, проверил esmtp с двумя зависимостями уже собирается, останется причесать и интегрировать в ваш проект.
После многочисленных переделок и переработок в итоге получилось следующее. Процедура сборки прошивки 1.9.2.7-d меняется следующим образом:
сборка производится в соответствии с документом http://code.google.com/p/wl500g/wiki...CustomFirmware вплоть до пункта 4.3, пункт 4.3 соответственно изменяется на следующий:
Редактируем Makefile и добавляем туда следующую строкуCode:$ cd /whatever-you-want/broadcom/src/gateway
сразу после строкиCode:include ../optware-d/.config
После этого скачиваем модифицированный optware и устанавливаем его для сборкиCode:include .config
Правим на свой вкус файлик .config, добавляя или удаляя по аналогии софт, который нужно установить. После этого можно начинать сборку.Code:svn co http://svn.tjc.ru/svn/sur/trunk/ /whatever-you-want/broadcom/src/optware-d cd /whatever-you-want/broadcom/src/optware-d
По командеCode:cd /whatever-you-want/broadcom/src/gateway make
скачиваются две директории make и sources из репозитария optware. Теперь можно собирать и ставить, тут же выполняемCode:cd /whatever-you-want/broadcom/src/optware-d make checkout
Ну и сборка trx файлаCode:make make install
Принцип работыCode:cd /whatever-you-want/broadcom/src/gateway make install
В дире optware-d/make.inst находятся файлы вида esmtp.mk в которых нужна одна единственная цель install: по которой собственно происходит установка файлов пакета в соотвутствующую диру в /whatever-you-want/broadcom/src/gateway/mipsel-uclibc/install. В файле optware-d/Makefile есть универсальная цель install: но она может подойти не для всех пакетов. Где-то потребуется ручное описание цели в соответствующем файле.
Все цели скачивания и сборки, а также stage, для пакетов берутся из *.mk файлов optware в которых изменяется префикс /opt на /usr.
Версия предварительная, рад буду услышать отзывы. Основной Makefile пока что еще запутан и наверняка содержит ошибки, но у меня работает.
Сразу скажу, что еще сам не успел попробовать, а замечания чисто умозрительные.
Для сего предлагаю добавить переменные основного .config'а:
ну, и соотвественно, добавить нужные строчки в Config.in для менюшекPHP Code:
CONFIG_OPTWARE= y|n
CONFIG_OPTWARE_PATH= ../optware-d по умолчанию
Вот здесь, если можно, поподробнее. В моём представлении весь download optware, кроме исходников самих пакетов, должен пройти по "svn co". Или речь об копировании собранных пакетов в src/gateway/mipsel-uclibc?После этого скачиваем модифицированный optware и устанавливаем его для сборки
Правим на свой вкус файлик .config, добавляя или удаляя по аналогии софт, который нужно установить. После этого можно начинать сборку.Code:svn co http://svn.tjc.ru/svn/sur/trunk/ /whatever-you-want/broadcom/src/optware-d cd /whatever-you-want/broadcom/src/optware-d
По командеCode:cd /whatever-you-want/broadcom/src/gateway make
скачиваются две директории make и sources из репозитария optware.Code:cd /whatever-you-want/broadcom/src/optware-d make checkout
Если можешь, посмотри куда лучше запихнуть вызовы сборки optware, закрытыеPHP Code:
ifneq ($(CONFIG_OPTWARE),)
endif
С этим согласен, можно в ваш .config запихать.
А вот тут не догнал, что за Сonfig.in для менюшек?
по make checkout происходит следующее
Где переменные это диры внутри optware-d. Короче просто чекаут двух директорий из репозитария optware. Можно в включить цель checkout: как зависимость для цели all: и тогда не нужно будет отдельно давать команду make checkout, нужно подумать как это сделать красивее с учетом двух команд svn co и svn up в дальнейшем.Code:svn co http://svn.nslu2-linux.org/svnroot/optware/trunk/sources/ $(SOURCE_DIR) svn co http://svn.nslu2-linux.org/svnroot/optware/trunk/make/ $(MAKE_DIR)
Вообще конечно лучше было бы если бы ты глянул мой Makefile, ато я мож там намудрил чего лишнего.
Что касается broadcom/src/gateway/Makefile который собирает бинари и trx то там есть небольшая засада, цель package-%: которая собирает сам trx файл из структуры директорий broadcom/src/gateway/mipsel-uclibc/target имеет в себе одну не очень приятную команду в самом начале
то есть понятно, что единственный способ не нарушая структуру, это устанавливать все бинари собранные optware-d в диру broadcom/src/gateway/mipsel-uclibc/install и дальше добавлять название пакета (что является именем диры в install) в переменную $(obj-y) по которой дальше и идёт наполнение диры target из диры install.Code:rm -rf $(TARGETDIR) && install -d $(TARGETDIR)
Поэтому правильное место для сборки optware-d это где-то сразу за целью сборки madwimax, то есть как бы сборка продолжится дальше. Вот кстати еще вопрос толи делать include толи вызывать напрямую через make -C $(CONFIG_OPTWARE_PATH)... надо подумать.
Ты все же глянь в мой Makefile мож картина сразу прояснится.