Сборка openwrt

В данной статье я хотел бы поделиться опытом сборки собственной прошивки openwrt, с выбором нужных пакетов, а также настройкой отказоустойчивого доступа в интернет с мгновенной ротацией каналов и одновременной их работой, складыванием скорости провайдеров и как следствием, настройкой всем любимых vlan-ов.
Выбор пал на роутер Tp-Link TL-WR741ND v.4.25 (цена 1150 рублей), который я выбрал по следующим характеристикам:
1) Низкая цена
2) Достаточное количество памяти для заявленных требований
3) Возможность запиливания USB (для истинных ценителей поковырять железку)
4) Поддержка OpenWrt Barrier breaker
5) Поддержка vlan-ов
6) Поразительная живучесть (роутер невозможно убить неверной прошивкой, функция восстановления прошивки по tftpd работает как часы, и не раз выручала во время неудачных экспериментов). О методах восстановления напишу в конце статьи.
Стандартная прошивка для данного роутера от OpenWrt не устраивала. Причиной тому были лишние пакеты, которые занимали место в драгоценной памяти данного малыша.
Было решено выпилить: ppp, поддержку ipv6, opkg (ставить же не будем больше ничего).
Добавить: openvpn-polarssl (меньше занимает места), luci-mwan3 (очень понравилась визуальная настройки и индикация работы каналов)
Итак, начнем:

1) Подготовка устройства

Для начала, обновим наше устройство до последней версии стандартной прошивки tp-link. Смысла описывать подробно данное действо я не вижу, все достаточно понятно и просто.

2) Сбор прошивки

Нам понадобится многоядерный процессор для комфортного создания своей прошивки (я собирал на i7). Но и Core2Duo сойдет, разве что подольше собираться будет. OS подойдет Ubuntu 15 x86_64.

Установка необходимых пакетов:

sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install subversion git g++ libncurses5-dev zlib1g-dev gawk -y
Все дальнейшие команды сборки делаются от обычного пользователя, не от рута!
Идем в «магазин» за исходниками. Я выбрал OpenWrt Bariier Breaker за удобство в настройке и отличную стабильность на предыдущем роутере (TP-LINK Archer C7).
svn co svn://svn.openwrt.org/openwrt/branches/barrier_breaker wrt cd ~/wrt svn update
В домашней папке у нас появится папка wrt, где мы и будем производить сборку.
Скачаем исходники дополнительных пакетов (типа Luci):
./scripts/feeds update -a ./scripts/feeds install -a
Выполним настройку платформы
make menuconfig
Появится псевдографическое меню, где нас интересуют пункты Target System, Subtarget и Target Profile:

Вся навигация свободится к выбору нужного пункта (стрелками) и нажатием enter, выбор компонента — также enter, выход из меню — стрелки вправо-влево — Exit. Не забудьте сохранить конфиг.
Применяем стандартные параметры для профиля:
make defconfig
Модифицируем набор пакетов:
make menuconfig
Удалил:
opkg из (base system)
убрал опцию сборки с поддержкой ipv6 (Global build settings)
ppp (Network).
Добавил:
Luci
luci-app-mwan3 (Luci-Applications)
openvpn-polarssl (Network-vpn).
Не забудьте сохранить конфигурацию!
Начинаем сборку:
make -j5 V=s
Параметр -j5 указывает на количество ядер +1 поток для быстрой сборки, а V=s — на вывод подробностей (если будут ошибки).

Процесс займет долгое время, 10-15 минут на i7 процессоре, после чего в директории /home/user/wrt/bin/ar71xx появятся наши прошивки для различных версий роутера. Если не появились — смотрим в логи сборки — наверняка, вы превысили размер прошивки и увидите строку: «firmware is too big». Придется делать make clean, make distclean и начинать все заново. (с шага ./scripts/feeds update -a )
Нас интересует:
openwrt-ar71xx-generic-tl-wr741nd-v4-squashfs-factory.bin — «заводская» прошивка.
Перекидываем её на компьютер с подключенным по ethernet-у роутером (например, через ftp или winscp).
Заходим по адресу: 192.168.0.1 и прошиваем новоиспеченной прошивкой, ждем перезагрузки, затем заходим по адресу: 192.168.1.1
root без пароля (его назначим при первом входе — вверху будет висеть желтый баннер с предупреждением и ссылкой на смену пароля).
Ну наконец-то, самое сложное позади, теперь у нас современная прошивка и НАШ набор программ.

3) Настройка vlan:

Происходит в меню роутера: network — switch

Тут не обошлось без непоняток — нумерация портов в роутере и в конфигурации vlan не совпадает. На скриншоте я постарался объяснить как они изменены. Порт WAN в роутере не участвует в vlan-функционале.
Tagged — тэгированный трафик, сюда направляются пакеты от каждого vlan (101, 102, 103), которые затем распределяются по интерфейсам wan (основной провайдер), wan2 (резервный провайдер), eth0.103 (vlan для локальной сети).
Untagged — нетэгированный режим порта (точка входа ethernet-кабеля от нужного провайдера). Тут важно не запутаться в проводах: что куда идет. Я подписал сзади роутера нужные названия, чтобы в будущем не было путаницы (провайдер№1 101, провайдер№2 102, локалка 103).
Проще говоря, мы впускаем через 3 порта 3 разных сети, которые затем внутри устройства распределяются по полочкам.
После изменений нажмите Save, но не Apply! Мы ведь не хотим остаться без сети во время настройки?
Теперь, нужно создать нужные интерфейсы в Network — Interfaces:

Удалим wan6 интерфейс (мы не используем ipv6 в данном случае).
Изменим wan интерфейс для первого провайдера, укажем нужные данные для подключения (например, провайдер дает инет по dhcp), и укажем какой vlan использовать для этого интерфейса. Вот тут-то и идет сопоставление vlan: провод: интерфейс.

Для второго провайдера wan2 укажем eth0.102.
Для Lan укажем объединить интерфейсы в bridge eth0 и eth0.103:

В настройках интерфейсов wan и wan2 укажите метрику устройств (обязательно для работы mwan3):

Теперь смело можно жать на Save&Apply и проверить введенные настройки.

4) mwan3 или крутая выручалочка админа

Трудно недооценить данный пакет, ведь пользователи смогут получать сумму скорости двух интернет-каналов, интернет в офисе будет всегда, ведь маловероятно, что упадут оба канала.
Для админа пройдет головная боль по временному отключению какого-либо из каналов, и не нужно городить костыльные скрипты по переключению. Я забыл о проблемах в офисе с интернетом и не переживаю когда падает один из них (мне приходят sms по данным событиям).
Я точно знаю, что OpenVPN через 30 секунд переключится на резервный канал (слава параметру multihome), связь с главным офисом в г.Москва восстановится и некоторые пользователи и начальники не заметят данный инцидент.
Приступим:
Зайдем в network — load balancing — configuration:

И включим wan2 в работу:

Далее, настроим правила работы каналов:
1) Balanced — Каналы складываются, скорость увеличивается, есть отказоустойчивость (переключение). Рекомендую.
2) wan_only — только провайдер№1
3) wan2_only — только провайдер№2
configuration — rules
Остальные rules можно удалить или оставить другое правило.
Подробно я останавливаться на mwan3 не буду — скажу только, что есть возможность пускать трафик до определенного ресурса через один из каналов, если есть привязка на данном ресурсе по IP.

5) Офисная дружба или openvpn

Отлично, интернет настроили, теперь нужно соединить 2 офиса вместе.
Будет заходить по статическому ключу. Генерацию ключа можно произвести на клиентской стороне:
sudo openvpn —genkey —secret office2.key
Ключ нужно поместить в /etc/openvpn/keys/ (сервер, клиент).
OpenVPN на роутере у нас уже установлен и мы начнем править конфиг. Для этого зайдем на TP-Link по ssh.
vi /etc/config/openvpn
В шапке конфига изменяем:
package openvpn ################################################# # Sample to include a custom config file. # ################################################# config openvpn custom_config # Set to 1 to enable this instance: option enabled 1 # Include OpenVPN configuration option config /etc/openvpn/openvpn.conf
Cохраняем, выходим. Тут мы включили кастомный конфиг в /etc/openvpn/openvpn.conf — лично для меня это как-то привычнее.
Далее, сам конфиг:
mkdir /etc/openvpn mkdir /etc/openvpn/keys vi /etc/openvpn/openvpn.conf
На роутере у нас серверная сторона openvpn. Приводим конфиг к виду:
port 1194 #порт сервера proto udp dev tun-office2 #обзовем интерфейс multihome #слушаем подключения на wan и wan2 ifconfig 10.0.0.2 10.0.0.3 #IP-шники окончания туннелей secret /etc/openvpn/keys/office2.key #ключик keepalive 5 30 #переподключение через 30 сек. user nobody group nogroup persist-tun persist-key status /tmp/office2.status log /tmp/office2.log #логи verb 3
Сохраняем, затем:
/etc/init.d/openvpn restart
Теперь клиент:
Примерный конфиг выглядит так:
remote wan.office2.ru #стучимся сначала сюда remote wan2.office2.ru #потом сюда (по очереди) port 1194 proto udp dev tun-office1 ifconfig 10.0.0.3 10.0.0.2 # наоборот как на сервере route 192.168.30.0 255.255.255.0 #пропишем роут для включения офисной подсети роутера в главный офис secret /etc/openvpn/keys/office2.key #клон ключа с сервера keepalive 5 30 #передергиваем туннель при плохом поведении одного из каналов user nobody group nogroup persist-tun persist-key status /var/log/openvpn/office.status log /var/log/openvpn/office.log verb 3
Сохраняем конфиг, применяем:
/etc/init.d/openvpn restart
Смотрим ifconfig, логи и радуемся надежному каналу.

Заключение:

Конечно же, вы не один раз убьете свой роутер неудачной прошивкой, позарившись на удаление нужных компонентов base system.
Но ничего страшного!
Самый простой способ реанимировать роутер — это fail safe в openwrt:
1) Назначьте сетевому адаптеру на компьютере IP адрес 192.168.1.2

2) Маска 255.255.255.0
3) Кабель ethernet — в порт LAN1
4) Выключите роутер
5) Включите и дождитесь пока загорится значок шестеренки
6) Зажмите на 1-2 секунды кнопку роутера QSS — шестеренка заморгает очень быстро
7) Запустите телнет-клиент и подсоединитесь по адресу 192.168.1.1
8) Залейте в tmp роутера дефолтную прошифку для вашей модели, например, через мини-веб-сервер tinyweb
9) Выполните:
mtd -r write /tmp/имяпрошивки.bin firmware
Роутер скушает прошивку и перезагрузится.
Шеф, всё пропало!
Да, именно так я подумал, когда убил роутер еще тяжелее. Шестеренка не горела, а роутер циклически ребутался без остановки.
Воспользуемся замечательной функцией в прошивке tp-link-а — загрузка прошивки через tftp:
1) Назначьте сетевому адаптеру на компьютере IP адрес 192.168.0.66
2) Маска 255.255.255.0
3) Кабель ethernet — в порт LAN1
4) Запустите tftp сервер с дефолтной прошивкой в папке под названием «wr741ndv4_tp_recovery.bin» (нужно переименовать файл прошивки)
4) Выключите роутер
5) Возьмите острый и тонкий предмет (ручка)
6) Возьмите роутер в руки, поверните его к лицу портами, ручку держите в свободной руке
7) Включите роутер и тут же зажмите QSS пальцем одной руки+reset ручкой в другой руке. Потренируйтесь и это получится.
8) Удерживайте зажатыми эти 2 кнопки 4-8 секунд, пока в tftp клиенте не пойдет загрузка прошивки в роутер. А она пойдет, не беспокойтесь.
Как только прошивка загрузилась (2-3 сек), отпустите кнопки. Выдохните, роутер спасен.
Использованы статьи:

Компиляция отдельного пакета для OpenWRT

Подробности Категория: Сборка Опубликовано: 05 января 2018 Просмотров: 10272

Очень часто бывает так, что существующий в репозитарии OpenWRT установочный пакет какого-нибудь приложения не работает должным образом, либо вообще скомпилирован кривовато, что вызывает немало проблем. Как правило разработчики выпускают патчи, которые призваны решать возникающие проблемы с этими приложениями у пользователей. Но вот сам репозитарий для конкретной ветки OpenWRT пропатченые пакеты как правило не компилирует, и пользователям приходится делать выбор: переходить на более новую версию прошивки OpenWRT, где эта проблема уже устранена, либо применить патч, а то и вовсе собрать пакет под старую уже установленную и отлаженную систему любимого роутера.

Вообще обратиться к этой теме мне пришлось, когда я пытался расширить дисковую память на своем роутере на Chaos Calmer 15.05.1. Принциально не хотел собирать свою прошивку, так как собранная разработчиками меня полностью устраивала, за исключением отсутствием свободного места. Именно в процессе получения внешнего overlay мне и пришлось повысить версию пакета f2fs-tools до рабочего состояния. На его примере и попытаюсь раскрыть эту тему.

Получение исходных кодов, выбор пакета и подготовка инструментов

Будем компилировать пакет для ветки Chaos Calmer 15.05.1. Получаем исходные коды:

git clone -b v15.05.1 http://github.com/openwrt/chaos_calmer.git
cd chaos_calmer

Обновляем доступный список пакетов

./scripts/feeds update -a

Получаем необходимые правила для компиляции нужного нам пакета, в моем случае это f2fs-tools. После этой команды появится возможность выбрать наш пакет в конфигураторе

./scripts/feeds install f2fs-tools

Далее запускаем конфигуратор. Выбираем целовой профиль нашего роутера, у меня это TP-LINL-MR3020. Сохраняемся и выходим.

make menuconfig

ть

Дальше пробегаемся по зависимостям текущего профиля железа. Изменения в конфиг вносятся автоматически.

make defconfig

Далее запускаем опять конфигуратор, находим нужный для компиляции пакет, ставим напротив его галочку M, чтобы скомпилировать его как отдельный пакет для последующей установки.

make menuconfig

Далее устанавливаем нужные инструменты для компиляции пакета

make tools/install
make toolchain/install

Компиляция самого пакета

make package/f2fs-tools/compile

После чего в папке /bin/ar71xx/packages/packages/ вы найдете готовый к установке пакет и в большинстве случаев необходимые ему библиотеки.

Компиляция пакета более новой версии

Не редко бывает, когда попадаются какие-то нерабочие пакеты. Так и нужный мне пакет f2fs-tools версии 1.4.0 оказался нерабочим. Поэтому было принято решение собрать пакет из исходников более новой версии 1.4.1 где проблемы были устранены и зависимости от других пакетов системы и ядра linux были минимальны.

Сначала нужно скачать исходники новой версии пакета в формате архива .tar.gz и положить их в папку /dl. Я скачал исходники f2fs-tools-1.4.1.tar.gz. Далее переходим в папку feeds/packages/utils/f2fs-tools и открываем для редактирования файл Makefile. И меняем в нем версию нашего пакета:

После чего сохраняемся. Так как у нас уже была проведена компиляция пакета, для начала чистим результат сборки:

make clean

И запускаем сборку пакета по новой

make package/f2fs-tools/compile

Если все пройдет успешно то в папке /bin/ar71xx/packages/packages/ будет находиться уже новая версия нашего пакета. Естественно такой способ не прокатит, если зависимости новой версии пакета критичны. Сначала придется собрать пакеты зависимостей, а они в свою очередь наплодят новые. Так что замкнутый круг. Но данный хак позволил мне собрать пакет в в версии 1.4.1, а вот с переходом пакета на 1.5.0 уже нет.

Компиляция стокового пакета с использованием патча

Бывает, что для решения какой-то ошибки в пакете разработчик выпускает патч. Это как правило файл с расширением *.patch. Чтобы применить данный патч к вашему пакету — вам нужно сначала скопировать сам файл патча в папку feeds/папка вашего пакета/patches и сделать обычную компиляцию пакета.

Например, мне нужно было собрать пакет block-mount с патчем поддержки файловой системы f2fs. Так как исторически пакет был зависим с псевдопакетом fstools, патчить пришлось последний. Создаем папку для патчей если ее там еще нет:

mkdir ./package/system/fstools/patches/

Получаем сам патч от разработчиков и кладем его в папку patches

Зачищаем ранее собранные части пакета

Оригинал: How to build OpenWrt minimal image, or a custom firmware
Arnab Satapathi
Дата публикации: 29 марта 2017 г.
Перевод: А.Панин
Дата перевода: 4 апреля 2017 г.

Проект OpenWRT не нуждается в особом представлении, но ввиду того, что его кодовая база расширяется день ото дня, имеет смысл рассмотреть методику сборки минималистичной версии прошивки, которая подойдет для установки на маршрутизаторы с 4 МБ флэш-памяти, причем у вас останется достаточно места для установки дополнительных пакетов в будущем.

  • Одним из решений является создание корневой файловой системы на подключенном к маршрутизатору USB-накопителе, но это не всегда возможно, ведь вам может понадобиться использовать USB-порт для какой-либо другой цели, например, для подключения внешнего Wi-Fi адаптера. Хотя вы и можете использовать USB-хаб, он значительно снизит надежность всей системы.
  • Теперь следует упомянуть о другой проблеме, заключающейся в том, что в OpenWRT Chaos Calmer версии 15.05, 15.05.1 или более новой версии вы просто не сможете разместить корневую файловую систему маршрутизатора с 4 МБ флеш-памяти и USB-портом на USB-накопителе. Это объясняется тем, что объема флеш-памяти не хватит для сохранения всех пакетов с необходимыми для использования внешней корневой файловой системы программными компонентами, во всяком случае я столкнулся с такой ситуацией.

Что же, начнем рассмотрение процесса сборки прошивки.

Загрузка окружения для сборки прошивки OpenWRT image builder

В первую очередь вам придется определиться с платформой вашего маршрутизатора, то есть, узнать архитектуру используемого в нем центрального процессора: MIPS, ARM, x86 и так далее.

Я использую маршрутизатор TP-Link MR3220 с SoC AR9331, из чего следует, что требуется собрать прошивку для 32-битного центрального процессора архитектуры MIPS с порядком байтов big endian. В OpenWRT данная платформа носит имя ar71xx.

Таким образом, мне придется загрузить окружение для сборки прошивки OpenWRT Chaos Calmer 15.05.1 для платформы ar71xx, причем модель маршрутизатора входит в категорию generic.

Вы можете загрузить окружения для сборки прошивок для других различных платформ по ссылке: .

Использование окружения для сборки прошивки

Для корректного использования окружения для сборки прошивки вам понадобится работоспособная 64-битная Linux-система, которую вы наверняка уже используете, а также базовые навыки работы с инструментами с интерфейсом командной строки.

Извлеките содержимое загруженного архива в любое место, например, в вашу домашнюю директорию:

tar -xf OpenWrt-ImageBuilder-15.05.1-ar71xx-generic.Linux-x86_64.tar.bz2 -C ~/

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

Теперь нужно установить некоторые программные компоненты, которые необходимы для компиляции и связывания компонентов прошивки, такие, как GNU Make.

В Debian, Ubuntu и любом другом основанном на Debian дистрибутиве вам придется просто установить пакет программного обеспечения build-essential, который связан зависимостями со всеми остальными необходимыми пакетами.

sudo apt-get install build-essential

Теперь нужно перейти в директорию с извлеченным из архива окружением сборки прошивки OpenWRT image builder:

cd ~/OpenWrt-ImageBuilder

Перед непосредственной сборкой прошивки необходимо убедиться в том, что окружение корректно функционирует:

make help

В случае корректной работы вы должны увидеть несколько строк текста с информацией об использовании окружения.

Выбор добавляемых в прошивку и удаляемых из прошивки пакетов

Этот этап является особенно важным, ведь вам придется определиться с тем, какие пакеты следует добавить в прошивку или удалить из нее, не оказывая негативного влияния на стабильность.

Обычно я удаляю LuCI и связанные пакеты для максимального уменьшения размера прошивки OpenWRT, то есть, для освобождения нескольких сотен КБ пространства на флеш-накопителе маршрутизатора. Ниже приведен список пакетов, которые я обычно удаляю:

Вы можете без каких-либо последствий удалить все пакеты, связанные с IPv6, вместо пакетов, связанных с LuCI, если желаете освободить пространство на флеш-накопителе маршрутизатора.

Я также добавляю в прошивку несколько дополнительных пакетов для использования внешней корневой файловой системы сразу же после прошивки без необходимости установки каких-либо дополнительных пакетов. А это список добавляемых мною в прошивку пакетов:

kmod-fs-ext4 kmod-usb-storage kmod-scsi-core block-mount kmod-lib-crc32c kmod-crypto-crc32c

Примечание: два дополнительных пакета, а именно, kmod-lib-crc32c и kmod-crypto-crc32c необходимы для использования файловой системы ext4.

Сборка прошивки OpenWRT

Пришло время для сборки минимальной прошивки OpenWRT, но для начала следует выполнить команду make info для получения списка доступных профилей сборки и выбора подходящего вам профиля.

Переменная окружения PACKAGES используется для добавления и удаления пакетов на финальном этапе сборки, причем для отметки удаляемых пакетов перед их именами должен размещаться символ минус (-).

Ниже приведена полная команда для сборки прошивки; не забудьте адаптировать ее к вашей конфигурации и модели маршрутизатора.

Эта команда является слишком длинной, поэтому лучше скопировать ее куда-либо для последующего анализа. Ниже приведена та же команда, разделенная на части:

После окончания процесса сборки вы сможете найти все собранные прошивки OpenWRT для выбранной платформы в поддиректории bin сборочного окружения, причем в моем случае прошивки были размещены в директории ~/OpenWrt-ImageBuilder/bin/ar71xx/.

Перед прошивкой маршрутизатора

Перед прошивкой маршрутизатора следует проверить размер созданного файла прошивки, ведь в случае использования маршрутизатора с 4 МБ флеш-памяти размер файла прошивки с маркировкой squashfs factory не должен превышать 3.8 МБ или 3932160 байт; проверьте это дважды перед тем, как приступить к прошивке маршрутизатора:

du -b openwrt-15.05.1-ar71xx-generic-tl-mr3220-v2-squashfs-factory.bin

Теперь вы можете осуществить прошивку маршрутизатора так, как вам будет удобно: с помощью веб-интерфейса, с помощью команды sysupgrade или любым другим способом.

В результате после входа в систему маршрутизатора по протоколу SSH вы должны обнаружить несколько килобайт свободного пространства.

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

Таким образом вы можете собрать собственную версию прошивки OpenWRT; надеюсь, что данная статья была понятна всем читателям. Не забывайте делиться ссылками на статью, если вы считаете полезной изложенную в ней информацию.

Если вам понравилась статья, поделитесь ею с друзьями: