Запуск OpenWRT 14.07 на Mikrotik и пример сборки Аsterisk c дополнительным модулем


           В интернете много статей по запуску 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

    В комментариях дается описание каждой строчки. Для модуля 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)
    

    Включаем наш модуль в сборку


           Если все прошло удачно, то остается поставить только что собранный нами пакет. Готовые образы можно взять у автора патча. На этом все.
    Поделиться публикацией

    Похожие публикации

    Комментарии 15

      0
      Стоит предупредить, что не на все модели встает удачно. Об этом было написано в оригинальном треде(ссылку на который я не вижу).
        0
        Добавил про MIPS и PowerPC процессоры.
        0
        Как у всего этого дела со стабильностью? Как-то пробовал прикрутить DNScrypt к микротику посредством разворачивания минимального OpenWRT, так мало того что висло, еще и хост зависал намертво.
          0
          Пока сложно говорить о стабильности, маловато времени тестировал, в планах есть запустить с определенной постоянной нагрузкой. Если есть желания могли бы взять готовый образ(ссылки в конце статьи) и настроить там DNScrypt, очень интересно было бы услышать отзывы.
          0
          Расскажу вам свою историю:
          Одно время была идея поднять http-сервер на микротике, что бы отдавать ядро для загрузки бездиковых машин в небольшом офисе. т.к. tftp не устраивает, работает очень медленно, а ftp на микротике так устроен, что выдать права можно только на чтение/запись, просто на чтение нельзя. Проблему еще усложняло то, что размер образа у нас довольно большой, и во внутренней памяти микротика он никак не помещался. Сама OpenWRT встала и работала довольно стабильно. Но тут еще один сюрприз: В виртулку нельзя пробросить external storage, тогда я решил монтировать ftp микротика через curlftpfs и отдавать образ с этой файловой системы по http, так и сделал. Но и тут меня ждала засада: вся эта система оказалась однопоточной и если одновременно будут грузится сразу две машины, то вся загрузка начинает обрыватся и бесконечно начинается с начала. Так что я пока забил на такую реализацию стопки костылей. И для себя сделал вывод, что на данный момент openwrt на микротике можно безболезненно использовать только для независимых сервисов которые не требуют многого от машинки в целом, но и это уже очень и очень приятно :)
            0
            Думаю для активных операций ввода\вывода metarouter не очень подходит. Я тут подумал, если включить функцию hotspot, то mikrotik может отдавать файлы которые находятся на флешке (можно ли отдавать которые находятся на USB устройстве не в курсе), можно заменить один из файлов ядро для загрузки бездиковых машин, который будет доступен статичной http ссылкой.
              0
              На счет hotspot, тоже была такая идея, но при его установке он создает кучу левых правил в файрволле и бог его знает что еще :)
              Еще как вариант был включить webproxy и подпихнуть ядро вместо error.html, кстати работает. Но нужно отдавать два файла initrd и vmlinuz
              можно ли отдавать которые находятся на USB устройстве не в курсе

              Да, можно смонтировать флешку как /pub тогда микротик будет записывать в нее свои файлы, и храниться они будут на флешке :)
            0
            Хотел добавить:
            Для тех кто хочет «просто попробовать» и не хочет заморачиваться сборкой прошивки, взять готовую можно здесь, для более обширных задач советую брать не trunk, а attitude adjustment (пакетов больше)

            ps: Автор, спасибо за статью, лично для себя искал как раз аспекты сборки :)
              0
              Помимо транка, который вскоре должен стать chaos calmer, есть еще и barrier braker, который является текущим стабильным релизом. Зачем вы советуете устаревший attitude adjustment?
                0
                lollipop, потому что barrier braker в этом репо нет:)
            • НЛО прилетело и опубликовало эту надпись здесь
                +1
                Если брать по схожим характеристикам железа, то не будет дешевле в 2-4 раза, максимум на 20-30%.
                0
                Не знаю как у вас, но у меня это дело падает через пару минут аптайма. Не успел даже пароль на рута поменять :(
                Хост система — RB951G-2HnD (mipsbe) — RouterOS 6.25

                trace
                root@OpenWrt:/# passwd
                Changing password for root
                New password:
                Retype password:
                Password for root changed by root
                root@OpenWrt:/# [ 0.000000] skbuff: skb_over_panic: text:c02d30e4 len:14272 put:14272 head:c1bd0e80 data:c1bd0ec0 tail:0xc1bd4680 end:0xc
                1bd1500 dev:[ 0.000000] Kernel bug detected[#1]:
                [ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 3.10.49 #2
                [ 0.000000] task: c0338558 ti: c032e000 task.ti: c032e000
                [ 0.000000] $ 0: 00000000 10008200 0000007f c0330000
                [ 0.000000] $ 4: 10008200 00000001 00001248 c0372020
                [ 0.000000] $ 8: 35303020 c0373268 0000004b 00000000
                [ 0.000000] $12: 0000004b 00000000 00000000 00000000
                [ 0.000000] $16: c1929c80 00000180 00000060 00000000
                [ 0.000000] $20: c0380000 c037d340 c037db44 c0378198
                [ 0.000000] $24: 00000000 c02cff58
                [ 0.000000] $28: c032e000 c032faf8 c0330000 c02ce660
                [ 0.000000] Hi: 00000000
                [ 0.000000] Lo: 83126e98
                [ 0.000000] epc: c02ce660 skb_panic+0x58/0x5c
                [ 0.000000] Not tainted
                [ 0.000000] ra: c02ce660 skb_panic+0x58/0x5c
                [ 0.000000] Status: 10008202 KERNEL EXL
                [ 0.000000] Cause: 00000024
                [ 0.000000] PrId: 0001800a (MIPS 4Kc)
                [ 0.000000] Modules linked in: pppoe ppp_async iptable_nat pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv4 ipt_MASQUERADE xt_time xt_tcpu
                dp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_comment xt_TCPMSS xt_REDIRECT xt_LOG xt_CT slhc nf_nat_irc nf_
                nat_ftp nf_nat nf_defrag_ipv4 nf_conntrack_irc nf_conntrack_ftp iptable_raw iptable_mangle iptable_filter ipt_REJECT ip_tables crc_ccitt ip6
                t_REJECT ip6table_raw ip6table_mangle ip6table_filter ip6_tables x_tables nf_conntrack_ipv6 nf_conntrack nf_defrag_ipv6 ipv6
                [ 0.000000] Process swapper (pid: 0, threadinfo=c032e000, task=c0338558, tls=00000000)
                [ 0.000000] Stack: 00000740 c0306098 c02d30e4 000037c0 000037c0 c1bd0e80 c1bd0ec0 c1bd4680
                c1bd1500 c0321eb4 00000000 c02833dc 00000000 c1ad87b0 c1868c70 00000170
                0000005c c02d30e4 00000011 00000001 58b9db23 00000043 c1883a90 00010000
                00000000 00000000 00000043 c033c04c c03331e0 c0330000 c0330000 c01cfa78
                c1ade000 c0330e50 c1ade000 c0290740 00010000 c01fa9e8 c033c04c 00010000

                [ 0.000000] Call Trace:
                [ 0.000000] [] skb_panic+0x58/0x5c
                [ 0.000000] [] skb_put+0x48/0x50
                [ 0.000000] [] veth_interrupt+0x198/0x31c
                [ 0.000000] [] handle_irq_event_percpu+0x58/0x260
                [ 0.000000] [] handle_irq_event+0x3c/0x60
                [ 0.000000] [] handle_edge_irq+0x164/0x1b4
                [ 0.000000] [] generic_handle_irq+0x3c/0x54
                [ 0.000000] [] do_IRQ+0x1c/0x2c
                [ 0.000000] [] virq_cascade_irq+0x3c/0x70
                [ 0.000000] [] handle_irq_event_percpu+0x58/0x260
                [ 0.000000] [] handle_percpu_irq+0x54/0x84
                [ 0.000000] [] generic_handle_irq+0x3c/0x54
                [ 0.000000] [] do_IRQ+0x1c/0x2c
                [ 0.000000] [] ret_from_irq+0x0/0x4
                [ 0.000000] [] __do_softirq+0x9c/0x1d4
                [ 0.000000] [] do_softirq+0x48/0x68
                [ 0.000000] [] irq_exit+0x54/0x70
                [ 0.000000] [] ret_from_irq+0x0/0x4
                [ 0.000000] [] __r4k_wait+0x20/0x40
                [ 0.000000] [] cpu_startup_entry+0xd0/0x140
                [ 0.000000] [] start_kernel+0x3a0/0x3b8
                [ 0.000000]
                [ 0.000000]
                Code: 24841ebc 0c0b3835 00603821 <000c000d> 27bdffc0 afb00034 afbf003c afb10038 00808021
                [ 0.000000] ---[ end trace 461164077349d5ee ]---
                [ 0.000000] Kernel panic — not syncing: Fatal exception in interrupt
                [ 0.000000] Rebooting in 3 seconds..[ 0.000000] Linux version 3.10.49 (zentavr@zentavr-ig) (gcc version 4.8.3 (OpenWrt/Linaro GCC 4.8-
                2014.04 r44162) ) #2 Sun Feb 8 19:32:34 EET 2015
                [ 0.000000] CPU revision is: 0001800a (MIPS 4Kc)
                [ 0.000000] Determined physical RAM map:
                [ 0.000000] memory: 00243000 @ 00101000 (usable)
                [ 0.000000] memory: 0002c000 @ 00344000 (usable after init)
                [ 0.000000] User-defined physical RAM map:
                [ 0.000000] memory: 02000000 @ 00000000 (usable)
                [ 0.000000] Initrd not found or empty — disabling initrd
                [ 0.000000] Zone ranges:
                [ 0.000000] DMA [mem 0x00000000-0x01ffffff]
                [ 0.000000] Normal empty
                [ 0.000000] Movable zone start for each node
                [ 0.000000] Early memory node ranges
                [ 0.000000] node 0: [mem 0x00000000-0x01ffffff]
                [ 0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
                [ 0.000000] Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes
                [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128
                [ 0.000000] Kernel command line: console=hvc0 board=vm mem=32M init=/etc/preinit
                [ 0.000000] PID hash table entries: 128 (order: -3, 512 bytes)
                [ 0.000000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
                [ 0.000000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
                [ 0.000000] Memory: 28820k/32768k available (1936k kernel code, 3948k reserved, 377k data, 176k init, 0k highmem)
                [ 0.000000] NR_IRQS:168
                [ 0.000000] console [hvc0] enabled
                [ 0.000000] Calibrating delay loop… 242.94 BogoMIPS (lpj=485888)
                [ 0.000000] pid_max: default: 32768 minimum: 301
                [ 0.000000] Mount-cache hash table entries: 512
                [ 0.000000] NET: Registered protocol family 16
                [ 0.000000] bio: create slab <bio-0> at 0
                [ 0.000000] Switching to clocksource MIPS
                [ 0.000000] NET: Registered protocol family 2
                [ 0.000000] TCP established hash table entries: 512 (order: 0, 4096 bytes)
                [ 0.000000] TCP bind hash table entries: 512 (order: -1, 2048 bytes)
                [ 0.000000] TCP: Hash tables configured (established 512 bind 512)
                [ 0.000000] TCP: reno registered
                [ 0.000000] UDP hash table entries: 256 (order: 0, 4096 bytes)
                [ 0.000000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
                [ 0.000000] NET: Registered protocol family 1
                [ 0.000000] MFS init
                [ 0.000000] squashfs: version 4.0 (2009/01/31) Phillip Lougher
                [ 0.000000] msgmni has been set to 56
                [ 0.000000] io scheduler noop registered
                [ 0.000000] io scheduler deadline registered (default)
                [ 0.000000] TCP: cubic registered
                [ 0.000000] NET: Registered protocol family 17
                [ 0.000000] Bridge firewalling registered
                [ 0.000000] 8021q: 802.1Q VLAN Support v1.8
                [ 0.000000] VFS: Mounted root (metafs filesystem) readonly on device 0:9.
                [ 0.000000] Freeing unused kernel memory: 176K (c0344000 — c0370000)
                procd: Console is alive
                procd: — preinit — Press the [f] key and hit [enter] to enter failsafe mode
                Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
                mounting /dev/root
                procd: — early — procd: — ubus — procd: — init — Please press Enter to activate this console.

                BusyBox v1.22.1 (2015-02-08 19:20:44 EET) built-in shell (ash)
                Enter 'help' for a list of built-in commands.

                _______ ________ __
                | |.-----.-----.-----.| | | |.----.| |_
                | — || _ | -__| || | | || _|| _|
                |_______|| __|_____|__|__||________||__| |____|
                |__| W I R E L E S S F R E E D O M
                — BARRIER BREAKER (Barrier Breaker, r44162)
                — * 1/2 oz Galliano Pour all ingredients into
                * 4 oz cold Coffee an irish coffee mug filled
                * 1 1/2 oz Dark Rum with crushed ice. Stir.
                * 2 tsp. Creme de Cacao
                — root@(none):/# [ 0.000000] NET: Registered protocol family 10
                [ 0.000000] nf_conntrack version 0.5.0 (469 buckets, 1876 max)
                [ 0.000000] ip6_tables: © 2000-2006 Netfilter Core Team
                [ 0.000000] ip_tables: © 2000-2006 Netfilter Core Team
                [ 0.000000] xt_time: kernel timezone is -0000
                [ 0.000000] PPP generic driver version 2.4.2
                [ 0.000000] NET: Registered protocol family 24

                root@OpenWrt:/# uptime me
                21:16:58 up 0 min, load average: 1.85, 0.48, 0.16
                root@OpenWrt:/# uptime
                21:17:02 up 0 min, load average: 1.94, 0.52, 0.17
                root@OpenWrt:/# [ 0.000000] device eth0 entered promiscuous mode
                [ 0.000000] br-lan: port 1(eth0) entered forwarding state
                [ 0.000000] br-lan: port 1(eth0) entered forwarding state
                [ 0.000000] br-lan: port 1(eth0) entered forwarding state
                procd: — init complete —
                  0
                  Да работа не стабильная, бывает работает сутки без проблем, а бывает и часа не работает, причем падает весь роутер! Модель у меня такая же, пробую на других!

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое