В предыдущей статье было разобрано как установить уже скомпилированную прошивку. Минус такого метода в том, что после установки нам требуется настраивать вручную заново каждое устройство «от» и «до», а так же устанавливать требуемые пакеты программ.
Проект OpenWrt предоставляет возможность довольно простой компиляции прошивки со своими настройками и выбранными заранее пакетами.
Компиляция своей прошивки полезна тогда, когда у вас имеется >1 устройства, работающего на OpenWrt. Или вы — фирма, которая ставит «свои» прошивки на закупаемые устройства.
Автор не несет никакой ответственности за порчу вашего оборудования. Вы должны понимать, что Вы делаете.
О стабильных и экспериментальных прошивках
На странице https://downloads.openwrt.org/
В разделе 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
Распаковываем и переходим в каталог с 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. Пример этих конфигов в предыдущей статье .
После установки прошивки мы получим то, что внесли в эти конфиги и т.к. это общие настройки, нужно будет провести редактирование конфигов для отдельно взятого устройства. Например, у наших точек доступа разные 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/
Как мы видим, получилось много всего полезного. Для прошивки 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 от устройства. После этого заходим на устройство:
Переходим в каталог tmp: cd /tmp
И даем команду:
mtd -r write openwrt-ar71xx-generic-tl-wa901nd-v2-squashfs-factory.bin firmware
Это означает что нам нужно прошить файл .bin и после этого перезагрузить устройство.
Подключаемся через 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 работает просто замечательно. Без нареканий.
Полезные ссылки:
- ImageBuilder на wiki OpenWrt
- Статья на Autohome «Своя прошивка openwrt с помощью Image Generator (Image Builder)»
Мой телеграм-канал .