Напоминаем, что попытки повторить действия автора могут привести к потере гарантии на оборудование и даже к выходу его из строя. Материал приведен исключительно в ознакомительных целях. Если же вы собираетесь воспроизводить действия, описанные ниже, настоятельно советуем внимательно прочитать статью до конца хотя бы один раз. Редакция 3DNews не несет никакой ответственности за любые возможные последствия.
Создание собственной версии альтернативной прошивки полезно лишь в том случае, когда вас не устраивает функциональность имеющихся сборок — отсутствуют необходимые компоненты, а вместо них есть что-то совершенно ненужное. При этом объём памяти в роутере относительно невелик, а установить дополнительное ПО на внешний накопитель не всегда возможно. В принципе, ничего сложного в создании своей прошивки нет. Для OpenWRT есть утилита Image Generator, которая как раз таки может удалять или добавлять пакеты программ в уже имеющуюся сборку. Можно воспользоваться ей, а можно пойти по другому пути — скомпилировать свою прошивку с блек-джеком и... ну, вы поняли. Общее описание процесса можно найти в вики проекта.
Итак, нам понадобится компьютер с Linux/*BSD/Mac OS на борту, порядка пяти гигабайт свободного места на жёстком диске и немножечко терпения. Собирать прошивку в виртуальной машине с подходящей ОС крайне не рекомендуется, так как процесс компиляции в этом случае может излишне затянуться. В качестве примера рассмотрим работу в Ubuntu 11.10. Первым делом надо установить дополнительные утилиты и библиотеки, которые потребуются в процессе сборки. Для других ОС и дистрибутивов список нужного ПО можно посмотреть здесь. Минимально необходимый набор в нашем случае ставится такой командой.
sudo apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk flex quilt git-core mkisofs
Теперь надо создать рабочую папку, куда будут сохранены исходные тексты прошивки, её настройки, готовые образы и так далее. В пути до этой директории не должно быть пробелов. После создания каталога скачиваем в него исходные тексты OpenWRT.
mkdir ~/OpenWRT cd OpenWRT
Тут есть два варианта — либо взять стабильную версию, которая хорошо протестирована и надёжна до определённой степени, либо воспользоваться версией для разработчиков, в которой имеется немало новых возможностей, но вместе с тем получить ненулевую вероятность падений прошивки на ровном месте. Текущий релиз называется Backfire, а тестовая версия всегда находится в trunk. Выполните одну из приведённых ниже команд скачивания исходников из SVN-репозитория и перейдите в соответствующую папку.
svn co svn://svn.openwrt.org/openwrt/trunk/ cd trunk
или
svn co svn://svn.openwrt.org/openwrt/branches/backfire cd backfire
В файле feeds.conf.default находится список репозиториев с дополнительными пакетами программ. Если это необходимо, отредактируйте его. Раскомментируйте (уберите # в начале строки) пункты в списке или добавьте сторонние адреса фидов для какого-то специфичного ПО. Нам как минимум пригодится стандартный набор пакетов и веб-интерфейс LuCI (можно выбрать другой или оставить настройки по умолчанию), поэтому в этот файл можно вообще не лезть, оставив всё по умолчанию, а сразу же обновить списки пакетов.
nano ./feeds.conf.default ./scripts/feeds update -a
Приступим к самому интересному — наполнению прошивки компонентами. Первым делом для тестовой сборки установим веб-интерфейс LuCI, чтобы лишний раз не настраивать роутер из консоли. Остальные программы ищутся тем же скриптом с параметром search и ключевым словом после него. В выводе будут имена пакетов с кратким описанием. Для установки используем ту же утилиту с параметром install. Все зависимости будут автоматически разрешены и недостающие пакеты, если таковые нужны выбранному пользователем компоненту, будут также установлены.
./scripts/feeds install -a -p luci ./scripts/feeds search ключевое_слово ./scripts/feeds install имя_пакета
Для некоторых программ, возможно, захочется или придётся создать конфигурационные файлы. Для этого помещают их в каталог /files/etc/config, который надо создать в папке с исходниками. Вообще любые файлы из директории /files будут включены в прошивку. После этого можно переходить непосредственно к сборке. Выполним в консоли следующую команду.
make menuconfig
Здесь переходим к пункту Target System (Enter) и выбираем платформу, для которой будет собрана прошивка. В списке совместимых устройств найдите вашу модель и посмотрите, какое у неё «железо». Для начала рекомендуется «потренироваться на кошках», то есть сделать x86-сборку с необходимым набором пакетов (учтите, что не для всех пакетов это удастся), а затем запустить её в виртуальной машине. А пока выходим в главное меню (Esc) и нажимаем Exit, не забывая сохранить новую конфигурацию. Чтобы получить базовые настройки для прошивки выполняем ещё одну команду.
make defconfig make menuconfig
Возвращаемся в главное меню и в Target Profile ищем свой роутер. Обратите внимание, что в некоторых моделях от версии к версии аппаратная начинка может заметно отличаться. Постарайтесь ничего не перепутать, а то в худшем случае вы получите «кирпич» вместо устройства. Если вы решили потестировать x86-сборку, то в Target Images отметьте пункты ramdisk и iso — на выходе получится загрузочный iso-образ.
А вот теперь самое муторное — ручной выбор необходимых компонентов. Установленные ранее пакеты надо включить в саму сборку, для чего придётся пройтись почти по всем разделам настроек. Для установки компонента перейдите к нему и нажмите пробел для его выбора. * означает, что он будет «вшит» в ядро, а M указывает на создание отдельного подгружаемого модуля. В ряде случаев активация компонента открывает доступ к дополнительным настройкам, связанным с ним.
В разделах Base system и Libraries находятся базовые программы и библиотеки. В Network и IPv6 помещено всё, что связано с работой в сети — Bittorrent- и VPN-клиенты, различные сервера, вспомогательные утилиты и многое другое.
В разделе LuCI настраиваются параметры веб-интерфейса, так как в качестве примера для x86-сборки был выбран именно он. Во-первых, его надо включить в Collections, а в Modules выбрать admin-core или admin-full. Подраздел Applications содержит модули для настройки тех или иных параметров роутера. Дополнительно надо установить локализации (Translations), поддержку настроек сетевых интерфейсов (Protocols) и базовые библиотеки (Libraries).
Раздел Kernel modules содержит в основном драйвера для «железа», файловых систем, различных подсистем и так далее. Здесь тоже полезно пробежаться по подразделам и включить, например, поддержку NTFS. К сожалению, какого-то универсального руководства к действию при настройке компонентов прошивки нет. Устанавливать дополнительные утилиты и библиотеки можно, но не стоит забывать о небольшом объёме накопителя в роутере. А вот удалять то, что по умолчанию было включено, надо с осторожностью. Ознакомьтесь хотя бы с краткой справкой по компоненту, нажав H, а ещё лучше погуглите.
После выбора всех нужных модулей и компонентов необходимо сохранить конфигурацию. Непосредственно перед сборкой полезно выполнить ещё одну команду, которая покажет недостающие утилиты или библиотеки. Их надо будет доустановить с помощью apt-get install или поискать пакеты, в которых они содержатся, и тоже установить.
make prereq
Процесс сборки запускается очень простой командой:
make
Сборка прошивки длится довольно долго. Чем больше вы «напихали» в неё, тем дольше придётся ждать. Обладатели многоядерных процессоров могут чуть облегчить свою участь, добавив к команде make параметр -j x, где x=число ядер+1. На тестовой машине с CPU AMD Phenom II X6 базовая x86-прошивка с небольшими дополнениями компилировалась в несколько потоков примерно 10-15 минут. Впрочем, иногда использование нескольких процессорных ядер может привести к ошибке во время сборки.
make -j 7
Готовые файлы прошивок (trx, bin, iso и другие) будут лежать в папке bin. Процесс заливки прошивки зависит от модели роутера — ищите информацию в списке совместимости и вики. Для многих моделей генерируется сразу два файла: factory и upgrade. Первый нужен для замены стандартного ПО, а второй — для обновления уже установленной OpenWRT. Если вы создали тестовую x86-сборку, то её работоспособность можно проверить в виртуальной машине. VirtualBox для этого вполне подойдёт. Создайте новую ВМ, тип ОС выберите Linux 2.6, откажитесь от создания HDD. В качестве загрузочного CD используйте образ openwrt-x86-generic-rootfs-iso.img, у которого надо поменять расширение img на iso. Первый сетевой адаптер переключите в режим «Внутренняя сеть», а второй в режим NAT или моста.
Внутри второй ВМ можно запустить какой-нибудь Live-дистрибутив, предварительно переключив виртуальный сетевой интерфейс в режим «Внутренняя сеть». Ubuntu, например, или один из многочисленных вариантов WinPE. Эта машина должна автоматически получить IP-адрес по DHCP, а к псевдороутеру можно будет подключиться через веб-интерфейс или telnet. Если всё заработало так, как нужно, то можно приступать к сборке прошивки уже под конкретную модель роутера.
Перед сборкой каждой новой прошивки рекомендуется очищать рабочую директорию, обновлять исходные коды (для trunk-релиза это особенно актуально), скачивать свежие фиды и ставить новые версии пакетов. Ну и далее по этапам сборки.
make clean svn update ./scripts/feeds update -a
В общем, не так страшен чёрт, простите, пингвин, как его малюют. Хотя, надо признать, для рядового пользователя это не так уж просто. К сожалению, как и говорилось выше, какого-то универсального и простого руководства для сборки собственной прошивки нет. Мы постарались расписать наиболее общие шаги, но все нюансы и детали охватить просто невозможно. Ещё раз призываем наших читателей быть внимательнее во время сборки и предупреждаем, что неверные действия могут привести к «гибели» устройства и порой непростому восстановлению его работоспособности. Удачи!