В предыдущей статье  было разобрано как установить уже скомпилированную прошивку. Минус такого метода в том, что после установки нам требуется настраивать вручную заново каждое устройство «от» и «до», а так же устанавливать требуемые пакеты программ.

Проект OpenWrt предоставляет возможность довольно простой компиляции прошивки со своими настройками и выбранными заранее пакетами.

Компиляция своей прошивки полезна тогда, когда у вас имеется >1 устройства, работающего на OpenWrt. Или вы — фирма, которая ставит «свои» прошивки на закупаемые устройства.

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

О стабильных и экспериментальных прошивках

На странице https://downloads.openwrt.org/

openwrt download

В разделе Binary Releases располагаются протестированные, стабильные версии прошивок. А в разделе Development Snapshots располагаются экспериментальные прошивки для разработчиков, там прошивки автоматически собираются раз в два дня. Используя их, мы получим последние версии ядра и пакетов, но «These images are generally not tested, use them at your own risk.»

Подготовка к компиляции

И так, для компиляции нам понадобится ОС Linux. В данный момент для десктопа я использую xubuntu 14.04. Все действия будут проводится в командной строке. Как и в предыдущей статье, прошивка делается для Tp-link ta-wa901nd v2.

Почти всё что на нужно для компиляции находится в архиве OpenWrt-ImageBuilder-*. Архив имеется для каждой архитектуры процессора поддерживаемой OpenWrt.

В случае tl-wa901nd это https://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64.tar.bz2

Так же архивы ImageBuilder есть в Development Snapshots.

Создаем каталог в домашней директории и скачиваем туда требуемый архив ImageBuilder:

mkdir wa901nd

cd wa901nd

wget https://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64.tar.bz2

openwrt image builder

Распаковываем и переходим в каталог с ImageBuilder:

tar -xvjf OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64.tar.bz2

cd OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64

Теперь нужно определиться что мы хотим видеть в нашей прошивке после установки:

  • Нужно, что бы устройство сразу можно было подключить к рабочей сети и оно получило настройки по DCHP. Таким образом, для начальной настройки, нам не потребуется теперь подключать устройство к сетевому интерфейсу компьютера.
  • Требуется иметь общие для всех точек доступа параметры в**/etc/config/firewall, etc/config/system, /etc/config/wireless**.
  • Нужно, что бы стоял пакетnano.

Для того, что бы иметь настроенные конфиги нужно создать директорию /files/etc/config и скопировать туда конфигурационные файлы network, firewall, system, wireless. Пример этих конфигов в предыдущей статье .

openwrt image builder dir

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

Компиляция

Устаналиваем зависимости для make:

apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc

Компиляция происходит одной командой:

make image PROFILE=XXX PACKAGES=»pkg1 pkg2 pkg3 -pkg4 -pkg5 -pkg6″ FILES=files/

PROFILE — модель устройства, под которую собираем прошивку. Что бы узнать весь список устройств, под которые можно собрать прошивку используя данный архив, команудем  make info

PACKAGES — перечисляем пакеты, которые хотим видеть в нашей прошивке, или наоборот, если какие-то пакеты не хотим видеть, ставим  перед наименованием пакета.

FILES — задаем место, где лежат конфиги. Мы как раз создали каталог files и положили туда конфиги.

В моем случае команда для компиляции выглядит так:

make image PROFILE=TLWA901 PACKAGES=»nano» FILES=files/

Небольшое отступление. Веб-интерфейс даёт хорошую нагрузку на устройство. Мои точки доступа используются очень активно и любая лишняя нагрузка здесь совсем не нужна. Так же задач, под который бы требовался luci у меня нет. В общем, в данном случае я не использую luci. При сборке я не указывал явное исключение -luci т.е. «из коробки» luci сам по себе не ставится.

Так вышло, что пакета nano не было в архиве ImageBuilder. В конце компиляции выдало следующее:

Collected errors:
* opkg_install_cmd: Cannot install package nano.
make[2]: *** [package_install] Error 255
make[2]: Leaving directory `/home/koala/wa901nd/OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64'
make[1]: *** [_call_image] Error 2
make[1]: Leaving directory `/home/koala/wa901nd/OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64'
make: *** [image] Ошибка 2

Очищаем каталог OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64/ bin/ от неправильно созданной прошивки:

rm -r /bin/ar71xx

Скачиваем недостающий пакет из https://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/packages/ и помещаем в каталог OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64/packages/

Пробуем. Собралось. Собранная прошивка находится в каталоге OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64/ bin/ar71xx/

files builing openwrt

Как мы видим, получилось много всего полезного. Для прошивки tl-wa901nd v2 «с нуля» нам нужно openwrt-ar71xx-generic-tl-wa901nd-v2-squashfs-factory.bin

Теперь нам требуется раскидать прошивку по устройствам и провести индивидуальную корректирующую настройку каждому устройству.

После прошивки устройства, придется сначала цепляться через telnet и задавать пароль.

Для задания пароля root’у нужно положить файлы passwd и shadow в ./files/etc. Содержимое файлов можно и нужно (пароль хранится в зашифрованном виде) скопировать из устройства с уже установленным паролем у root’a.

Т.е. сначала нужно на устройстве задать пароль root’у  с помощью passwd root, а потом уже скопировать файлы с зашифрованным паролем.

В этом случае, после прошивки можно подключаться сразу по ssh.

Пример содержания файлов:

/etc/passwd

root:x:0:0:root:/root:/bin/ash
daemon:*:1:1:daemon:/var:/bin/false
ftp:*:55:55:ftp:/home/ftp:/bin/false
network:*:101:101:network:/var:/bin/false
nobody:*:65534:65534:nobody:/var:/bin/false

/etc/shadow

root:$1$3Jdh9ZW$JfdHDS80Jdnsqp6.:16532:0:99999:7:::
daemon:*:0:0:99999:7:::
ftp:*:0:0:99999:7:::
network:*:0:0:99999:7:::
nobody:*:0:0:99999:7:::

Прошивка устройств

Если на устройстве стоит официальная прошивка, то заходим в веб-интерфейсе в System tools\Firmware upgrade и указываем наш .bin. Скрин есть в предыдущей статье .

Если у нас уже прошита какая-либо OpenWrt, то

scp ./bin/ar71xx/openwrt-ar71xx-generic-tl-wa901nd-v2-squashfs-factory.bin root@192.168.5.250 :/tmp

Этой командой мы копируем файл прошивки с нашего компьютера на устройство 192.168.5.250 в каталог tmp. Нужно будет ввести пароль root от устройства. После этого заходим на устройство:

ssh root@192.168.5.250

Переходим в каталог tmp: cd /tmp

И даем команду:

mtd -r write openwrt-ar71xx-generic-tl-wa901nd-v2-squashfs-factory.bin firmware

Это означает что нам нужно прошить файл .bin и после этого перезагрузить устройство.

Openwrt console device

Подключаемся через telnet, задаем пароль.

Вносим индивидуальные изменения. Я изменяю hostname в /etc/config/system и изменяю ssid и канал работы wi-fi в /etc/config/wireless

Перезагружаем сервисы. Например, после изменений в /etc/config/wireless просто набираем wifi  и сервис wifi перезагружается и вступает в работу с новыми настройками. А для вступления в силу нового hostname: /etc/init.d/system reload

Личные наблюдения

У меня используется 5 точек доступа Tp-link tl-wa901nd v2. Средняя нагрузка на точку — 7 устройств, в основном веб-серфинг. С официальной прошивкой точки часто висли или после какого-то времени просто переставали подключать клиентов.

Нестабильные прошивки от OpenWrt тоже сбоили, но реже.

Выпуск 14.07 работает просто замечательно. Без нареканий.

Полезные ссылки:

  1. ImageBuilder на wiki OpenWrt
  2. Статья на Autohome «Своя прошивка openwrt с помощью Image Generator (Image Builder)»

Мой телеграм-канал .