В интернете много статей по запуску openwrt на устройствах Mikrotik через metarouter. Во всех них для сборки используется ревизия r29684 с официальным патчем, поддерживающим процессоры(устройства RB400, RB700 series, RB900 series, RB2011 boards, RB1000, RB1100, RB1100AH and RB800). Для более поздних версий данный патч уже не подходит. Из этого следует то, что все пакеты openwrt достаточно старые и собрать обновленное ПО почти нереально. А в новых версиях openwrt появилось много новых пакетов и библиотек.
       Поискав в интернете, не получилось ли у кого запустить свежий openwrt под metarouter, наткнулся на нужную заметку. Данная статья как раз полностью копирует ее содержание, плюс маленький бонус по сборке пакетов. Приступим (пример для debian\ubuntu систем):
Поставим нужные пакеты для работы:
$ sudo apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc zip
Создадим директорию для сборки (нужно около 12 гигабайт свободного места):
$ mkdir openwrt & cd openwrt
Скачаем патч для openwrt и сами исходники openwrt, и применим патч:
$ wget http://openwrt.naberius.de/barrier_breaker/mr-mips/openwrt_metarouter_1407.patch
$ git clone git://git.openwrt.org/14.07/openwrt.git barrier_breaker
$ cd barrier_breaker
$ patch -p1 -i ../openwrt_metarouter_1407.patch
Приступим к настройке образа:
$ make defconfig
$ make prereq
$ make menuconfig
       Далее, нужно выбрать в пункте target system тип процессора Mikrotik MetaROUTER MIPS. Также можно пройтись по дополнительным пакетам, которые будут в образе, или исключить ненужные. Можно приступать к сборке и пойти погулять:
$ make -j $(nproc)
Если сборка удачна, то появится готовый образ barrier_breaker/bin/mr-mips/openwrt-mr-mips-rootfs.tar.gz
       Загружаем готовый образ на флешку (можно как на встроенную так и на внешнюю) mikrotik'a, заходим в web интерфейс mikrotik'a и во вкладке, metarouter выбираем Import Image, указываем наш только что созданный образ и нужное кол-во оперативной памяти. На этом все. Остается запустить виртуалку, зайти в консоль нашего образа и приступить к настройкам (более подробное описание настройки можно найти в интернет, поэтому не буду дублировать).
Сборка и запуск Openwrt
Основной образ готов и лежит в bin/mr-mips/, можно приступить к сборке дополнительных пакетов. Через меню конфигуратора выбираем нужное ПО, установим для примера, Asterisk11:
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a
$ make menuconfig
Сборка доп.пакетов
Пакеты к установке готовы, можно попить чаю и запустить сборку (чтобы видеть ошибки и процесс сборки, запускаем с параметром V=s )
$ make -j $(nproc)
       Дополнительные пакеты появились в папке bin/mr-mips/packages/ — для установки скопируйте их в систему (например, через scp) и выполните opkg install name_paccket.ipk.
Данная процедура необязательна, так как можно установить пакеты из репозитария. Для чего же тогда нужно собирать пакеты? Ответ простой: если нужных пакетов нет в репозитарии или если нужны дополнительные модули к определенному пакету.
       Попробуем собрать модуль для asterisk'a, которого нет в репозитарии. На форумах, где обсуждают asterisk, запущенный на openwrt, можно найти жалобы на то, что отсутствует модуль для очередей app-queue. Попробуем его собрать. Правильный вариант — прочитать мануал openwrt и собрать по нему. Я решил попробовать напролом и сразу залез в make-файл /barrier_breaker/package/feeds/telephony/asterisk-11.x/Makefile, в котором в конце нашел строки, отвечающие за сборку модулей.
$(eval $(call BuildAsterisk11Module,pbx-lua,Lua,provides Lua resources for Asterisk,+libpthread +libc +liblua,/etc/asterisk/extensions.lua,extensions.lua,pbx_lua,))
Комментарии к выбору собираемых модулей
# Params:
# 1 — Package subname
# 2 — Package title
# 3 — Module description
# 4 — Module dependencies
# 5 — Full path to multiple conffiles
# 6 — conf files
# 7 — module files
# 8 — sound files
# 9 — binary files
# 1 — Package subname
# 2 — Package title
# 3 — Module description
# 4 — Module dependencies
# 5 — Full path to multiple conffiles
# 6 — conf files
# 7 — module files
# 8 — sound files
# 9 — binary files
В комментариях дается описание каждой строчки. Для модуля app-queue нет сторонних зависимостей, поэтому строчка довольно компактна.
$(eval $(call BuildAsterisk11Module,app-queue,Distribution queue call to agent,Each dynamic agent in each queue is now stored in the astdb,,,,app_queue,))
Добавляем ее в make-файл к другим модулям и запускаем сборку нашего модуля.
$ make menuconfig
$ make -j $(nproc)
Включаем наш модуль в сборку
       Если все прошло удачно, то остается поставить только что собранный нами пакет. Готовые образы можно взять у автора патча. На этом все.